From 42ef11c53cdf983a0fa6e10c578ddd69593d6eaa Mon Sep 17 00:00:00 2001 From: jason Date: Wed, 25 Jun 2025 13:59:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A5=E6=AD=A5=E4=B8=8A?= =?UTF-8?q?=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IMesProductionDispatchContextStepService.java | 6 -- .../MesContainerBindPackageSnService.java | 64 ++++++++++++++++ ...ationFeedContainerPackageDetailStepService.java | 7 +- .../step/MesStationFeedContainerSnStepService.java | 7 +- .../step/MesStationFeedScanSnStepService.java | 86 ---------------------- .../MesProductionDispatchContextStepService.java | 13 ---- 6 files changed, 75 insertions(+), 108 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/containerbind/MesContainerBindPackageSnService.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedScanSnStepService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java index 5259747..5b12159 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java @@ -271,12 +271,6 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "保存站点用于缺料时进行上料绑定") void dispatchMatchStationContext(StationRequestBean reqBean, List stationList); - @ApiOperation(value = "获取站点用于缺料时进行上料扫描的条码") - String getMatchStationFeedScanSnContext(StationRequestBean reqBean); - - @ApiOperation(value = "保存站点用于缺料时进行上料扫描的条码") - void dispatchMatchStationFeedScanSnContext(StationRequestBean reqBean, String sn); - @ApiOperation(value = "获取站点用于缺料时进行上料绑定的容器条码") String getMatchStationFeedContainerSnContext(StationRequestBean reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/containerbind/MesContainerBindPackageSnService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/containerbind/MesContainerBindPackageSnService.java new file mode 100644 index 0000000..35eef52 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/containerbind/MesContainerBindPackageSnService.java @@ -0,0 +1,64 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.containerbind; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesContainerPartsModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +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; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +// YFWHU|YFNSC901C241223042722|C901|401007574AAABN|9.0|EA|C901|20241223| +@Slf4j +@Component +public class MesContainerBindPackageSnService extends MesAbstractContainerBindDispatchService { + @Autowired + private MesProduceSnRepository produceSnRDao; + + public MesContainerBindPackageSnService() { + super(null, MesExtEnumUtil.CONTAINER_PART_MATCH_TYPE.MATCH_TYPE_30); + } + + @Override + public Map matchNumberRule(String organizeCode, String barcode, MesContainerPartsModel model) { + Map result = new HashMap<>(); + result.put(MesPcnExtConstWords.RESULT, true); + String[] splitBarcode = barcode.split("\\|"); + if (splitBarcode.length < 8) { + MesPcnException.throwMesBusiException("自制件箱码【%s】格式不对, 请检查数据!", barcode); + } + String barOrganizeCode = splitBarcode[2]; + if (!Objects.equals(barOrganizeCode, organizeCode)) { + MesPcnException.throwMesBusiException("自制件箱码【%s】的工厂代码【%s】与当前工厂不匹配, 请检查数据!", barcode, barOrganizeCode); + } + + String barProductSn = splitBarcode[3]; + 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(), barProductSn}); + if (produceSn == null) { + MesPcnException.throwMesBusiException("自制件箱码【%s】的条码【%s】在条码表不存在, 请检查数据!", barcode, barProductSn); + } + + if (!Objects.equals(produceSn.getSnStatus(), MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) && + !Objects.equals(produceSn.getSnStatus(), MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue())) { + MesPcnException.throwMesBusiException("扫描条码【%s】的条码状态必须为“创建”或“已完成”, 请检查数据!", barcode); + } + + if (!Objects.equals(produceSn.getQcStatus(), MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) && + !Objects.equals(produceSn.getQcStatus(), MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue())) { + MesPcnException.throwMesBusiException("扫描条码【%s】的质量状态必须为“合格”或“可疑转正常”, 请检查数据!", barcode); + } + + result.put(MesPcnExtConstWords.DATA_TYPE, MesExtEnumUtil.CONTAINER_BARCODE_DATA_TYPE.STATUS_10.getValue()); + return result; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedContainerPackageDetailStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedContainerPackageDetailStepService.java index 1652314..f4f1b95 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedContainerPackageDetailStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedContainerPackageDetailStepService.java @@ -10,6 +10,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.platform.common.util.MesConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; @@ -57,6 +58,10 @@ public class MesStationFeedContainerPackageDetailStepService extends BaseStepSer StepResult stepResult = StepResult.getSuccessComplete(); + //扫描信息置空 + String barcode = reqBean.resetScanInfo(reqBean.getScanInfo()); + if (StringUtils.isEmpty(barcode)) stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描上料条码!"); + //获取工位当前设备信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); @@ -71,8 +76,6 @@ public class MesStationFeedContainerPackageDetailStepService extends BaseStepSer stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "容器条码扣减装配件时验证设备未关联支持上料的站点"); } final String organizeCode = reqBean.getOrganizeCode(); - - String barcode = productionDispatchContextStepService.getMatchStationFeedScanSnContext(reqBean); final String lastFeedContainerSn = productionDispatchContextStepService.getMatchStationFeedContainerSnContext(reqBean); if (!StringUtils.isEmpty(lastFeedContainerSn)) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedContainerSnStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedContainerSnStepService.java index 9fa2d54..483de1b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedContainerSnStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedContainerSnStepService.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.platform.common.util.MesConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesContainerPackage; import cn.estsh.i3plus.pojo.mes.bean.MesContainerPackageDetail; @@ -23,6 +24,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.util.List; import java.util.Objects; @@ -51,6 +53,10 @@ public class MesStationFeedContainerSnStepService extends BaseStepService { StepResult stepResult = StepResult.getSuccessComplete(); + //扫描信息置空 + String containerSn = reqBean.resetScanInfo(reqBean.getScanInfo()); + if (StringUtils.isEmpty(containerSn)) stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描上料容器条码!"); + //获取工位当前设备信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); @@ -82,7 +88,6 @@ public class MesStationFeedContainerSnStepService extends BaseStepService { if (station == null) { stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "不存在站点类型为【原料站点】、【装配件站点】、【混料站点】的站点信息!"); } - String containerSn = productionDispatchContextStepService.getMatchStationFeedScanSnContext(reqBean); final String organizeCode = reqBean.getOrganizeCode(); String topContainerSn = getTopContainerSn(organizeCode, containerSn); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedScanSnStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedScanSnStepService.java deleted file mode 100644 index 848c60e..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesStationFeedScanSnStepService.java +++ /dev/null @@ -1,86 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.platform.common.util.MesConstWords; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesConfig; -import cn.estsh.i3plus.pojo.mes.bean.MesContainerPackage; -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.MesContainerPackageRepository; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import java.util.Objects; - -/** - * @Description : 容器上料扫描容器条码/扫描原料条码/扫描关箱工步 - * @Author : jason.niu - **/ -@Slf4j -@Service("mesStationFeedScanSnStepService") -public class MesStationFeedScanSnStepService extends BaseStepService { - @Autowired - private IMesProductionDispatchContextStepService productionDispatchContextStepService; - @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - @Autowired - private IMesConfigService configService; - @Autowired - private MesContainerPackageRepository containerPackageRDao; - - @Override - public StepResult guide(StationRequestBean reqBean) { - - productionCustomContextStepService.sendStepContextMessage(reqBean); - - return stepSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描上料条码!"); - - } - - @Override - public StepResult execute(StationRequestBean reqBean) { - StationResultBean resultBean = new StationResultBean(); - - StepResult stepResult = StepResult.getSuccessComplete(); - - //扫描信息置空 - String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo()); - - if (StringUtils.isEmpty(scanInfo)) stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描装配件条码!"); - - // 判断是否为关箱条码 - MesConfig mesConfig = configService.getCfgValueByCode(reqBean.getOrganizeCode(), MesPcnExtConstWords.MATCH_STATION_FEED_CLOSE_PACKAGE); - if (mesConfig != null && Objects.equals(scanInfo, mesConfig.getCfgValue())) { - String containerSn = productionDispatchContextStepService.getMatchStationFeedContainerSnContext(reqBean); - if (StringUtils.isEmpty(containerSn)) { - stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "不存在需要关箱的容器条码!"); - } - MesContainerPackage containerPackage = containerPackageRDao.getByProperty(new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_VALID, MesConstWords.IS_DELETED, "containerSn"}, - new Object[]{reqBean.getOrganizeCode(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), containerSn}); - if (containerPackage == null) { - stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("容器条码【%s】未绑定零件!", containerSn)); - } - assert containerPackage != null; - containerPackage.setPackageStatus(MesExtEnumUtil.CONTAINER_PACKAGE_STATUS.STATUS_20.getValue()); - ConvertBean.serviceModelUpdate(containerPackage, reqBean.getUserInfo()); - containerPackageRDao.update(containerPackage); - } - - //保存扫描条码用于缺料时进行上料绑定 - productionDispatchContextStepService.dispatchMatchStationFeedScanSnContext(reqBean, scanInfo); - - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, - String.format("当前扫描信息装配件条码[%s]", scanInfo)); - } -} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java index 51b6550..041c9be 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java @@ -616,19 +616,6 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MATCH_STATION_CONTEXT, JSONObject.toJSONString(stationList)); } - //获取站点用于缺料时进行上料绑定 - @Override - public String getMatchStationFeedScanSnContext(StationRequestBean reqBean) { - return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MATCH_STATION_FEED_SCAN_SN_CONTEXT); - } - - //保存站点用于缺料时进行上料绑定 - @Override - public void dispatchMatchStationFeedScanSnContext(StationRequestBean reqBean, String sn) { - if (StringUtils.isEmpty(sn)) return; - dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MATCH_STATION_FEED_SCAN_SN_CONTEXT, sn); - } - @Override public String getMatchStationFeedContainerSnContext(StationRequestBean reqBean) { return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MATCH_STATION_FEED_CONTAINER_SN_CONTEXT);