From c210f5e8b2b821dedc865d0f99e9e53e5e215a71 Mon Sep 17 00:00:00 2001 From: "xiangwei.zhang" <752558143@qq.com> Date: Tue, 24 Sep 2024 14:35:39 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E5=88=A4=E6=96=AD=E5=8F=AF=E7=96=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesInputDefectRecordService.java | 36 ++++++++++++++-------- .../serviceimpl/busi/MesNcProcessingService.java | 35 ++++++++++++++++----- .../pcn/pojo/model/MesNcProcessingInputModel.java | 3 ++ .../pojo/model/MesPartInspectionInputModel.java | 3 ++ 4 files changed, 57 insertions(+), 20 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java index 424f70c..9413beb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java @@ -225,8 +225,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if (model.isTransferFlg() && model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { //移库 - MesMove move = createMove(model,getDestLocateNo(model, org),configService.getCfgValue(org, "LGORT"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); - moveRepository.save(move); + if (model.getOptType() != 2) { + MesMove move = createMove(model, getDestLocateNo(model, org), configService.getCfgValue(org, "LGORT"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); + moveRepository.save(move); + } } //判断首次合格还是 多次检验最终为合格品 @@ -298,10 +300,11 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService }else{ srcLocate= configService.getCfgValue(org, "UMLGO"); } - - //移库 - MesMove move = createMove(model,srcLocate,configService.getCfgValue(org, "LGORT"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); - moveRepository.save(move); + if (model.getOptType() != 2) { + //移库 + MesMove move = createMove(model, srcLocate, configService.getCfgValue(org, "LGORT"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); + moveRepository.save(move); + } } } @@ -355,9 +358,11 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if (Objects.isNull(srcLocateNo)) { srcLocateNo = configService.getCfgValue(org, "LGORT"); } - //移库 - MesMove move = createMove(model,srcLocateNo, configService.getCfgValue(org, "UMLGO"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); - moveRepository.save(move); + if (model.getOptType() != 2) { + //移库 + MesMove move = createMove(model, srcLocateNo, configService.getCfgValue(org, "UMLGO"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); + moveRepository.save(move); + } } else { @@ -392,6 +397,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService throw new ImppBusiException(String.format("【%s】位置不存在,请检查数据", defectTypeNoExitList)); } + //若是扫描条码 则判定条码可疑 if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { checkProduceSn(produceSn, model.getSn()); @@ -403,9 +409,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService partInspectionDetailRepository.saveAll(model.getPartInspectionDetailList()); //移库 - MesMove move = createMove(model, configService.getCfgValue(org, "LGORT"), configService.getCfgValue(org, "UMLGO"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); - moveRepository.save(move); - + if (model.getOptType() != 2) { + MesMove move = createMove(model, configService.getCfgValue(org, "LGORT"), configService.getCfgValue(org, "UMLGO"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); + moveRepository.save(move); + } } @@ -927,7 +934,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if (CollectionUtils.isEmpty(produceSnList)) { MesPcnException.throwFlowException("条码不存在"); } - MesProduceSn produceSn = produceSnList.get(0); + MesProduceSn produceSn = produceSnList.stream().filter(mesProduceSn -> Objects.equals(mesProduceSn.getSnStatus(), MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue())).findFirst().orElse(null); + if (produceSn == null) { + MesPcnException.throwFlowException("条码不存在"); + } MesProduceSnLog produceSnLog = new MesProduceSnLog(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java index 7434da2..aa04ec6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java @@ -329,6 +329,7 @@ public class MesNcProcessingService implements IMesNcProcessingService { MesProduceSn sn = getProduceSn(model.getSn(), org); String source = configService.getCfgValue(org, "LGORT"); + String refundSource = configService.getCfgValue(org, "REFUND"); if (!StringUtils.isEmpty(model.getProductVersion())) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); DdlPreparedPack.getStringEqualPack(model.getPart().getPartNo(), "partNo", ddlPackBean); @@ -360,9 +361,12 @@ public class MesNcProcessingService implements IMesNcProcessingService { model.getPartInspection().setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.NORMAL.getValue()); ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserName()); partInspectionRepository.save(model.getPartInspection()); - + String sourceValue = configService.getCfgValue(org, "UMLGO"); + if (model.getOptType() == 2) { + sourceValue = refundSource; + } //移库 转正常、放行:8000移至2000 - MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "LGORT"), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); + MesMove move = createMove(model, sourceValue, configService.getCfgValue(org, "LGORT"), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); ConvertBean.serviceModelInitialize(move,model.getUserName()); moveRepository.save(move); @@ -415,7 +419,12 @@ public class MesNcProcessingService implements IMesNcProcessingService { ConvertBean.serviceModelUpdate(model.getPartInspection(),model.getUserName()); partInspectionRepository.save(model.getPartInspection()); - MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), areaCode, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.RETURN_MOVE); + String sourceValue = configService.getCfgValue(org, "UMLGO"); + if (model.getOptType() == 2) { + sourceValue = refundSource; + } + + MesMove move = createMove(model, sourceValue, areaCode, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.RETURN_MOVE); ConvertBean.serviceModelInitialize(move,model.getUserName()); moveRepository.save(move); @@ -441,12 +450,21 @@ public class MesNcProcessingService implements IMesNcProcessingService { ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserName()); partInspectionRepository.save(model.getPartInspection()); if (isOrder) { - MesMove move = createMove(model, source, configService.getCfgValue(org, "SCRAP"), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE); + String sourceValue = source; + if (model.getOptType() == 2) { + sourceValue = refundSource; + } + + MesMove move = createMove(model, sourceValue, configService.getCfgValue(org, "SCRAP"), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE); ConvertBean.serviceModelInitialize(move,model.getUserName()); moveRepository.save(move); } else { + String sourceValue = configService.getCfgValue(org, "UMLGO"); + if (model.getOptType() == 2) { + sourceValue = refundSource; + } //移库 转报废 根据责任方库区对应关系的主数据,选择哪个责任方,就移动到哪个库区(8000移至8002/8003) - MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), areaCode, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE); + MesMove move = createMove(model, sourceValue, areaCode, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE); ConvertBean.serviceModelInitialize(move,model.getUserName()); moveRepository.save(move); } @@ -470,9 +488,12 @@ public class MesNcProcessingService implements IMesNcProcessingService { ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserName()); partInspectionRepository.save(model.getPartInspection()); - + String sourceValue = configService.getCfgValue(org, "UMLGO"); + if (model.getOptType() == 2) { + sourceValue = refundSource; + } //移库 转正常、放行:8000移至2000 - MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "LGORT"), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); + MesMove move = createMove(model, sourceValue, configService.getCfgValue(org, "LGORT"), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); ConvertBean.serviceModelInitialize(move,model.getUserName()); moveRepository.save(move); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java index 390d34b..3ea91e5 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java @@ -20,6 +20,9 @@ import java.util.List; @Data public class MesNcProcessingInputModel { + @ApiParam("操作类型(1 电子化检验 2客退品 默认1)") + private Integer optType = 1; + @ApiParam("类型") private Integer type; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartInspectionInputModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartInspectionInputModel.java index f35fadc..11c50ad 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartInspectionInputModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartInspectionInputModel.java @@ -18,6 +18,9 @@ import java.util.List; @Data public class MesPartInspectionInputModel { + @ApiParam("操作类型(1 电子化检验 2客退品 默认1)") + private Integer optType = 1; + @ApiParam("操作人") private String userInfo; From 2bb948e6c454e80c039a0414ae972e2f0cb6a0f8 Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 25 Sep 2024 13:15:11 +0800 Subject: [PATCH 02/13] =?UTF-8?q?JIS=E7=89=A9=E6=96=99=E6=8B=89=E5=8A=A8PC?= =?UTF-8?q?N=20=E4=BF=AE=E6=94=B9=E6=A0=B9=E6=8D=AE=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=8F=B7=E6=8E=92=E5=BA=8F=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java index 506087e..1b8e7b2 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java @@ -120,8 +120,8 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { // if (!StringUtil.isEmpty(bean.orderBy())) { // packBean.setOrderByStr(bean.orderBy()); // } else { - //顺序校验 根据未扫描单号 1 、2 、3,如果没有强过码 必须先扫1 再扫2 - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"pullingOrderNo"}, packBean); + //顺序校验 根据未扫描单号 1 、2 、3,如果没有强过码 必须先扫1 再扫2 pullingOrderNo修改位workOrderNo + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"workOrderNo"}, packBean); // } List pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlWhere(packBean); if (!CollectionUtils.isEmpty(pullingOrderInfos)) { From fc3e0bab38162fc8784f09ed6e9a6ab14838075f Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 25 Sep 2024 14:19:21 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=8F=91=E8=BF=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/IMesEquipmentExtService.java | 7 + .../pcn/api/busi/IMesSortShippingCheckService.java | 3 +- .../mes/pcn/api/busi/IMesWorkOrderExtService.java | 3 + .../busi/MesSortShippingCheckController.java | 7 +- .../serviceimpl/base/MesEquipmentExtService.java | 17 + .../busi/MesSortShippingCheckService.java | 510 ++++++++++----------- .../serviceimpl/busi/MesWorkOrderExtService.java | 5 + .../IMesShippingScanStrategyService.java | 19 + ...sShippingScanSnAndOrderStrategyServiceImpl.java | 262 +++++++++++ .../MesShippingScanSnStrategyServiceImpl.java | 217 +++++++++ .../pcn/pojo/model/MesSortShippingCheckModel.java | 13 + 11 files changed, 780 insertions(+), 283 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/IMesShippingScanStrategyService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnStrategyServiceImpl.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java index 8551207..91c22c9 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java @@ -28,4 +28,11 @@ public interface IMesEquipmentExtService { @ApiOperation(value = "根据设备数据变量ID集合查询设备数据变量信息") List getEquipmentVariableList(String organizeCode, List equipVariableIdList); + @ApiOperation(value = "根据设备代码和设备变量ID查询设备变量") + MesEquipmentVariable getMesEquipmentVariable(String organizeCode, String equipmentCode,long equipmentVariableId); + + @ApiOperation(value = "根据设备代码和通道查询设备通道信息") + MesEquipmentChannel getMesEquipmentChannel(String organizeCode, String equipmentCode,String channel); + + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java index 04fcafd..adedc50 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java @@ -2,7 +2,6 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping; -import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import io.swagger.annotations.ApiOperation; @@ -22,7 +21,7 @@ public interface IMesSortShippingCheckService { MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement); @ApiOperation(value = "保存条码") - MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model, String organizeCode, String userInfo); + MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model); @ApiOperation(value = "保存条码和位置码") MesSortShippingCheckModel saveSnAndLocationCode(MesSortShippingCheckModel model, String organizeCode, String userInfo); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java index 7639fc4..ce861e8 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java @@ -32,6 +32,9 @@ public interface IMesWorkOrderExtService { void update(MesWorkOrder item); + @ApiOperation(value = "保存工单信息") + void saveAll(List workOrderList); + @ApiOperation(value = "根据生产工单ID查询生产工单信息") List getWorkOrderListByShiftCode(String organizeCode, String workCenterCode, String shiftCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java index 2104a06..9fb4127 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java @@ -107,9 +107,10 @@ public class MesSortShippingCheckController { ValidatorBean.checkNotNull(model.getShippingCode(), "发运单不能为空"); ValidatorBean.checkNotNull(model.getDetailList(), "发运明细不能为空"); ValidatorBean.checkNotNull(model.getSn(), "条码不能为空"); - - sortShippingCheckService.saveSn(model, organizeCode, userInfo); - return ResultBean.success("查询成功").setResultObject(model); + model.setOrganizeCode(organizeCode); + model.setUserInfo(userInfo); + sortShippingCheckService.saveSn(model); + return ResultBean.success("扫描成功").setResultObject(model); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); } catch (Exception e) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java index 5b7a78f..4950c6f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java @@ -117,4 +117,21 @@ public class MesEquipmentExtService implements IMesEquipmentExtService { else DdlPreparedPack.getInPackList(equipVariableIdList, MesPcnExtConstWords.ID, packBean); return equipmentVariableRepository.findByHqlWhere(packBean); } + + @Override + public MesEquipmentVariable getMesEquipmentVariable(String organizeCode, String equipmentCode, long equipmentVariableId) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipmentCode) || equipmentVariableId == 0) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(equipmentCode, MesPcnExtConstWords.EQUIPMENT_CODE, packBean); + DdlPreparedPack.getNumEqualPack(equipmentVariableId, MesPcnExtConstWords.ID, packBean); + return equipmentVariableRepository.getByProperty(packBean); + } + + @Override + public MesEquipmentChannel getMesEquipmentChannel(String organizeCode, String equipmentCode, String channel) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipmentCode) || StringUtils.isEmpty(channel)) return null; + return equipmentChannelRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.EQUIPMENT_CODE, MesPcnExtConstWords.CHANNEL}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), equipmentCode, channel}); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java index 3b094c5..37c7d08 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java @@ -1,7 +1,9 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.IMesShippingScanStrategyService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; @@ -12,16 +14,17 @@ 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.base.util.StringUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping; -import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -30,6 +33,7 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description : @@ -44,17 +48,14 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService @Autowired private MesShippingOrderManagementRepository shippingOrderManagementRepository; + @Autowired private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; - @Autowired - private MesProduceSnRepository produceSnRepository; @Autowired - private IMesProduceSnExtService produceSnExtService; + private MesProduceSnRepository produceSnRepository; @Autowired - private MesPartShippingGroupRepository partShippingGroupRepository; - @Autowired private MesLoadingListRepository listRepository; @Autowired @@ -70,30 +71,141 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService private IMesJisShippingService jisShippingService; @Autowired private MesLoadingListDetailRepository vehiclesOrderDetailRepository; + @Autowired private MesLoadingListRepository vehiclesOrderRepository; @Autowired - private MesCustomerPartRepository mesCustomerPartRepository; + private MesPartShippingGroupService mesPartShippingGroupService; @Autowired - private MesPartShippingGroupService mesPartShippingGroupService; + private MesBallTrackRuleRepository mesBallTrackRuleRepository; @Autowired - private IMesConfigService mesConfigService; + private IMesWorkOrderExtService mesWorkOrderExtService; + + @Autowired + private IMesEquipmentExtService mesEquipmentExtService; + + @Autowired + private IMesEquipVariableRwExtService equipVariableRwExtService; @Override public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) { + //校验发运单 + MesShippingOrderManagement orderManagement = getMesShippingOrderManagement(shippingOrderManagement); + if(Objects.isNull(orderManagement)){ + return null; + } + //校验发运单扫描顺序 + checkShippingOrderSeq(shippingOrderManagement, orderManagement); + //根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据! + checkLoadingList(shippingOrderManagement, orderManagement); + //返回数据组装 + MesSortShippingCheckModel model = new MesSortShippingCheckModel(); + if (!StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { + model.setIsScanLocationCode(true); + } + //发运单号 + model.setShippingCode(orderManagement.getShippingCode()); + //零件发运组 + model.setMesPartShippingGroup(getMesPartShippingGroup(shippingOrderManagement.getOrganizeCode(),shippingOrderManagement.getShippingGroupCode())); + //发运单明细 + model.setDetailList(getMesShippingOrderManagementDetails(shippingOrderManagement, orderManagement)); + //最近扫描完成的发运单号 + MesShippingOrderManagement lastShippingOrder = getLastShippingOrder(shippingOrderManagement); + if (!Objects.isNull(lastShippingOrder)) { + model.setRecentlyScanShippingCode(lastShippingOrder.getShippingCode()); + } + return model; + } + + @Override + public MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model) { + //校验发运单是否存在 + MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model); + //零件发运组 + MesPartShippingGroup shippingGroup = Objects.isNull(model.getMesPartShippingGroup()) ? getMesPartShippingGroup(orderManagement.getOrganizeCode(), orderManagement.getShippingGroupCode()) : model.getMesPartShippingGroup(); + //扫描跳过码 + if (!Objects.isNull(model.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE, model.getIsPass())) { + skipShippingDetails(model, model.getUserInfo(), orderManagement); + //扫描条码 + } else{ + model = ((IMesShippingScanStrategyService) SpringContextsUtil.getBean(MesExtEnumUtil.SHIPPING_GROUP_CONFIRM_PART_TYPE.valueOfServiceImpl(Integer.parseInt(shippingGroup.getConfirmPartType())))).doScan(model,orderManagement,shippingGroup); + } + model.setDetailList(model.getDetailList()); + //当前发运单全部扫描完成 并且不需要扫位置码 + if (model.getIsScanCount() == model.getDetailList().size() && StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { + //保存数据库 + saveDate(orderManagement, model, model.getOrganizeCode(), model.getUserInfo()); + } + return model; + } + + @Override + public MesSortShippingCheckModel saveSnAndLocationCode(MesSortShippingCheckModel model, String organizeCode, String userInfo) { + //校验条码 + MesProduceSn produceSn = checkMesProduceSn(model, organizeCode); //校验发运单是否存在 + MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model); + //根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true. + boolean scanFlg = false; + for (MesShippingOrderManagementDetail detail : model.getDetailList()) { + if (detail.getPartNo().equals(produceSn.getPartNo())) { + scanFlg = true; + detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); + detail.setBarcode(produceSn.getSerialNumber()); + break; + } + } + + if (!scanFlg) { + throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo())); + } + + Long count = model.getDetailList().stream().filter(k -> Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).count(); + + //当前发运单全部扫描完成 + if (count.intValue() == model.getDetailList().size()) { + //保存数据库 + saveDate(orderManagement, model, organizeCode, userInfo); + } + return model; + } + + @Override + public MesShippingOrderManagement queryShippingOrderNoByAutoPushOrder(String shippingGroupNo, String org) { + //查询最近扫描完成的装车单号 + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue(), "status", orderPackBean); + DdlPreparedPack.getStringEqualPack(shippingGroupNo, "shippingGroupCode", orderPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"seq"}, orderPackBean); + return shippingOrderManagementRepository.getByProperty(orderPackBean); + + } + + private MesPartShippingGroup getMesPartShippingGroup(String org, String partShippingGroupCode) { + if(StringUtil.isEmpty(org) ||StringUtil.isEmpty(partShippingGroupCode)){ + return null; + } + MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, partShippingGroupCode); + if(Objects.isNull(shippingGroup)){ + throw new ImppBusiException(String.format("零件发运组【%s】信息不存在,请检查数据!", partShippingGroupCode)); + } + return shippingGroup; + } + + private MesShippingOrderManagement getMesShippingOrderManagement(MesShippingOrderManagement shippingOrderManagement) { + //查询发运单信息 发运跳过 DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(shippingOrderManagement.getShippingCode(), "shippingCode", orderManagementPackBean); + DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), "status", orderManagementPackBean); MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getByProperty(orderManagementPackBean); if (StringUtils.isEmpty(orderManagement)) { throw new ImppBusiException(String.format("【%s】此发运单不存在,请检查数据!", shippingOrderManagement.getShippingCode())); } - //校验发运单状态 必须是未装车条码 - if (orderManagement.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue() && orderManagement.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()) { + if (!Stream.of(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue(),MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()).collect(Collectors.toList()).contains(orderManagement.getStatus())) { throw new ImppBusiException(String.format("【%s】此发运单状态为【%s】,请选择状态为【%s】或【%s】状态的发运单", shippingOrderManagement.getShippingCode(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.valueOfDescription(orderManagement.getStatus()), MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getDescription(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription())); @@ -109,47 +221,39 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService updateShippingOrderDetails(orderManagement.getOrganizeCode(), shippingOrderManagement.getModifyUser(), orderManagement.getId()); return null; } + return orderManagement; + } - //校验发运单扫描顺序 - List statusForCheckList = new ArrayList<>(); - statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue()); - statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()); - statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); - statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue()); - List status = new ArrayList<>(); - status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()); - status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.LOADING.getValue()); - status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICSING.getValue()); - status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICS.getValue()); + private void checkShippingOrderSeq(MesShippingOrderManagement shippingOrderManagement, MesShippingOrderManagement orderManagement) { //最后一个扫描完成的发运单信息 - orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); + DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getNumberSmallerPack(orderManagement.getSeq(), "seq", orderManagementPackBean); - DdlPreparedPack.getStringEqualPack(orderManagement.getShippingGroupCode(),"shippingGroupCode",orderManagementPackBean); - DdlPreparedPack.getInPackList(status, "status", orderManagementPackBean); - DdlPreparedPack.getOrderBy("seq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(),orderManagementPackBean); + DdlPreparedPack.getStringEqualPack(orderManagement.getShippingGroupCode(), "shippingGroupCode", orderManagementPackBean); + DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.LOADING.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICSING.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICS.getValue()).collect(Collectors.toList()), "status", orderManagementPackBean); + DdlPreparedPack.getOrderBy("seq", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), orderManagementPackBean); MesShippingOrderManagement management = shippingOrderManagementRepository.getByProperty(orderManagementPackBean); - //是否存在 + //当前发运组是否存在比当前小的序号,且状态是未发运完成 orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getNumberSmallerPack(orderManagement.getSeq(), "seq", orderManagementPackBean); - if(!Objects.isNull(management)){ + if (!Objects.isNull(management)) { DdlPreparedPack.getNumberBiggerPack(management.getSeq(), "seq", orderManagementPackBean); } - DdlPreparedPack.getStringEqualPack(orderManagement.getShippingGroupCode(),"shippingGroupCode",orderManagementPackBean); - DdlPreparedPack.getInPackList(statusForCheckList, "status", orderManagementPackBean); - boolean exists = shippingOrderManagementRepository.isExitByHql(orderManagementPackBean); - if (exists) { + DdlPreparedPack.getStringEqualPack(orderManagement.getShippingGroupCode(), "shippingGroupCode", orderManagementPackBean); + DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue()).collect(Collectors.toList()), "status", orderManagementPackBean); + if (shippingOrderManagementRepository.isExitByHql(orderManagementPackBean)) { //1强过 - if((!Objects.isNull(shippingOrderManagement.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE,shippingOrderManagement.getIsPass()))){ + if ((!Objects.isNull(shippingOrderManagement.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE, shippingOrderManagement.getIsPass()))) { orderManagement.setRemark(MesPcnExtConstWords.STRONGER_PASS); - ConvertBean.serviceModelUpdate(orderManagement,shippingOrderManagement.getModifyUser()); + ConvertBean.serviceModelUpdate(orderManagement, shippingOrderManagement.getModifyUser()); vehiclesOrderRepository.update(orderManagement); - }else{ + } else { throw new ImppBusiException(String.format("【%s】发运单对应排序【%s】前存在未扫描发运的发运单,请检查数据!", orderManagement.getShippingCode(), orderManagement.getSeq())); } } + } - //根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据! + private void checkLoadingList(MesShippingOrderManagement shippingOrderManagement, MesShippingOrderManagement orderManagement) { if (Objects.equals(orderManagement.getIsLoading(), MesCommonConstant.TRUE_INTEGER)) { //查询装车单明细 DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); @@ -164,10 +268,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService if(Objects.isNull(loadingList)){ throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没生成装车单,请检查数据!", shippingOrderManagement.getShippingCode())); } - //判断是否先装车 if (Objects.equals(orderManagement.getIsFirstInstall(), MesCommonConstant.TRUE_INTEGER)) { - //若没进行装车校验,则提示【%s】此发运单对应的【%s】此装车单状态为【%s】,请选择状态为【%s】的数据 if (loadingList.getStatus() != MesExtEnumUtil.MES_LOADING_STATUS.SCANNED.getValue()) { throw new ImppBusiException(String.format("【%s】此发运单对应的【%s】此装车单状态为【%s】,请选择状态为【%s】的数据!", @@ -177,265 +279,67 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } } } + } - MesSortShippingCheckModel model = new MesSortShippingCheckModel(); - if (!StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { - model.setIsScanLocationCode(true); - } - - + private List getMesShippingOrderManagementDetails(MesShippingOrderManagement shippingOrderManagement, MesShippingOrderManagement orderManagement) { DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "pid", orderDetailPackBean); DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),"status",orderDetailPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"custInfoSeq"}, orderDetailPackBean); List detailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderDetailPackBean); - + if(CollectionUtils.isEmpty(detailList)){ + throw new ImppBusiException(String.format("发运单【%s】明细信息不存在,请检查数据!", shippingOrderManagement.getShippingCode())); + } + //已扫描数据 detailList.forEach(k -> { - if (k.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue() || k.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue()){ + if (Stream.of(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue(),MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue()).collect(Collectors.toList()).contains(k.getStatus())){ k.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); } }); + return detailList; + } - Long count = detailList.stream().filter(k -> Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).count(); - model.setIsScanCount(count.intValue()); - - //查询最近扫描完成的装车单号 + private MesShippingOrderManagement getLastShippingOrder(MesShippingOrderManagement shippingOrderManagement) { DdlPackBean recentlyOrderPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), "status", recentlyOrderPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"modifyDatetime"}, recentlyOrderPackBean); - MesShippingOrderManagement recentlyVehiclesOrder = shippingOrderManagementRepository.getByProperty(recentlyOrderPackBean); - - model.setDetailList(detailList); - model.setShippingCode(orderManagement.getShippingCode()); - if (!StringUtils.isEmpty(recentlyVehiclesOrder)) { - - model.setRecentlyScanShippingCode(recentlyVehiclesOrder.getShippingCode()); - } - - return model; - } - - @Override - public MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model, String organizeCode, String userInfo) { - //校验发运单是否存在 - MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model, organizeCode); - //零件发运组 - MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, orderManagement.getShippingGroupCode()); - //根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true. - //根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。 - //1 跳过 - if(!Objects.isNull(model.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE,model.getIsPass())){ - Optional shippingOrderManagementDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); - if(shippingOrderManagementDetailOptional.isPresent()){ - MesShippingOrderManagementDetail mesShippingOrderManagementDetail = shippingOrderManagementDetailOptional.get(); - MesProduceSn produceSn = new MesProduceSn(); - produceSn.setProductSn(model.getSn()); - updateOrderManagementDetails(userInfo, produceSn, orderManagement, mesShippingOrderManagementDetail,MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(),MesPcnExtConstWords.SHIP_PASS); - }else{ - throw new ImppBusiException(String.format("【%s】明细已全部扫描完成,请检查数据!", orderManagement.getShippingCode())); - } - }else{ - //校验条码 - MesProduceSn produceSn = checkSn(model, organizeCode); - boolean scanFlg = false; - for (MesShippingOrderManagementDetail detail : model.getDetailList()) { - if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) { - //校验发运单明细顺序 - if(!StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()){ - Optional first = model.getDetailList().stream().filter(k -> k.getCustInfoSeq().compareTo(detail.getCustInfoSeq()) < 0 && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); - if(first.isPresent()){ - throw new ImppBusiException(String.format("发运单【%s】启用明细顺序防错,序号【%s】前还有未扫描的发运单明细,请检查数据!", orderManagement.getShippingCode(), detail.getCustInfoSeq())); - } - } - - //判断是否需要排序校验 默认排序则需要校验 - if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { - //获取明细中最小的 - Optional minPartNO = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode())) - .min(Comparator.comparingLong(k -> k.getCustInfoSeq())).map(k -> k.getPartNo()); - //若扫描的不是最小顺序 则报错 - if (minPartNO.isPresent() && !minPartNO.get().equals(produceSn.getPartNo())) { - throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误,请检查数据!", model.getSn())); - } - } - //校验客户零件信息是否存在 - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(detail.getPartNo(), "erpPartNo", packBean); - DdlPreparedPack.getStringEqualPack(detail.getCustPartNo(), "custPartNo", packBean); - if(!mesCustomerPartRepository.isExitByHql(packBean)){ - throw new ImppBusiException(String.format("零件号【%s】客户零件号【%s】关系不存在,请检查数据!", detail.getPartNo(),detail.getCustPartNo())); - } - - scanFlg = true; - updateOrderManagementDetails(userInfo, produceSn, orderManagement, detail,MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue(),"扫描完成"); - break; - } - } - if (!scanFlg) { - throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo())); - } - } - - - Long count = model.getDetailList().stream().filter(k -> Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).count(); - model.setIsScanCount(count.intValue()); - - //当前发运单全部扫描完成 并且不需要扫位置码 - if (count.intValue() == model.getDetailList().size() && StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { - - //保存数据库 - saveDate(orderManagement, model, organizeCode, userInfo); - } - - return model; + return shippingOrderManagementRepository.getByProperty(recentlyOrderPackBean); } - private void updateOrderManagementDetails(String userInfo, MesProduceSn produceSn, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail,Integer status,String remark) { - if(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue() == status){ - detail.setBarcode(produceSn.getProductSn()); - } - - if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { - detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); - detail.setStatus(status); - detail.setRemark(remark); - //根据是否启动记忆判断 若启用记忆,则根据保存数据库 - if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { - - //若发运单状态为创建或发布 则写入开始扫描时间 - if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() || - orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue())) { - orderManagement.setStartScanTime(TimeTool.getNowTime(true)); - } - - orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); - orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE); - ConvertBean.serviceModelUpdate(orderManagement, userInfo); - update(orderManagement); - - detail.setActualQty(1); - detail.setSystemSyncStatus(CommonEnumUtil.FALSE); - ConvertBean.serviceModelUpdate(detail, userInfo); - updateDetail(detail); - //内部条码更新条码状态 - if (!Objects.isNull(produceSn.getId())) { - produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); - produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); - ConvertBean.serviceModelUpdate(detail, userInfo); - produceSnExtService.update(produceSn); - } + private void updateOrderManagementDetails(String userInfo, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail) { + detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); + detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue()); + detail.setRemark(MesPcnExtConstWords.SHIP_PASS); + //根据是否启动记忆判断 若启用记忆,则根据保存数据库 + if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { + //若发运单状态为创建或发布 则写入开始扫描时间 + if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() || + orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue())) { + orderManagement.setStartScanTime(TimeTool.getNowTime(true)); } + //发运单状态 + orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); + orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(orderManagement, userInfo); + update(orderManagement); + //发运单明细 + detail.setActualQty(1); + detail.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(detail, userInfo); + updateDetail(detail); } } - @Override - public MesSortShippingCheckModel saveSnAndLocationCode(MesSortShippingCheckModel model, String organizeCode, String userInfo) { - - //校验条码 - MesProduceSn produceSn = checkMesProduceSn(model, organizeCode); - - - //校验发运单是否存在 - MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model, organizeCode); - - //根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true. - boolean scanFlg = false; - for (MesShippingOrderManagementDetail detail : model.getDetailList()) { - if (detail.getPartNo().equals(produceSn.getPartNo())) { - scanFlg = true; - detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); - detail.setBarcode(produceSn.getSerialNumber()); - break; - } - } - - if (!scanFlg) { - throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo())); + private MesSortShippingCheckModel skipShippingDetails(MesSortShippingCheckModel model, String userInfo, MesShippingOrderManagement orderManagement) { + Optional shippingOrderManagementDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); + if(!shippingOrderManagementDetailOptional.isPresent()){ + throw new ImppBusiException(String.format("【%s】明细已全部扫描完成,请检查数据!", orderManagement.getShippingCode())); } - - Long count = model.getDetailList().stream().filter(k -> k.getIsScanFlg() == MesCommonConstant.TRUE_INTEGER).count(); - - //当前发运单全部扫描完成 - if (count.intValue() == model.getDetailList().size()) { - - //保存数据库 - saveDate(orderManagement, model, organizeCode, userInfo); - - } - + //更新明细 + updateOrderManagementDetails(userInfo, orderManagement, shippingOrderManagementDetailOptional.get()); return model; } - @Override - public MesShippingOrderManagement queryShippingOrderNoByAutoPushOrder(String shippingGroupNo, String org) { - - //查询最近扫描完成的装车单号 - DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org); - DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue(), "status", orderPackBean); -// DdlPreparedPack.getStringEqualPack(shippingGroupNo, "shippingGroupCode", orderPackBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"seq"}, orderPackBean); - MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getByProperty(orderPackBean); - - return orderManagement; - - } - - private MesPartShippingGroup getMesPartShippingGroup(String org, String partShippingGroupCode) { - MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, partShippingGroupCode); - if(Objects.isNull(shippingGroup)){ - throw new ImppBusiException(String.format("零件发运组【%s】信息不存在,请检查数据!", partShippingGroupCode)); - } - return shippingGroup; - } - - private MesProduceSn checkSn(MesSortShippingCheckModel model, String org) { - //校验条码是否重复扫描 - Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); - if (optional.isPresent()) { - throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); - } - DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); - DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", packBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); - MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); - if (!StringUtils.isEmpty(produceSn)) { - //校验状态 - checkStatus(model, produceSn); - }else{ - //外部条码解析 - MesShippingOrderManagementDetail mesShippingOrderManagementDetail = getMesShippingOrderManagementDetail(model, org); - //封装信息 - produceSn = new MesProduceSn(); - produceSn.setSerialNumber(model.getSn()); - produceSn.setProductSn(model.getSn()); - produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo()); - } - - return produceSn; - - } - - private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model, String org) { - //外部解析条码长度卡控 - String cfgValue = mesConfigService.getCfgValue(org, MesPcnExtConstWords.MAX_SHIPPING_BARCODE_LENGTH); - if(Integer.parseInt(cfgValue) < model.getSn().length()) MesPcnException.throwMesBusiException("【%s】此条码长度超过【%s】位,请检查数据!", model.getSn(),cfgValue); - List detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && model.getSn().startsWith(k.getCustPartNo()) && StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).collect(Collectors.toList()); - MesShippingOrderManagementDetail mesShippingOrderManagementDetail = null; - for (MesShippingOrderManagementDetail managementDetail : detailList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); - DdlPreparedPack.getStringEqualPack(managementDetail.getPartNo(), "erpPartNo", packBean); - DdlPreparedPack.getStringEqualPack(managementDetail.getCustPartNo(), "custPartNo", packBean); - if(mesCustomerPartRepository.isExitByHql(packBean)){ - mesShippingOrderManagementDetail = managementDetail; - break; - } - } - if(Objects.isNull(mesShippingOrderManagementDetail)){ - throw new ImppBusiException(String.format("【%s】此条码未匹配到数据,请检查数据!", model.getSn())); - } - return mesShippingOrderManagementDetail; - } - private MesProduceSn checkMesProduceSn(MesSortShippingCheckModel model, String org) { //校验条码是否已经扫描 @@ -470,9 +374,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } } - private MesShippingOrderManagement checkMesShippingOrderManagement(MesSortShippingCheckModel model, String org) { + private MesShippingOrderManagement checkMesShippingOrderManagement(MesSortShippingCheckModel model) { //校验发运单是否存在 - DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(model.getShippingCode(), "shippingCode", orderManagementPackBean); MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getByProperty(orderManagementPackBean); if (StringUtils.isEmpty(orderManagement)) { @@ -513,6 +417,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService Map> custInfoSeqMap = detailList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getCustInfoSeq)); List produceSnList = new ArrayList<>(); + List mesWorkOrderList = new ArrayList<>(); for (MesShippingOrderManagementDetail detail : orderManagementDetailList) { //根据扫描的条码查询条码是否存在 packBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -538,13 +443,27 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService ConvertBean.serviceModelUpdate(produceSn, userInfo); produceSnList.add(produceSn); } + //更新工单 + if(!StringUtils.isEmpty(detail.getVisualOrderNo())){ + MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(organizeCode, detail.getVisualOrderNo()); + if(!Objects.isNull(workOrder)){ + workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); + produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(workOrder, userInfo); + mesWorkOrderList.add(workOrder); + } + } } } - + //更新条码 if(!CollectionUtils.isEmpty(produceSnList)){ produceSnRepository.saveAll(produceSnList); } + //更新工单 + if(!CollectionUtils.isEmpty(mesWorkOrderList)){ + mesWorkOrderExtService.saveAll(mesWorkOrderList); + } //更新发运单 ConvertBean.serviceModelUpdate(orderManagement,userInfo); update(orderManagement); @@ -559,6 +478,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService vehiclesOrderDetailRepository.save(vehiclesOrderDetail); } if(StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())){ + //发送数据给辊道线 + sendShippingFinishedCmd(model, organizeCode); //保存当前发运单明细报工 jisShippingRepository.saveAll(getMesJisShippings(orderManagement,userInfo)); }else{ @@ -596,6 +517,39 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } + private void sendShippingFinishedCmd(MesSortShippingCheckModel model, String organizeCode) { + if (!Objects.isNull(model.getMesPartShippingGroup()) && !StringUtil.isEmpty(model.getMesPartShippingGroup().getEquipmentCode())) { + //辊道设备配置 + MesBallTrackRule rule = getMesBallTrackRule(model, organizeCode); + //设备变量 + MesEquipmentVariable mesEquipmentVariable = mesEquipmentExtService.getMesEquipmentVariable(organizeCode, rule.getEquipmentCode(), rule.getEquipVariableId()); + if (Objects.isNull(mesEquipmentVariable)) { + MesPcnException.throwMesBusiException("设备【%s】设备变量ID【%s】信息不存在,请检查", rule.getEquipmentCode(), rule.getEquipVariableId()); + } + //设备通道 + MesEquipmentChannel mesEquipmentChannel = mesEquipmentExtService.getMesEquipmentChannel(organizeCode, rule.getEquipmentCode(), mesEquipmentVariable.getChannel()); + if (Objects.isNull(mesEquipmentChannel)) { + MesPcnException.throwMesBusiException("设备【%s】设备通道【%s】信息不存在,请检查", rule.getEquipmentCode(), mesEquipmentVariable.getChannel()); + } + //写入 + MesEquipVariableRwResult equipVariableRwResult = equipVariableRwExtService.writeVariable(rule.getEquipVariableValue(), mesEquipmentVariable, mesEquipmentChannel.getKepwareFlag()); + if (!equipVariableRwResult.getIsSuccessed()) { + MesPcnException.throwMesBusiException(String.format("设备【%s】:发运成功指令发送失败!原因:%s", mesEquipmentChannel.getEquipmentName(), JSONObject.toJSONString(equipVariableRwResult))); + } + } + } + + private MesBallTrackRule getMesBallTrackRule(MesSortShippingCheckModel model, String organizeCode) { + DdlPackBean bean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(model.getMesPartShippingGroup().getEquipmentCode(), "equipmentCode", bean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.BALL_TRACK_TYPE.BALL_TRACK_TYPE_30.getValue(), "ballTrackType", bean); + MesBallTrackRule rule = mesBallTrackRuleRepository.getByProperty(bean); + if (Objects.isNull(rule) || Objects.isNull(rule.getEquipVariableId())) { + MesPcnException.throwMesBusiException("设备【%s】辊道设备配置信息不存在,请检查", model.getMesPartShippingGroup().getEquipmentCode()); + } + return rule; + } + public List getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,String userName) { DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(mesShippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(mesShippingOrderManagement.getId(), "pid", detailPackBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java index d006b81..0b2eb08 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java @@ -116,6 +116,11 @@ public class MesWorkOrderExtService implements IMesWorkOrderExtService { } @Override + public void saveAll(List mesWorkOrderList) { + workOrderRepository.saveAll(mesWorkOrderList); + } + + @Override public List getWorkOrderListByShiftCode(String organizeCode, String workCenterCode, String shiftCode) { String currentTime = DateUtil.formatDateTime(new Date()); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/IMesShippingScanStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/IMesShippingScanStrategyService.java new file mode 100644 index 0000000..08e1608 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/IMesShippingScanStrategyService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; +import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import io.swagger.annotations.ApiOperation; + +/** + * @Description : 发运扫描 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/25 10:49 + * @Modify: + **/ +public interface IMesShippingScanStrategyService { + + @ApiOperation("扫描条码或目视单") + MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java new file mode 100644 index 0000000..f82580b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java @@ -0,0 +1,262 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.IMesShippingScanStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +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.MesPartShippingGroup; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.repository.MesCustomerPartRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import groovy.util.logging.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * @Description : 扫描条码和目视单 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/25 10:54 + * @Modify: + **/ +@Service +@Slf4j +public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippingScanStrategyService { + @Autowired + private MesShippingOrderManagementRepository shippingOrderManagementRepository; + + @Autowired + private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; + + @Autowired + private MesProduceSnRepository produceSnRepository; + + @Autowired + private IMesProduceSnExtService produceSnExtService; + + @Autowired + private MesCustomerPartRepository mesCustomerPartRepository; + + @Autowired + private IMesConfigService mesConfigService; + + @Autowired + private IMesWorkOrderExtService mesWorkOrderExtService; + + @Override + public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) { + if (!Objects.isNull(model.getLastShippingDetailId())) { + //校验目视单是否已经扫描 + if (model.getDetailList().stream().anyMatch(t -> t.getVisualOrderNo().equals(model.getSn()))) { + throw new ImppBusiException(String.format("【%s】此目视单已经扫描过,请检查数据!", model.getSn())); + } + //更新单据信息 + model.getDetailList().stream().filter(t -> t.getId().equals(model.getLastShippingDetailId())).forEach(detail -> { + detail.setVisualOrderNo(model.getSn()); + updateOrderManagementDetails(orderManagement, detail, getWorkOrder(model, detail.getBarcode()), model.getUserInfo()); + }); + model.setLastShippingDetailId(null); + } else { + //校验条码 + MesProduceSn produceSn = checkSn(model); + boolean scanFlg = false; + for (MesShippingOrderManagementDetail detail : model.getDetailList()) { + if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) { + //校验发运明细 + checkShippingDetails(model, orderManagement, shippingGroup, produceSn, detail); + detail.setBarcode(model.getSn()); + //校验通过的明细ID + model.setLastShippingDetailId(detail.getId()); + scanFlg = true; + break; + } + } + if (!scanFlg) { + throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo())); + } + } + + return model; + } + + + private MesWorkOrder getWorkOrder(MesSortShippingCheckModel model, String barCode) { + MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getSn()); + if (Objects.isNull(workOrder)) { + throw new ImppBusiException(String.format("目视单【%s】信息不存在,请检查数据!", model.getSn())); + } + //校验状态 + if (MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() != workOrder.getWorkOrderStatus() || MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != workOrder.getQcStatus()) { + throw new ImppBusiException(String.format("目视单【%s】工单状态为【%s】质量状态为【%s】,不允许发运!", model.getSn(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getQcStatus()))); + } + //校验条码是否匹配 + if (!Objects.equals(barCode, workOrder.getSn())) { + throw new ImppBusiException(String.format("目视单【%s】条码【%s】与扫描条码【%s】不匹配!", model.getSn(), workOrder.getSn(), barCode)); + } + return workOrder; + } + + private void checkShippingDetails(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup, MesProduceSn produceSn, MesShippingOrderManagementDetail detail) { + //校验发运单明细顺序 + if (!Objects.isNull(shippingGroup) && !StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()) { + Optional first = model.getDetailList().stream().filter(k -> k.getCustInfoSeq().compareTo(detail.getCustInfoSeq()) < 0 && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); + if (first.isPresent()) { + throw new ImppBusiException(String.format("发运单【%s】启用明细顺序防错,序号【%s】前还有未扫描的发运单明细,请检查数据!", orderManagement.getShippingCode(), detail.getCustInfoSeq())); + } + } + //判断是否需要排序校验 默认排序则需要校验 + if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { + //获取明细中最小的 + Optional minPartNo = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode())) + .min(Comparator.comparingLong(MesShippingOrderManagementDetail::getCustInfoSeq)).map(MesShippingOrderManagementDetail::getPartNo); + //若扫描的不是最小顺序 则报错 + if (minPartNo.isPresent() && !minPartNo.get().equals(produceSn.getPartNo())) { + throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误,请检查数据!", model.getSn())); + } + } + //校验客户零件信息是否存在 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(detail.getPartNo(), "erpPartNo", packBean); + DdlPreparedPack.getStringEqualPack(detail.getCustPartNo(), "custPartNo", packBean); + if (!mesCustomerPartRepository.isExitByHql(packBean)) { + throw new ImppBusiException(String.format("零件号【%s】客户零件号【%s】关系不存在,请检查数据!", detail.getPartNo(), detail.getCustPartNo())); + } + } + + private MesProduceSn checkSn(MesSortShippingCheckModel model) { + //校验条码是否重复扫描 + Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); + if (optional.isPresent()) { + throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); + } + MesProduceSn produceSn = getMesProduceSn(model.getOrganizeCode(), model.getSn()); + if (!StringUtils.isEmpty(produceSn)) { + //校验状态 + checkStatus(model, produceSn); + } else { + //外部条码解析 + MesShippingOrderManagementDetail mesShippingOrderManagementDetail = getMesShippingOrderManagementDetail(model); + //封装信息 + produceSn = new MesProduceSn(); + produceSn.setSerialNumber(model.getSn()); + produceSn.setProductSn(model.getSn()); + produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo()); + } + return produceSn; + } + + private MesProduceSn getMesProduceSn(String organizeCode, String productSn) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productSn, "productSn", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + return produceSnRepository.getByProperty(packBean); + } + + private void checkStatus(MesSortShippingCheckModel model, MesProduceSn produceSn) { + //校验产品条码状态 必须是状态为已下线条码 + if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() && produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) { + throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】或【%s】状态的条码", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()), + MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription(), MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getDescription())); + } + //校验产品质量状态 必须是状态为合格条码 + if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) { + throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码", model.getSn(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()), + MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getDescription())); + } + } + + private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model) { + //外部解析条码长度卡控 + String cfgValue = mesConfigService.getCfgValue(model.getOrganizeCode(), MesPcnExtConstWords.MAX_SHIPPING_BARCODE_LENGTH); + if (Integer.parseInt(cfgValue) < model.getSn().length()) + MesPcnException.throwMesBusiException("【%s】此条码长度超过【%s】位,请检查数据!", model.getSn(), cfgValue); + List detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && model.getSn().startsWith(k.getCustPartNo()) && StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).collect(Collectors.toList()); + MesShippingOrderManagementDetail mesShippingOrderManagementDetail = null; + for (MesShippingOrderManagementDetail managementDetail : detailList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(managementDetail.getPartNo(), "erpPartNo", packBean); + DdlPreparedPack.getStringEqualPack(managementDetail.getCustPartNo(), "custPartNo", packBean); + if (mesCustomerPartRepository.isExitByHql(packBean)) { + mesShippingOrderManagementDetail = managementDetail; + break; + } + } + if (Objects.isNull(mesShippingOrderManagementDetail)) { + throw new ImppBusiException(String.format("【%s】此条码未匹配到数据,请检查数据!", model.getSn())); + } + return mesShippingOrderManagementDetail; + } + + private void updateOrderManagementDetails(MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, MesWorkOrder workOrder, String userInfo) { + if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { + detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); + detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + //根据是否启动记忆判断 若启用记忆,则根据保存数据库 + if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { + //若发运单状态为创建或发布 则写入开始扫描时间 + if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() || + orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue())) { + orderManagement.setStartScanTime(TimeTool.getNowTime(true)); + } + + orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); + orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(orderManagement, userInfo); + update(orderManagement); + + detail.setActualQty(1); + detail.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(detail, userInfo); + updateDetail(detail); + MesProduceSn produceSn = getMesProduceSn(orderManagement.getOrganizeCode(), detail.getBarcode()); + //内部条码更新条码状态 + if (!Objects.isNull(produceSn)) { + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); + produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(produceSn, userInfo); + produceSnExtService.update(produceSn); + } + //更新工单状态为发运 + workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); + ConvertBean.serviceModelUpdate(workOrder, userInfo); + mesWorkOrderExtService.update(workOrder); + } + } + } + + + @MonitorLog + public void update(MesShippingOrderManagement item) { + shippingOrderManagementRepository.update(item); + } + + @MonitorLog + public void updateDetail(MesShippingOrderManagementDetail item) { + shippingOrderManagementDetailRepository.update(item); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnStrategyServiceImpl.java new file mode 100644 index 0000000..febefba --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnStrategyServiceImpl.java @@ -0,0 +1,217 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.IMesShippingScanStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +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.MesPartShippingGroup; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.repository.MesCustomerPartRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import groovy.util.logging.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * @Description : 扫描条码 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/25 10:54 + * @Modify: + **/ +@Service +@Slf4j +public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStrategyService { + + @Autowired + private MesShippingOrderManagementRepository shippingOrderManagementRepository; + @Autowired + private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; + @Autowired + private MesProduceSnRepository produceSnRepository; + + @Autowired + private IMesProduceSnExtService produceSnExtService; + + @Autowired + private MesCustomerPartRepository mesCustomerPartRepository; + + @Autowired + private IMesConfigService mesConfigService; + + @Override + public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) { + //校验条码 + MesProduceSn produceSn = checkSn(model); + boolean scanFlg = false; + for (MesShippingOrderManagementDetail detail : model.getDetailList()) { + if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) { + //校验发运明细 + checkShippingDetails(model, orderManagement, shippingGroup, produceSn, detail); + scanFlg = true; + //明细更新 + updateOrderManagementDetails(produceSn, orderManagement, detail, model.getUserInfo()); + break; + } + } + if (!scanFlg) { + throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo())); + } + return model; + } + + private void checkShippingDetails(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup, MesProduceSn produceSn, MesShippingOrderManagementDetail detail) { + //校验发运单明细顺序 + if (!Objects.isNull(shippingGroup) && !StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()) { + Optional first = model.getDetailList().stream().filter(k -> k.getCustInfoSeq().compareTo(detail.getCustInfoSeq()) < 0 && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); + if (first.isPresent()) { + throw new ImppBusiException(String.format("发运单【%s】启用明细顺序防错,序号【%s】前还有未扫描的发运单明细,请检查数据!", orderManagement.getShippingCode(), detail.getCustInfoSeq())); + } + } + //判断是否需要排序校验 默认排序则需要校验 + if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { + //获取明细中最小的 + Optional minPartNo = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode())) + .min(Comparator.comparingLong(MesShippingOrderManagementDetail::getCustInfoSeq)).map(MesShippingOrderManagementDetail::getPartNo); + //若扫描的不是最小顺序 则报错 + if (minPartNo.isPresent() && !minPartNo.get().equals(produceSn.getPartNo())) { + throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误,请检查数据!", model.getSn())); + } + } + //校验客户零件信息是否存在 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(detail.getPartNo(), "erpPartNo", packBean); + DdlPreparedPack.getStringEqualPack(detail.getCustPartNo(), "custPartNo", packBean); + if (!mesCustomerPartRepository.isExitByHql(packBean)) { + throw new ImppBusiException(String.format("零件号【%s】客户零件号【%s】关系不存在,请检查数据!", detail.getPartNo(), detail.getCustPartNo())); + } + } + + private MesProduceSn checkSn(MesSortShippingCheckModel model) { + //校验条码是否重复扫描 + Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); + if (optional.isPresent()) { + throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); + if (!StringUtils.isEmpty(produceSn)) { + //校验状态 + checkStatus(model, produceSn); + } else { + //外部条码解析 + MesShippingOrderManagementDetail mesShippingOrderManagementDetail = getMesShippingOrderManagementDetail(model); + //封装信息 + produceSn = new MesProduceSn(); + produceSn.setSerialNumber(model.getSn()); + produceSn.setProductSn(model.getSn()); + produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo()); + } + return produceSn; + } + + private void checkStatus(MesSortShippingCheckModel model, MesProduceSn produceSn) { + //校验产品条码状态 必须是状态为已下线条码 + if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() && produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) { + throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】或【%s】状态的条码", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()), + MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription(), MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getDescription())); + } + //校验产品质量状态 必须是状态为合格条码 + if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) { + throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码", model.getSn(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()), + MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getDescription())); + } + } + + private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model) { + //外部解析条码长度卡控 + String cfgValue = mesConfigService.getCfgValue(model.getOrganizeCode(), MesPcnExtConstWords.MAX_SHIPPING_BARCODE_LENGTH); + if (Integer.parseInt(cfgValue) < model.getSn().length()) + MesPcnException.throwMesBusiException("【%s】此条码长度超过【%s】位,请检查数据!", model.getSn(), cfgValue); + List detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && model.getSn().startsWith(k.getCustPartNo()) && StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).collect(Collectors.toList()); + MesShippingOrderManagementDetail mesShippingOrderManagementDetail = null; + for (MesShippingOrderManagementDetail managementDetail : detailList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(managementDetail.getPartNo(), "erpPartNo", packBean); + DdlPreparedPack.getStringEqualPack(managementDetail.getCustPartNo(), "custPartNo", packBean); + if (mesCustomerPartRepository.isExitByHql(packBean)) { + mesShippingOrderManagementDetail = managementDetail; + break; + } + } + if (Objects.isNull(mesShippingOrderManagementDetail)) { + throw new ImppBusiException(String.format("【%s】此条码未匹配到数据,请检查数据!", model.getSn())); + } + return mesShippingOrderManagementDetail; + } + + private void updateOrderManagementDetails(MesProduceSn produceSn, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, String userInfo) { + if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { + detail.setBarcode(produceSn.getProductSn()); + detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); + detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + detail.setRemark("扫描完成"); + //根据是否启动记忆判断 若启用记忆,则根据保存数据库 + if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { + + //若发运单状态为创建或发布 则写入开始扫描时间 + if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() || + orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue())) { + orderManagement.setStartScanTime(TimeTool.getNowTime(true)); + } + + orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); + orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(orderManagement, userInfo); + update(orderManagement); + + detail.setActualQty(1); + detail.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(detail, userInfo); + updateDetail(detail); + //内部条码更新条码状态 + if (!Objects.isNull(produceSn.getId())) { + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); + produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(produceSn, userInfo); + produceSnExtService.update(produceSn); + } + } + } + } + + @MonitorLog + public void update(MesShippingOrderManagement item) { + shippingOrderManagementRepository.update(item); + } + + @MonitorLog + public void updateDetail(MesShippingOrderManagementDetail item) { + shippingOrderManagementDetailRepository.update(item); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java index 14db736..8fe0cbd 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java @@ -1,10 +1,13 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.model; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import io.swagger.annotations.ApiParam; import lombok.Data; import java.util.List; +import java.util.Objects; /** * @Description : @@ -42,5 +45,15 @@ public class MesSortShippingCheckModel { @ApiParam("发运组明细数据") private List detailList; + @ApiParam("发运组") + private MesPartShippingGroup mesPartShippingGroup; + + @ApiParam("最后扫描的发运单明细ID") + private Long lastShippingDetailId; + + public void setDetailList(List detailList) { + this.detailList = detailList; + this.isScanCount = (int) detailList.stream().filter(k -> Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).count(); + } } From 3218721983af9be30a78ec5e2fc45c41f9a80813 Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 25 Sep 2024 16:39:51 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=8F=91=E8=BF=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesSortShippingCheckService.java | 16 ++++++++-------- ...sShippingScanSnAndOrderStrategyServiceImpl.java | 22 +++++++++++++--------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java index 37c7d08..5ee9b3a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java @@ -109,11 +109,11 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //发运单号 model.setShippingCode(orderManagement.getShippingCode()); //零件发运组 - model.setMesPartShippingGroup(getMesPartShippingGroup(shippingOrderManagement.getOrganizeCode(),shippingOrderManagement.getShippingGroupCode())); + model.setMesPartShippingGroup(getMesPartShippingGroup(orderManagement.getOrganizeCode(),orderManagement.getShippingGroupCode())); //发运单明细 - model.setDetailList(getMesShippingOrderManagementDetails(shippingOrderManagement, orderManagement)); + model.setDetailList(getMesShippingOrderManagementDetails(orderManagement)); //最近扫描完成的发运单号 - MesShippingOrderManagement lastShippingOrder = getLastShippingOrder(shippingOrderManagement); + MesShippingOrderManagement lastShippingOrder = getLastShippingOrder(orderManagement.getOrganizeCode()); if (!Objects.isNull(lastShippingOrder)) { model.setRecentlyScanShippingCode(lastShippingOrder.getShippingCode()); } @@ -281,14 +281,14 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } } - private List getMesShippingOrderManagementDetails(MesShippingOrderManagement shippingOrderManagement, MesShippingOrderManagement orderManagement) { - DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); + private List getMesShippingOrderManagementDetails(MesShippingOrderManagement orderManagement) { + DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "pid", orderDetailPackBean); DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),"status",orderDetailPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"custInfoSeq"}, orderDetailPackBean); List detailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderDetailPackBean); if(CollectionUtils.isEmpty(detailList)){ - throw new ImppBusiException(String.format("发运单【%s】明细信息不存在,请检查数据!", shippingOrderManagement.getShippingCode())); + throw new ImppBusiException(String.format("发运单【%s】明细信息不存在,请检查数据!", orderManagement.getShippingCode())); } //已扫描数据 detailList.forEach(k -> { @@ -299,8 +299,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService return detailList; } - private MesShippingOrderManagement getLastShippingOrder(MesShippingOrderManagement shippingOrderManagement) { - DdlPackBean recentlyOrderPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); + private MesShippingOrderManagement getLastShippingOrder(String organizeCode) { + DdlPackBean recentlyOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), "status", recentlyOrderPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"modifyDatetime"}, recentlyOrderPackBean); return shippingOrderManagementRepository.getByProperty(recentlyOrderPackBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java index f82580b..e59d6b9 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java @@ -71,13 +71,13 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) { if (!Objects.isNull(model.getLastShippingDetailId())) { //校验目视单是否已经扫描 - if (model.getDetailList().stream().anyMatch(t -> t.getVisualOrderNo().equals(model.getSn()))) { + if (model.getDetailList().stream().anyMatch(t -> !StringUtils.isEmpty(t.getVisualOrderNo()) && t.getVisualOrderNo().equals(model.getSn()))) { throw new ImppBusiException(String.format("【%s】此目视单已经扫描过,请检查数据!", model.getSn())); } //更新单据信息 model.getDetailList().stream().filter(t -> t.getId().equals(model.getLastShippingDetailId())).forEach(detail -> { detail.setVisualOrderNo(model.getSn()); - updateOrderManagementDetails(orderManagement, detail, getWorkOrder(model, detail.getBarcode()), model.getUserInfo()); + updateOrderManagementDetails(orderManagement, detail, getWorkOrder(model, detail), model.getUserInfo()); }); model.setLastShippingDetailId(null); } else { @@ -104,18 +104,22 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin } - private MesWorkOrder getWorkOrder(MesSortShippingCheckModel model, String barCode) { + private MesWorkOrder getWorkOrder(MesSortShippingCheckModel model, MesShippingOrderManagementDetail detail) { MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getSn()); if (Objects.isNull(workOrder)) { - throw new ImppBusiException(String.format("目视单【%s】信息不存在,请检查数据!", model.getSn())); + throw new ImppBusiException(String.format("目视单【%s】不存在,请检查数据!", model.getSn())); } - //校验状态 + //校验目视单状态 if (MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() != workOrder.getWorkOrderStatus() || MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != workOrder.getQcStatus()) { - throw new ImppBusiException(String.format("目视单【%s】工单状态为【%s】质量状态为【%s】,不允许发运!", model.getSn(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getQcStatus()))); + throw new ImppBusiException(String.format("目视单【%s】状态为【%s】质量状态为【%s】,不允许发运!", model.getSn(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(workOrder.getQcStatus()))); } //校验条码是否匹配 - if (!Objects.equals(barCode, workOrder.getSn())) { - throw new ImppBusiException(String.format("目视单【%s】条码【%s】与扫描条码【%s】不匹配!", model.getSn(), workOrder.getSn(), barCode)); + if (!Objects.equals(detail.getBarcode(), workOrder.getSn())) { + throw new ImppBusiException(String.format("目视单【%s】条码【%s】与扫描条码【%s】,不匹配!", model.getSn(), workOrder.getSn(), detail.getBarcode())); + } + //校验零件是否匹配 + if (!Objects.equals(detail.getPartNo(), workOrder.getPartNo())) { + throw new ImppBusiException(String.format("目视单【%s】零件【%s】与发运单零件【%s】,不匹配!", model.getSn(), workOrder.getPartNo(), detail.getPartNo())); } return workOrder; } @@ -171,7 +175,7 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin private MesProduceSn getMesProduceSn(String organizeCode, String productSn) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(productSn, "productSn", packBean); + DdlPreparedPack.getStringEqualPack(productSn, "custSn", packBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); return produceSnRepository.getByProperty(packBean); } From 78f398a7fb8189ab6193f771703068c80e2b9ee3 Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 25 Sep 2024 16:47:57 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=8F=91=E8=BF=90?= =?UTF-8?q?=E6=BC=94=E7=A4=BA=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java index e59d6b9..e5de1c4 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java @@ -219,6 +219,7 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + detail.setRemark("扫描完成"); //根据是否启动记忆判断 若启用记忆,则根据保存数据库 if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { //若发运单状态为创建或发布 则写入开始扫描时间 From 5fb9601736affc9c2b727db88f3eea829939a5b2 Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 25 Sep 2024 18:17:45 +0800 Subject: [PATCH 06/13] =?UTF-8?q?JIS=E7=89=A9=E6=96=99=E6=8B=89=E5=8A=A8?= =?UTF-8?q?=E6=BC=94=E7=A4=BA=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesPullingOrderInfoService.java | 33 ++++++++++++++++------ 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java index 1b8e7b2..d3bd874 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPullingOrderInfoService; @@ -51,6 +52,8 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { @Autowired private IMesProduceSnExtService mesProduceSnExtService; + @Autowired + private IMesConfigService configService; @Override public ListPager queryMesPullingOrderInfoByPager(MesPullingOrderInfo bean, Pager pager) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); @@ -106,28 +109,42 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { MesPcnException.throwMesBusiException("扫描拉动单号【%s】拉动单状态不是【已确认】", bean.getPullingOrderNo()); } - //强过码 如果强过为true 不校验顺序 直接扫描完成修改状态为已扫描 todo - if ((!Objects.isNull(bean.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == bean.getIsPass())) { + //强过码 如果强过为true 不校验顺序 直接扫描完成修改状态为已扫描 + //扫完单号 扫强过码校验通过后 单号顺序之前的单子变成无序 都可扫描 + String spsPass = configService.getCfgValue(bean.getOrganizeCode(), MesPcnExtConstWords.SPS_STRONGER_PASS); + if (mesPullingOrderInfo.getIsPassCode()==CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() + ||(!Objects.isNull(bean.getIsPass()) && spsPass.equals(bean.getIsPass()))) { mesPullingOrderInfo.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.JIS_PULL.getValue()); ConvertBean.serviceModelUpdate(mesPullingOrderInfo, userName); mesPullingOrderInfoRepository.update(mesPullingOrderInfo); + //修改当前单号之前的为可强过 + DdlPackBean packBeanPass= DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBeanPass); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue(), "pullOrderStatus", packBeanOne); + DdlPreparedPack.getStringSmallerNotEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBeanPass); + DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBeanPass); + List mesPullingOrderInfos = mesPullingOrderInfoRepository.findByHqlWhere(packBeanPass); + if (!CollectionUtils.isEmpty(mesPullingOrderInfos)){ + for (MesPullingOrderInfo pullingOrderInfo : mesPullingOrderInfos) { + pullingOrderInfo.setIsPassCode(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + ConvertBean.serviceModelUpdate(pullingOrderInfo, userName); + } + mesPullingOrderInfoRepository.saveAll(mesPullingOrderInfos); + } } else { DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getNumEqualPack(bean.getPullOrderType(), "pullOrderType", packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue(), "pullOrderStatus", packBean); -// if (!StringUtil.isEmpty(bean.orderBy())) { -// packBean.setOrderByStr(bean.orderBy()); -// } else { + //顺序校验 根据未扫描单号 1 、2 、3,如果没有强过码 必须先扫1 再扫2 pullingOrderNo修改位workOrderNo - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"workOrderNo"}, packBean); -// } + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"pullingOrderNo"}, packBean); List pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlWhere(packBean); if (!CollectionUtils.isEmpty(pullingOrderInfos)) { //按照排序 依次扫描,如果扫描不按照顺序 报错 MesPullingOrderInfo pullingOrderInfo = pullingOrderInfos.get(0); - if (pullingOrderInfo.getPullOrderStatus().equals(mesPullingOrderInfo.getPullOrderStatus())) { + if (pullingOrderInfo.getPullingOrderNo().equals(mesPullingOrderInfo.getPullingOrderNo())) { mesPullingOrderInfo.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.JIS_PULL.getValue()); ConvertBean.serviceModelUpdate(mesPullingOrderInfo, userName); mesPullingOrderInfoRepository.update(mesPullingOrderInfo); From a25a8b92e0746648936fd71c4d157184f8e7fbb6 Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 25 Sep 2024 18:22:34 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E8=BF=94=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesReworkTaskServiceImpl.java | 17 +++++++++++++++-- .../serviceimpl/busi/MesPullingOrderInfoService.java | 4 ++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java index a82f7af..2c3ca4e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java @@ -23,6 +23,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; @@ -133,12 +134,19 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { @Autowired private MesQmsScrapRepository mesQmsScrapRepository; + @Autowired + private IMesWorkOrderExtService workOrderExtService; @Override public ListPager queryReworkTask(MesReworkTask mesReworkTask, Pager pager) { String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode(); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); if (mesReworkTask.getSn() != null) { - DdlPreparedPack.getStringEqualPack(mesReworkTask.getSn(), "sn", packBean); + MesProduceSn produceSn = (MesProduceSn) workOrderExtService.getWorkOrderSort(organizeCode, mesReworkTask.getSn(), false); + if(!StringUtil.isEmpty(produceSn)){ + DdlPreparedPack.getStringEqualPack(produceSn.getProductSn(), "sn", packBean); + }else { + DdlPreparedPack.getStringEqualPack(mesReworkTask.getSn(), "sn", packBean); + } } DdlPreparedPack.getStringEqualPack(mesReworkTask.getReworkOrder(), "reworkOrder", packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.CREATE.getValue(), "status", packBean); @@ -824,7 +832,12 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { private MesReworkTask getMesReworkTask(MesReworkTaskRequestModel requestModel) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); if (!StringUtils.isEmpty(requestModel.getSn())) { - DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "sn", packBean); + MesProduceSn produceSn = (MesProduceSn) workOrderExtService.getWorkOrderSort(requestModel.getOrganizeCode(), requestModel.getSn(), false); + if(!StringUtil.isEmpty(produceSn)){ + DdlPreparedPack.getStringEqualPack(produceSn.getProductSn(), "sn", packBean); + }else { + DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "sn", packBean); + } } if (!StringUtils.isEmpty(requestModel.getReworkOrder())) { DdlPreparedPack.getStringEqualPack(requestModel.getReworkOrder(), "reworkOrder", packBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java index d3bd874..3528b0a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java @@ -111,9 +111,9 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { //强过码 如果强过为true 不校验顺序 直接扫描完成修改状态为已扫描 //扫完单号 扫强过码校验通过后 单号顺序之前的单子变成无序 都可扫描 - String spsPass = configService.getCfgValue(bean.getOrganizeCode(), MesPcnExtConstWords.SPS_STRONGER_PASS); +// String spsPass = configService.getCfgValue(bean.getOrganizeCode(), MesPcnExtConstWords.SPS_STRONGER_PASS); if (mesPullingOrderInfo.getIsPassCode()==CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() - ||(!Objects.isNull(bean.getIsPass()) && spsPass.equals(bean.getIsPass()))) { + ||(!Objects.isNull(bean.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()==bean.getIsPass())) { mesPullingOrderInfo.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.JIS_PULL.getValue()); ConvertBean.serviceModelUpdate(mesPullingOrderInfo, userName); mesPullingOrderInfoRepository.update(mesPullingOrderInfo); From 413f68de13e5b6c26010f0ec77808134461f7d12 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 25 Sep 2024 19:42:50 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=20=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/IMesProdOrgExtService.java | 3 + .../serviceimpl/base/MesProdOrgExtService.java | 15 +- .../step/MesAssemblySaveSortStepService.java | 171 +++++++++++++++++++++ .../step/MesAssemblyShowSortStepService.java | 13 +- .../step/MesCustomDialogStepService.java | 2 +- .../step/MesProductSnGenerateStepService.java | 2 +- .../step/MesProductSnSaveStepService.java | 25 ++- .../MesProductionDataSaveNosortStepService.java | 46 ------ .../step/MesProductionDataSaveSortStepService.java | 46 ------ .../step/MesProductionDataSaveStepService.java | 30 +++- .../MesProductionRecordGenerateStepService.java | 28 ++-- .../step/MesWorkOrderCheckSortStepService.java | 16 +- .../step/MesWorkOrderQueueSaveStepService.java | 76 +++++++++ .../MesProductionProcessContextStepService.java | 2 +- .../pojo/context/MesProductionPsOutContext.java | 7 +- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 2 + 16 files changed, 356 insertions(+), 128 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveNosortStepService.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveSortStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueSaveStepService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java index 2bd6ea7..e5b08f3 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java @@ -18,6 +18,9 @@ public interface IMesProdOrgExtService { @ApiOperation(value = "根据生产线代码,工位代码查询工位信息") MesWorkCell getWorkCellDb(String organizeCode, String workCenterCode, String workCellCode); + @ApiOperation(value = "根据生产线代码,工位代码查询工位信息") + MesWorkCell getWorkCellDb(String organizeCode, String workCenterCode, String workCellCode, Boolean isCheckEndWorkCell); + @ApiOperation(value = "根据生产线代码查询工位信息") List getWorkCellList(String organizeCode, String workCenterCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java index ab9605d..77b33e0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java @@ -17,10 +17,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.TreeSet; +import java.util.*; import java.util.stream.Collectors; @Slf4j @@ -59,6 +56,16 @@ public class MesProdOrgExtService implements IMesProdOrgExtService { } @Override + public MesWorkCell getWorkCellDb(String organizeCode, String workCenterCode, String workCellCode, Boolean isCheckEndWorkCell) { + if (!isCheckEndWorkCell) return getWorkCellDb(organizeCode, workCenterCode, workCellCode); + List workCellList = getWorkCellList(organizeCode, workCenterCode); + Optional optional = CollectionUtils.isEmpty(workCellList) ? null : workCellList.stream().filter(o -> (null != o && o.getWorkCellCode().equals(workCellCode))).findFirst(); + if (null == optional || !optional.isPresent()) return null; + if (workCellList.size() == 1) optional.get().setIsEndWorkCell(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + return optional.get(); + } + + @Override public List getWorkCellList(String organizeCode, String workCenterCode) { if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode)) return null; List workCellList = workCellRepository.findByProperty( diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java new file mode 100644 index 0000000..67c3596 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java @@ -0,0 +1,171 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +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.api.busi.IMesProductionProcessContextStepService; +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.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique; +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.MesProductionAssemblyRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyUniqueRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +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.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * @Description : 保存装配记录工步 【排序】 + * @Author : wangjie + **/ +@Slf4j +@Service("mesAssemblySaveSortStepService") +public class MesAssemblySaveSortStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; + + @Autowired + private MesProductionAssemblyRepository productionAssemblyRepository; + + @Autowired + private MesProductionAssemblyUniqueRepository productionAssemblyUniqueRepository; + + @Autowired + private IMesProduceSnExtService produceSnExtService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文产品加工规则数据信息集合 + List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); + + if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!"); + + //获取上下文产出条码数据信息集合 + List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + + if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!"); + + //从上下文中取出工位当前要使用的设备 + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + + Map ppMap = CollectionUtils.isEmpty(productionPsOutContextList) ? null : productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPsOutContext::getForeignKey, o -> o)); + + List productSnId = new ArrayList<>(); + + //保存装配记录 + prodRuleContextList.stream().filter(o -> null != o).forEach(o -> saveProductionAssemblyData(reqBean, resultBean, stepResult, productSnId, productionProcessContext, o, ppMap, cellEquipContext)); + + if (!CollectionUtils.isEmpty(productSnId)) produceSnExtService.saveProduceSnList(reqBean, MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY.getValue(), productSnId); + + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存装配记录成功!"); + + } + + private void saveProductionAssemblyData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List productSnId, + MesProductionProcessContext productionProcessContext, MesProdRuleContext prodRuleContext, Map ppMap, MesCellEquipContext cellEquipContext) { + + if (StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) return; + + List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); + + MesProductionPsOutContext productionPsOutContext = CollectionUtils.isEmpty(ppMap) ? null : ppMap.get(prodRuleContext.getForeignKey()); + + for (MesProductionAssemblyNosortContext productionAssemblyNosortContext : productionAssemblyNosortContextList) { + + if (null == productionAssemblyNosortContext) continue; + + MesProductionAssembly productionAssembly = new MesProductionAssembly(); + BeanUtils.copyProperties(productionAssemblyNosortContext, productionAssembly); + + productionAssembly.setDataSource(MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.NOSORT.getValue()); + productionAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + + productionAssembly.setAreaCode(reqBean.getWorkCenterCode()); + productionAssembly.setWorkCenterCode(reqBean.getWorkCenterCode()); + productionAssembly.setWorkCellCode(reqBean.getWorkCellCode()); + productionAssembly.setProcessCode(reqBean.getProcessCode()); + + productionAssembly.setProcessName(productionProcessContext.getProcessName()); + productionAssembly.setCraftCode(productionProcessContext.getCraftCode()); + productionAssembly.setCraftName(productionProcessContext.getCraftName()); + + productionAssembly.setEquipmentCode(cellEquipContext.getEquipmentCode()); + + productionAssembly.setProductionRecordId(prodRuleContext.getProductionRecordId()); + productionAssembly.setMouldNo(prodRuleContext.getMouldNo()); + + if (null != productionPsOutContext) { + productionAssembly.setPartNo(productionPsOutContext.getPartNo()); + productionAssembly.setPartName(productionPsOutContext.getPartName()); + productionAssembly.setSerialNumber(productionPsOutContext.getSerialNumber()); + productionAssembly.setProductSn(productionPsOutContext.getProductSn()); + productionAssembly.setCustSn(productionPsOutContext.getCustSn()); + } + + MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); + if (null != scanMonitorContext) productionAssembly.setMouldRecordId(scanMonitorContext.getMouldRecordId()); + + productionAssembly.setOrganizeCode(reqBean.getOrganizeCode()); + ConvertBean.serviceModelInitialize(productionAssembly, reqBean.getUserInfo()); + + productionAssembly.setFid(UUID.randomUUID().toString()); + + productionAssembly = productionAssemblyRepository.insert(productionAssembly); + + if (productionAssemblyNosortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue()) == 0) saveProductionAssemblyUnique(productionAssembly); + + if (!StringUtils.isEmpty(productionAssemblyNosortContext.getProductSnId())) productSnId.add(productionAssemblyNosortContext.getProductSnId()); + + if (productionAssemblyNosortContext.getIsRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionAssemblyNosortContext.getIsRepeat2Cache().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) + productionCustomContextStepService.dispatchRepeatAssemblySn(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionAssemblyNosortContext); + + } + + } + + private void saveProductionAssemblyUnique(MesProductionAssembly productionAssembly) { + MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique(); + BeanUtils.copyProperties(productionAssembly, productionAssemblyUnique, MesPcnExtConstWords.ID); + productionAssemblyUnique.setPid(productionAssembly.getId()); + productionAssemblyUniqueRepository.insert(productionAssemblyUnique); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java index c394c54..4c32135 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java @@ -77,12 +77,15 @@ public class MesAssemblyShowSortStepService extends BaseStepService { //获取上下文进料零件条码信息集合 List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); + //获取上下文产出零件条码信息集合 + List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + //根据现有数据【产出零件数据】【进料零件条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询 if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>(); Integer initSize = prodRuleContextList.size(); //封装排序加工规则 - doHandleProdRuleData(reqBean, resultBean, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); + doHandleProdRuleData(reqBean, resultBean, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList, productionPsOutContextList); if (prodRuleContextList.size() != initSize) { //保存上下文产品加工规则信息集合 @@ -91,6 +94,8 @@ public class MesAssemblyShowSortStepService extends BaseStepService { if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList); //保存进料主条码数据 if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList); + //保存进料主条码数据 + if (!CollectionUtils.isEmpty(productionPsOutContextList)) productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList); } //显示装配件信息 @@ -129,7 +134,8 @@ public class MesAssemblyShowSortStepService extends BaseStepService { //查询排序线加工规则装配件数据信息 private void doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, - List prodRuleContextList, List productionPartContextList, List productionPsInContextList) { + List prodRuleContextList, List productionPartContextList, + List productionPsInContextList, List productionPsOutContextList) { //上下文中不存在进料主条码数据信息 if (CollectionUtils.isEmpty(productionPsInContextList) || CollectionUtils.isEmpty(productionPartContextList)) @@ -146,6 +152,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService { //【排序线】获取产品加工规则(条码对应的装配件绑定记录,目前条码等同工单) productionPartContextList.stream().filter(o -> (null != o && o.getWorkOrderNo().equals(productionPsInContext.getWorkOrderNo()))).findFirst().get().foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey()); + productionPsOutContextList.stream().filter(o -> (null != o && o.getWorkOrderNo().equals(productionPsInContext.getWorkOrderNo()))).findFirst().get().foreignKey(productionPsInContext.getForeignKey()); prodRuleContextList.add(getProdRuleSortContext(reqBean, productionProcessContext, cellEquipContext, productionPsInContext)); @@ -200,8 +207,6 @@ public class MesAssemblyShowSortStepService extends BaseStepService { return assemblyShowContextList; } - - //封装装配件信息 private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o) { MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java index 3598424..72ca786 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java @@ -80,7 +80,7 @@ public class MesCustomDialogStepService extends BaseStepService { if (!scdBean.getIsAsyn()) stepSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "弹框会话开启!"); //弹框业务异步处理 - return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "弹框会话开启!"); + return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "弹框会话异步开启!"); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java index e76546c..4577e26 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java @@ -147,7 +147,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { //产出零件数据信息 MesProductionPartContext productionPartContext = !CollectionUtils.isEmpty(ppMap) ? ppMap.get(prodRuleContext.getForeignKey()) : null; - //料零件条码 + //进料零件条码 MesProductionPsInContext productionPsInContext = !CollectionUtils.isEmpty(psMap) ? psMap.get(prodRuleContext.getForeignKey()) : null; //零件信息 MesPart part = partMap.get(prodRuleContext.getOutPartNo()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java index 3f3da92..c80c4b0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java @@ -10,9 +10,12 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StringUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +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; @@ -89,7 +92,10 @@ public class MesProductSnSaveStepService extends BaseStepService { String productResult = productionDispatchContextStepService.getProductResultContext(reqBean); Map partMap = (Map) stepResult.getObj(); - productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> o.copy(saveProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, o, partMap, prodShiftContext, productResult))); + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + MesWorkCell workCell = productionProcessContext.getWorkCell(); + + productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> o.copy(saveProduceSnData(reqBean, resultBean, productionProcessContext, o, partMap, prodShiftContext, productResult, workCenter, workCell))); //保存上下文产出条码数据信息集合 productionDispatchContextStepService.dispatchProductionPsOutContext(reqBean, productionPsOutContextList); @@ -98,7 +104,8 @@ public class MesProductSnSaveStepService extends BaseStepService { } - private MesProduceSn saveProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, Map partMap, MesProdShiftContext prodShiftContext, String productResult) { + private MesProduceSn saveProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, + Map partMap, MesProdShiftContext prodShiftContext, String productResult, MesWorkCenter workCenter, MesWorkCell workCell) { //根据零件条码ID查询零件条码信息 MesProduceSn produceSn = produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsOutContext.getId()); @@ -115,10 +122,7 @@ public class MesProductSnSaveStepService extends BaseStepService { produceSn.setRouteCode(reqBean.getRouteCode()); produceSn.setProcessCode(reqBean.getProcessCode()); produceSn.setCraftCode(productionProcessContext.getCraftCode()); - //TODO 获取下个工艺代码 - //produceSn.setNextCraftCode(); - produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); produceSn.setQcStatus(!StringUtils.isEmpty(productResult) ? Integer.valueOf(productResult) : MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); produceSn.setShiftCode(prodShiftContext.getShiftCode()); @@ -129,8 +133,17 @@ public class MesProductSnSaveStepService extends BaseStepService { produceSn.setCustLabelTemplate(part.getCustLabelTemplate()); ConvertBean.serviceModelUpdate(produceSn, reqBean.getUserInfo()); - produceSn.setOutWorkCenterTime(produceSn.getModifyDatetime()); produceSn.setLotNo(produceSn.getModifyDatetime().substring(0, 10)); + if (StringUtils.isEmpty(produceSn.getInWorkCenterTime())) produceSn.setInWorkCenterTime(produceSn.getModifyDatetime()); + + //非排序 或者 排序的末道工位 + if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0 || + (!StringUtils.isEmpty(workCell.getIsEndWorkCell()) && workCell.getIsEndWorkCell().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)) { + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); + produceSn.setOutWorkCenterTime(produceSn.getModifyDatetime()); + } else { + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.PROCESSING.getValue()); + } produceSnExtService.update(produceSn); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveNosortStepService.java deleted file mode 100644 index ad8c4b4..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveNosortStepService.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -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.impp.framework.boot.util.SpringContextsUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @Description : 保存加工结果工步 【非排序】 - * @Author : wangjie - **/ -@Slf4j -@Service("mesProductionDataSaveNosortStepService") -public class MesProductionDataSaveNosortStepService extends BaseStepService { - - @Override - public StepResult execute(StationRequestBean reqBean) { - - //保存开模记录工步 - ((IStepService) SpringContextsUtil.getBean("mesMouldRecordGenerateStepService")).executeInState(reqBean); - - //保存零件条码信息工步 - ((IStepService) SpringContextsUtil.getBean("mesProductSnSaveStepService")).executeInState(reqBean); - - //加工异常处理工步 - ((IStepService) SpringContextsUtil.getBean("mesProductResultErrorHandleStepService")).executeInState(reqBean); - - //生成加工记录工步 - ((IStepService) SpringContextsUtil.getBean("mesProductionRecordGenerateStepService")).executeInState(reqBean); - - //保存装配记录工步 - ((IStepService) SpringContextsUtil.getBean("mesAssemblySaveStepService")).executeInState(reqBean); - - //保存工单信息工步 - ((IStepService) SpringContextsUtil.getBean("mesWorkOrderSaveStepService")).executeInState(reqBean); - - return stepSuccessCompleteAndSendMsgReturn(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "保存加工结果成功!"); - - } - -} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveSortStepService.java deleted file mode 100644 index 5f3c27e..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveSortStepService.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -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.impp.framework.boot.util.SpringContextsUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @Description : 保存加工结果工步 【排序】 - * @Author : wangjie - **/ -@Slf4j -@Service("mesProductionDataSaveSortStepService") -public class MesProductionDataSaveSortStepService extends BaseStepService { - - @Override - public StepResult execute(StationRequestBean reqBean) { - - //保存开模记录工步 - ((IStepService) SpringContextsUtil.getBean("mesMouldRecordGenerateStepService")).executeInState(reqBean); - - //保存零件条码信息工步 - ((IStepService) SpringContextsUtil.getBean("mesProductSnSaveStepService")).executeInState(reqBean); - - //加工异常处理工步 - ((IStepService) SpringContextsUtil.getBean("mesProductResultErrorHandleStepService")).executeInState(reqBean); - - //生成加工记录工步 - ((IStepService) SpringContextsUtil.getBean("mesProductionRecordGenerateStepService")).executeInState(reqBean); - - //保存装配记录工步 - ((IStepService) SpringContextsUtil.getBean("mesAssemblySaveStepService")).executeInState(reqBean); - - //保存工单信息工步 - ((IStepService) SpringContextsUtil.getBean("mesWorkOrderSaveStepService")).executeInState(reqBean); - - return stepSuccessCompleteAndSendMsgReturn(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "保存加工结果成功!"); - - } - -} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveStepService.java index da1df1f..e3ef36c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveStepService.java @@ -3,7 +3,9 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; 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.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; @@ -25,11 +27,31 @@ public class MesProductionDataSaveStepService extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { - //排序线 保存加工结果工步 - if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == productionProcessContextStepService.getCenterType(reqBean)) return ((IStepService) SpringContextsUtil.getBean("mesProductionDataSaveSortStepService")).executeInState(reqBean); + //是否排序线 + Boolean isSort = MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == productionProcessContextStepService.getCenterType(reqBean) ? true : false; - //非排序线 保存加工结果工步 - return ((IStepService) SpringContextsUtil.getBean("mesProductionDataSaveNosortStepService")).executeInState(reqBean); + //保存开模记录工步 + ((IStepService) SpringContextsUtil.getBean("mesMouldRecordGenerateStepService")).executeInState(reqBean); + + //保存零件条码信息工步 + ((IStepService) SpringContextsUtil.getBean("mesProductSnSaveStepService")).executeInState(reqBean); + + //保存工位队列信息工步 + if (isSort) ((IStepService) SpringContextsUtil.getBean("mesWorkOrderQueueSaveStepService")).executeInState(reqBean); + + //加工异常处理工步 + ((IStepService) SpringContextsUtil.getBean("mesProductResultErrorHandleStepService")).executeInState(reqBean); + + //生成加工记录工步 + ((IStepService) SpringContextsUtil.getBean("mesProductionRecordGenerateStepService")).executeInState(reqBean); + + //保存装配记录工步 + ((IStepService) SpringContextsUtil.getBean("mesAssemblySaveStepService")).executeInState(reqBean); + + //保存工单信息工步 + ((IStepService) SpringContextsUtil.getBean("mesWorkOrderSaveStepService")).executeInState(reqBean); + + return stepSuccessCompleteAndSendMsgReturn(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "保存加工结果成功!"); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java index 3fb0141..9696c16 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java @@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +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; @@ -67,8 +68,6 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); - MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); - //配置错误 抛出异常 if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); @@ -98,14 +97,17 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { Map prMap = CollectionUtils.isEmpty(prodRuleContextList) ? null : prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o)); + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + MesWorkCell workCell = productionProcessContext.getWorkCell(); + //生成加工记录 String mouldNo = null != equipVariableCollectContext ? equipVariableCollectContext.getEquipVariableValue() : null; - productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> saveProductionRecordData(reqBean, mouldNo, prodRuleContextList, productionProcessContext, o, prMap, cellEquipContext, CollectionUtils.isEmpty(psiMap) ? null : psiMap.get(o.getForeignKey()))); + productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> saveProductionRecordData(reqBean, workCenter, mouldNo, prodRuleContextList, productionProcessContext, o, prMap, cellEquipContext, CollectionUtils.isEmpty(psiMap) ? null : psiMap.get(o.getForeignKey()))); //保存上下文产品加工规则信息集合 productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList); - if (Objects.equal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesWorkCell.getIsCountFinish())) { + if (Objects.equal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workCell.getIsCountFinish())) { // 保存班次加工数量上下文 Integer amount = productionCustomContextStepService.dispatchProductionStatisticsContext(reqBean, productionPsOutContextList.size()); this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), String.format("生产线[%s]工位[%s]当前累加数[%s]已累计加工数[%s]", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionPsOutContextList.size(), amount), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); @@ -115,7 +117,7 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { } - private void saveProductionRecordData(StationRequestBean reqBean, String mouldNo, List prodRuleContextList, MesProductionProcessContext productionProcessContext, + private void saveProductionRecordData(StationRequestBean reqBean, MesWorkCenter workCenter, String mouldNo, List prodRuleContextList, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, Map prMap, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) { MesProdRuleContext prodRuleContext = CollectionUtils.isEmpty(prMap) ? null : prMap.get(productionPsOutContext.getForeignKey()); @@ -127,11 +129,17 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { productionRecord.setEquipmentCode(cellEquipContext.getEquipmentCode()); productionRecord.setEquipmentName(cellEquipContext.getEquipmentName()); - productionRecord.setReportType((null != prodRuleContext && !StringUtils.isEmpty(prodRuleContext.getReportType())) ? prodRuleContext.getReportType() : MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()); - if (productionRecord.getReportType().compareTo(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()) != 0) productionRecord.setReportPartNo(productionPsOutContext.getPartNo()); - productionRecord.setReportStatus(productionRecord.getReportType().compareTo(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()) != 0 ? MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue() : MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); - if (productionRecord.getReportStatus().compareTo(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()) == 0 && isSamePart(productionPsInContext, productionPsOutContext) && - checkPsIsReported(reqBean.getOrganizeCode(), productionPsOutContext.getProductSn(), productionPsOutContext.getPartNo())) productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0) { + productionRecord.setReportType((null != prodRuleContext && !StringUtils.isEmpty(prodRuleContext.getReportType())) ? prodRuleContext.getReportType() : MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()); + if (productionRecord.getReportType().compareTo(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()) != 0) productionRecord.setReportPartNo(productionPsOutContext.getPartNo()); + productionRecord.setReportStatus(productionRecord.getReportType().compareTo(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()) != 0 ? MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue() : MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + if (productionRecord.getReportStatus().compareTo(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()) == 0 && isSamePart(productionPsInContext, productionPsOutContext) && + checkPsIsReported(reqBean.getOrganizeCode(), productionPsOutContext.getProductSn(), productionPsOutContext.getPartNo())) productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + } else { + //排序的汇报基于工单装配件,加工记录默认不汇报 + productionRecord.setReportType(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()); + productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + } productionRecord.setModuleStatisticsStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java index e9f039b..b37d63c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java @@ -108,8 +108,9 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi //验证工单的有效性 List productionPartContextList = new ArrayList<>(); List productionPsInContextList = new ArrayList<>(); + List productionPsOutContextList = new ArrayList<>(); if (!checkWorkOrderValid(reqBean, resultBean, stepResult, productionProcessContext, workCenter, - equipVariableCollectContextList, productionPartContextList, productionPsInContextList).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); + equipVariableCollectContextList, productionPartContextList, productionPsInContextList, productionPsOutContextList).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); //扫描场景下合并历史产出零件信息/产品条码信息 if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && @@ -131,6 +132,8 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList); //保存上下文产品条码信息 productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList); + //保存上下文产出条码信息 + productionDispatchContextStepService.dispatchProductionPsOutContext(reqBean, productionPsOutContextList); //存储展示组件MODULE_CONTENT内容 productionDispatchContextStepService.dispatchModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList)); @@ -171,8 +174,10 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi } //验证工单的有效性 - private StepResult checkWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, - List equipVariableCollectContextList, List productionPartContextList, List productionPsInContextList) { + private StepResult checkWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, + List equipVariableCollectContextList, List productionPartContextList, + List productionPsInContextList, List productionPsOutContextList) { //搜集生产工单号 List filterList = equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()); @@ -215,6 +220,9 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi //封装产品条码 productionPsInContextList.add(new MesProductionPsInContext(productionProcessContext.getWorkCell(), produceSn).messageSource(equipVariableCollectContextList.get(0).getMessageSource()).relateId(queueOrder.getId())); + //封装产出条码 + productionPsOutContextList.add(new MesProductionPsOutContext().copy(produceSn)); + } //封装空腔 @@ -257,6 +265,8 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi productionDispatchContextStepService.removeProductionPartContext(reqBean); //删除上下文产品条码信息 productionDispatchContextStepService.removeProductionPsInContext(reqBean); + //删除上下文产出条码信息 + productionDispatchContextStepService.removeProductionPsOutContext(reqBean); return true; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueSaveStepService.java new file mode 100644 index 0000000..741da0a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueSaveStepService.java @@ -0,0 +1,76 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +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.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext; +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.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +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.MesQueueOrderRepository; +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.CollectionUtils; + +import java.util.List; + +/** + * @Description : 保存工位队列信息工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesWorkOrderQueueSaveStepService") +public class MesWorkOrderQueueSaveStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private MesQueueOrderRepository queueOrderRepository; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文条码数据信息集合 + List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); + + if (CollectionUtils.isEmpty(productionPsInContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在零件条码信息,请重置工序解决!"); + + productionPsInContextList.stream().filter(o -> null != o).forEach(o -> saveWorkOrderQueue(reqBean, o)); + + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存工位队列成功!"); + + } + + private void saveWorkOrderQueue(StationRequestBean reqBean, MesProductionPsInContext productionPsInContext) { + queueOrderRepository.updateByProperties( + new String[]{MesPcnExtConstWords.ID}, + new Object[]{productionPsInContext.getRelateId()}, + new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.STATUS}, + new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.QUEUE_ORDER_STATUS.FINISH.getValue()}); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java index d3d0b83..efd5334 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java @@ -111,7 +111,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl if (StringUtils.isEmpty(productionProcessContext.getWorkCenterJson())) productionProcessContext.workCenterJson(prodOrgExtService.getWorkCenterDb(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode())); //生产过程上下文对象赋值工位信息 - if (StringUtils.isEmpty(productionProcessContext.getWorkCellJson())) productionProcessContext.workCellJson(prodOrgExtService.getWorkCellDb(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); + if (StringUtils.isEmpty(productionProcessContext.getWorkCellJson())) productionProcessContext.workCellJson(prodOrgExtService.getWorkCellDb(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), true)); //生产过程上下文对象赋值工序工艺信息 if (isCheckProcess && (StringUtils.isEmpty(productionProcessContext.getProcessCode()) || !productionProcessContext.getProcessCode().equals(reqBean.getProcessCode()))) processContext(reqBean, productionProcessContext); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java index 5d2ba15..3abbfe3 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java @@ -2,11 +2,9 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import io.swagger.annotations.ApiParam; import lombok.Data; import org.springframework.beans.BeanUtils; -import org.springframework.util.StringUtils; import java.io.Serializable; @@ -33,6 +31,11 @@ public class MesProductionPsOutContext extends MesProduceSn implements Serializa return this; } + public MesProductionPsOutContext foreignKey(Integer foreignKey) { + this.foreignKey = foreignKey; + return this; + } + public MesProductionPsOutContext copy(MesProduceSn produceSn) { BeanUtils.copyProperties(produceSn, this); return this; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index a33cda8..5ea08e4 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -197,6 +197,8 @@ public class MesPcnExtConstWords { public static final String DESCRIPTION = "description"; //描述 public static final String REMARK = "remark"; + //状态 + public static final String STATUS = "status"; //BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties) public static final String[] BASE_BEAN_FIELDS = {ID, IS_DELETED, IS_VALID, CREATE_DATE_TIME, CREATE_USER, MODIFY_DATE_TIME, MODIFY_USER, DESCRIPTION, REMARK, SYSTEM_SYNC_DATE_TIME, SYSTEM_SYNC_STATUS}; From 16ee98410ff451ec87e7a4b2ae8386822c62241e Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 26 Sep 2024 09:24:07 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../strategy/AssemblyVisualListPrintStrategy.java | 4 ++-- .../step/MesWorkOrderCutCheckStepService.java | 21 +++++++++++++-------- .../pcn/pojo/context/MesProductionPartContext.java | 13 ++++++++++--- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java index 5d1e175..4e1d79b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -90,9 +90,9 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe // 为空时显示内容 String isNullViewContent = StringUtils.isEmpty(partProdGroup.getIsNullViewContent()) ? "" : partProdGroup.getIsNullViewContent(); for (Integer index = 0; index < totalCount; index++) { - String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(0).getDisplayValue(); + String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(index).getDisplayValue(); - resultMap.put(MesPcnExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? "" : displayValue); + resultMap.put(MesPcnExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? StringUtils.isEmpty(isNullViewContent) ? "" : isNullViewContent : displayValue); } printDataMapList.add(resultMap); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java index 11ab0c0..7e5637b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java @@ -178,21 +178,26 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { List> dataList = new ArrayList<>(); List orderList = filterProductionPartContext(productionPartContextList, true); - List finishCodeList = filterProductionPartContext(productionPartContextList, false); + //List finishCodeList = filterProductionPartContext(productionPartContextList, false); AtomicReference index = new AtomicReference<>(0); if (!CollectionUtils.isEmpty(orderList)) { + + // 腔数 + int cavityQty = productionPartContextList.stream().collect(Collectors.groupingBy(MesProductionPartContext::getPartNo)).size(); + orderList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), - new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "裁片工单号", o.getWorkOrderNo()), + new StationKvBean(MesPcnExtConstWords.CUT_WORK_ORDER_NO, "裁片工单号", o.getCutWorkOrderNo()), + new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "工单号", o.getWorkOrderNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(o.getPartNo()).toString()), - new StationKvBean(MesPcnExtConstWords.QTY, "完成数/工单数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(o.getCompleteQty().intValue())).add(String.valueOf(o.getQty().intValue())).toString()), - new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(index.updateAndGet(v -> v + 1))).add(String.valueOf(productionPartContextList.size())).toString()))); + new StationKvBean(MesPcnExtConstWords.QTY, "裁片工单数/完成数/工单数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(o.getCutQty().intValue())).add(String.valueOf(o.getCompleteQty().intValue())).add(String.valueOf(o.getQty().intValue())).toString()), + new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(index.updateAndGet(v -> v + 1))).add(String.valueOf(cavityQty)).toString()))); } - if (!CollectionUtils.isEmpty(finishCodeList)) { - StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY_FINISH_CODE, "空腔数", String.valueOf(finishCodeList.size()))); - } + //if (!CollectionUtils.isEmpty(finishCodeList)) { + // StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY_FINISH_CODE, "空腔数", String.valueOf(finishCodeList.size()))); + //} return dataList; } @@ -354,7 +359,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { workOrderList.stream().filter(o -> null != o).forEach(o -> { MesProductionPartContext productionPartContext = new MesProductionPartContext() - .copyPartNo(o, workOrderCutDetailMap.get(o.getWorkOrderNo()).getQty(), equipVariableCollectContextList.get(0).getMessageSource()) + .copyPartNo(o, workOrderCutDetailMap.get(o.getWorkOrderNo()).getQty(), workOrderCutDetailMap.get(o.getWorkOrderNo()).getCutWorkOrderNo(), equipVariableCollectContextList.get(0).getMessageSource()) .isCheck(productionProcessContext.getWorkCell()); //if (equipVariableCollectContextList.get(0).getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) productionPartContext.checkSeqResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); productionPartContext.setCutCode(cutScheme.getCutCode()); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java index f8ecd05..e69c183 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java @@ -37,6 +37,9 @@ public class MesProductionPartContext implements Serializable { @ApiParam("客户零件号") private String custPartNo; + @ApiParam("裁片工单数量") + private Double cutQty; + @ApiParam("工单数量") private Double qty; @@ -114,6 +117,9 @@ public class MesProductionPartContext implements Serializable { // 裁片功能 @ApiParam("裁片方案代码") private String cutCode; + + @ApiParam("裁片工单号") + private String cutWorkOrderNo; // 裁片功能 //根据一模多腔赋值 @@ -139,12 +145,13 @@ public class MesProductionPartContext implements Serializable { return messageSource(messageSource); } - //根据工单信息赋值 - public MesProductionPartContext copyPartNo(MesWorkOrder workOrder, Double qty, Integer messageSource) { + //根据工单信息、裁片工单明细赋值 + public MesProductionPartContext copyPartNo(MesWorkOrder workOrder, Double cutQty, String cutWorkOrderNo, Integer messageSource) { if (null != workOrder) { BeanUtils.copyProperties(workOrder, this); if (StringUtils.isEmpty(this.completeQty)) this.completeQty = new Double(0); - this.setQty(qty); + this.setCutQty(cutQty); + this.setCutWorkOrderNo(cutWorkOrderNo); } else this.isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); return messageSource(messageSource); } From 63dbcf1eb02b77b6a00ea79148c2f5567165657b Mon Sep 17 00:00:00 2001 From: yxw Date: Wed, 25 Sep 2024 15:09:50 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WorkOrderAssemblyPrintQueueStrategyService.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java index 92bb6f7..d76561d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java @@ -57,6 +57,9 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt @Autowired private IMesWorkCenterService workCenterService; + @Autowired + private IMesPrintedSnLogRepository printedSnLogRepository; + @Override public List execute(MesPrintQueue model) { @@ -93,6 +96,9 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt // 展示打印队列列表 List showPrintQueueList = new ArrayList<>(); + // 条码打印记录 + List printedSnLogList = new ArrayList<>(); + for (MesPrintQueue printQueue : printQueueList) { MesWorkOrder mesWorkOrder = workOrderMapByWorkOrderNo.get(printQueue.getWorkOrderNo()); @@ -168,10 +174,19 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt showPrintQueueList.add(printQueue); + MesPrintedSnLog printedSnLog = new MesPrintedSnLog(); + printedSnLog.setOrganizeCode(printQueue.getOrganizeCode()); + printedSnLog.setWorkOrderNo(printQueue.getWorkOrderNo()); + printedSnLog.setCustPartNo(printQueue.getCustPartNo()); + ConvertBean.serviceModelInitialize(printedSnLog, "JOB"); + printedSnLogList.add(printedSnLog); + } printQueueRepository.saveAll(printQueueList); + if (!CollectionUtils.isEmpty(printedSnLogList)) printedSnLogRepository.saveAll(printedSnLogList); + return showPrintQueueList; } From d8cabab1d8c5faab35a702f9e608644fde267012 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Thu, 26 Sep 2024 11:53:46 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../station/MesProductionModuleService.java | 45 +++++++ .../station/MesProductionSortModuleService.java | 136 +++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionModuleService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionModuleService.java new file mode 100644 index 0000000..31c214c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionModuleService.java @@ -0,0 +1,45 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IModuleService; +import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description : 展示组件:非排序生产 + * @Author :wangjie + **/ +@Slf4j +@Service("mesProductionModuleService") +public class MesProductionModuleService extends BaseModuleService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Override + public void init(StationRequestBean reqBean) { + + //排序线 装配件匹配工步 + if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == productionProcessContextStepService.getCenterType(reqBean)) ((IModuleService) SpringContextsUtil.getBean("mesProductionSortModuleService")).init(reqBean); + + //非排序线 装配件匹配工步 + else ((IModuleService) SpringContextsUtil.getBean("mesProductionNoSortModuleService")).init(reqBean); + + } + + @Override + public boolean execStateModule(StationRequestBean reqBean, List states, Map wcpcMap) { + init(reqBean); + return true; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java new file mode 100644 index 0000000..6a9a38e --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java @@ -0,0 +1,136 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; +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.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; +import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.repository.MesFileRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description : 展示组件:非排序生产 + * @Author :wangjie + **/ +@Slf4j +@Service("mesProductionSortModuleService") +public class MesProductionSortModuleService extends BaseModuleService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; + + @Autowired + private IMesProdShiftRecordService mesProdShiftRecordService; + + @Autowired + private IMesWorkOrderExtService workOrderExtService; + + @Autowired + private MesFileRepository mesFileRepository; + + @Override + public void init(StationRequestBean reqBean) { + // 获取工单信息 + List> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); + MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); + + //获取班次信息,先查询缓存,缓存没有在查询数据库 + List prodShiftDataContext = getShiftRecordStationKvBeans(reqBean); + + MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + + if (CollectionUtils.isEmpty(prodShiftDataContext)) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + MesPcnException.throwBusiException("请先开班"); + } + // 发送班次班组和工单 + StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); + this.sendMessage(reqBean, resultBean); + + //TODO 右侧排序表格数据 + + + + + //验证工位是否锁定 + reqBean.getDataMap().put(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_INIT_MODULE.getCode(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr()); + ((IStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).executeInState(reqBean); + + //设备BYPASS监控 + //((IStepService) SpringContextsUtil.getBean("mesEquipByPassReadStepService")).executeInState(reqBean); + + } + + private List getShiftRecordStationKvBeans(StationRequestBean reqBean) { + // 获取班次信息 redis + List prodShiftDataContext = productionCustomContextStepService.getProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + if (CollectionUtils.isEmpty(prodShiftDataContext)) { + MesProdShiftRecord shiftRecord = new MesProdShiftRecord(); + shiftRecord.setWorkCenterCode(reqBean.getWorkCenterCode()); + shiftRecord.setWorkStatus(MesExtEnumUtil.WORK_STATUS.START.getValue()); + // 查询数据库 + MesProdShiftRecord prodShiftRecord = mesProdShiftRecordService.queryMesProdShiftRecord(shiftRecord); + if (prodShiftRecord != null) { + prodShiftDataContext = getProdShiftData(prodShiftRecord); + productionCustomContextStepService.dispatchProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(),prodShiftDataContext); + } + } + return prodShiftDataContext; + } + + private StationResultBean getStationResultBean(StationRequestBean reqBean, List> moduleContentContext, List prodShiftDataContext) { + StationResultBean resultBean = new StationResultBean(); + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()); + resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); + resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); + + + resultBean.setResultObj(prodShiftDataContext); + resultBean.setResultList(moduleContentContext); + return resultBean; + } + + //封装展示组件班组班次内容 + private List getProdShiftData(MesProdShiftRecord record) { + + return StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), + new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP, "班组", record.getShiftGroup()), + new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP_NAME, "班组名称", record.getShiftGroupName()), + new StationKvBean(MesPcnExtConstWords.SHIFT_CODE, "班次", record.getShiftCode()), + new StationKvBean(MesPcnExtConstWords.SHIFT_NAME, "班次名称", record.getShiftName())); + } +} From 30082cc4ae4b487ac280e8bf5bc9e163e2347efc Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 26 Sep 2024 13:51:45 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E8=A3=81=E7=89=87=E5=B7=A5=E6=AD=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=201=E3=80=81=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E8=A7=84=E5=88=99=E5=8C=B9=E9=85=8D=E6=97=B6=EF=BC=8C=E5=AF=B9?= =?UTF-8?q?=E8=BF=9B=E6=96=99=E6=9D=A1=E4=BB=B6=E5=B0=81=E8=A3=85foreignKe?= =?UTF-8?q?y=202=E3=80=81=E4=BF=9D=E5=AD=98=E8=A3=81=E7=89=87=E6=9D=A1?= =?UTF-8?q?=E7=A0=81=E5=B7=A5=E6=AD=A5=E5=8F=96=E6=B6=88=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=9D=A1=E7=A0=81=E5=B7=A5=E6=AD=A5=EF=BC=8C?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=9C=A8=E6=9C=AC=E5=B7=A5=E6=AD=A5=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E6=A0=B9=E6=8D=AE=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E8=BF=9B=E6=96=99=E6=9D=A1=E7=A0=81=E4=BF=9D=E5=AD=98=E6=9D=A1?= =?UTF-8?q?=E7=A0=81=E9=80=BB=E8=BE=91=203=E3=80=81=E8=A3=81=E7=89=87?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=8F=B7=E5=AD=98=E5=80=BC=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E4=BA=A7=E5=87=BA=E9=9B=B6=E4=BB=B6=E4=B8=8A=E4=B8=8B=E6=96=87?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesWorkOrderCutCheckStepService.java | 22 +++--- ...MesWorkOrderCutMatchingProdRuleStepService.java | 32 ++++++--- .../MesWorkOrderCutPackagePrintStepService.java | 3 - .../MesWorkOrderCutProductSnSaveStepService.java | 79 ++++++++++++++++++---- .../pojo/context/MesProductionPsOutContext.java | 8 +++ 5 files changed, 106 insertions(+), 38 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java index 7e5637b..a6d8857 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java @@ -92,7 +92,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前缺失待验证的裁片工单信息!"); //清除本次已获取得到的裁片工单信息 - //productionDispatchContextStepService.removeScanWorkOrderNoContext(reqBean); + productionDispatchContextStepService.removeScanWorkOrderNoContext(reqBean); //从上下文中取出生产线对象 MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); @@ -147,9 +147,8 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { //保存扫描的工单信息上下文 if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource()) { productionProcessContextStepService.dispatchFunctionChooseCavityOrderContext(reqBean, StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), - new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", String.valueOf(productionPartContextList.size())), + new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", String.valueOf(productionPartContextList.stream().collect(Collectors.groupingBy(MesProductionPartContext::getPartNo)).size())), new StationKvBean(MesPcnExtConstWords.CELL_MESSAGE_SOURCE, "工位信息来源", MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValueStr()), - new StationKvBean(MesPcnExtConstWords.CRAFT_JUMP_CODE, "是否已验证顺序防错", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValueStr()), new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "裁片工单", productionPartContextList.stream().filter(o -> null != o).map(MesProductionPartContext::getWorkOrderNo).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))))); } @@ -323,14 +322,17 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { } - List produceSnList = produceSnExtService.getProduceSnList(reqBean.getOrganizeCode(), cutWorkOrderNo); + // 如果裁片工单明细 productSn存在值则表名已 经过上道工位 + if (!StringUtils.isEmpty(mesWorkOrderCutDetailList.stream().findFirst().get().getProductSn())) { + List produceSnList = produceSnExtService.getProduceSnList(reqBean.getOrganizeCode(), cutWorkOrderNo); - // 获取上道工艺生产的条码并封装到进料上下文中 - if (!CollectionUtils.isEmpty(produceSnList)) - produceSnList.stream().filter(o -> null != o).forEach(o -> { - productionPsInContextList.add(new MesProductionPsInContext(workCell, o).cutCode(cutScheme.getCutCode())); - productionPsOutContextList.add(new MesProductionPsOutContext().copy(o)); - }); + // 获取上道工艺生产的条码并封装到进料上下文中 + if (!CollectionUtils.isEmpty(produceSnList)) + produceSnList.stream().filter(o -> null != o).forEach(o -> { + productionPsInContextList.add(new MesProductionPsInContext(workCell, o).cutCode(cutScheme.getCutCode())); + productionPsOutContextList.add(new MesProductionPsOutContext().copy(o).cutWorkOrderNo(cutWorkOrderNo)); + }); + } return stepResult; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutMatchingProdRuleStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutMatchingProdRuleStepService.java index 9d9f1e2..d729980 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutMatchingProdRuleStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutMatchingProdRuleStepService.java @@ -27,6 +27,7 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -84,7 +85,7 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); //获取上下文进料零件条码信息集合 - //List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); + List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); //根据现有数据【产出零件数据】【进料零件条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询 if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>(); @@ -92,7 +93,7 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService //封装非排序加工规则 if (!doHandleProdRuleData(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, - prodRuleContextList, productionPartContextList).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); + prodRuleContextList, productionPartContextList, productionPsInContextList).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); //匹配失败需要清除本次扫描/读取信息 //if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, stepResult, productionPartContextList, productionPsInContextList)) @@ -104,7 +105,9 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService //保存上下文产品加工规则信息集合 productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList); //保存上下文产出零件信息 - //if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList); + if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList); + //保存进料主条码数据 + if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList); } return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "匹配完成!"); @@ -113,11 +116,12 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService private StepResult doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List prodRuleContextList, - List productionPartContextList) { + List productionPartContextList, + List productionPsInContextList) { //根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 (只能查询到一条,否则报错) return doHandleProdRuleDataByProductionPart(reqBean, resultBean, stepResult, productionProcessContext, - cellEquipContext, prodRuleContextList, productionPartContextList); + cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); } @@ -127,7 +131,8 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List prodRuleContextList, - List productionPartContextList) { + List productionPartContextList, + List productionPsInContextList) { //加工规则的数据已与产出零件的数量一致 //if (!CollectionUtils.isEmpty(prodRuleContextList) && prodRuleContextList.size() == productionPartContextList.size()) return stepResult; @@ -149,9 +154,9 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService log.info("doHandleProdRuleDataByProductionPart --- outPartNoList:{}", foreignKey); - //没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错) + //根据产出零件条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错) return doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, productionProcessContext, - cellEquipContext, prodRuleContextList, productionPartContextList, outPartNoList, foreignKey); + cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList, outPartNoList, foreignKey); //存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 (只能查询到一条,否则报错) //else return doHandleProdRuleDataByProductionPartAndProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList, outPartNoList, foreignKey); @@ -159,7 +164,8 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService //没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错) private StepResult doHandleProdRuleDataByProductionPartAndEmptyProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, - MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPartContextList, List outPartNoList, Integer foreignKey) { + MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPartContextList, + List productionPsInContextList, List outPartNoList, Integer foreignKey) { //【非排序线】获取产品加工规则 ; 条件进料[NULL] List prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).outPartNos(outPartNoList).inPartIsEmpty(true)); @@ -175,6 +181,9 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format( "未维护裁片方案代码[%s]设备[%s]的裁片设备配置信息!", cutCode, cellEquipContext.getEquipmentName())); + // 根据工单分组进料条码 + Map productionPsInContextMapByWorkOrder = CollectionUtils.isEmpty(productionPsInContextList) ? null : productionPsInContextList.stream().collect(Collectors.toMap(MesProductionPsInContext::getWorkOrderNo, Function.identity(), (x, y) -> y)); + for (MesProductionPartContext productionPartContext : productionPartContextList) { log.info("doHandleProdRuleDataByProductionPartAndEmptyProductSn --- 是否找加工规则:{}", null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())); @@ -193,9 +202,12 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService MesProdRuleContext prodRuleContext = prodRuleCfgExtService.getProdRuleNosortContext( new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()) .copy(filterList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey())); - prodRuleContext.setIsPrint(cutSchemeEquipment.getIsPrint()); + //prodRuleContext.setIsPrint(cutSchemeEquipment.getIsPrint()); prodRuleContextList.add(prodRuleContext); + if (!CollectionUtils.isEmpty(productionPsInContextMapByWorkOrder) && productionPsInContextMapByWorkOrder.containsKey(productionPartContext.getWorkOrderNo())) + productionPsInContextMapByWorkOrder.get(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.getForeignKey()); + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- 设备:{} 产出零件信息:{} 产品加工规则:{} ---", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), cellEquipContext.getEquipmentCode(), JSONObject.toJSONString(productionPartContext), JSONObject.toJSONString(prodRuleContext)); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java index 753eb10..de1cc86 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java @@ -1,10 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderCutService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPartContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutProductSnSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutProductSnSaveStepService.java index 0e6056d..5444a01 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutProductSnSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutProductSnSaveStepService.java @@ -15,19 +15,16 @@ 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.MesPart; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; 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.MesProductionAssemblyRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCutDetailRepository; import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCutRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; -import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -74,6 +71,9 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService { @Autowired private MesProductionAssemblyRepository productionAssemblyRepository; + @Autowired + private MesWorkOrderCutDetailRepository workOrderCutDetailRepository; + @Override public StepResult execute(StationRequestBean reqBean) { @@ -88,10 +88,10 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService { //存储生产过程上下文对象 productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); - //获取上下文生产扫/读信息:加工单 - List equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean); - - String cutWorkOrderNo = equipVariableCollectContextList.get(0).getEquipVariableValue(); + ////获取上下文生产扫/读信息:加工单 + //List equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean); + // + //String cutWorkOrderNo = equipVariableCollectContextList.get(0).getEquipVariableValue(); //看是否修改裁片工单状态 //获取上下文进料零件条码信息集合 @@ -103,6 +103,9 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService { //获取上下文产出零件数据信息集合 List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + // 从产出零件上下文中获取裁片工单号 + String cutWorkOrderNo = productionPartContextList.stream().findFirst().get().getCutWorkOrderNo(); + //获取上下文产品加工规则数据信息集合 List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); @@ -117,14 +120,14 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService { //从上下文中取出工位对象 MesWorkCell workCell = productionProcessContext.getWorkCell(); + //获取生产线的当前班组班次信息 + MesProdShiftContext prodShiftContext = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + // 无进料条码则生成条码 if (CollectionUtils.isEmpty(productionPsInContextList)) { productionPsOutContextList = new ArrayList<>(); - //获取生产线的当前班组班次信息 - MesProdShiftContext prodShiftContext = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); - if (null == prodShiftContext) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在生产开班记录,请重新开班!"); for (MesProductionPartContext mesProductionPartContext : productionPartContextList) { @@ -183,6 +186,13 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService { productionPsOutContextList.add(productionPsOutContext); + // 裁片工单明细 条码赋值 作用:多工位情况下 判定productSn是否有值,无值则无需查条码表 + workOrderCutDetailRepository.updateByProperties( + new String[]{MesPcnExtConstWords.CUT_WORK_ORDER_NO, MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED}, + new Object[]{cutWorkOrderNo, reqBean.getOrganizeCode(), CommonEnumUtil.VALID, CommonEnumUtil.FALSE}, + new String[]{MesPcnExtConstWords.PRODUCT_SN, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME}, + new Object[]{cutWorkOrderNo, reqBean.getUserInfo(), TimeTool.getNowTime(true)}); + // 新增装配件加工记录 //saveProductionAssembly(reqBean, productionProcessContext, cellEquipContext, mesProdRuleContext, productionPsOutContext); @@ -193,10 +203,11 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService { } else { - if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在加工规则信息,请重置工序解决!"); + // 保存零件条码 + productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> o.copy(saveProduceSnData(reqBean, resultBean, productionProcessContext, o, prodShiftContext, workCell))); - //保存零件条码信息工步 - ((IStepService) SpringContextsUtil.getBean("mesProductSnSaveStepService")).executeInState(reqBean); + //保存上下文产出条码数据信息集合 + productionDispatchContextStepService.dispatchProductionPsOutContext(reqBean, productionPsOutContextList); for (MesProductionPartContext mesProductionPartContext : productionPartContextList) { @@ -219,6 +230,44 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService { } + private MesProduceSn saveProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, + MesProdShiftContext prodShiftContext, MesWorkCell workCell) { + + //根据零件条码ID查询零件条码信息 + MesProduceSn produceSn = produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsOutContext.getId()); + + if (null == produceSn) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件条码信息,产出零件条码[%s]ID[%s]信息不存在!", productionPsOutContext.getProductSn(), productionPsOutContext.getId())); + + produceSn.setAreaCode(workCell.getAreaCode()); + produceSn.setWorkCenterCode(workCell.getWorkCenterCode()); + produceSn.setWorkCellCode(workCell.getWorkCellCode()); + + produceSn.setRouteCode(reqBean.getRouteCode()); + produceSn.setProcessCode(reqBean.getProcessCode()); + produceSn.setCraftCode(productionProcessContext.getCraftCode()); + + produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + + produceSn.setShiftCode(prodShiftContext.getShiftCode()); + produceSn.setShiftGroup(prodShiftContext.getShiftGroup()); + + ConvertBean.serviceModelUpdate(produceSn, reqBean.getUserInfo()); + produceSn.setLotNo(produceSn.getModifyDatetime().substring(0, 10)); + if (StringUtils.isEmpty(produceSn.getInWorkCenterTime())) produceSn.setInWorkCenterTime(produceSn.getModifyDatetime()); + + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.PROCESSING.getValue()); + + produceSnExtService.update(produceSn); + + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- MesProductionPsOutContext:{} --- MesProduceSn:{}", + reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), + StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(productionPsOutContext), JSONObject.toJSONString(produceSn)); + + return produceSn; + + } + + private void saveProductionAssembly(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProdRuleContext mesProdRuleContext, MesProductionPsOutContext productionPsOutContext) { diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java index 3abbfe3..fccedb2 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java @@ -22,6 +22,9 @@ public class MesProductionPsOutContext extends MesProduceSn implements Serializa @ApiParam(name = "是否计算工单完成数量") private Integer isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + @ApiParam(name = "裁片工单号") + private String cutWorkOrderNo; + public MesProductionPsOutContext() {} public MesProductionPsOutContext copy(MesProduceSn produceSn, Integer foreignKey) { @@ -41,6 +44,11 @@ public class MesProductionPsOutContext extends MesProduceSn implements Serializa return this; } + public MesProductionPsOutContext cutWorkOrderNo(String cutWorkOrderNo) { + this.setCutWorkOrderNo(cutWorkOrderNo); + return this; + } + public MesProductionPsOutContext isCalcCompleteQty(Boolean isCalcCompleteQty) { if (isCalcCompleteQty) this.isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); return this; From c39b5a9ab186935b9954bc7ed5bb01b7e62f5e8a Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Thu, 26 Sep 2024 16:02:58 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E6=8E=92=E5=BA=8F=20=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E8=A3=85=E9=85=8D=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IMesProductionCustomContextStepService.java | 4 +- .../step/MesAssemblySaveNosortStepService.java | 171 --------------------- .../step/MesAssemblySaveSortStepService.java | 171 --------------------- .../step/MesAssemblySaveStepService.java | 163 +++++++++++++++++++- .../MesProductionCustomContextStepService.java | 16 +- .../pojo/context/MesProductionAssemblyContext.java | 6 + .../MesProductionAssemblyNosortContext.java | 6 - 7 files changed, 173 insertions(+), 364 deletions(-) delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveNosortStepService.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java index e555946..9737f71 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java @@ -2,7 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -76,7 +76,7 @@ public interface IMesProductionCustomContextStepService { Integer getRepeatAssemblySnCount(String organizeCode, String workCenterCode, String workCellCode, String equipmentCode); @ApiOperation(value = "保存可复用条码到上下文") - Boolean dispatchRepeatAssemblySn(String organizeCode, String workCenterCode, String workCellCode, MesProductionAssemblyNosortContext productionAssemblyNosortContext); + Boolean dispatchRepeatAssemblySn(String organizeCode, String workCenterCode, String workCellCode, MesProductionAssemblyContext productionAssemblyContext); @ApiOperation(value = "删除上下文可复用条码信息") void removeRepeatAssemblySn(StationRequestBean reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveNosortStepService.java deleted file mode 100644 index 1df5057..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveNosortStepService.java +++ /dev/null @@ -1,171 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; -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.api.busi.IMesProductionProcessContextStepService; -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.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; -import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique; -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.MesProductionAssemblyRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyUniqueRepository; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -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.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; - -/** - * @Description : 保存装配记录工步 【非排序】 - * @Author : wangjie - **/ -@Slf4j -@Service("mesAssemblySaveNosortStepService") -public class MesAssemblySaveNosortStepService extends BaseStepService { - - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; - - @Autowired - private IMesProductionDispatchContextStepService productionDispatchContextStepService; - - @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - - @Autowired - private MesProductionAssemblyRepository productionAssemblyRepository; - - @Autowired - private MesProductionAssemblyUniqueRepository productionAssemblyUniqueRepository; - - @Autowired - private IMesProduceSnExtService produceSnExtService; - - @Override - public StepResult execute(StationRequestBean reqBean) { - - StationResultBean resultBean = new StationResultBean(); - - StepResult stepResult = StepResult.getSuccessComplete(); - - //获取上下文信息 - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); - - //配置错误 抛出异常 - if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); - - //存储生产过程上下文对象 - productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); - - //获取上下文产品加工规则数据信息集合 - List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); - - if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!"); - - //获取上下文产出条码数据信息集合 - List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); - - if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!"); - - //从上下文中取出工位当前要使用的设备 - MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); - - Map ppMap = CollectionUtils.isEmpty(productionPsOutContextList) ? null : productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPsOutContext::getForeignKey, o -> o)); - - List productSnId = new ArrayList<>(); - - //保存装配记录 - prodRuleContextList.stream().filter(o -> null != o).forEach(o -> saveProductionAssemblyData(reqBean, resultBean, stepResult, productSnId, productionProcessContext, o, ppMap, cellEquipContext)); - - if (!CollectionUtils.isEmpty(productSnId)) produceSnExtService.saveProduceSnList(reqBean, MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY.getValue(), productSnId); - - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存装配记录成功!"); - - } - - private void saveProductionAssemblyData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List productSnId, - MesProductionProcessContext productionProcessContext, MesProdRuleContext prodRuleContext, Map ppMap, MesCellEquipContext cellEquipContext) { - - if (StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) return; - - List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); - - MesProductionPsOutContext productionPsOutContext = CollectionUtils.isEmpty(ppMap) ? null : ppMap.get(prodRuleContext.getForeignKey()); - - for (MesProductionAssemblyNosortContext productionAssemblyNosortContext : productionAssemblyNosortContextList) { - - if (null == productionAssemblyNosortContext) continue; - - MesProductionAssembly productionAssembly = new MesProductionAssembly(); - BeanUtils.copyProperties(productionAssemblyNosortContext, productionAssembly); - - productionAssembly.setDataSource(MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.NOSORT.getValue()); - productionAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - - productionAssembly.setAreaCode(reqBean.getWorkCenterCode()); - productionAssembly.setWorkCenterCode(reqBean.getWorkCenterCode()); - productionAssembly.setWorkCellCode(reqBean.getWorkCellCode()); - productionAssembly.setProcessCode(reqBean.getProcessCode()); - - productionAssembly.setProcessName(productionProcessContext.getProcessName()); - productionAssembly.setCraftCode(productionProcessContext.getCraftCode()); - productionAssembly.setCraftName(productionProcessContext.getCraftName()); - - productionAssembly.setEquipmentCode(cellEquipContext.getEquipmentCode()); - - productionAssembly.setProductionRecordId(prodRuleContext.getProductionRecordId()); - productionAssembly.setMouldNo(prodRuleContext.getMouldNo()); - - if (null != productionPsOutContext) { - productionAssembly.setPartNo(productionPsOutContext.getPartNo()); - productionAssembly.setPartName(productionPsOutContext.getPartName()); - productionAssembly.setSerialNumber(productionPsOutContext.getSerialNumber()); - productionAssembly.setProductSn(productionPsOutContext.getProductSn()); - productionAssembly.setCustSn(productionPsOutContext.getCustSn()); - } - - MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); - if (null != scanMonitorContext) productionAssembly.setMouldRecordId(scanMonitorContext.getMouldRecordId()); - - productionAssembly.setOrganizeCode(reqBean.getOrganizeCode()); - ConvertBean.serviceModelInitialize(productionAssembly, reqBean.getUserInfo()); - - productionAssembly.setFid(UUID.randomUUID().toString()); - - productionAssembly = productionAssemblyRepository.insert(productionAssembly); - - if (productionAssemblyNosortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue()) == 0) saveProductionAssemblyUnique(productionAssembly); - - if (!StringUtils.isEmpty(productionAssemblyNosortContext.getProductSnId())) productSnId.add(productionAssemblyNosortContext.getProductSnId()); - - if (productionAssemblyNosortContext.getIsRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionAssemblyNosortContext.getIsRepeat2Cache().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) - productionCustomContextStepService.dispatchRepeatAssemblySn(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionAssemblyNosortContext); - - } - - } - - private void saveProductionAssemblyUnique(MesProductionAssembly productionAssembly) { - MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique(); - BeanUtils.copyProperties(productionAssembly, productionAssemblyUnique, MesPcnExtConstWords.ID); - productionAssemblyUnique.setPid(productionAssembly.getId()); - productionAssemblyUniqueRepository.insert(productionAssemblyUnique); - } - -} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java deleted file mode 100644 index 67c3596..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java +++ /dev/null @@ -1,171 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; -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.api.busi.IMesProductionProcessContextStepService; -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.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; -import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique; -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.MesProductionAssemblyRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyUniqueRepository; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -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.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; - -/** - * @Description : 保存装配记录工步 【排序】 - * @Author : wangjie - **/ -@Slf4j -@Service("mesAssemblySaveSortStepService") -public class MesAssemblySaveSortStepService extends BaseStepService { - - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; - - @Autowired - private IMesProductionDispatchContextStepService productionDispatchContextStepService; - - @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - - @Autowired - private MesProductionAssemblyRepository productionAssemblyRepository; - - @Autowired - private MesProductionAssemblyUniqueRepository productionAssemblyUniqueRepository; - - @Autowired - private IMesProduceSnExtService produceSnExtService; - - @Override - public StepResult execute(StationRequestBean reqBean) { - - StationResultBean resultBean = new StationResultBean(); - - StepResult stepResult = StepResult.getSuccessComplete(); - - //获取上下文信息 - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); - - //配置错误 抛出异常 - if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); - - //存储生产过程上下文对象 - productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); - - //获取上下文产品加工规则数据信息集合 - List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); - - if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!"); - - //获取上下文产出条码数据信息集合 - List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); - - if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!"); - - //从上下文中取出工位当前要使用的设备 - MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); - - Map ppMap = CollectionUtils.isEmpty(productionPsOutContextList) ? null : productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPsOutContext::getForeignKey, o -> o)); - - List productSnId = new ArrayList<>(); - - //保存装配记录 - prodRuleContextList.stream().filter(o -> null != o).forEach(o -> saveProductionAssemblyData(reqBean, resultBean, stepResult, productSnId, productionProcessContext, o, ppMap, cellEquipContext)); - - if (!CollectionUtils.isEmpty(productSnId)) produceSnExtService.saveProduceSnList(reqBean, MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY.getValue(), productSnId); - - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存装配记录成功!"); - - } - - private void saveProductionAssemblyData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List productSnId, - MesProductionProcessContext productionProcessContext, MesProdRuleContext prodRuleContext, Map ppMap, MesCellEquipContext cellEquipContext) { - - if (StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) return; - - List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); - - MesProductionPsOutContext productionPsOutContext = CollectionUtils.isEmpty(ppMap) ? null : ppMap.get(prodRuleContext.getForeignKey()); - - for (MesProductionAssemblyNosortContext productionAssemblyNosortContext : productionAssemblyNosortContextList) { - - if (null == productionAssemblyNosortContext) continue; - - MesProductionAssembly productionAssembly = new MesProductionAssembly(); - BeanUtils.copyProperties(productionAssemblyNosortContext, productionAssembly); - - productionAssembly.setDataSource(MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.NOSORT.getValue()); - productionAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - - productionAssembly.setAreaCode(reqBean.getWorkCenterCode()); - productionAssembly.setWorkCenterCode(reqBean.getWorkCenterCode()); - productionAssembly.setWorkCellCode(reqBean.getWorkCellCode()); - productionAssembly.setProcessCode(reqBean.getProcessCode()); - - productionAssembly.setProcessName(productionProcessContext.getProcessName()); - productionAssembly.setCraftCode(productionProcessContext.getCraftCode()); - productionAssembly.setCraftName(productionProcessContext.getCraftName()); - - productionAssembly.setEquipmentCode(cellEquipContext.getEquipmentCode()); - - productionAssembly.setProductionRecordId(prodRuleContext.getProductionRecordId()); - productionAssembly.setMouldNo(prodRuleContext.getMouldNo()); - - if (null != productionPsOutContext) { - productionAssembly.setPartNo(productionPsOutContext.getPartNo()); - productionAssembly.setPartName(productionPsOutContext.getPartName()); - productionAssembly.setSerialNumber(productionPsOutContext.getSerialNumber()); - productionAssembly.setProductSn(productionPsOutContext.getProductSn()); - productionAssembly.setCustSn(productionPsOutContext.getCustSn()); - } - - MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); - if (null != scanMonitorContext) productionAssembly.setMouldRecordId(scanMonitorContext.getMouldRecordId()); - - productionAssembly.setOrganizeCode(reqBean.getOrganizeCode()); - ConvertBean.serviceModelInitialize(productionAssembly, reqBean.getUserInfo()); - - productionAssembly.setFid(UUID.randomUUID().toString()); - - productionAssembly = productionAssemblyRepository.insert(productionAssembly); - - if (productionAssemblyNosortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue()) == 0) saveProductionAssemblyUnique(productionAssembly); - - if (!StringUtils.isEmpty(productionAssemblyNosortContext.getProductSnId())) productSnId.add(productionAssemblyNosortContext.getProductSnId()); - - if (productionAssemblyNosortContext.getIsRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionAssemblyNosortContext.getIsRepeat2Cache().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) - productionCustomContextStepService.dispatchRepeatAssemblySn(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionAssemblyNosortContext); - - } - - } - - private void saveProductionAssemblyUnique(MesProductionAssembly productionAssembly) { - MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique(); - BeanUtils.copyProperties(productionAssembly, productionAssemblyUnique, MesPcnExtConstWords.ID); - productionAssemblyUnique.setPid(productionAssembly.getId()); - productionAssemblyUniqueRepository.insert(productionAssemblyUnique); - } - -} 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 aa4538e..a6fd965 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 @@ -1,15 +1,38 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +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.api.busi.IMesProductionProcessContextStepService; +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.mes.pcn.serviceimpl.fsm.IStepService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique; +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.MesProductionAssemblyRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyUniqueRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderAssemblyRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; 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.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; /** * @Description : 保存装配记录工步 @@ -22,15 +45,143 @@ public class MesAssemblySaveStepService extends BaseStepService { @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; + + @Autowired + private MesProductionAssemblyRepository productionAssemblyRepository; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRepository; + + @Autowired + private MesProductionAssemblyUniqueRepository productionAssemblyUniqueRepository; + + @Autowired + private IMesProduceSnExtService produceSnExtService; + @Override public StepResult execute(StationRequestBean reqBean) { - //排序线 保存装配记录工步 - if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == productionProcessContextStepService.getCenterType(reqBean)) return ((IStepService) SpringContextsUtil.getBean("mesAssemblySaveSortStepService")).executeInState(reqBean); + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); - //非排序线 保存装配记录工步 - return ((IStepService) SpringContextsUtil.getBean("mesAssemblySaveNosortStepService")).executeInState(reqBean); + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文产品加工规则数据信息集合 + List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); + + if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!"); + + //获取上下文产出条码数据信息集合 + List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + + if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!"); + + //从上下文中取出工位当前要使用的设备 + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + + Map ppMap = CollectionUtils.isEmpty(productionPsOutContextList) ? null : productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPsOutContext::getForeignKey, o -> o)); + + List productSnIdList = new ArrayList<>(); + + //保存装配记录 + prodRuleContextList.stream().filter(o -> null != o).forEach(o -> saveProductionAssemblyData(reqBean, resultBean, stepResult, productSnIdList, productionProcessContext, o, ppMap, cellEquipContext, workCenter)); + + if (!CollectionUtils.isEmpty(productSnIdList)) produceSnExtService.saveProduceSnList(reqBean, MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY.getValue(), productSnIdList); + + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存装配记录成功!"); } + private void saveProductionAssemblyData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List productSnIdList, MesProductionProcessContext productionProcessContext, + MesProdRuleContext prodRuleContext, Map ppMap, MesCellEquipContext cellEquipContext, MesWorkCenter workCenter) { + + if (StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) return; + + List productionAssemblyContextList = prodRuleContext.getAssemblyDataContext(workCenter); + + MesProductionPsOutContext productionPsOutContext = CollectionUtils.isEmpty(ppMap) ? null : ppMap.get(prodRuleContext.getForeignKey()); + + for (MesProductionAssemblyContext productionAssemblyContext : productionAssemblyContextList) { + + if (null == productionAssemblyContext) continue; + + MesProductionAssembly productionAssembly = new MesProductionAssembly(); + BeanUtils.copyProperties(productionAssemblyContext, productionAssembly); + + productionAssembly.setDataSource(MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.NOSORT.getValue()); + productionAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + + productionAssembly.setAreaCode(reqBean.getWorkCenterCode()); + productionAssembly.setWorkCenterCode(reqBean.getWorkCenterCode()); + productionAssembly.setWorkCellCode(reqBean.getWorkCellCode()); + productionAssembly.setProcessCode(reqBean.getProcessCode()); + + productionAssembly.setProcessName(productionProcessContext.getProcessName()); + productionAssembly.setCraftCode(productionProcessContext.getCraftCode()); + productionAssembly.setCraftName(productionProcessContext.getCraftName()); + + productionAssembly.setEquipmentCode(cellEquipContext.getEquipmentCode()); + + productionAssembly.setProductionRecordId(prodRuleContext.getProductionRecordId()); + productionAssembly.setMouldNo(prodRuleContext.getMouldNo()); + + if (null != productionPsOutContext) { + productionAssembly.setPartNo(productionPsOutContext.getPartNo()); + productionAssembly.setPartName(productionPsOutContext.getPartName()); + productionAssembly.setSerialNumber(productionPsOutContext.getSerialNumber()); + productionAssembly.setProductSn(productionPsOutContext.getProductSn()); + productionAssembly.setCustSn(productionPsOutContext.getCustSn()); + } + + MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); + if (null != scanMonitorContext) productionAssembly.setMouldRecordId(scanMonitorContext.getMouldRecordId()); + + productionAssembly.setOrganizeCode(reqBean.getOrganizeCode()); + ConvertBean.serviceModelInitialize(productionAssembly, reqBean.getUserInfo()); + + productionAssembly.setFid(UUID.randomUUID().toString()); + + productionAssembly = productionAssemblyRepository.insert(productionAssembly); + + if (productionAssemblyContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue()) == 0) saveProductionAssemblyUnique(productionAssembly); + + if (!StringUtils.isEmpty(productionAssemblyContext.getProductSnId())) productSnIdList.add(productionAssemblyContext.getProductSnId()); + + if (productionAssemblyContext.getIsRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionAssemblyContext.getIsRepeat2Cache().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) + productionCustomContextStepService.dispatchRepeatAssemblySn(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionAssemblyContext); + + if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue()) == 0) saveWorkOrderAssembly(reqBean, productionAssemblyContext); + + } + + } + + private void saveProductionAssemblyUnique(MesProductionAssembly productionAssembly) { + MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique(); + BeanUtils.copyProperties(productionAssembly, productionAssemblyUnique, MesPcnExtConstWords.ID); + productionAssemblyUnique.setPid(productionAssembly.getId()); + productionAssemblyUniqueRepository.insert(productionAssemblyUnique); + } + + private void saveWorkOrderAssembly(StationRequestBean reqBean, MesProductionAssemblyContext productionAssemblyContext) { + workOrderAssemblyRepository.updateByProperties( + new String[]{MesPcnExtConstWords.ID}, + new Object[]{productionAssemblyContext.getSourceId()}, + new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.ASSEMBLY_STATUS}, + new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), productionAssemblyContext.getAssemblyStatus()}); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java index 610f933..f40ade2 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java @@ -3,7 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.context; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; @@ -231,8 +231,8 @@ public class MesProductionCustomContextStepService extends BaseStepService imple @Override public String getRepeatAssemblySn(String organizeCode, String workCenterCode, String workCellCode, String assemblyNosortCfgId) { String repeatAssemblySnJson = getFsmBusiData(organizeCode, getRepeatAssemblySnContextKey(organizeCode, workCenterCode, workCellCode), assemblyNosortCfgId); - MesProductionAssemblyNosortContext productionAssemblyNosortContext = !StringUtils.isEmpty(repeatAssemblySnJson) ? JSONObject.parseObject(repeatAssemblySnJson, MesProductionAssemblyNosortContext.class) : null; - return null != productionAssemblyNosortContext ? productionAssemblyNosortContext.getAssemblySn() : null; + MesProductionAssemblyContext productionAssemblyContext = !StringUtils.isEmpty(repeatAssemblySnJson) ? JSONObject.parseObject(repeatAssemblySnJson, MesProductionAssemblyContext.class) : null; + return null != productionAssemblyContext ? productionAssemblyContext.getAssemblySn() : null; } //根据设备代码获取可复用条码的个数 @@ -244,12 +244,12 @@ public class MesProductionCustomContextStepService extends BaseStepService imple //根据装配件规则ID获取可复用条码 @Override - public Boolean dispatchRepeatAssemblySn(String organizeCode, String workCenterCode, String workCellCode, MesProductionAssemblyNosortContext productionAssemblyNosortContext) { - if (StringUtils.isEmpty(getRepeatAssemblySn(organizeCode, workCenterCode, workCellCode, productionAssemblyNosortContext.getSourceId().toString()))) { - Integer count = getRepeatAssemblySnCount(organizeCode, workCenterCode, workCellCode, productionAssemblyNosortContext.getEquipmentCode()) + 1; - dispatchFsmBusiData(organizeCode, getRepeatAssemblySnContextKey(organizeCode, workCenterCode, workCellCode), productionAssemblyNosortContext.getEquipmentCode(), count.toString()); + public Boolean dispatchRepeatAssemblySn(String organizeCode, String workCenterCode, String workCellCode, MesProductionAssemblyContext productionAssemblyContext) { + if (StringUtils.isEmpty(getRepeatAssemblySn(organizeCode, workCenterCode, workCellCode, productionAssemblyContext.getSourceId().toString()))) { + Integer count = getRepeatAssemblySnCount(organizeCode, workCenterCode, workCellCode, productionAssemblyContext.getEquipmentCode()) + 1; + dispatchFsmBusiData(organizeCode, getRepeatAssemblySnContextKey(organizeCode, workCenterCode, workCellCode), productionAssemblyContext.getEquipmentCode(), count.toString()); } - return dispatchFsmBusiData(organizeCode, getRepeatAssemblySnContextKey(organizeCode, workCenterCode, workCellCode), productionAssemblyNosortContext.getSourceId().toString(), JSONObject.toJSONString(productionAssemblyNosortContext)); + return dispatchFsmBusiData(organizeCode, getRepeatAssemblySnContextKey(organizeCode, workCenterCode, workCellCode), productionAssemblyContext.getSourceId().toString(), JSONObject.toJSONString(productionAssemblyContext)); } //删除上下文可复用条码信息 diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java index ecaf1de..8f3f510 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java @@ -110,4 +110,10 @@ public class MesProductionAssemblyContext implements Serializable { @ApiParam(name = "数据关联键") public Integer foreignKey; + @ApiParam(value = "是否可复用条码") + public Integer isRepeat; + + @ApiParam(value = "是否可复用条码是否写入上下文进行复用") + public Integer isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java index 9dfde0e..71fb105 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java @@ -25,12 +25,6 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon @ApiParam(value = "BOM明细ID") private String bomDetailId; - @ApiParam(value = "是否可复用条码") - private Integer isRepeat; - - @ApiParam(value = "是否可复用条码是否写入上下文进行复用") - private Integer isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); - @ApiParam(name = "任意装配件扫描错误判断工位isResetScan后是否重新扫描") public Integer isResetScan = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();