diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/StructUtil.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/StructUtil.java new file mode 100644 index 00000000..9e1d4fff --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/StructUtil.java @@ -0,0 +1,28 @@ +package org.nl.common.utils; + +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +public class StructUtil { + public static String getZdPoint(int row,String source_code) { + if (row == 2 || row == 3) { + return source_code; + } + int blockRow = row == 1 ? 2 : 3; + String replace = source_code.replaceFirst("L0" + row, "L0%s"); + return String.format(replace, blockRow); + } + + public static String getDeepPoint(int row,String source_code) { + if (row == 1 || row == 4) { + return source_code; + } + int blockRow = row == 2 ? 1 : 4; + String replace = source_code.replaceFirst("L0" + row, "L0%s"); + return String.format(replace, blockRow); + } + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java index 8932ec12..8d638bb1 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java @@ -1,15 +1,16 @@ package org.nl.wms.decision_manage.handler.decisioner.impl.diy; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.SpringContextHolder; import org.nl.wms.decision_manage.handler.decisioner.Decisioner; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /* @@ -20,6 +21,9 @@ import java.util.stream.Collectors; @Service("depthPriority") @Slf4j public class DepthPriorityHandler extends Decisioner { + public DepthPriorityHandler() { + } + //现场1/4排深位 @Override public List handler(List list, JSONObject param) { @@ -51,9 +55,54 @@ public class DepthPriorityHandler extends Decisioner list1 = iStIvtStructattrService.list(new LambdaUpdateWrapper() + .in(StIvtStructattr::getRow_num, Arrays.asList(1, 4)) + .eq(StIvtStructattr::getStor_code, StatusEnum.STOCK_INFO.code("料箱库")) + .eq(StIvtStructattr::getIs_used, 1) + .eq(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁"))); + if (!list1.isEmpty()) { + List combinedResult = new ArrayList<>(); + //1排 + List deepCollect1 = list1.stream() + .filter(a -> a.getRow_num() == 1) + .collect(Collectors.toList()); + List shallowCollect1 = list.stream() + .filter(a -> a.getRow_num() == 2) + .collect(Collectors.toList()); + Set deepCollect1Set = deepCollect1.stream() + .map(r -> r.getCol_num() + "_" + r.getLayer_num()) + .collect(Collectors.toSet()); + List intersection1 = shallowCollect1.stream() + .filter(r ->deepCollect1Set.contains(r.getCol_num() + "_" + r.getLayer_num())) + .collect(Collectors.toList()); + if (!intersection1.isEmpty()) { + combinedResult.addAll(intersection1); + } else { + //4排 + List deepCollect2 = list1.stream() + .filter(a -> a.getRow_num() == 4) + .collect(Collectors.toList()); + List shallowCollect2 = list.stream() + .filter(a -> a.getRow_num() == 3) + .collect(Collectors.toList()); + Set deepCollect2Set = deepCollect2.stream() + .map(r -> r.getCol_num() + "_" + r.getLayer_num()) + .collect(Collectors.toSet()); + List intersection2 = shallowCollect2.stream() + .filter(r -> deepCollect2Set.contains(r.getCol_num() + "_" + r.getLayer_num())) + .collect(Collectors.toList()); + combinedResult.addAll(intersection2); + } + log.info("获取深货位有货且浅货位无货仓位:{}", System.currentTimeMillis() - startTime1); + return combinedResult; + } + return list; + } else { + return list; + } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java index 13e04228..3b5ff9d6 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java @@ -125,7 +125,7 @@ public class OutStorageTask extends AbstractTask { @Transactional(propagation= Propagation.REQUIRES_NEW) public String DoubleStor(StIvtStructattr struct) { - String blockPoint = getZdPoint(struct.getRow_num(),struct.getStruct_code()); + String blockPoint = StructUtil.getZdPoint(struct.getRow_num(),struct.getStruct_code()); //浅货位 log.info("1-----出库分配:{},当前货位:{}",blockPoint,struct.getStruct_code()); if (blockPoint.equals(struct.getStruct_code())){ @@ -193,12 +193,5 @@ public class OutStorageTask extends AbstractTask { //更新起点终点状态 } - private static String getZdPoint(int row,String source_code) { - if (row == 2 || row == 3) { - return source_code; - } - int blockRow = row == 1 ? 2 : 3; - String replace = source_code.replaceFirst("L0" + row, "L0%s"); - return String.format(replace, blockRow); - } + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java index c659e73f..39d2b061 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java @@ -59,6 +59,8 @@ public class GateWayService { Integer h = vehicle.getH(); result.putAll(MapOf.of("height",h,"type",h)); } + if (service.equals("Device")){ + } if (service.equals("ErrorTask")){ AtomicReference reference = new AtomicReference<>(new JSONObject()); RedissonUtils.lock(()->{ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java index f71a61a3..0432e61c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java @@ -291,6 +291,9 @@ public class MdGruopDickServiceImpl extends ServiceImpl().eq("material_code", material_code)); } + if (materialCode == null) { + throw new BadRequestException("第" + (i + 1) + "行," + material_code + "在ERP系统上检索存在重复物料ID,物料信息有误,请检查!"); + } materialCode.setSingle_weight(new BigDecimal(single_weight)); //更新单重 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/sync_manage/controller/form_mapping/SyncFormMappingController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/sync_manage/controller/form_mapping/SyncFormMappingController.java index 8556ee0f..3ad973d0 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/sync_manage/controller/form_mapping/SyncFormMappingController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/sync_manage/controller/form_mapping/SyncFormMappingController.java @@ -6,32 +6,25 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.kingdee.bos.webapi.sdk.K3CloudApi; -import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; import org.nl.common.domain.entity.PageQuery; import org.nl.common.domain.exception.BadRequestException; -import org.nl.common.utils.FileUtil; -import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; +import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService; import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase; import org.nl.wms.external_system.erp.SyncErpService; import org.nl.wms.pm_manage.form_data.service.IPmFormDataService; import org.nl.wms.pm_manage.form_data.service.dao.PmFormData; import org.nl.wms.pm_manage.form_data.service.dao.mapper.PmFormDataMapper; -import org.nl.wms.sync_manage.service.field_mapping.dto.MappingQuery; import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService; import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping; import org.nl.wms.sync_manage.service.form_mapping.dto.FormMappingQuery; import org.nl.wms.sync_manage.service.form_mapping.impl.SyncFormMappingServiceImpl; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; @@ -39,7 +32,9 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.util.*; +import java.util.Arrays; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -72,14 +67,17 @@ public class SyncFormMappingController { private IPmFormDataService formDataService; @Autowired private SyncErpService syncErpService; + @Autowired + private IMdMeMaterialbaseService iMdMeMaterialbaseService; + public static void main(String[] args) { JSONObject jsonObject = new JSONObject(); - jsonObject.put("ddd","kkk"); + jsonObject.put("ddd", "kkk"); SpelExpressionParser SPEL_PARSER = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); - context.setVariable("query1",jsonObject); + context.setVariable("query1", jsonObject); Expression expression = SPEL_PARSER.parseExpression("#query1['ddd']"); String value = expression.getValue(context, String.class); System.out.println(value); @@ -112,46 +110,74 @@ public class SyncFormMappingController { @PostMapping("/syncAnalyse") @Log("表同步测试") - public ResponseEntity syncAnalyse(@RequestBody JSONObject form){ + public ResponseEntity syncAnalyse(@RequestBody JSONObject form) { //参数判读,参数解析,调用参数入库 Object analyseData = form.remove("analyseData"); - if (analyseData == null){ + if (analyseData == null) { throw new BadRequestException("解析数据不能为空"); } Object mappingJson = form.get("mapping_json"); JSONArray array = JSONArray.parseArray(JSON.toJSONString(mappingJson)); - List pmFormDatas = formDataService.syncAnalyse(array,form.getString("form_type"),false,(String) analyseData); - //主单据Id - final String mainId = pmFormDatas.get(0).getId(); - Set exitFormDataList = pmFormDataMapper.existFormDataList(); - for (PmFormData f : pmFormDatas) { - //存在ID,主单据不新增不修改,修改未出库单据的明细 - String id = f.getId() + "$" + f.getForm_type(); - //实时扫描则同步修改未出库的用料清单单据 - if (exitFormDataList.contains(id)) { - //单据明细 - if (StringUtils.isBlank(f.getCode())) { - PmFormData existDtlData = formDataService.getOne(new QueryWrapper().eq("id", id).select("qty")); - if (existDtlData.getQty() != null) { - formDataService.update(new LambdaUpdateWrapper() - .set(PmFormData::getMaterial_id, f.getMaterial_id()) - .set(PmFormData::getUnit_id, f.getUnit_id()) - .set(PmFormData::getForm_data, JSON.toJSONString(f.getForm_data())) - .set(PmFormData::getPlan_qty, f.getPlan_qty()) - .set(PmFormData::getActual_qty, f.getActual_qty()) - .set(PmFormData::getBar_code, f.getBar_code()) - .set(PmFormData::getUpdate_name, DateUtil.now()) - .set(PmFormData::getUpdate_name, SecurityUtils.getCurrentNickName()) - .eq(PmFormData::getId, id)); + List pmFormDataList = formDataService.syncAnalyse(array, form.getString("form_type"), false, (String) analyseData); + if (pmFormDataList != null) { + if ("BD_MATERIAL".equals(form.getString("form_type"))) { + String assistUint = "0"; + // JSONArray uintJsonArray = JSONObject.parseObject(JSON.toJSONString(r)).getJSONArray("MaterialStock"); + // if (ObjectUtils.isNotEmpty(uintJsonArray)) { + // JSONObject u1 = JSONObject.parseObject(JSON.toJSONString(uintJsonArray.get(0))); + // JSONObject u2 = u1.getJSONObject("AuxUnitID"); + // assistUint = u2 != null ? u2.getString("Number") : "0"; + // } + PmFormData mainFormData = pmFormDataList.stream().filter(rs1 -> "BD_MATERIAL".equals(rs1.getForm_type())).collect(Collectors.toList()).get(0); + JSONObject object = mainFormData.getForm_data(); + String m_code = object.getString("m_code"); + String m_name = object.getString("m_name"); + String m_spec = object.getString("m_spec"); + String m_unit = mainFormData.getUnit_id(); + PmFormData formData = pmFormDataList.stream().filter(rs1 -> "BD_MATERIAL_1".equals(rs1.getForm_type())).collect(Collectors.toList()).get(0); + MdMeMaterialbase materialBase = new MdMeMaterialbase(); + materialBase.setMaterial_id(mainFormData.getId()); + materialBase.setMaterial_code(m_code); + materialBase.setMaterial_code(m_code); + materialBase.setMaterial_name(m_name); + materialBase.setMaterial_spec(m_spec); + materialBase.setQty_unit_id(m_unit); + materialBase.setAssist_unit_id(assistUint); + materialBase.setPrint_no(formData.getPcsn()); + iMdMeMaterialbaseService.save(materialBase); + } + //主单据Id + final String mainId = pmFormDataList.get(0).getId(); + Set exitFormDataList = pmFormDataMapper.existFormDataList(); + for (PmFormData f : pmFormDataList) { + //存在ID,主单据不新增不修改,修改未出库单据的明细 + String id = f.getId() + "$" + f.getForm_type(); + //实时扫描则同步修改未出库的用料清单单据 + if (exitFormDataList.contains(id)) { + //单据明细 + if (StringUtils.isBlank(f.getCode())) { + PmFormData existDtlData = formDataService.getOne(new QueryWrapper().eq("id", id).select("qty")); + if (existDtlData.getQty() != null) { + formDataService.update(new LambdaUpdateWrapper() + .set(PmFormData::getMaterial_id, f.getMaterial_id()) + .set(PmFormData::getUnit_id, f.getUnit_id()) + .set(PmFormData::getForm_data, JSON.toJSONString(f.getForm_data())) + .set(PmFormData::getPlan_qty, f.getPlan_qty()) + .set(PmFormData::getActual_qty, f.getActual_qty()) + .set(PmFormData::getBar_code, f.getBar_code()) + .set(PmFormData::getUpdate_name, DateUtil.now()) + .set(PmFormData::getUpdate_name, SecurityUtils.getCurrentNickName()) + .eq(PmFormData::getId, id)); + } } + } else { + //单据明细 + if (StringUtils.isBlank(f.getCode())) { + f.setParent_id(mainId + "$" + form.getString("form_type")); + } + f.setId(id); + formDataService.save(f); } - } else { - //单据明细 - if (StringUtils.isBlank(f.getCode())) { - f.setParent_id(mainId + "$" + form.getString("form_type")); - } - f.setId(id); - formDataService.save(f); } } return new ResponseEntity<>(HttpStatus.OK); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/SyncErpBillsScheduleService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/SyncErpBillsScheduleService.java index f73483ef..b04ca8be 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/SyncErpBillsScheduleService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/SyncErpBillsScheduleService.java @@ -381,7 +381,7 @@ public class SyncErpBillsScheduleService { try { JSONArray mappingJsonArray = JSONArray.parseArray(mappingJson); List formDataList = formDataService.syncAnalyse(mappingJsonArray, formType, dtlSplit, JSON.toJSONString(r)); - if (formDataList != null) { + if (ObjectUtils.isNotEmpty(formDataList)) { String assistUint = "0"; JSONArray uintJsonArray = JSONObject.parseObject(JSON.toJSONString(r)).getJSONArray("MaterialStock"); if (ObjectUtils.isNotEmpty(uintJsonArray)) { @@ -396,16 +396,27 @@ public class SyncErpBillsScheduleService { String m_spec = object.getString("m_spec"); String m_unit = mainFormData.getUnit_id(); PmFormData formData = formDataList.stream().filter(rs1 -> "BD_MATERIAL_1".equals(rs1.getForm_type())).collect(Collectors.toList()).get(0); - MdMeMaterialbase materialBase = new MdMeMaterialbase(); - materialBase.setMaterial_id(mainFormData.getId()); - materialBase.setMaterial_code(m_code); - materialBase.setMaterial_code(m_code); - materialBase.setMaterial_name(m_name); - materialBase.setMaterial_spec(m_spec); - materialBase.setQty_unit_id(m_unit); - materialBase.setAssist_unit_id(assistUint); - materialBase.setPrint_no(formData.getPcsn()); - iMdMeMaterialbaseService.save(materialBase); + MdMeMaterialbase materialInfo = iMdMeMaterialbaseService.getOne(new QueryWrapper().eq("material_code", m_code)); + if (materialInfo != null) { + iMdMeMaterialbaseService.update(new LambdaUpdateWrapper() + .set(MdMeMaterialbase::getMaterial_code, m_code) + .set(MdMeMaterialbase::getMaterial_name, m_name) + .set(MdMeMaterialbase::getMaterial_spec, m_spec) + .set(MdMeMaterialbase::getQty_unit_id, m_unit) + .set(MdMeMaterialbase::getAssist_unit_id, assistUint) + .set(MdMeMaterialbase::getPrint_no, formData.getPcsn()) + .eq(MdMeMaterialbase::getMaterial_id, materialInfo.getMaterial_id())); + } else { + MdMeMaterialbase materialBase = new MdMeMaterialbase(); + materialBase.setMaterial_id(mainFormData.getId()); + materialBase.setMaterial_code(m_code); + materialBase.setMaterial_name(m_name); + materialBase.setMaterial_spec(m_spec); + materialBase.setQty_unit_id(m_unit); + materialBase.setAssist_unit_id(assistUint); + materialBase.setPrint_no(formData.getPcsn()); + iMdMeMaterialbaseService.save(materialBase); + } } } catch (Exception e) { log.error("解析数据 [{}] 时出现异常: {}", JSON.toJSONString(r), e.getMessage()); diff --git a/wms_pro/qd/src/views/wms/stor_manage/warehouse/pick/index.vue b/wms_pro/qd/src/views/wms/stor_manage/warehouse/pick/index.vue index 98993d60..2fcbdaf6 100644 --- a/wms_pro/qd/src/views/wms/stor_manage/warehouse/pick/index.vue +++ b/wms_pro/qd/src/views/wms/stor_manage/warehouse/pick/index.vue @@ -90,6 +90,17 @@ > 作业下发 + + 处理完成 + @@ -198,6 +209,7 @@ import crudPick from './pick' // import UploadDialog from './UploadDialog' const defaultForm = { + currentRow: null, id: null, code: null, proc_inst_id: null, @@ -336,6 +348,21 @@ export default { this.crud.toQuery() this.dis_flag = true this.task_flag = true + }, confirm() { + if (this.currentRow.length === 0) { + this.crud.notify('请选择一行单据', CRUD.NOTIFICATION_TYPE.INFO) + return + } + const ids = Array.isArray(this.currentRow) + ? this.currentRow.map(row => row.id) + : [this.currentRow.id]; + const param = { + data: ids + } + crudPick.confirm(param).then(res => { + this.crud.notify('单据处理成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) + this.crud.toQuery() + }) } } } diff --git a/wms_pro/qd/src/views/wms/stor_manage/warehouse/pick/pick.js b/wms_pro/qd/src/views/wms/stor_manage/warehouse/pick/pick.js index e793abf3..d1751f22 100644 --- a/wms_pro/qd/src/views/wms/stor_manage/warehouse/pick/pick.js +++ b/wms_pro/qd/src/views/wms/stor_manage/warehouse/pick/pick.js @@ -45,6 +45,13 @@ export function taskopen(data) { data }) } +export function confirm(data) { + return request({ + url: '/api/pmFormData/confirmStatus', + method: 'post', + data + }) +} export function updateDtl(data) { return request({ @@ -54,4 +61,4 @@ export function updateDtl(data) { }) } -export default {add, edit, del, savePickTask, updateStatus, taskopen, updateDtl} +export default {add, edit, del, savePickTask, updateStatus, taskopen, updateDtl,confirm}