From 3a1a45777cabbac9bc341da07c5026740ca5d41d Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 7 Jul 2025 14:41:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E6=AD=A5=E8=B0=83=E9=85=8D=E5=8E=9F?= =?UTF-8?q?=E6=96=99=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/busi/IMesRawSnWeightRecordService.java | 12 +++ .../busi/MesContainerSnBindServiceImpl.java | 5 - .../busi/MesRawSnWeightRecordServiceImpl.java | 105 +++++++++++++++++++++ .../MesFunctionDialogInputRawMixWeightService.java | 69 ++++---------- .../step/MesAssemblyMatchRawMixStepService.java | 62 +++++++++--- .../step/MesAssemblySaveStepService.java | 17 +++- 6 files changed, 203 insertions(+), 67 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesRawSnWeightRecordService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesRawSnWeightRecordServiceImpl.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesRawSnWeightRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesRawSnWeightRecordService.java new file mode 100644 index 0000000..492b7d8 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesRawSnWeightRecordService.java @@ -0,0 +1,12 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext; + +import java.util.List; + +public interface IMesRawSnWeightRecordService { + void insertRawRemainWeightRecord(MesProductionAssemblyContext context, String organizeCode, String username); + void insertOutPartNoWeightRecord(MesProdRuleContext prodRuleContext, List productionAssemblyNosortContextList, String organizeCode, String username); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java index 881c836..5a388cc 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java @@ -531,11 +531,6 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService containerPackageRDao.save(containerPackage); } if (!CollectionUtils.isEmpty(model.getPackageDetails())) { -// if (containerPackage != null) { -// for (MesContainerPackageDetail packageDetail : model.getPackageDetails()) { -// packageDetail.setPid(containerPackage.getId()); -// } -// } containerPackageDetailRDao.saveAll(model.getPackageDetails()); } if (!CollectionUtils.isEmpty(model.getBindingList())) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesRawSnWeightRecordServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesRawSnWeightRecordServiceImpl.java new file mode 100644 index 0000000..e3defa0 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesRawSnWeightRecordServiceImpl.java @@ -0,0 +1,105 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesRawSnWeightRecordService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesPart; +import cn.estsh.i3plus.pojo.mes.bean.MesRawMixCfgDetail; +import cn.estsh.i3plus.pojo.mes.bean.MesRawSnWeightRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesRawWeightCfg; +import cn.estsh.i3plus.pojo.mes.repository.MesRawMixCfgDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesRawSnWeightRecordRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesRawWeightCfgRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; + +@Service +public class MesRawSnWeightRecordServiceImpl implements IMesRawSnWeightRecordService { + @Autowired + private MesRawSnWeightRecordRepository rawSnWeightRecordRDao; + @Autowired + private MesRawWeightCfgRepository rawWeightCfgRDao; + @Autowired + private MesRawMixCfgDetailRepository rawMixCfgDetailRDao; + @Autowired + private IMesPartService partService; + + @Override + public void insertRawRemainWeightRecord(MesProductionAssemblyContext context, String organizeCode, String username) { + MesRawMixCfgDetail detail = rawMixCfgDetailRDao.getByProperty( + new String[]{"organizeCode", "isValid", "isDeleted", "outPartNo", "partNo"}, + new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue(), context.getPartNo(), context.getAssemblyPartNo()}); + if (detail == null) { + return; + } + + MesRawWeightCfg weightCfg = rawWeightCfgRDao.getByProperty(new String[]{"organizeCode", "isValid", "isDeleted", "partNo"}, + new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue(), context.getAssemblyPartNo()}); + if (weightCfg == null) { + return; + } + double remainQty = getRemainQty(organizeCode, context.getAssemblyPartNo()); + + MesRawSnWeightRecord record = new MesRawSnWeightRecord(); + record.setOrganizeCode(organizeCode); + record.setBarCode(context.getAssemblySn()); + record.setPartNo(context.getAssemblyPartNo()); + record.setPartName(context.getAssemblyPartName()); + record.setNetWeight(remainQty - context.getQty()); + record.setNetUnit(weightCfg.getNetUnit()); + record.setRawType(detail.getRawType()); + ConvertBean.serviceModelInitialize(record, username); + rawSnWeightRecordRDao.insert(record); + } + + @Override + public void insertOutPartNoWeightRecord(MesProdRuleContext prodRuleContext, List productionAssemblyNosortContextList, String organizeCode, String username) { + MesPart mesPart = partService.getMesPartByPartNo(prodRuleContext.getOutPartNo(), organizeCode); + if (mesPart == null) { + return; + } + double totalWeight = 0.0; + for (MesProductionAssemblyNosortContext context : productionAssemblyNosortContextList) { + if (Objects.equals(context.getMatchType(), MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_90.getValue())) { + totalWeight += context.getQty(); + } + } + + MesRawSnWeightRecord record = new MesRawSnWeightRecord(); + record.setOrganizeCode(organizeCode); + record.setBarCode(prodRuleContext.getProductSn()); + record.setPartNo(mesPart.getPartNo()); + record.setPartName(mesPart.getPartName()); + record.setNetWeight(totalWeight); + record.setRawType(MesExtEnumUtil.RAW_MIX_DETAIL_TYPE.RAW_MIX_DETAIL_TYPE_10.getValue()); + ConvertBean.serviceModelInitialize(record, username); + rawSnWeightRecordRDao.insert(record); + } + + private double getRemainQty(String organizeCode, String partNo) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean); + MesRawSnWeightRecord record = rawSnWeightRecordRDao.getByProperty(ddlPackBean); + if (record != null) { + return record.getNetWeight(); + } + + MesRawWeightCfg weightCfg = rawWeightCfgRDao.getByProperty(new String[]{"organizeCode", "isValid", "isDeleted", "partNo"}, + new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue(), partNo}); + if (weightCfg == null) { + return 0.0; + } + return weightCfg.getNetWeight(); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogInputRawMixWeightService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogInputRawMixWeightService.java index 5aa3700..24f06e9 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogInputRawMixWeightService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogInputRawMixWeightService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.MesAssemblyShowNosortStepService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesWorkOrderCheckCompleteQtyStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; @@ -44,9 +45,6 @@ public class MesFunctionDialogInputRawMixWeightService extends BaseSwsService im private IMesProductionDispatchContextStepService productionDispatchContextStepService; @Autowired - private MesWorkOrderCheckCompleteQtyStepService workOrderCheckCompleteQtyStepService; - - @Autowired private IShippingDispatchService shippingDispatchService; @Autowired @@ -57,7 +55,7 @@ public class MesFunctionDialogInputRawMixWeightService extends BaseSwsService im @Autowired private MesRawWeightCfgRepository rawWeightCfgRDao; @Autowired - private IMesPartService partService; + private MesAssemblyShowNosortStepService assemblyShowNosortStepService; @Override public Boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { @@ -103,24 +101,29 @@ public class MesFunctionDialogInputRawMixWeightService extends BaseSwsService im MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); return false; } - productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList); + boolean bOverCapacity = false; if (isAllAssemblyMatchRawMix(workCenter, prodRuleContextList)) { if (!checkRawMixWeight(organizeCode, workCenter, prodRuleContextList, reqBean.getUserInfo())) { this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(buttonDynamicModel.getFunctionValue()), "输入数量超出了容差范围", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); - return false; + bOverCapacity = true; } } + productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList); + if (bOverCapacity) { + assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), prodRuleContextList); + } + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); reqBean.setBusiType(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_DO_SCAN.getCode()); reqBean.setButtonCode(buttonDynamicModel.getButtonCode()); reqBean.setStepDialogStatus(true); shippingDispatchService.sendScanQueueNextExec(reqBean); - return true; + return !bOverCapacity; } private MesProductionAssemblyContext getProductionAssemblyContext(String organizeCode, MesWorkCenter workCenter, List prodRuleContextList, String qty, StepResult stepResult) { @@ -184,7 +187,6 @@ public class MesFunctionDialogInputRawMixWeightService extends BaseSwsService im if (CollectionUtils.isEmpty(rawMixCfgDetailList)) { continue; } - Map partCfgDetails = new HashMap<>(); Map> partWeightPercent = new HashMap<>(); for (MesRawMixCfgDetail rawMixCfgDetail : rawMixCfgDetailList) { if (StringUtils.isEmpty(rawMixCfgDetail.getPartNo()) || rawMixCfgDetail.getPercent() == null) { @@ -193,9 +195,9 @@ public class MesFunctionDialogInputRawMixWeightService extends BaseSwsService im double percent = rawMixCfgDetail.getPercent(); double rangeRate = rawMixCfgDetail.getRangeRate() != null ? rawMixCfgDetail.getRangeRate() : 0.0; partWeightPercent.put(rawMixCfgDetail.getPartNo(), new AbstractMap.SimpleEntry<>(percent - rangeRate, percent + rangeRate)); - partCfgDetails.put(rawMixCfgDetail.getPartNo(), rawMixCfgDetail); } + boolean flag = true; List productionAssemblyContextList = prodRuleContext.getAssemblyDataContext(workCenter); double totalQty = productionAssemblyContextList.stream().mapToDouble(MesProductionAssemblyContext::getQty).sum(); for (MesProductionAssemblyContext productionAssemblyContext : productionAssemblyContextList) { @@ -207,49 +209,18 @@ public class MesFunctionDialogInputRawMixWeightService extends BaseSwsService im double curPercent = productionAssemblyContext.getQty() / totalQty; curPercent = curPercent * 100; if (curPercent < rangeRate.getKey() || curPercent > rangeRate.getValue()) { - return false; - } - } - - for (MesProductionAssemblyContext productionAssemblyContext : productionAssemblyContextList) { - MesRawMixCfgDetail detail = partCfgDetails.get(productionAssemblyContext.getAssemblyPartNo()); - if (detail == null) { - continue; - } - - MesRawWeightCfg weightCfg = rawWeightCfgRDao.getByProperty(new String[]{"organizeCode", "isValid", "isDeleted", "partNo"}, - new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue(), productionAssemblyContext.getAssemblyPartNo()}); - if (weightCfg == null) { - continue; + flag = false; + break; } - double remainQty = getRemainQty(organizeCode, productionAssemblyContext.getAssemblyPartNo()); - - MesRawSnWeightRecord record = new MesRawSnWeightRecord(); - record.setBarCode(productionAssemblyContext.getAssemblySn()); - record.setPartNo(productionAssemblyContext.getAssemblyPartNo()); - record.setPartName(productionAssemblyContext.getAssemblyPartName()); - record.setNetWeight(remainQty - productionAssemblyContext.getQty()); - record.setNetUnit(weightCfg.getNetUnit()); - record.setRawType(detail.getRawType()); - ConvertBean.serviceModelInitialize(record, userName); - rawSnWeightRecordRDao.insert(record); } - - MesPart mesPart = partService.getMesPartByPartNo(prodRuleContext.getOutPartNo(), organizeCode); - if (mesPart != null) { - MesRawWeightCfg weightCfg = rawWeightCfgRDao.getByProperty(new String[]{"organizeCode", "isValid", "isDeleted", "partNo"}, - new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue(), mesPart.getPartNo()}); - if (weightCfg != null) { - MesRawSnWeightRecord record = new MesRawSnWeightRecord(); - record.setBarCode(prodRuleContext.getProductSn()); - record.setPartNo(mesPart.getPartNo()); - record.setPartName(mesPart.getPartName()); - record.setNetWeight(weightCfg.getNetWeight()); - record.setNetUnit(weightCfg.getNetUnit()); - record.setRawType(MesExtEnumUtil.RAW_MIX_DETAIL_TYPE.RAW_MIX_DETAIL_TYPE_10.getValue()); - ConvertBean.serviceModelInitialize(record, userName); - rawSnWeightRecordRDao.insert(record); + if (!flag) { + for (MesProductionAssemblyContext productionAssemblyContext : productionAssemblyContextList) { + productionAssemblyContext.setIsCheckedRawMix(null); + productionAssemblyContext.setQty(0.0); + productionAssemblyContext.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); } + prodRuleContext.assemblyDataJson(productionAssemblyContextList); + return false; } } return true; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchRawMixStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchRawMixStepService.java index e94e20e..08708e6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchRawMixStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchRawMixStepService.java @@ -3,15 +3,18 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -19,9 +22,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; /** * @Description : 匹配调配原料条码工步 @@ -38,6 +39,8 @@ public class MesAssemblyMatchRawMixStepService extends BaseStepService { private IMesNumberRuleMatchDispatchService numberRuleMatchDispatchService; @Autowired private MesAssemblyShowNosortStepService assemblyShowNosortStepService; + @Autowired + private MesProduceSnRepository produceSnRDao; @Override public StepResult execute(StationRequestBean reqBean) { @@ -84,10 +87,10 @@ public class MesAssemblyMatchRawMixStepService extends BaseStepService { if (result) { productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList); assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), prodRuleContextList); - return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "请输入原料重量!"); + return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "请输入原料重量!"); } - return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), "当前不存在装配件条码!"); + return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), StringUtils.isEmpty(stepResult.getMsg()) ? "当前不存在装配件条码!" : stepResult.getMsg()); } private boolean isAllAssemblyMatchRawMix(MesWorkCenter workCenter, List prodRuleContextList) { @@ -118,7 +121,7 @@ public class MesAssemblyMatchRawMixStepService extends BaseStepService { //获取非排序装配件清单 List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); - Boolean flag = false; + boolean flag = false; //遍历装配件清单 LOOP: @@ -130,13 +133,18 @@ public class MesAssemblyMatchRawMixStepService extends BaseStepService { if (MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNeedCustomStepMatch(productionAssemblyNosortContext.getMatchType())) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("当前工序模版不支持匹配[%s]确认方式的装配件信息!", MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.valueOfDescription(productionAssemblyNosortContext.getMatchType()))); - //匹配规则 - Map result = numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), barcode, productionAssemblyNosortContext); - + Map result; + // 未维护匹配规则,则按自制件进行校验。 + if (StringUtils.isEmpty(productionAssemblyNosortContext.getMatchRule())) { + result = checkProductSnRule(reqBean.getOrganizeCode(), barcode); + } else { + //匹配规则 + result = numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), barcode, productionAssemblyNosortContext); + } //匹配失败 - if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) { + if (!Objects.equals(result.get(MesPcnExtConstWords.RESULT), true)) { String msg = (String) result.get(MesPcnExtConstWords.MESSAGE); - stepResult.obj(String.format("%s%s", StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj(), StringUtils.isEmpty(msg) ? MesPcnExtConstWords.EMPTY : msg)); + stepResult.setMsg(msg); continue; } @@ -144,7 +152,10 @@ public class MesAssemblyMatchRawMixStepService extends BaseStepService { String assemblySn = !result.containsKey(MesPcnExtConstWords.ASSEMBLY_SN) ? barcode : (String) result.get(MesPcnExtConstWords.ASSEMBLY_SN); MesProductionAssemblyNosortContext filter = (MesProductionAssemblyNosortContext) result.get(MesPcnExtConstWords.DATA); //装配件清单该数据标记已装配 (如果是自制件赋值productSnId) - productionAssemblyNosortContext.assemblyStatus(assemblySn).productSnId(filter.getProductSnId()); + productionAssemblyNosortContext.assemblyStatus(assemblySn); + if (filter != null) { + productionAssemblyNosortContext.productSnId(filter.getProductSnId()); + } flag = true; break; } @@ -157,6 +168,33 @@ public class MesAssemblyMatchRawMixStepService extends BaseStepService { } return false; + } + + private Map checkProductSnRule(String organizeCode, String barcode) { + Map result = new HashMap<>(); + result.put(MesPcnExtConstWords.RESULT, false); + + MesProduceSn produceSn = produceSnRDao.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, "productSn"}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), barcode}); + if (produceSn == null) { + result.put(MesPcnExtConstWords.MESSAGE, String.format("扫描条码【%s】在条码表不存在, 请检查数据!", barcode)); + return result; + } + + if (!Objects.equals(produceSn.getSnStatus(), MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) && + !Objects.equals(produceSn.getSnStatus(), MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue())) { + result.put(MesPcnExtConstWords.MESSAGE, String.format("扫描条码【%s】的条码状态必须为“创建”或“已完成”, 请检查数据!", barcode)); + return result; + } + + if (!Objects.equals(produceSn.getQcStatus(), MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) && + !Objects.equals(produceSn.getQcStatus(), MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue())) { + result.put(MesPcnExtConstWords.MESSAGE, String.format("扫描条码【%s】的质量状态必须为“合格”或“可疑转正常”, 请检查数据!", barcode)); + return result; + } + result.put(MesPcnExtConstWords.RESULT, true); + return result; } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java index 07f1061..5b0a855 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java @@ -56,6 +56,9 @@ public class MesAssemblySaveStepService extends BaseStepService { @Autowired private IMesStationContainerSnExtService stationContainerSnExtService; + @Autowired + private IMesRawSnWeightRecordService rawSnWeightRecordService; + @Override public StepResult execute(StationRequestBean reqBean) { @@ -129,12 +132,15 @@ public class MesAssemblySaveStepService extends BaseStepService { //容器匹配, 一个装配件信息可能对应多条原料条码 if (productionAssemblyNosortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_80.getValue()) == 0) { insertMesProductionAssembly80(reqBean, productionProcessContext, cellEquipContext, prodRuleContext, productionPsOutContext, productionAssemblyNosortContext, scanMonitorContext, productSnIdList); + } else if (productionAssemblyNosortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_90.getValue()) == 0) { + insertMesProductionAssembly90(reqBean, productionProcessContext, cellEquipContext, prodRuleContext, productionPsOutContext, productionAssemblyNosortContext, scanMonitorContext, productSnIdList); } else { //一对一 insertProductionAssembly(reqBean, productionProcessContext, cellEquipContext, prodRuleContext, productionPsOutContext, productionAssemblyNosortContext, scanMonitorContext, productSnIdList); } } - + //写入调配产出物重量记录 + rawSnWeightRecordService.insertOutPartNoWeightRecord(prodRuleContext, productionAssemblyNosortContextList, reqBean.getOrganizeCode(), reqBean.getUserInfo()); } //保存装配件绑定记录 @@ -216,4 +222,13 @@ public class MesAssemblySaveStepService extends BaseStepService { } + //调配原料, 记录原料的剩余数量及胶水总重量。 + private void insertMesProductionAssembly90(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, + MesProdRuleContext prodRuleContext, MesProductionPsOutContext productionPsOutContext, + MesProductionAssemblyNosortContext productionAssemblyNosortContext, MesScanMonitorContext scanMonitorContext, List productSnIdList) { + //保存装配件绑定记录 + insertProductionAssembly(reqBean, productionProcessContext, cellEquipContext, prodRuleContext, productionPsOutContext, productionAssemblyNosortContext, scanMonitorContext, productSnIdList); + //写入调配原料剩余数量 + rawSnWeightRecordService.insertRawRemainWeightRecord(productionAssemblyNosortContext, reqBean.getOrganizeCode(), reqBean.getUserInfo()); + } }