From b2ee33414bbc3828a2d8f39e9a21bacbf0c346cf Mon Sep 17 00:00:00 2001 From: yxw Date: Mon, 23 Oct 2023 09:41:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E7=BA=BF=E5=B7=A5=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/jx/IMesManageCodeService.java | 32 ++ .../ext/mes/pcn/api/busi/IProduceSnExtService.java | 28 ++ .../pcn/api/busi/IProduceSnTravelExtService.java | 12 + .../base/ShiftProdCenterRecordService.java | 16 +- .../serviceimpl/base/jx/MesManageCodeService.java | 42 ++ .../serviceimpl/busi/FristItemOrderService.java | 14 +- .../serviceimpl/busi/ProduceSnExtService.java | 25 ++ .../busi/ProduceSnTravelExtService.java | 12 + .../busi/jx/TorqueManageCheckDetailService.java | 2 - .../busi/jx/TorqueManageCheckService.java | 28 +- .../jx/SxNoumenonSnPopUpOnlineModuleService.java | 429 +++++++++++++++++++++ .../jx/SxNoumenonSnlineOffModuleService.java | 423 ++++++++++++++++++++ .../SxNoumenonSnCheckReselectOrderStepService.java | 111 ++++++ .../jx/SxNoumenonSnLineOffQCheckStepService.java | 112 ++++++ .../jx/SxNoumenonSnOnlineCheckSnStepService.java | 173 +++++++++ .../jx/SxNoumenonSnOnlineCompleteStepService.java | 72 ++++ .../jx/SxNoumenonSnOnlineCreateSnStepService.java | 145 +++++++ .../busi/step/jx/SxPlcOutStepService.java | 85 ++++ .../ext/mes/pcn/pojo/bean/MesFirstOrderDetail.java | 4 + .../ext/mes/pcn/pojo/bean/MesManageCode.java | 56 +++ .../pcn/pojo/bean/MesManulExecuteOutTravel.java | 76 ++++ .../mes/pcn/pojo/bean/MesQManageTaskDetail.java | 1 - .../pojo/repository/MesManageCodeRepository.java | 15 + .../MesManulExecuteOutTravelRepository.java | 15 + .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 18 + .../ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java | 34 +- 26 files changed, 1937 insertions(+), 43 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/jx/IMesManageCodeService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/jx/MesManageCodeService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/SxNoumenonSnPopUpOnlineModuleService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/SxNoumenonSnlineOffModuleService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnCheckReselectOrderStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnLineOffQCheckStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCheckSnStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCompleteStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCreateSnStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxPlcOutStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesManageCode.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesManulExecuteOutTravel.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesManageCodeRepository.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesManulExecuteOutTravelRepository.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/jx/IMesManageCodeService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/jx/IMesManageCodeService.java new file mode 100644 index 0000000..8fc58a9 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/jx/IMesManageCodeService.java @@ -0,0 +1,32 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.base.jx; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesManageCode; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Author: xinwang.yi + * @CreateDate: 2023/10/13 13:06 下午 + * @Description: + **/ +public interface IMesManageCodeService { + + /** + * 根据管理编码获取管理码信息 + * @param organizeCode 组织代码 + * @param manageCode 管理编码 + * @return 管理码信息 + */ + @ApiOperation(value = "根据管理编码获取管理码信息", notes = "根据管理编码获取管理码信息") + MesManageCode getManageCode(String organizeCode, String manageCode); + + /** + * 根据管理编码集合获取管理码信息集合 + * @param organizeCode 组织代码 + * @param manageCodeList 管理编码集合 + * @return 管理码信息集合 + */ + @ApiOperation(value = "根据管理编码集合获取管理码信息集合", notes = "根据管理编码集合获取管理码信息集合") + List getManageCodeListByManageCodeList(String organizeCode, List manageCodeList); +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IProduceSnExtService.java index 0b0b518..2b0b1ed 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IProduceSnExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IProduceSnExtService.java @@ -130,6 +130,25 @@ public interface IProduceSnExtService { MesProduceSnExt getProduceSnExtBySn(String organizeCode, String serialNumber); /** + * 根据产品条码获取条码信息 + * @param organizeCode 组织代码 + * @param productSn 产品条码 + * @return 条码信息 + */ + @ApiOperation(value = "根据产品条码获取条码信息", notes = "根据产品条码获取条码信息") + MesProduceSnExt getProduceSnExtByProductSn(String organizeCode, String productSn); + + /** + * 根据产品条码获取条码信息 + * @param organizeCode 组织代码 + * @param serialNumber 产品条码 + * @param workOrderNo 工单号 + * @return 条码信息 + */ + @ApiOperation(value = "根据产品条码获取条码信息", notes = "根据产品条码获取条码信息") + MesProduceSnExt getProduceSnExtBySnAndOrderNo(String organizeCode, String serialNumber, String workOrderNo); + + /** * 设置条码产线 工位 工序 下一道工序 * * @param produceSnExt 条码信息 @@ -249,4 +268,13 @@ public interface IProduceSnExtService { */ @ApiOperation(value = "根据产品条码获取无效状态的条码信息", notes = "根据产品条码获取条码信息") MesProduceSnExt getInvalidProduceSnExtBySn(String organizeCode, String serialNumber); + + + /** + * 新增条码信息 + * @param produceSnExt 条码信息 + * @return 条码信息 + */ + @ApiOperation(value = "新增条码信息", notes = "新增条码信息") + MesProduceSnExt insertProduceSnExt(MesProduceSnExt produceSnExt); } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IProduceSnTravelExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IProduceSnTravelExtService.java index 14b61a0..62ecb34 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IProduceSnTravelExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IProduceSnTravelExtService.java @@ -66,4 +66,16 @@ public interface IProduceSnTravelExtService { @ApiOperation(value = "根据最终工单号,生产线,工位查询条码履历集合", notes = "根据工单号,生产线,工位查询条码履历集合") List getProduceSnTravelExtListByLastOrderNo(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo); + /** + * 根据工单号,生产线,工位查询条码履历集合 + * @param organizeCode 组织代码 + * @param workCenterCode 生产线代码 + * @param workCellCode 工位代码 + * @param workOrderNo 工单号 + * @param serialNumber 条码 + * @return + */ + @ApiOperation(value = "根据工单号,生产线,工位,条码查询条码履历集合", notes = "根据工单号,生产线,工位,条码查询条码履历集合") + MesProduceSnTravelExt getProduceSnTravelExtByOrderNoAndWoAndSn(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo, String serialNumber); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ShiftProdCenterRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ShiftProdCenterRecordService.java index 9a55bdb..89cd693 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ShiftProdCenterRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ShiftProdCenterRecordService.java @@ -168,13 +168,6 @@ public class ShiftProdCenterRecordService implements IShiftProdCenterRecordServi .build(); } - workCenterDb.setShiftCode(null); - workCenterDb.setWorkTime(null); - workCenterDb.setWorkerQty(null); - ConvertBean.serviceModelUpdate(workCenterDb, centerRecordModel.getModifyUser()); - new ConvertBeanExt(workCenterDb).convertBean(workCenterDb); - workCenterExtRepository.save(workCenterDb); - MesShiftProdCenterRecord shiftProdCenterRecordDb = shiftProdCenterRecordRepository.getByProperty( new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.SHIFT_CODE, MesPcnExtConstWords.WORK_TIME, MesPcnExtConstWords.PROD_TYPE}, @@ -189,6 +182,13 @@ public class ShiftProdCenterRecordService implements IShiftProdCenterRecordServi .build(); } + workCenterDb.setShiftCode(null); + workCenterDb.setWorkTime(null); + workCenterDb.setWorkerQty(null); + ConvertBean.serviceModelUpdate(workCenterDb, centerRecordModel.getModifyUser()); + new ConvertBeanExt(workCenterDb).convertBean(workCenterDb); + workCenterExtRepository.save(workCenterDb); + shiftProdCenterRecordDb.setEndTime(centerRecordModel.getEndTime()); shiftProdCenterRecordDb.setPartCutCount(centerRecordModel.getPartCutCount()); shiftProdCenterRecordDb.setOvertimeNum(centerRecordModel.getOvertimeNum()); @@ -282,7 +282,7 @@ public class ShiftProdCenterRecordService implements IShiftProdCenterRecordServi } startOrEndShiftRecord.setWorkCenterCode(centerRecordModel.getWorkCenterCode()); - startOrEndShiftRecord.setStartTime(TimeTool.getNowTime(true)); + startOrEndShiftRecord.setStartTime(centerRecordModel.getStartTime()); startOrEndShiftRecord.setShiftCode(shiftDb.getShiftCode()); startOrEndShiftRecord.setShiftName(shiftDb.getShiftName()); startOrEndShiftRecord.setWorkTime(workTime); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/jx/MesManageCodeService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/jx/MesManageCodeService.java new file mode 100644 index 0000000..ba24fb5 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/jx/MesManageCodeService.java @@ -0,0 +1,42 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base.jx; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.jx.IMesManageCodeService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesManageCode; +import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesManageCodeRepository; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @PROJECT_NAME: i3plus-mes-panasonic-jx + * @DESCRIPTION: + * @USER: xinwang.yi + * @DATE: 2023-10-13 13:46 + */ +@Service +public class MesManageCodeService implements IMesManageCodeService { + + @Autowired + private MesManageCodeRepository manageCodeRepository; + + @Override + public MesManageCode getManageCode(String organizeCode, String manageCode) { + return manageCodeRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.MANAGE_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), manageCode}); + } + + @Override + public List getManageCodeListByManageCodeList(String organizeCode, List manageCodeList) { + if (CollectionUtils.isEmpty(manageCodeList)) return null; + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(manageCodeList, MesPcnExtConstWords.MANAGE_CODE, ddlPackBean); + return manageCodeRepository.findByHqlWhere(ddlPackBean); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/FristItemOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/FristItemOrderService.java index 3156435..d455e31 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/FristItemOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/FristItemOrderService.java @@ -72,13 +72,13 @@ public class FristItemOrderService implements IWorkOrderStartService { new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.WORK_CENTER_CODE}, new Object[]{workOrderExt.getOrganizeCode(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), workOrderExt.getWorkCenterCode()}); if (null == workCenterExt) { - msg = String.format("工单首检生成单据:工单[%s]生产线[%s]无效", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode()); + msg = String.format("Q管理生成单据:工单[%s]生产线[%s]无效", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode()); log.info(msg); checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo); return; } if (StringUtils.isEmpty(workCenterExt.getShiftCode()) || StringUtils.isEmpty(workCenterExt.getWorkTime())) { - msg = String.format("工单首检生成单据:工单[%s]生产线[%s]未启动班次", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode()); + msg = String.format("Q管理生成单据:工单[%s]生产线[%s]未启动班次", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode()); log.info(msg); checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo); return; @@ -95,7 +95,7 @@ public class FristItemOrderService implements IWorkOrderStartService { orderRuleOp = CollectionUtils.isEmpty(orderRuleList) ? null : orderRuleList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getShiftCode()))).findFirst(); } if (null == orderRuleOp || !orderRuleOp.isPresent()) { - msg = String.format("工单首检生成单据:工单[%s]未配置生产线代码[%s][工单创建][工单首检]班次为[%s]或班次为空的单据规则信息,请检查", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode(), workCenterExt.getShiftCode()); + msg = String.format("Q管理生成单据:工单[%s]未配置生产线代码[%s][工单创建][Q管理]班次为[%s]或班次为空的单据规则信息,请检查", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode(), workCenterExt.getShiftCode()); log.info(msg); checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo); return; @@ -107,7 +107,7 @@ public class FristItemOrderService implements IWorkOrderStartService { Map> processCodeMap = CollectionUtils.isEmpty(processCellList) ? null : processCellList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getProcessCode()))).collect(Collectors.groupingBy(MesProcessCell::getProcessCode)); if (CollectionUtils.isEmpty(processCodeMap)) { - msg = String.format("工单首检生成单据:工单[%s]生产线代码[%s]未维护工序工位信息", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode()); + msg = String.format("Q管理生成单据:工单[%s]生产线代码[%s]未维护工序工位信息", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode()); log.info(msg); checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo); return; @@ -122,7 +122,7 @@ public class FristItemOrderService implements IWorkOrderStartService { DdlPreparedPack.getStringEqualPack(workOrderExt.getOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean); List orderJobList = orderJobRepository.findByHqlWhere(packBean); if (!CollectionUtils.isEmpty(orderJobList)) { - msg = String.format("工单首检生成单据:工单[%s]已经生成过首检单", workOrderExt.getOrderNo()); + msg = String.format("Q管理生成单据:工单[%s]已经生成过首检单", workOrderExt.getOrderNo()); log.info(msg); checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo); return; @@ -133,7 +133,7 @@ public class FristItemOrderService implements IWorkOrderStartService { DdlPreparedPack.getInPackList(processCodeList, MesPcnExtConstWords.PROCESS_CODE, packBean1); List processFirstItemList = mesProcessFirstItemRDao.findByHqlWhere(packBean1); if (CollectionUtils.isEmpty(processFirstItemList)) { - msg = String.format("工单首检生成单据:工单[%s]物料编码[%s]与工序代码%s未配置工单首检项目信息,请检查", workOrderExt.getOrderNo(), workOrderExt.getPartNo(), processCodeList.toString()); + msg = String.format("Q管理生成单据:工单[%s]物料编码[%s]与工序代码%s未配置Q管理项目信息,请检查", workOrderExt.getOrderNo(), workOrderExt.getPartNo(), processCodeList.toString()); log.info(msg); checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo); return; @@ -155,7 +155,7 @@ public class FristItemOrderService implements IWorkOrderStartService { List orderNoList = getOrderNoByRuleCode(1, MesPcnExtConstWords.ORDER_NO_RULE, new GenSerialNoModel(), userInfo, workOrderExt.getOrganizeCode()); if (CollectionUtils.isEmpty(orderNoList)) { - String msg = String.format("工单首检生成单据:工单[%s]单据编号未生成成功", workOrderExt.getOrderNo()); + String msg = String.format("Q管理生成单据:工单[%s]单据编号未生成成功", workOrderExt.getOrderNo()); log.info(msg); checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo); return null; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/ProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/ProduceSnExtService.java index 424ae96..921c4dd 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/ProduceSnExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/ProduceSnExtService.java @@ -617,6 +617,26 @@ public class ProduceSnExtService implements IProduceSnExtService { } @Override + public MesProduceSnExt getProduceSnExtByProductSn(String organizeCode, String productSn) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn)) { + return null; + } + return produceSnExtRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PRODUCT_SN}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), productSn}); + } + + @Override + public MesProduceSnExt getProduceSnExtBySnAndOrderNo(String organizeCode, String serialNumber, String workOrderNo) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(serialNumber) || StringUtils.isEmpty(workOrderNo)) { + return null; + } + return produceSnExtRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.SERIAL_NUMBER, MesPcnExtConstWords.WORK_ORDER_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), serialNumber, workOrderNo}); + } + + @Override public void packSnExtProcess(MesProduceSnExt produceSnExt, String organizeCode, String workCenterCode, String workCellCode) { if (null != produceSnExt && !StringUtils.isEmpty(organizeCode) && !StringUtils.isEmpty(workCenterCode) && !StringUtils.isEmpty(workCellCode)) { MesRouteProcessCell processCell = routeProcessCellRepository.getByProperty( @@ -1287,6 +1307,11 @@ public class ProduceSnExtService implements IProduceSnExtService { new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.INVAILD.getValue(), serialNumber}); } + @Override + public MesProduceSnExt insertProduceSnExt(MesProduceSnExt produceSnExt) { + return produceSnExtRepository.save(produceSnExt); + } + public List getPackageListByOrderNo(String organizeCode, String workOrderNo) { if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workOrderNo)) { return null; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/ProduceSnTravelExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/ProduceSnTravelExtService.java index c358322..8d32387 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/ProduceSnTravelExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/ProduceSnTravelExtService.java @@ -97,4 +97,16 @@ public class ProduceSnTravelExtService implements IProduceSnTravelExtService { workCenterCode, workCellCode, workOrderNo}); } + @Override + public MesProduceSnTravelExt getProduceSnTravelExtByOrderNoAndWoAndSn(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo, String serialNumber) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode) || StringUtils.isEmpty(workCellCode) || StringUtils.isEmpty(workOrderNo) || StringUtils.isEmpty(serialNumber)) { + return null; + } + return produceSnTravelExtRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, + MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE, MesPcnExtConstWords.LAST_WORK_ORDER_NO, MesPcnExtConstWords.SERIAL_NUMBER}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), + workCenterCode, workCellCode, workOrderNo, serialNumber}); + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/TorqueManageCheckDetailService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/TorqueManageCheckDetailService.java index bedf36c..41b5622 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/TorqueManageCheckDetailService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/TorqueManageCheckDetailService.java @@ -10,7 +10,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.TimeTool; -import cn.estsh.i3plus.platform.common.util.MesConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -24,7 +23,6 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/TorqueManageCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/TorqueManageCheckService.java index 48c203b..c9ff466 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/TorqueManageCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/TorqueManageCheckService.java @@ -238,20 +238,20 @@ public class TorqueManageCheckService implements IWorkOrderStartService { return true; } - DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderExt.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(MesPcnExtEnumUtil.MES_OR_ORDER_TYPE.PART_CHECK.getValue(), MesPcnExtConstWords.ORDER_TYPE, packBean); - DdlPreparedPack.getStringEqualPack(workOrderExt.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); - DdlPreparedPack.getStringEqualPack(workCenterExt.getShiftCode(), MesPcnExtConstWords.SHIFT_CODE, packBean); - DdlPreparedPack.getStringEqualPack(workCenterExt.getWorkTime(), MesPcnExtConstWords.WORK_TIME, packBean); - DdlPreparedPack.getStringEqualPack(workOrderExt.getOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean); - List orderJobList = orderJobRepository.findByHqlWhere(packBean); - - if (!CollectionUtils.isEmpty(orderJobList)) { - msg = String.format("扭矩管理点检生成单据:工单[%s]已经生成过扭矩管理点检单", workOrderExt.getOrderNo()); - log.info(msg); - checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo); - return true; - } + //DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderExt.getOrganizeCode()); + //DdlPreparedPack.getNumEqualPack(MesPcnExtEnumUtil.MES_OR_ORDER_TYPE.TORQUE_MANAGE.getValue(), MesPcnExtConstWords.ORDER_TYPE, packBean); + //DdlPreparedPack.getStringEqualPack(workOrderExt.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + //DdlPreparedPack.getStringEqualPack(workCenterExt.getShiftCode(), MesPcnExtConstWords.SHIFT_CODE, packBean); + //DdlPreparedPack.getStringEqualPack(workCenterExt.getWorkTime(), MesPcnExtConstWords.WORK_TIME, packBean); + //DdlPreparedPack.getStringEqualPack(workOrderExt.getOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean); + //List orderJobList = orderJobRepository.findByHqlWhere(packBean); + // + //if (!CollectionUtils.isEmpty(orderJobList)) { + // msg = String.format("扭矩管理点检生成单据:工单[%s]已经生成过扭矩管理点检单", workOrderExt.getOrderNo()); + // log.info(msg); + // checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo); + // return true; + //} return false; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/SxNoumenonSnPopUpOnlineModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/SxNoumenonSnPopUpOnlineModuleService.java new file mode 100644 index 0000000..b359802 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/SxNoumenonSnPopUpOnlineModuleService.java @@ -0,0 +1,429 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IShiftExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IShiftProdCenterRecordService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IWorkCenterExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnTravelExtService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IPackageExtDao; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesManulExecuteOutTravel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnTravelExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkCenterExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesManulExecuteOutTravelRepository; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; +import cn.estsh.i3plus.mes.pcn.api.iservice.busi.IShippingDispatchService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseModuleService; +import cn.estsh.i3plus.mes.pcn.util.LocaleUtil; +import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +import cn.estsh.i3plus.platform.plugin.opc.iservice.IOpcUAService; +import cn.estsh.i3plus.platform.plugin.opc.service.OpcUAService; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.hardswitch.bean.OpcUAParam; +import cn.estsh.i3plus.pojo.mes.bean.MesPlc; +import cn.estsh.i3plus.pojo.mes.bean.MesShift; +import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus; +import cn.estsh.i3plus.pojo.mes.model.AttrBean; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.repository.MesPlcRepository; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.text.MessageFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : 展示组件:本体包装前置组件(生成包装条码) + * @Reference : + * @Author :wangjie + * @CreateDate : 2020-06-26 11:18 上午 + * @Modify: + **/ +@Slf4j +@Service("sxNoumenonSnPopUpOnlineModuleService") +public class SxNoumenonSnPopUpOnlineModuleService extends BaseModuleService { + + @Autowired + private IWorkCenterExtService workCenterExtService; + + @Autowired + private IShiftExtService shiftExtService; + + @Autowired + private IShiftProdCenterRecordService shiftProdCenterRecordService; + + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Autowired + private IFsmCommonService fsmCommonService; + + @Autowired + private MesPlcRepository plcRepository; + + @Autowired + private MesManulExecuteOutTravelRepository manulExecuteOutRepository; + + @Resource(name = MesPcnExtConstWords.REDIS_RES_PCN) + private ImppRedis redisMesPcn; + + private static final String LAST_SELECT_ORDER = "LAST_SELECT_ORDER"; + + private static final String NOUMENON_SN_ONLINE_DATA = "NOUMENON_SN_ONLINE_DATA"; + + @Override + public void init(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + String err; + + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()); + resultBean.setCustomPageName(MesPcnExtConstWords.NOUMENON_SN_POP_UP_ONLINE); + //resultBean.setCustomPageName(MesPcnExtConstWords.NOUMENON_PACKAGE_MODULE); + + //resultBean.setDataAttrList(packDataAttrList(reqBean)); + resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); + + MesWorkCenterExt workCenterExt = workCenterExtService.getWorkCenterExtByWorkCenterCode(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + if (null == workCenterExt || (StringUtils.isEmpty(workCenterExt.getShiftCode()) || StringUtils.isEmpty(workCenterExt.getWorkTime()))) { + this.sendMessage(reqBean, resultBean); + err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "生产线[%s]未启动班次"), reqBean.getWorkCenterCode()); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("生产线[%s]未启动班次", reqBean.getWorkCenterCode()) + .build(); + } + MesShift shiftDb = shiftExtService.getShiftByShiftCodeAndCenterCode(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), workCenterExt.getShiftCode()); + if (null == shiftDb) { + this.sendMessage(reqBean, resultBean); + err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "生产线[%s]未关联班次代码[%s]"), reqBean.getWorkCenterCode(), workCenterExt.getShiftCode()); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + .setErrorDetail("生产线[%s]未关联班次代码[%s]", reqBean.getWorkCenterCode(), workCenterExt.getShiftCode()) + .build(); + } + String workTime = shiftProdCenterRecordService.getWorkTime(shiftDb.getStartTime(), shiftDb.getEndTime()); + if (StringUtils.isEmpty(workTime) || !workTime.equals(workCenterExt.getWorkTime())) { + this.sendMessage(reqBean, resultBean); + err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "生产线[%s]需要重新启动班次"), reqBean.getWorkCenterCode()); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + .setErrorDetail("生产线[%s]需要重新启动班次", reqBean.getWorkCenterCode()) + .build(); + } + //if (StringUtils.isEmpty(reqBean.getWorkOrderNo())) { + // this.sendMessage(reqBean, resultBean); + // err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "请选择工单"); + // this.sendMessage(reqBean, null, err, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + // .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + // .setErrorDetail("请选择工单") + // .build(); + //} + // + //List produceSnTravelExtList = produceSnTravelExtService.getProduceSnTravelExtListByOrderNo( + // reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getWorkOrderNo()); + // + //int snCount = CollectionUtils.isEmpty(produceSnTravelExtList) ? 0 : produceSnTravelExtList.size(); + // + //MesWorkOrderExt workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), reqBean.getWorkOrderNo()); + //if (null == workOrderExt || MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() != workOrderExt.getWorkOrderStatus() || + // MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() == workOrderExt.getWorkOrderType()) { + // this.sendMessage(reqBean, resultBean); + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + // .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + // .setErrorDetail("工单[%s]不能在此工位操作", reqBean.getWorkOrderNo()) + // .build(); + // + //} else if (snCount >= workOrderExt.getQty().intValue()) { + // this.sendMessage(reqBean, resultBean); + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + // .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + // .setErrorDetail("工单[%s]已达绑定数量,不能在此工位操作", reqBean.getWorkOrderNo()) + // .build(); + //} + + Map wcpcMap = fsmCommonService.getCachedWorkCellParam(reqBean); + reqBean.setWorkOrderNo(wcpcMap.get("WORK_ORDER_NO")); + doHandleSelectWorkOrderNo(reqBean, 2, wcpcMap.get("WORK_ORDER_NO")); + + //resultBean.setResultMap(packResultMap(workOrderExt, produceSnTravelExtList)); + + this.sendMessage(reqBean, resultBean); + } + + private Map packResultMap(MesWorkOrderExt workOrderExt, List produceSnTravelExtList) { + Map resultMap = new HashMap<>(); + resultMap.put(MesPcnExtConstWords.WORK_ORDER_NO, workOrderExt.getOrderNo()); + resultMap.put(MesPcnExtConstWords.WORK_ORDER_TYPE_NAME, MesPcnExtEnumUtil.WORK_ORDER_TYPE.valueOfDescription(workOrderExt.getWorkOrderType())); + resultMap.put(MesPcnExtConstWords.PART_NO, workOrderExt.getPartNo()); + resultMap.put(MesPcnExtConstWords.PART_NAME, workOrderExt.getPartNameRdd()); + resultMap.put(MesPcnExtConstWords.QTY, workOrderExt.getQty()); + resultMap.put(MesPcnExtConstWords.COMPLETE_QTY, CollectionUtils.isEmpty(produceSnTravelExtList) ? 0 : produceSnTravelExtList.size()); + return resultMap; + } + + private List packDataAttrList(StationRequestBean reqBean) { + List attrBeanList = new ArrayList<>(); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.SERIAL_NUMBER, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "产品条码")); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PACKAGENO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "包装条码")); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.CREATE_DATE_TIME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "扫描时间")); + return attrBeanList; + } + + private String getLastSelectOrderKey(StationRequestBean reqBean) { + return getCacheKey(reqBean, LAST_SELECT_ORDER); + } + + @Override + public boolean execute(StationRequestBean reqBean) { + return true; + } + + @Override + public boolean execStateModule(StationRequestBean reqBean, List states, Map wcpcMap) { + log.info(" sxNoumenonSnPopUpOnlineModuleService --- wcpcMap:{}", wcpcMap); + init(reqBean); + return true; + } + + public synchronized Object doHandleManageCode(StationRequestBean reqBean, Integer flag, String value) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getCacheKey(reqBean, MesPcnExtConstWords.CUR_MANAGE_CODE), MesPcnExtConstWords.CUR_MANAGE_CODE); + case 2: + return redisMesPcn.putHash(getCacheKey(reqBean, MesPcnExtConstWords.CUR_MANAGE_CODE), MesPcnExtConstWords.CUR_MANAGE_CODE, value, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getCacheKey(reqBean, MesPcnExtConstWords.CUR_MANAGE_CODE), MesPcnExtConstWords.CUR_MANAGE_CODE); + return true; + default: + return null; + } + } + + private String getDataKey(StationRequestBean reqBean) { + return new StringJoiner(MesPcnExtConstWords.COLON) + .add(reqBean.getOrganizeCode()).add(NOUMENON_SN_ONLINE_DATA).add(reqBean.getWorkCenterCode()).toString(); + } + + public Object doReadOpcParamValue(MesPlc plc) { + IOpcUAService opcService = new OpcUAService(); + String tagAddress = MessageFormat.format("{0}.{1}.{2}", plc.getChannel(), plc.getDevice(), plc.getTagAddress()); + OpcUAParam opcParam = new OpcUAParam(); + opcParam.setServerUrl(plc.getOpcUrl()); + opcParam.setTagAddress(tagAddress); + opcParam.setNamespaceIndex(plc.getNameSpaceIndex()); + opcParam.setTagValueType(plc.getDataType()); + Object result = opcService.getOpcParamValue(opcParam); + opcService.disConnection(); + return result; + } + + public Boolean doWriteOpcParamValue(MesPlc plc, String value) { + IOpcUAService opcService = new OpcUAService(); + String tagAddress = MessageFormat.format("{0}.{1}.{2}", plc.getChannel(), plc.getDevice(), plc.getTagAddress()); + OpcUAParam opcParam = new OpcUAParam(); + opcParam.setServerUrl(plc.getOpcUrl()); + opcParam.setTagAddress(tagAddress); + opcParam.setNamespaceIndex(plc.getNameSpaceIndex()); + opcParam.setTagValueType(plc.getDataType()); + opcParam.setTagValue(value); + Boolean result = opcService.editOpcParamValue(opcParam); + opcService.disConnection(); + return result; + } + + public Boolean doReadOpcParamValueIsEquDefaultVal(MesPlc plc, String defaultVal, Boolean isEqu) { + Object plcValue = doReadOpcParamValue(plc); + if (StringUtils.isEmpty(plcValue)) { + return false; + } + if (isEqu) { + if (plcValue.toString().equals(defaultVal)) { + return true; + } else { + return false; + } + } else { + if (plcValue.toString().equals(defaultVal)) { + return false; + } else { + return true; + } + } + } + + public void putLastSelectOrder(StationRequestBean reqBean) { + redisMesPcn.putObject(getLastSelectOrderKey(reqBean), reqBean.getWorkOrderNo(), MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + } + + @Override + public boolean doFunction(StationRequestBean reqBean) { + Boolean result = false; + Map dataMap = reqBean.getDataMap(); + String command = (String) dataMap.get(MesPcnExtConstWords.COMMAND); + Object value = dataMap.get(MesPcnExtConstWords.VALUE); + if (StringUtils.isEmpty(command)) { + this.sendMessage(reqBean, null, "后端未获取到业务功能指令", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + switch (command) { + case MesPcnExtConstWords.CMD_WORK_ORDER : + if (StringUtils.isEmpty(value)) { + this.sendMessage(reqBean, null, "请选择启动状态的工单", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + String selectWorkOrderNo = (String) doHandleSelectWorkOrderNo(reqBean, 1, null); + if (!StringUtils.isEmpty(selectWorkOrderNo) && selectWorkOrderNo.equals(value)) return result; + if (StringUtils.isEmpty(selectWorkOrderNo)) { + if ((Boolean) doHandleSelectWorkOrderNo(reqBean, 2, value.toString())) { + result = true; + } + else { + this.sendMessage(reqBean, null, String.format("切换的生产工单[%s]缓存失败,请重试", value), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + } + break; + case MesPcnExtConstWords.EXECUTE_OUT: + if (StringUtils.isEmpty(value)) { + this.sendMessage(reqBean, null, "入参缺少强制放行的工步代码", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + Map wcpcMap = fsmCommonService.getCachedWorkCellParam(reqBean); + String plcCode = wcpcMap.get("PLC_CODE"); + String executeOutPwd = wcpcMap.get("EXECUTE_OUT_PWD"); + + if (StringUtils.isEmpty(executeOutPwd)) { + this.sendMessage(reqBean, null, "当前工位未维护强制放行密码", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + if (StringUtils.isEmpty(plcCode)) { + this.sendMessage(reqBean, null, "当前工位未维护PLC代码", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + List executeOutPwdList = Arrays.stream(executeOutPwd.split(MesPcnExtConstWords.COMMA)).collect(Collectors.toList()); + if (!executeOutPwdList.contains(value)) { + this.sendMessage(reqBean, null, "强制密码错误", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + MesPlc plc = getPlc(reqBean.getOrganizeCode(), plcCode); + if (plc == null) { + this.sendMessage(reqBean, null, String.format("PLC代码[%s]不存在", plcCode), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + Boolean writeResult = doWriteOpcParamValue(plc, "1"); + + // 手动强制执行履行 + MesManulExecuteOutTravel manulExecuteOutTravel = new MesManulExecuteOutTravel(); + manulExecuteOutTravel.setPartNo(reqBean.getPartNo()); + manulExecuteOutTravel.setPartNameRdd(reqBean.getPartName()); + manulExecuteOutTravel.setProcessCode(reqBean.getProcessCode()); + manulExecuteOutTravel.setSerialNumber(reqBean.getSerialNumber()); + manulExecuteOutTravel.setWorkCellCode(reqBean.getWorkCellCode()); + manulExecuteOutTravel.setWorkCenterCode(reqBean.getWorkCenterCode()); + manulExecuteOutTravel.setWorkOrderNo(reqBean.getWorkOrderNo()); + ConvertBean.serviceModelInitialize(manulExecuteOutTravel, reqBean.getUserInfo()); + manulExecuteOutRepository.save(manulExecuteOutTravel); + + log.info("SxNoumenonSnPopUpOnlineModuleService --- 放行结果:{} ", writeResult); + + result = true; + break; + default: + break; + } + + if (!result) this.sendMessage(reqBean, null, "操作太频繁", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + else { + //跳过工序 + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); + reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setForceJumpProcess(true); + shippingDispatchService.doSendScanQueueNextExec(reqBean); + } + return result; + } + + public MesPlc getPlc(String organizeCode, String plcCode) { + + return plcRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.PLC_CODE}, + new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), plcCode}); + } + + public synchronized Object doHandleSelectWorkOrderNo(StationRequestBean reqBean, Integer flag, String selectWorkOrderNo) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER); + case 2: + return redisMesPcn.putHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER, selectWorkOrderNo, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER); + return true; + default: + return null; + } + } + + public synchronized Object doHandleCurExecWorkOrder(StationRequestBean reqBean, Integer flag, String curExecWorkOrder) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getDataKey(reqBean), MesPcnExtConstWords.CUR_EXEC_WORK_ORDER); + case 2: + return redisMesPcn.putHash(getDataKey(reqBean), MesPcnExtConstWords.CUR_EXEC_WORK_ORDER, curExecWorkOrder, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getDataKey(reqBean), MesPcnExtConstWords.CUR_EXEC_WORK_ORDER); + return true; + default: + return null; + } + } + + public synchronized Object doHandleSelectWorkOrderType(StationRequestBean reqBean, Integer flag, String selectWorkOrderType) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER_TYPE); + case 2: + return redisMesPcn.putHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER_TYPE, selectWorkOrderType, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER_TYPE); + return true; + default: + return null; + } + } + + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/SxNoumenonSnlineOffModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/SxNoumenonSnlineOffModuleService.java new file mode 100644 index 0000000..7ea4042 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/SxNoumenonSnlineOffModuleService.java @@ -0,0 +1,423 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IShiftExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IShiftProdCenterRecordService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IWorkCenterExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesManulExecuteOutTravel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnTravelExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkCenterExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesManulExecuteOutTravelRepository; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; +import cn.estsh.i3plus.mes.pcn.api.iservice.busi.IShippingDispatchService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseModuleService; +import cn.estsh.i3plus.mes.pcn.util.LocaleUtil; +import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +import cn.estsh.i3plus.platform.plugin.opc.iservice.IOpcUAService; +import cn.estsh.i3plus.platform.plugin.opc.service.OpcUAService; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.hardswitch.bean.OpcUAParam; +import cn.estsh.i3plus.pojo.mes.bean.MesPlc; +import cn.estsh.i3plus.pojo.mes.bean.MesShift; +import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus; +import cn.estsh.i3plus.pojo.mes.model.AttrBean; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.repository.MesPlcRepository; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.text.MessageFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : 展示组件:本体包装前置组件(生成包装条码) + * @Reference : + * @Author :wangjie + * @CreateDate : 2020-06-26 11:18 上午 + * @Modify: + **/ +@Slf4j +@Service("sxNoumenonSnlineOffModuleService") +public class SxNoumenonSnlineOffModuleService extends BaseModuleService { + + @Autowired + private IWorkCenterExtService workCenterExtService; + + @Autowired + private IShiftExtService shiftExtService; + + @Autowired + private IShiftProdCenterRecordService shiftProdCenterRecordService; + + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Autowired + private IFsmCommonService fsmCommonService; + + @Autowired + private MesPlcRepository plcRepository; + + @Autowired + private MesManulExecuteOutTravelRepository manulExecuteOutRepository; + + @Resource(name = MesPcnExtConstWords.REDIS_RES_PCN) + private ImppRedis redisMesPcn; + + private static final String LAST_SELECT_ORDER = "LAST_SELECT_ORDER"; + + @Override + public void init(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + String err; + + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()); + resultBean.setCustomPageName(MesPcnExtConstWords.NOUMENON_SN_LINE_OFF); + //resultBean.setCustomPageName(MesPcnExtConstWords.NOUMENON_PACKAGE_MODULE); + + //resultBean.setDataAttrList(packDataAttrList(reqBean)); + resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); + + MesWorkCenterExt workCenterExt = workCenterExtService.getWorkCenterExtByWorkCenterCode(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + if (null == workCenterExt || (StringUtils.isEmpty(workCenterExt.getShiftCode()) || StringUtils.isEmpty(workCenterExt.getWorkTime()))) { + this.sendMessage(reqBean, resultBean); + err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "生产线[%s]未启动班次"), reqBean.getWorkCenterCode()); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("生产线[%s]未启动班次", reqBean.getWorkCenterCode()) + .build(); + } + MesShift shiftDb = shiftExtService.getShiftByShiftCodeAndCenterCode(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), workCenterExt.getShiftCode()); + if (null == shiftDb) { + this.sendMessage(reqBean, resultBean); + err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "生产线[%s]未关联班次代码[%s]"), reqBean.getWorkCenterCode(), workCenterExt.getShiftCode()); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + .setErrorDetail("生产线[%s]未关联班次代码[%s]", reqBean.getWorkCenterCode(), workCenterExt.getShiftCode()) + .build(); + } + String workTime = shiftProdCenterRecordService.getWorkTime(shiftDb.getStartTime(), shiftDb.getEndTime()); + if (StringUtils.isEmpty(workTime) || !workTime.equals(workCenterExt.getWorkTime())) { + this.sendMessage(reqBean, resultBean); + err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "生产线[%s]需要重新启动班次"), reqBean.getWorkCenterCode()); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + .setErrorDetail("生产线[%s]需要重新启动班次", reqBean.getWorkCenterCode()) + .build(); + } + //if (StringUtils.isEmpty(reqBean.getWorkOrderNo())) { + // this.sendMessage(reqBean, resultBean); + // err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "请选择工单"); + // this.sendMessage(reqBean, null, err, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + // .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + // .setErrorDetail("请选择工单") + // .build(); + //} + // + //List produceSnTravelExtList = produceSnTravelExtService.getProduceSnTravelExtListByOrderNo( + // reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getWorkOrderNo()); + // + //int snCount = CollectionUtils.isEmpty(produceSnTravelExtList) ? 0 : produceSnTravelExtList.size(); + // + //MesWorkOrderExt workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), reqBean.getWorkOrderNo()); + //if (null == workOrderExt || MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() != workOrderExt.getWorkOrderStatus() || + // MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() == workOrderExt.getWorkOrderType()) { + // this.sendMessage(reqBean, resultBean); + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + // .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + // .setErrorDetail("工单[%s]不能在此工位操作", reqBean.getWorkOrderNo()) + // .build(); + // + //} else if (snCount >= workOrderExt.getQty().intValue()) { + // this.sendMessage(reqBean, resultBean); + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + // .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + // .setErrorDetail("工单[%s]已达绑定数量,不能在此工位操作", reqBean.getWorkOrderNo()) + // .build(); + //} + + Map wcpcMap = fsmCommonService.getCachedWorkCellParam(reqBean); + reqBean.setWorkOrderNo(wcpcMap.get("WORK_ORDER_NO")); + doHandleSelectWorkOrderNo(reqBean, 2, wcpcMap.get("WORK_ORDER_NO")); + + //resultBean.setResultMap(packResultMap(workOrderExt, produceSnTravelExtList)); + + this.sendMessage(reqBean, resultBean); + } + + private Map packResultMap(MesWorkOrderExt workOrderExt, List produceSnTravelExtList) { + Map resultMap = new HashMap<>(); + resultMap.put(MesPcnExtConstWords.WORK_ORDER_NO, workOrderExt.getOrderNo()); + resultMap.put(MesPcnExtConstWords.WORK_ORDER_TYPE_NAME, MesPcnExtEnumUtil.WORK_ORDER_TYPE.valueOfDescription(workOrderExt.getWorkOrderType())); + resultMap.put(MesPcnExtConstWords.PART_NO, workOrderExt.getPartNo()); + resultMap.put(MesPcnExtConstWords.PART_NAME, workOrderExt.getPartNameRdd()); + resultMap.put(MesPcnExtConstWords.QTY, workOrderExt.getQty()); + resultMap.put(MesPcnExtConstWords.COMPLETE_QTY, CollectionUtils.isEmpty(produceSnTravelExtList) ? 0 : produceSnTravelExtList.size()); + return resultMap; + } + + private List packDataAttrList(StationRequestBean reqBean) { + List attrBeanList = new ArrayList<>(); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.SERIAL_NUMBER, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "产品条码")); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PACKAGENO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "包装条码")); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.CREATE_DATE_TIME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "扫描时间")); + return attrBeanList; + } + + private String getLastSelectOrderKey(StationRequestBean reqBean) { + return getCacheKey(reqBean, LAST_SELECT_ORDER); + } + + @Override + public boolean execute(StationRequestBean reqBean) { + return true; + } + + @Override + public boolean execStateModule(StationRequestBean reqBean, List states, Map wcpcMap) { + log.info(" sxNoumenonSnlineOffModuleService --- wcpcMap:{}", wcpcMap); + init(reqBean); + return true; + } + + public synchronized Object doHandleManageCode(StationRequestBean reqBean, Integer flag, String value) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getCacheKey(reqBean, MesPcnExtConstWords.CUR_MANAGE_CODE), MesPcnExtConstWords.CUR_MANAGE_CODE); + case 2: + return redisMesPcn.putHash(getCacheKey(reqBean, MesPcnExtConstWords.CUR_MANAGE_CODE), MesPcnExtConstWords.CUR_MANAGE_CODE, value, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getCacheKey(reqBean, MesPcnExtConstWords.CUR_MANAGE_CODE), MesPcnExtConstWords.CUR_MANAGE_CODE); + return true; + default: + return null; + } + } + + private String getDataKey(StationRequestBean reqBean) { + return new StringJoiner(MesPcnExtConstWords.COLON) + .add(reqBean.getOrganizeCode()).add(MesPcnExtConstWords.NOUMENON_SN_LINE_OFF).add(reqBean.getWorkCenterCode()).toString(); + } + + public Object doReadOpcParamValue(MesPlc plc) { + IOpcUAService opcService = new OpcUAService(); + String tagAddress = MessageFormat.format("{0}.{1}.{2}", plc.getChannel(), plc.getDevice(), plc.getTagAddress()); + OpcUAParam opcParam = new OpcUAParam(); + opcParam.setServerUrl(plc.getOpcUrl()); + opcParam.setTagAddress(tagAddress); + opcParam.setNamespaceIndex(plc.getNameSpaceIndex()); + opcParam.setTagValueType(plc.getDataType()); + Object result = opcService.getOpcParamValue(opcParam); + opcService.disConnection(); + return result; + } + + public Boolean doWriteOpcParamValue(MesPlc plc, String value) { + IOpcUAService opcService = new OpcUAService(); + String tagAddress = MessageFormat.format("{0}.{1}.{2}", plc.getChannel(), plc.getDevice(), plc.getTagAddress()); + OpcUAParam opcParam = new OpcUAParam(); + opcParam.setServerUrl(plc.getOpcUrl()); + opcParam.setTagAddress(tagAddress); + opcParam.setNamespaceIndex(plc.getNameSpaceIndex()); + opcParam.setTagValueType(plc.getDataType()); + opcParam.setTagValue(value); + Boolean result = opcService.editOpcParamValue(opcParam); + opcService.disConnection(); + return result; + } + + public Boolean doReadOpcParamValueIsEquDefaultVal(MesPlc plc, String defaultVal, Boolean isEqu) { + Object plcValue = doReadOpcParamValue(plc); + if (StringUtils.isEmpty(plcValue)) { + return false; + } + if (isEqu) { + if (plcValue.toString().equals(defaultVal)) { + return true; + } else { + return false; + } + } else { + if (plcValue.toString().equals(defaultVal)) { + return false; + } else { + return true; + } + } + } + + public void putLastSelectOrder(StationRequestBean reqBean) { + redisMesPcn.putObject(getLastSelectOrderKey(reqBean), reqBean.getWorkOrderNo(), MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + } + + @Override + public boolean doFunction(StationRequestBean reqBean) { + Boolean result = false; + Map dataMap = reqBean.getDataMap(); + String command = (String) dataMap.get(MesPcnExtConstWords.COMMAND); + Object value = dataMap.get(MesPcnExtConstWords.VALUE); + if (StringUtils.isEmpty(command)) { + this.sendMessage(reqBean, null, "后端未获取到业务功能指令", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + switch (command) { + case MesPcnExtConstWords.CMD_WORK_ORDER : + if (StringUtils.isEmpty(value)) { + this.sendMessage(reqBean, null, "请选择启动状态的工单", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + String selectWorkOrderNo = (String) doHandleSelectWorkOrderNo(reqBean, 1, null); + if (!StringUtils.isEmpty(selectWorkOrderNo) && selectWorkOrderNo.equals(value)) return result; + if (StringUtils.isEmpty(selectWorkOrderNo)) { + if ((Boolean) doHandleSelectWorkOrderNo(reqBean, 2, value.toString())) { + result = true; + } + else { + this.sendMessage(reqBean, null, String.format("切换的生产工单[%s]缓存失败,请重试", value), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + } + break; + case MesPcnExtConstWords.EXECUTE_OUT: + if (StringUtils.isEmpty(value)) { + this.sendMessage(reqBean, null, "入参缺少强制放行的工步代码", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + Map wcpcMap = fsmCommonService.getCachedWorkCellParam(reqBean); + String plcCode = wcpcMap.get("PLC_CODE"); + String executeOutPwd = wcpcMap.get("EXECUTE_OUT_PWD"); + + if (StringUtils.isEmpty(executeOutPwd)) { + this.sendMessage(reqBean, null, "当前工位未维护强制放行密码", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + if (StringUtils.isEmpty(plcCode)) { + this.sendMessage(reqBean, null, "当前工位未维护PLC代码", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + List executeOutPwdList = Arrays.stream(executeOutPwd.split(MesPcnExtConstWords.COMMA)).collect(Collectors.toList()); + if (!executeOutPwdList.contains(value)) { + this.sendMessage(reqBean, null, "强制密码错误", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + MesPlc plc = getPlc(reqBean.getOrganizeCode(), plcCode); + if (plc == null) { + this.sendMessage(reqBean, null, String.format("PLC代码[%s]不存在", plcCode), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + Boolean writeResult = doWriteOpcParamValue(plc, "1"); + + // 手动强制执行履行 + MesManulExecuteOutTravel manulExecuteOutTravel = new MesManulExecuteOutTravel(); + manulExecuteOutTravel.setPartNo(reqBean.getPartNo()); + manulExecuteOutTravel.setPartNameRdd(reqBean.getPartName()); + manulExecuteOutTravel.setProcessCode(reqBean.getProcessCode()); + manulExecuteOutTravel.setSerialNumber(reqBean.getSerialNumber()); + manulExecuteOutTravel.setWorkCellCode(reqBean.getWorkCellCode()); + manulExecuteOutTravel.setWorkCenterCode(reqBean.getWorkCenterCode()); + manulExecuteOutTravel.setWorkOrderNo(reqBean.getWorkOrderNo()); + ConvertBean.serviceModelInitialize(manulExecuteOutTravel, reqBean.getUserInfo()); + manulExecuteOutRepository.save(manulExecuteOutTravel); + + log.info("SxNoumenonSnPopUpOnlineModuleService --- 放行结果:{} ", writeResult); + + result = true; + break; + default: + break; + } + + if (!result) this.sendMessage(reqBean, null, "操作太频繁", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + else { + //跳过工序 + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); + reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setForceJumpProcess(true); + shippingDispatchService.doSendScanQueueNextExec(reqBean); + } + return result; + } + + public MesPlc getPlc(String organizeCode, String plcCode) { + + return plcRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.PLC_CODE}, + new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), plcCode}); + } + + public synchronized Object doHandleSelectWorkOrderNo(StationRequestBean reqBean, Integer flag, String selectWorkOrderNo) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER); + case 2: + return redisMesPcn.putHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER, selectWorkOrderNo, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER); + return true; + default: + return null; + } + } + + public synchronized Object doHandleCurExecWorkOrder(StationRequestBean reqBean, Integer flag, String curExecWorkOrder) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getDataKey(reqBean), MesPcnExtConstWords.CUR_EXEC_WORK_ORDER); + case 2: + return redisMesPcn.putHash(getDataKey(reqBean), MesPcnExtConstWords.CUR_EXEC_WORK_ORDER, curExecWorkOrder, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getDataKey(reqBean), MesPcnExtConstWords.CUR_EXEC_WORK_ORDER); + return true; + default: + return null; + } + } + + public synchronized Object doHandleSelectWorkOrderType(StationRequestBean reqBean, Integer flag, String selectWorkOrderType) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER_TYPE); + case 2: + return redisMesPcn.putHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER_TYPE, selectWorkOrderType, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER_TYPE); + return true; + default: + return null; + } + } + + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnCheckReselectOrderStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnCheckReselectOrderStepService.java new file mode 100644 index 0000000..bb7e687 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnCheckReselectOrderStepService.java @@ -0,0 +1,111 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.SxNoumenonSnPopUpOnlineModuleService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.api.iservice.busi.IShippingDispatchService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.LocaleUtil; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +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.ImppRedis; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; + +/** + * @Description : 本体包装是否重选工单校验工步 + * @Reference : + * @Author : wangjie + * @CreateDate : 2020-05-27 + * @Modify: + **/ +@Slf4j +@Service("sxNoumenonSnCheckReselectOrderStepService") +public class SxNoumenonSnCheckReselectOrderStepService extends BaseStepService { + + @Autowired + private SxNoumenonSnPopUpOnlineModuleService snPopUpOnlineModuleService; + + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Autowired + private IProduceSnExtService produceSnExtService; + + @Resource(name = MesPcnExtConstWords.REDIS_RES_PCN) + private ImppRedis redisMesPcn; + + @Override + public StepResult execute(StationRequestBean reqBean) { + log.info("SxNoumenonSnCheckReselectOrderStepService[execute] 参数:{}", reqBean); + StationResultBean resultBean = new StationResultBean(); + String err; + + if (StringUtils.isEmpty(reqBean.getSerialNumber())) { + err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参缺少条码信息 SerialNumber"); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + foundExThrowNoShowMsg(); + } + + if (StringUtils.isEmpty(reqBean.getWorkOrderNo())) { + err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参缺少工单信息 WorkOrderNo"); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + foundExThrowNoShowMsg(); + } + + if (StringUtils.isEmpty(reqBean.getDataMap().get(MesPcnExtConstWords.WORK_ORDER_NO))) { + err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参[DataMap]缺少工单信息 WorkOrderNo"); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + foundExThrowNoShowMsg(); + } + + if (!reqBean.getWorkOrderNo().equals(reqBean.getDataMap().get(MesPcnExtConstWords.WORK_ORDER_NO))) { + err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "当前执行工单已变更为[%s]"), reqBean.getWorkOrderNo()); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + snPopUpOnlineModuleService.putLastSelectOrder(reqBean); + + String bindKeyPartCacheKey = getCacheKey(reqBean, MesPcnExtConstWords.BIND_KEY_PART); + redisMesPcn.deleteKey(bindKeyPartCacheKey); + String repairBindKeyPartCacheKey = getCacheKey(reqBean, MesPcnExtConstWords.REPAIR_BIND_KEY_PART); + redisMesPcn.deleteKey(repairBindKeyPartCacheKey); + + //跳过整个工序 + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnExtConstWords.SHIPPING); + reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setForceJumpProcess(true); + shippingDispatchService.doSendScanQueueNextExec(reqBean); + + foundExThrowNoShowMsg(); + } + + MesProduceSnExt produceSnExtDb = produceSnExtService.getProduceSnExtBySnAndOrderNo(reqBean.getOrganizeCode(), reqBean.getSerialNumber(), reqBean.getWorkOrderNo()); + if(produceSnExtDb == null){ + err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "当前条码[%s]已不关联当前工单[%s]"), reqBean.getSerialNumber(), reqBean.getWorkOrderNo()); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + + String bindKeyPartCacheKey = getCacheKey(reqBean, MesPcnExtConstWords.BIND_KEY_PART); + redisMesPcn.deleteKey(bindKeyPartCacheKey); + + //跳过整个工序 + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnExtConstWords.SHIPPING); + reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setForceJumpProcess(true); + shippingDispatchService.doSendScanQueueNextExec(reqBean); + + foundExThrowNoShowMsg(); + } + + return StepResult.getSuccessComplete(); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnLineOffQCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnLineOffQCheckStepService.java new file mode 100644 index 0000000..b684be7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnLineOffQCheckStepService.java @@ -0,0 +1,112 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.LocaleUtil; +import cn.estsh.i3plus.mes.pcn.websocket.StationWebSocket; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.ButtonBean; +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.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 工步业务-本体包装校验条码有效性工步 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-07-11 + * @Modify: + **/ +@Slf4j +@Service("sxNoumenonSnLineOffQCheckStepService") +public class SxNoumenonSnLineOffQCheckStepService extends BaseStepService { + + @Resource(name = MesPcnExtConstWords.REDIS_RES_PCN) + private ImppRedis redisMesPcn; + + // 返回前端按钮 确认按钮弹框 + private static final String PASS_BUTTON_CODE = "PASS"; + private static final String PASS_BUTTON_NAME = "通过"; + private static final String NOT_PASS_BUTTON_CODE = "NON_PASS"; + private static final String NOT_PASS_BUTTON_NAME = "不通过"; + + @Override + public StepResult init(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()); + + + this.sendMessage(reqBean, resultBean); + return super.init(reqBean); + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + log.info("SxNoumenonSnLineOffQCheckStepService[execute] 参数:{}", reqBean); + + StepResult stepResult = StepResult.getNonComplete(); + + if (!StringUtils.isEmpty(reqBean.getButtonCode())) { + if (reqBean.getButtonCode().equals(PASS_BUTTON_CODE)) { + + // 将model中的buttonCode password移除 + removeStepContent(reqBean); + + stepResult = StepResult.getSuccessComplete(); + + return stepResult; + } else { + + // 点击不通过,结束工步。直接进入放行信号 + + removeStepContent(reqBean); + + stepResult = StepResult.getSuccessComplete(); + + stepResult.setNextTriggerEvent("NON_PASS"); + + return stepResult; + } + } + + sendButton(reqBean); + // 发送按钮组件,工步未完成 + return stepResult; + } + + private void sendButton(StationRequestBean reqBean) { + List buttonBeanList = new ArrayList<>(); + buttonBeanList.add(ButtonBean.builder().buttonCode(PASS_BUTTON_CODE).buttonName(PASS_BUTTON_NAME).buttonDesc("通过按钮事件").build()); + buttonBeanList.add(ButtonBean.builder().buttonCode(NOT_PASS_BUTTON_CODE).buttonName(NOT_PASS_BUTTON_NAME).buttonDesc("不通过按钮事件").build()); + + StationResultBean resultBean = new StationResultBean(); + resultBean.setResultList(buttonBeanList); + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.BUTTON.getValue()); + resultBean.setMessage(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "请进行外观检查,并录入外观检结果")); + this.sendMessage(reqBean, resultBean); + + + } + + private void removeStepContent(StationRequestBean reqBean) { + reqBean.setButtonCode(null); + StationResultBean resultBean = new StationResultBean(); + resultBean.setResultList(null); + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.BUTTON.getValue()); + this.sendMessage(reqBean, resultBean); + } + + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCheckSnStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCheckSnStepService.java new file mode 100644 index 0000000..c9dc89f --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCheckSnStepService.java @@ -0,0 +1,173 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.jx.IMesManageCodeService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnRepairService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnTravelExtService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.SxNoumenonSnPopUpOnlineModuleService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.*; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.LocaleUtil; +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 lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : 工步业务-本体包装校验条码有效性工步 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-07-11 + * @Modify: + **/ +@Slf4j +@Service("sxNoumenonSnOnlineCheckSnStepService") +public class SxNoumenonSnOnlineCheckSnStepService extends BaseStepService { + + @Autowired + private IProduceSnExtService produceSnExtService; + + @Autowired + private ISxWorkOrderExtService workOrderExtService; + + @Autowired + private IProduceSnRepairService produceSnRepairService; + + @Autowired + private IMesManageCodeService manageCodeService; + + @Autowired + private IProduceSnTravelExtService produceSnTravelExtService; + + @Autowired + private SxNoumenonSnPopUpOnlineModuleService popUpOnlineModuleService; + + @Override + public StepResult guide(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + String guide = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "请扫描管理码/产品条码"); + this.sendMessage(reqBean, resultBean, guide, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + return super.guide(reqBean); + } + + @Override + public StepResult init(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()); + this.sendMessage(reqBean, resultBean); + return super.init(reqBean); + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + log.info("SxNoumenonSnOnlineCheckSnStepService[execute] 参数:{}", reqBean); + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + String err; + + if (StringUtils.isEmpty(reqBean.getOrganizeCode())) { + err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参缺少工厂代码"); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return StepResult.getNonComplete(err); + } + + if (StringUtils.isEmpty(reqBean.getWorkOrderNo())) { + err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参缺少工单号"); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return StepResult.getNonComplete(err); + } + + if (StringUtils.isEmpty(reqBean.getScanInfo())) { + err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参缺少管理码/产品条码"); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return StepResult.getNonComplete(err); + } + + MesWorkOrderExt workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), reqBean.getWorkOrderNo()); + + if (null == workOrderExt) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("工单[%s]无效,不能操作", reqBean.getWorkOrderNo())); + + if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() != workOrderExt.getWorkOrderStatus()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + String.format("工单[%s]状态为[%s],不能操作", reqBean.getWorkOrderNo(), MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus()))); + + // 扫描内容 为 管理码 + String scanInfo = reqBean.getScanInfo(); + + boolean isNeedCreateSn = false; + + //MesProduceSnExt produceSnExtDb = produceSnExtService.getProduceSnExtBySn(reqBean.getOrganizeCode(), scanInfo); + + //if (produceSnExtDb != null) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + // String.format("管理码已被工单[%s]占用,操作失败", produceSnExtDb.getWorkOrderNo())); + + if (workOrderExt.getWorkOrderType() == MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue()) { + MesProduceSnRepair produceSnRepairBySn = produceSnRepairService.getProduceSnRepairBySn(reqBean.getOrganizeCode(), scanInfo); + + if (null == produceSnRepairBySn) { + + return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + String.format("返工条码[%s]不存在,操作失败", reqBean.getScanInfo(), produceSnRepairBySn.getWorkOrderNo(), reqBean.getWorkOrderNo())); + + } else if(produceSnRepairBySn.getWorkOrderNo().equals(reqBean.getWorkOrderNo())) { + return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + String.format("返工条码[%s]已绑定工单[%s]与当前工单[%s]不一致,操作失败", reqBean.getScanInfo(), produceSnRepairBySn.getWorkOrderNo(), reqBean.getWorkOrderNo())); + } + } else { + MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(reqBean.getOrganizeCode(), scanInfo); + if (produceSnExt == null) { + + isNeedCreateSn = true; + + MesManageCode manageCode = manageCodeService.getManageCode(reqBean.getOrganizeCode(), scanInfo); + + if (manageCode == null) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + String.format("管理码[%s]无效,操作失败", reqBean.getScanInfo())); + + + if (!manageCode.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + String.format("当前管理码[%s]所属产线[%s]与当前产线[%s]不一致,操作失败", reqBean.getScanInfo(), manageCode.getWorkCenterCode(), reqBean.getWorkCenterCode())); + + } else if (!produceSnExt.getLastWorkOrderNo().equals(reqBean.getWorkOrderNo())) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + String.format("条码[%s]已绑定工单[%s],与当前工单[%s]不一致,操作失败", reqBean.getScanInfo(), produceSnExt.getWorkOrderNo(), reqBean.getWorkOrderNo())); + } + + MesProduceSnTravelExt produceSnTravelExtDb = produceSnTravelExtService.getProduceSnTravelExtByOrderNoAndWoAndSn(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getWorkOrderNo(), reqBean.getScanInfo()); + + if (produceSnTravelExtDb != null) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + String.format("管理码[%s]已经过此工位,请更改管理码再进行操作", reqBean.getScanInfo())); + + reqBean.getDataMap().put(MesPcnExtConstWords.WORK_ORDER_NO, reqBean.getWorkOrderNo()); + reqBean.getDataMap().put(MesPcnExtConstWords.MANAGE_CODE, reqBean.getScanInfo()); + + reqBean.setSerialNumber(reqBean.getScanInfo()); + reqBean.setPartNo(workOrderExt.getPartNo()); + reqBean.setPartName(workOrderExt.getPartNameRdd()); + + if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() == workOrderExt.getWorkOrderType()) { + stepResult.setNextTriggerEvent(MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.name()); + } else if (isNeedCreateSn){ + stepResult.setNextTriggerEvent("CREATE_SN"); + } else { + stepResult.setNextTriggerEvent(MesPcnExtEnumUtil.WORK_ORDER_TYPE.STANDARD_ORDER.name()); + } + + popUpOnlineModuleService.doHandleManageCode(reqBean, 2, reqBean.getScanInfo()); + + return stepResult; + } + + + + + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCompleteStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCompleteStepService.java new file mode 100644 index 0000000..6b56fb0 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCompleteStepService.java @@ -0,0 +1,72 @@ +//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; +// +//import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesWorkOrderExtRepository; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.ConvertBeanExt; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +//import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; +//import cn.estsh.i3plus.mes.pcn.util.LocaleUtil; +//import cn.estsh.i3plus.platform.common.convert.ConvertBean; +//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 lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Service; +//import org.springframework.util.StringUtils; +// +///** +// * @Description : 工步业务-累加条码绑定数量工步 +// * @Reference : +// * @Author : xinwang.yi +// * @CreateDate : 2023-10-16 +// * @Modify: +// **/ +//@Slf4j +//@Service("sxNoumenonSnOnlineCompleteStepService") +//public class SxNoumenonSnOnlineCompleteStepService extends BaseStepService { +// +// @Autowired +// private ISxWorkOrderExtService workOrderExtService; +// +// @Autowired +// private MesWorkOrderExtRepository workOrderExtRepository; +// +// @Override +// public StepResult execute(StationRequestBean reqBean) { +// log.info("sxNoumenonSnOnlineCompleteStepService[execute] 参数:{}", reqBean); +// +// StationResultBean resultBean = new StationResultBean(); +// String err; +// +// if (StringUtils.isEmpty(reqBean.getOrganizeCode())) { +// err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参缺少工厂代码"); +// this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); +// foundExThrowNoShowMsg(); +// } +// +// if (StringUtils.isEmpty(reqBean.getWorkOrderNo())) { +// err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参缺少生产工单号"); +// this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); +// foundExThrowNoShowMsg(); +// } +// +// MesWorkOrderExt workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), reqBean.getWorkOrderNo()); +// if (null == workOrderExt) { +// err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "生产工单号[%s]无效"), reqBean.getWorkOrderNo()); +// this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); +// foundExThrowNoShowMsg(); +// } +// +// +// ConvertBean.serviceModelUpdate(workOrderExt, reqBean.getUserInfo()); +// workOrderExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); +// new ConvertBeanExt(workOrderExt).convertBean(workOrderExt); +// workOrderExtRepository.save(workOrderExt); +// +// return StepResult.getSuccessComplete(); +// } +// +//} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCreateSnStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCreateSnStepService.java new file mode 100644 index 0000000..7ba3da0 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxNoumenonSnOnlineCreateSnStepService.java @@ -0,0 +1,145 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IProdPackExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnTravelExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.*; +import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesPartExtRepository; +import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesProduceSnExtRepository; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.ConvertBeanExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.LocaleUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.MathOperation; +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 lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : 工步业务-本体包装校验条码有效性工步 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-07-11 + * @Modify: + **/ +@Slf4j +@Service("sxNoumenonSnOnlineCreateSnStepService") +public class SxNoumenonSnOnlineCreateSnStepService extends BaseStepService { + + @Autowired + private ISxWorkOrderExtService workOrderExtService; + + @Autowired + private MesProduceSnExtRepository produceSnExtRepository; + + @Autowired + private MesPartExtRepository partExtRepository; + + @Autowired + private IProdPackExtService prodPackExtService; + + @Autowired + private IProduceSnExtService produceSnExtService; + + @Autowired + private IProduceSnTravelExtService produceSnTravelExtService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + log.info("SxNoumenonSnOnlineCreateSnStepService[execute] 参数:{}", reqBean); + + StationResultBean resultBean = new StationResultBean(); + String err; + + if (StringUtils.isEmpty(reqBean.getOrganizeCode())) { + err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参缺少工厂代码"); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return StepResult.getNonComplete(err); + } + + if (StringUtils.isEmpty(reqBean.getWorkOrderNo())) { + err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参缺少工单号"); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return StepResult.getNonComplete(err); + } + + if (StringUtils.isEmpty(reqBean.getScanInfo())) { + err = LocaleUtil.transferLanguage(reqBean.getUserInfo(), "入参缺少管理码"); + this.sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return StepResult.getNonComplete(err); + } + + // 扫描内容 为 管理码 + //String scanInfo = reqBean.getScanInfo(); + + MesWorkOrderExt workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), reqBean.getWorkOrderNo()); + if (null == workOrderExt) { + err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "工单[%s]无效,不能操作"), reqBean.getWorkOrderNo()); + sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return StepResult.getNonComplete(err); + } + + //if (MathOperation.compareTo(workOrderExt.getBoundQty(), workOrderExt.getQty()) >= 0) { + // err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "工单[%s]已达到绑定数量,不能操作"), reqBean.getWorkOrderNo()); + // sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + // return StepResult.getNonComplete(err); + //} + + if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() != workOrderExt.getWorkOrderStatus()) { + err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "工单[%s]状态为[%s],不能操作"), + reqBean.getWorkOrderNo(), MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus())); + sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return StepResult.getNonComplete(err); + } + + //MesPartExt partExt = partExtRepository.getByProperty( + // new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PART_NO}, + // new Object[]{reqBean.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), reqBean.getPartNo()}); + + //MesProdPackExt prodPackDb = prodPackExtService.getProdPackExt(reqBean.getOrganizeCode(), partExt.getPartNo(), partExt.getPptCode()); + + MesProduceSnExt produceSnExt = new MesProduceSnExt(); + produceSnExt.setSerialNumber(reqBean.getSerialNumber()); + produceSnExt.setWorkOrderNo(reqBean.getWorkOrderNo()); + produceSnExt.setLastWorkOrderNo(reqBean.getWorkOrderNo()); + produceSnExt.setPartNo(reqBean.getPartNo()); + produceSnExt.setPartNameRdd(reqBean.getPartName()); + //produceSnExt.setProcessLabelTemplate(partExt.getProcessLabelTemplate()); + //produceSnExt.setQualityAssureTemplate(partExt.getQualityAssureTemplate()); + //produceSnExt.setBigProcessLabelTemplate(partExt.getBigProcessLabelTemplate()); + //produceSnExt.setProcessLabelTemplate(prodPackDb == null ? "" : prodPackDb.getProcessLabelTemplate()); + //produceSnExt.setQualityAssureTemplate(prodPackDb == null ? "" : prodPackDb.getQualityAssureTemplate()); + //produceSnExt.setBigProcessLabelTemplate(prodPackDb == null ? "" : prodPackDb.getBigProcessLabelTemplate()); + produceSnExt.setCustCode(workOrderExt.getCustCode()); + produceSnExt.setPrintStatus(MesPcnExtEnumUtil.PRODUCE_SN_PRINT_STATUS.UNPRINT.getValue()); + produceSnExt.setPrintCount(0); + produceSnExt.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); + produceSnExt.setQcStatus(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue()); + produceSnExt.setSnType(MesPcnExtEnumUtil.ENCODE_CODE_TYPE.STANDARD_SERIAL_SN.getValue()); + produceSnExt.setQty(1d); + produceSnExt.setWorkCenterCode(workOrderExt.getWorkCenterCode()); + produceSnExt.setOrganizeCode(workOrderExt.getOrganizeCode()); + ConvertBean.serviceModelInitialize(produceSnExt, reqBean.getUserInfo()); + produceSnExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + new ConvertBeanExt(produceSnExt).convertBean(produceSnExt); + //produceSnExtRepository.insert(produceSnExt); + produceSnExtService.insertProduceSnExt(produceSnExt); + + // 当前执行管理码 + //String curManageCode = getCacheKey(reqBean, MesPcnExtConstWords.CUR_MANAGE_CODE); + + return StepResult.getSuccessComplete(); + } + + + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxPlcOutStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxPlcOutStepService.java new file mode 100644 index 0000000..e9dd185 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/SxPlcOutStepService.java @@ -0,0 +1,85 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.SxPutPalletModuleService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.SxNoumenonSnPopUpOnlineModuleService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.SxPutPalletInitProdTypeStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.SxPutPalletModuleModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.SxPutPalletPlcDataModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; +import cn.estsh.i3plus.mes.pcn.api.iservice.busi.IStepCommonMethodService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.LocaleUtil; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesPlc; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +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 lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Map; + +/** + * @Description : 工步业务-本体条码上线PLC放行工步 + * @Reference : + * @Author : xinwang.yi + * @CreateDate : 2023-10-16 + * @Modify: + **/ +@Slf4j +@Service("sxPlcOutStepService") +public class SxPlcOutStepService extends BaseStepService { + + @Autowired + private IStepCommonMethodService stepCommonMethodService; + + @Autowired + private IFsmCommonService fsmCommonService; + + @Autowired + private SxNoumenonSnPopUpOnlineModuleService snPopUpOnlineModuleService; + + + @Override + public StepResult execute(StationRequestBean reqBean) { + log.info("SxPlcOutStepService[execute] 参数:{}", reqBean); + + StationResultBean resultBean = new StationResultBean(); + StepResult stepResult = StepResult.getSuccessComplete(); + + Map codeValueMap = stepCommonMethodService.getStepCfgInfo(reqBean); + log.info("SxPlcOutStepService --- 产线[{}]工位[{}]:工步参数 [{}]", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), codeValueMap); + + String plcCode = (!CollectionUtils.isEmpty(codeValueMap) && codeValueMap.containsKey(MesPcnExtConstWords.DATA_COLLECT_PLC_SN)) ? + codeValueMap.get("PCN_OUT_CODE").getParamValue() : null; + + String plcOutData = (!CollectionUtils.isEmpty(codeValueMap) && codeValueMap.containsKey(MesPcnExtConstWords.DATA_COLLECT_PLC_SN)) ? + codeValueMap.get("PLC_OUT_DATA").getParamValue() : null; + + //Map wcpcMap = fsmCommonService.getCachedWorkCellParam(reqBean); + + if (StringUtils.isEmpty(plcCode)) { + return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "当前工位未维护PLC代码"); + } + MesPlc plc = snPopUpOnlineModuleService.getPlc(reqBean.getOrganizeCode(), plcCode); + if (plc == null) { + return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("PLC代码[%s]不存在", plcCode)); + } + + Boolean writeResult = snPopUpOnlineModuleService.doWriteOpcParamValue(plc, plcOutData); + + log.info("SxPlcOutStepService --- 放行结果:{} ", writeResult); + + return stepResult; + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesFirstOrderDetail.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesFirstOrderDetail.java index 31648ce..f73d705 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesFirstOrderDetail.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesFirstOrderDetail.java @@ -118,6 +118,10 @@ public class MesFirstOrderDetail extends BaseBean implements Serializable { @ApiParam("结果值") private String resultValue; + @Column(name="PART_NO") + @ApiParam("零件编号") + private String partNo; + @Column(name = "MANAGE_TYPE") @ApiParam("管理类型:10-比值类型;20-结果类型") @AnnoOutputColumn(refClass = MesPcnExtEnumUtil.Q_MANAGE_MANAGE_TYPE.class, refForeignKey = "value", value = "description") diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesManageCode.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesManageCode.java new file mode 100644 index 0000000..8be5f2b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesManageCode.java @@ -0,0 +1,56 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.bean; + +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Index; +import javax.persistence.Table; +import java.io.Serializable; + +/** + * @Description: + * @Author: xiangming.liao + * @Date: 2021/01/14 20:03 + * @Modify: + */ +@Data +@Entity +@DynamicInsert +@DynamicUpdate +@EqualsAndHashCode(callSuper = true) +@Table(name = "MES_MANAGE_CODE", indexes = { + @Index(columnList = "MANAGE_CODE"), + @Index(columnList = "WORK_CENTER_CODE"), + @Index(columnList = "MANAGE_CODE,WORK_CENTER_CODE"), +}) +@Api("MES_管理码主表") +public class MesManageCode extends BaseBean implements Serializable { + + private static final long serialVersionUID = 7851017539760486447L; + + @Column(name = "MANAGE_CODE") + @ApiParam(value = "管理编码") + private String manageCode; + + @Column(name = "WORK_CENTER_CODE") + @ApiParam("产线代码") + private String workCenterCode; + + @Column(name = "WORK_CENTER_NAME") + @ApiParam("产线名称") + private String workCenterName; + + //@Column(name = "USE_STATUS") + //@ApiParam("使用状态") + //@ColumnDefault("10") + //@AnnoOutputColumn(refClass = MesPcnExtEnumUtil.MANAGE_USE_STATUS.class, refForeignKey = "value", value = "description") + //private Integer useStatus; + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesManulExecuteOutTravel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesManulExecuteOutTravel.java new file mode 100644 index 0000000..e646811 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesManulExecuteOutTravel.java @@ -0,0 +1,76 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.bean; + +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Index; +import javax.persistence.Table; +import java.io.Serializable; + +/** + * @Description: + * @Author: xinwang.yi + * @Date: 2023/10/19 11:56 + * @Modify: + */ +@Data +@Entity +@DynamicInsert +@DynamicUpdate +@EqualsAndHashCode(callSuper = true) +@Table(name = "MES_MANUL_EXECUTE_OUT_TRAVEL", indexes = { + @Index(columnList = "WORK_ORDER_NO,WORK_CELL_CODE"), + @Index(columnList = "SERIAL_NUMBER") +}) +@Api("MES_手动强制放行履历表") +public class MesManulExecuteOutTravel extends BaseBean implements Serializable { + + private static final long serialVersionUID = -2989268758068809547L; + + @Column(name = "WORK_CENTER_CODE") + @ApiParam(value = "产线代码") + private String workCenterCode; + + //@Column(name = "SHIFT_CODE") + //@ApiParam("班次代码") + //private String shiftCode; + // + //@Column(name = "WORK_TIME") + //@ApiParam("作业时间") + //private String workTime; + + @Column(name = "WORK_ORDER_NO") + @ApiParam(value = "生产工单号") + public String workOrderNo; + + @Column(name = "PART_NO") + @ApiParam("物料号") + private String partNo; + + @Column(name = "PART_NAME_RDD") + @ApiParam("物料名称") + private String partNameRdd; + + @Column(name = "WORK_CELL_CODE") + @ApiParam(value = "工位代码") + public String workCellCode; + + @Column(name = "PROCESS_CODE") + @ApiParam("工序代码") + private String processCode; + + //@Column(name = "PROCESS_NAME_RDD") + //@ApiParam("工序名称") + //private String processNameRdd; + + @Column(name = "SERIAL_NUMBER") + @ApiParam("过程条码") + private String serialNumber; +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesQManageTaskDetail.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesQManageTaskDetail.java index 74b3448..4677789 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesQManageTaskDetail.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesQManageTaskDetail.java @@ -124,7 +124,6 @@ public class MesQManageTaskDetail extends BaseBean implements Serializable { @Column(name = "CHECK_TYPE") @AnnoOutputColumn(refClass = MesPcnExtEnumUtil.MES_Q_MANAGER_CHECK_TYPE.class, refForeignKey = "value", value = "description") - @ColumnDefault("order_check") @ApiParam("点检类型") private String checkType; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesManageCodeRepository.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesManageCodeRepository.java new file mode 100644 index 0000000..24732b9 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesManageCodeRepository.java @@ -0,0 +1,15 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.repository; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesManageCode; +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import org.springframework.stereotype.Repository; + +/** + * @author xinwang.yi + * @version 1.0 + * @date 2023/10/12 9:17 + **/ +@Repository +public interface MesManageCodeRepository extends BaseRepository { + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesManulExecuteOutTravelRepository.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesManulExecuteOutTravelRepository.java new file mode 100644 index 0000000..58020ad --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesManulExecuteOutTravelRepository.java @@ -0,0 +1,15 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.repository; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesManulExecuteOutTravel; +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import org.springframework.stereotype.Repository; + +/** + * @author xinwang.yi + * @version 1.0 + * @date 2023/10/19 9:17 + **/ +@Repository +public interface MesManulExecuteOutTravelRepository extends BaseRepository { + +} 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 9229b0e..98c800d 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 @@ -666,6 +666,7 @@ public class MesPcnExtConstWords { public static final String BIND_QTY = "bindQty"; public static final String CUR_WORK_ORDER = "CUR_WORK_ORDER"; public static final String CMD_WORK_ORDER = "CMD_WORK_ORDER"; + public static final String CMD_WORK_ORDER_TYPE = "CMD_WORK_ORDER_TYPE"; public static final String CUR_PROD_TYPE = "CUR_PROD_TYPE"; public static final String CMD_PROD_TYPE = "CMD_PROD_TYPE"; public static final String SN_MODEL_LIST = "SN_MODEL_LIST"; @@ -854,4 +855,21 @@ public class MesPcnExtConstWords { //本体条码上线 public static final String NOUMENON_SN_POP_UP_ONLINE = "NOUMENON_SN_POP_UP_ONLINE"; + + //本体条码下线 + public static final String NOUMENON_SN_LINE_OFF = "NOUMENON_SN_LINE_OFF"; + + //当前管理码 + public static final String CUR_MANAGE_CODE = "CUR_MANAGE_CODE"; + + //管理码 + public static final String MANAGE_CODE = "manageCode"; + + public static final String PLC_SN_ONLINE_OUT_HAND_SHAKE_SIGNAL = "PLC_SN_ONLINE_OUT_HAND_SHAKE_SIGNAL"; + public static final String PCN_SN_ONLINE_OUT_HAND_SHAKE_SIGNAL = "PCN_SN_ONLINE_OUT_HAND_SHAKE_SIGNAL"; + public static final String PCN_SN_ONLINE_OUT_DATA = "PCN_SN_ONLINE_OUT_DATA"; + + public static final String CUR_EXEC_WORK_ORDER = "CUR_EXEC_WORK_ORDER"; + //强制放行 + public static final String EXECUTE_OUT = "EXECUTE_OUT"; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java index d9dc915..4933aa0 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java @@ -2252,13 +2252,15 @@ public class MesPcnExtEnumUtil { } /** - * mes 确认 + * 产线类型 */ @JsonFormat(shape = JsonFormat.Shape.OBJECT) public enum LINE_TYPE { ONTOLOGY_LINE(10, "本体线"), - COMPONENT_LINE(20, "组件线"); + COMPONENT_LINE(20, "组件线"), + FOUNTAIN(30, "源泉"), + PARTS(40, "零部件"); private int value; private String description; @@ -3336,6 +3338,16 @@ public class MesPcnExtEnumUtil { } return tmp; } + + public static Integer descriptionOfValue(String description) { + Integer tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].description.equals(description)) { + tmp = values()[i].value; + } + } + return tmp; + } } /** @@ -3344,18 +3356,18 @@ public class MesPcnExtEnumUtil { @JsonFormat(shape = JsonFormat.Shape.OBJECT) public enum MANAGE_USE_STATUS { - LEISURE("10", "空闲"), - OCCUPY("20", "占用"); + LEISURE(10, "空闲"), + OCCUPY(20, "占用"); - private String value; + private int value; private String description; - MANAGE_USE_STATUS(String value, String description) { + MANAGE_USE_STATUS(int value, String description) { this.value = value; this.description = description; } - public String getValue() { + public int getValue() { return value; } @@ -3363,18 +3375,18 @@ public class MesPcnExtEnumUtil { return description; } - public static String valueOfDescription(String val) { + public static String valueOfDescription(int val) { String tmp = null; for (int i = 0; i < values().length; i++) { - if (values()[i].value.equals(val)) { + if (values()[i].value == val) { tmp = values()[i].description; } } return tmp; } - public static String descriptionOfValue(String description) { - String tmp = null; + public static Integer descriptionOfValue(String description) { + Integer tmp = null; for (int i = 0; i < values().length; i++) { if (values()[i].description.equals(description)) { tmp = values()[i].value;