From 7cc05f616ff1532cbb8feb0f3d86038414475265 Mon Sep 17 00:00:00 2001 From: "logic.fang" Date: Thu, 29 May 2025 15:01:49 +0800 Subject: [PATCH 1/6] =?UTF-8?q?47241=20PCN=EF=BC=9A=E8=B5=9B=E5=8A=9B?= =?UTF-8?q?=E6=96=AFjis=E9=98=9F=E5=88=97=E6=8E=A5=E6=94=B6=E5=92=8C?= =?UTF-8?q?=E8=B5=9B=E5=8A=9B=E6=96=AFJIS=E5=8D=95=E6=8E=A5=E6=94=B6?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=8C=89=E9=92=AE=EF=BC=8C=E6=8C=89=E9=92=AE=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=AE=A1=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/report/IMesCimSeresReportService.java | 4 ++++ .../report/MesCimSeresReportController.java | 28 ++++++++++++++++++++++ .../report/MesCimSeresReportServiceImpl.java | 28 ++++++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/report/IMesCimSeresReportService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/report/IMesCimSeresReportService.java index a6193bc..1c90f39 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/report/IMesCimSeresReportService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/report/IMesCimSeresReportService.java @@ -14,9 +14,13 @@ public interface IMesCimSeresReportService { void doSrmSunSheetJisNormal(List ids); + void doSrmSunSheetJisCancel(List ids); + ListPager queryJisQueueLogByPager(Integer checkStatus, String vin, String materielCode, String partClassCode, String partClassName, Pager pager); void doJisQueueNormal(List ids); + void doJisQueueCancel(List ids); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/report/MesCimSeresReportController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/report/MesCimSeresReportController.java index 377e176..62f1390 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/report/MesCimSeresReportController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/report/MesCimSeresReportController.java @@ -56,6 +56,20 @@ public class MesCimSeresReportController { } } + @ApiOperation(value = "赛力斯JIS单-取消", notes = "赛力斯JIS单-取消") + @PostMapping("/srm-sun-sheet-jis-cancel") + public ResultBean doSrmSunSheetJisCancel(@RequestBody Long[] idArray) { + try { + List idList = Arrays.asList(idArray); + mesCimSeresReportService.doSrmSunSheetJisCancel(idList); + return ResultBean.success("执行成功"); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @ApiOperation(value = "赛力斯JIS队列接收日志", notes = "赛力斯JIS队列接收日志") @GetMapping("/query-jis-queue-log") public ResultBean queryJisQueueLogByPager(Integer checkStatus, String vin, String materielCode, @@ -86,4 +100,18 @@ public class MesCimSeresReportController { } } + @ApiOperation(value = "赛力斯JIS队列-取消", notes = "赛力斯JIS队列-取消") + @PostMapping("/jis-queue-cancel") + public ResultBean doJisQueueCancel(@RequestBody Long[] idArray) { + try { + List idList = Arrays.asList(idArray); + mesCimSeresReportService.doJisQueueCancel(idList); + return ResultBean.success("执行成功"); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/report/MesCimSeresReportServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/report/MesCimSeresReportServiceImpl.java index 91aee5d..b71dd0b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/report/MesCimSeresReportServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/report/MesCimSeresReportServiceImpl.java @@ -56,6 +56,20 @@ public class MesCimSeresReportServiceImpl implements IMesCimSeresReportService { } @Override + public void doSrmSunSheetJisCancel(List ids) { + final String organizeCode = AuthUtil.getOrganize().getOrganizeCode(); + final String username = AuthUtil.getSessionUser().getUserName(); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(ids, "id", packBean); + + runSheetJisRDao.updateByProperties( + new String[]{"isValid", "isDeleted", "modifyUser", "modifyDatetime"}, + new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), + username, TimeTool.getNowTime(true)}, + packBean); + } + + @Override public ListPager queryJisQueueLogByPager(Integer checkStatus, String vin, String materielCode, String partClassCode, String partClassName, Pager pager) { final String organizeCode = AuthUtil.getOrganize().getOrganizeCode(); @@ -82,4 +96,18 @@ public class MesCimSeresReportServiceImpl implements IMesCimSeresReportService { queueJisRDao.updateByProperties(new String[]{"checkStatus","modifyUser","modifyDatetime"},new Object[]{MesExtEnumUtil.CIM_SERES_JIS_STATUS.WAIT_CHECK.getValue(), username, TimeTool.getNowTime(true)}, packBean); } + @Override + public void doJisQueueCancel(List ids) { + final String organizeCode = AuthUtil.getOrganize().getOrganizeCode(); + final String username = AuthUtil.getSessionUser().getUserName(); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(ids, "id", packBean); + + queueJisRDao.updateByProperties( + new String[]{"isValid", "isDeleted", "modifyUser", "modifyDatetime"}, + new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), + username, TimeTool.getNowTime(true)}, + packBean); + } + } From ece6e4f88dd5a2a1c7477b5d92d2ba6006d66fa8 Mon Sep 17 00:00:00 2001 From: jason Date: Thu, 12 Jun 2025 11:02:42 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=88=90=E9=83=BD?= =?UTF-8?q?=E5=B7=A5=E4=BD=8D=E7=AB=AF=E6=89=93=E5=8D=B0DataMatrix?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../print/strategy/ChengDuSplitFixCharPrintStrategy.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/ChengDuSplitFixCharPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/ChengDuSplitFixCharPrintStrategy.java index e2a2358..5b7b2a7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/ChengDuSplitFixCharPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/ChengDuSplitFixCharPrintStrategy.java @@ -77,7 +77,7 @@ public class ChengDuSplitFixCharPrintStrategy implements IPrintTemplateStrategyS MesProduceSnPrintDataModel printDataModel = getModel(produceSn, custPartNo); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().clear(); mesProduceSnPrintModel.getMesProduceSnList().add(produceSn); - Map printTemplateData = new HashMap<>(getPrintContextMap(produceSn, custPartNo)); + Map printTemplateData = new HashMap<>(getPrintContextMap(produceSn, custPartNo, isStep)); mesProduceSnPrintModel.getPrintContextList().add(printTemplateData); //保存打印记录 mesProduceSnPrintModel.getMesPrintedSnLogList().add(mesPrintedSnLogService.getMesCustomPrintedSnLog(mesProduceSnPrintModel.getUserName(), organizeCode, printDataModel, printTemplateData)); @@ -87,7 +87,7 @@ public class ChengDuSplitFixCharPrintStrategy implements IPrintTemplateStrategyS //封装打印信息 MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, custPartNo); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().clear(); - Map printTemplateData = new HashMap<>(getPrintContextMap(mesProduceSn, custPartNo)); + Map printTemplateData = new HashMap<>(getPrintContextMap(mesProduceSn, custPartNo, isStep)); List> printDataMapList = new ArrayList<>(); printDataMapList.add(printTemplateData); mesProduceSnPrintModel.getPrintContextList().add(packResultMap(mesProduceSnPrintModel, printDataMapList)); @@ -131,7 +131,7 @@ public class ChengDuSplitFixCharPrintStrategy implements IPrintTemplateStrategyS return mesProduceSnPrintDataModel; } - private Map getPrintContextMap(MesProduceSn produceSn, String custPartNo) { + private Map getPrintContextMap(MesProduceSn produceSn, String custPartNo, boolean isStep) { Map result = new HashMap<>(); String[] splitSn = produceSn.getProductSn().split("#"); if (splitSn.length < 3) { @@ -173,7 +173,11 @@ public class ChengDuSplitFixCharPrintStrategy implements IPrintTemplateStrategyS log.error("ChengDuSplitFixCharPrintStrategy --- execute --- 报错:{}", e.getMessage()); return result; } - result.put(MesPcnExtConstWords.CUST_SN_DATA_MATRIX, "data:image/jpeg;base64," + Base64.getEncoder().encodeToString(dataMatrixCode.toByteArray())); + String encoderCode = Base64.getEncoder().encodeToString(dataMatrixCode.toByteArray()); + if (!isStep) { + encoderCode = "data:image/jpeg;base64," + encoderCode; + } + result.put(MesPcnExtConstWords.CUST_SN_DATA_MATRIX, encoderCode); return result; } From e181519b04115b81a51676f77e980672510606cd Mon Sep 17 00:00:00 2001 From: "logic.fang" Date: Fri, 13 Jun 2025 09:11:15 +0800 Subject: [PATCH 3/6] =?UTF-8?q?47191=20DM202504290012=20=E9=BE=99=E5=85=B4?= =?UTF-8?q?=E5=B7=A5=E5=8E=82CKPT=E7=BA=BF=E6=8E=92=E5=BA=8F=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=8B=86=E5=8D=95=E9=9C=80=E6=B1=82-EDI=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=BF=AE=E6=94=B9=EF=BC=88=E6=89=AB=E6=8F=8F=E5=8F=91?= =?UTF-8?q?=E8=BF=90=E6=96=B0=E5=A2=9E=E2=80=9C=E6=A0=A1=E9=AA=8C=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=9C=AB=E5=8D=95=E2=80=9D=E3=80=81=E2=80=9C=E5=8F=91?= =?UTF-8?q?=E9=80=81=E7=94=A8=E6=88=B7=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=E8=87=B3PLC=E7=82=B9=E4=BD=8D=E2=80=9D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesSendUserDefinedCmdStepService.java | 176 +++++++++++++++++++++ ...ckCimSeresLastOrderShippingCodeStepService.java | 89 +++++++++++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 3 + 3 files changed, 268 insertions(+) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesShippingCheckCimSeresLastOrderShippingCodeStepService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java new file mode 100644 index 0000000..b9e2b97 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java @@ -0,0 +1,176 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * @Description : 向PLC点位发送自定义指令工步 + * @Reference : + * @Author : logic + * @CreateDate : 2025/6/9 16:58 + * @Modify: + **/ +@Slf4j +@Service("mesSendUserDefinedCmdStepService") +public class MesSendUserDefinedCmdStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesEquipVariableRwExtService equipVariableRwExtService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StepResult stepResult = StepResult.getSuccessComplete(); + + StationResultBean resultBean = new StationResultBean(); + + //获取工步参数 + Optional> stepParamMap = getStepParams(reqBean); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = + productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap); + + //获取生产过程上下文对象有异常信息 抛出异常 + if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) { + stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + } + + //从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合 + List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct(); + + //根据变量类别[用户自定义指令]搜集设备数据变量接口逻辑信息 + equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList( + equipmentVariableCfgList, MesPcnExtConstWords.USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY); + + //当前工位使用的设备 + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + + //配置错误 抛出异常 + if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfgAndValue(productionProcessContext, + cellEquipContext, equipmentVariableCfgList, MesPcnExtConstWords.USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY).getSuccess()) { + stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + } + + //搜集设备数据变量接口逻辑信息中的二级变量 + List categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList); + + //根据变量类型与二级变量获取设备数据变量信息 + List equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList( + productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList); + + //配置错误 抛出异常 + if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, + cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) { + stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + } + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //发送数据给设备的数据变量 + return execSendInitializationCmd(reqBean, resultBean, stepParamMap, stepResult, cellEquipContext, + equipmentVariableCfgList, equipmentVariableList, + cellEquipContext.getKepwareFlag(equipmentVariableList.get(0).getChannel())); + + } + + private StepResult execSendInitializationCmd(StationRequestBean reqBean, StationResultBean resultBean, + Optional> stepParamMap, + StepResult stepResult, MesCellEquipContext cellEquipContext, + List equipmentVariableCfgList, + List equipmentVariableList, String kepwareFlag) { + + //最大重试次数[工步参数] + Integer maxRetryTimes = getMaxRetryTimes(stepParamMap); + + MesEquipVariableRwResult equipVariableRwResult = null; + + Map> categoryLevelTwoMap = equipmentVariableCfgList.stream().filter( + Objects::nonNull).collect(Collectors.groupingBy(MesEquipmentVariableCfg::getCategoryLevelTwo)); + + for (int i = 1; i <= maxRetryTimes; i ++) { + + //写值 + for (MesEquipmentVariable equipmentVariable : equipmentVariableList) { + + equipVariableRwResult = equipVariableRwExtService.writeVariable( + categoryLevelTwoMap.get(equipmentVariable.getCategoryLevelTwo()).get(0), equipmentVariable, kepwareFlag); + + if (equipVariableRwResult.getIsSuccessed()) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), + String.format("[%s]%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), + MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + } else { + this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), + String.format("设备[%s]:初始化指令发送失败!原因:%s", cellEquipContext.getEquipmentName(), + JSONObject.toJSONString(equipVariableRwResult)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, + MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + break; + } + } + + if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) { + stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:初始化指令发送失败!原因:%s", + cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage())); + } + + if (equipVariableRwResult.getIsSuccessed()) { + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送成功!", cellEquipContext.getEquipmentName())); + } + + stepNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult, String.format("设备[%s]:初始化指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentName(), i, equipVariableRwResult.getMessage())); + + //每失败一次 睡眠 + if (i != maxRetryTimes) { + threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + } + + } + + stepSendTaskCompleteAndThrowEx(reqBean, stepResult, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + + return stepResult; + + } + + //最大重试次数[工步参数] + private Integer getMaxRetryTimes(Optional> stepParamMap) { + Integer maxRetryTimes = null; + try { + maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && + stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? + Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null; + } catch (NumberFormatException e) { + } + return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesShippingCheckCimSeresLastOrderShippingCodeStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesShippingCheckCimSeresLastOrderShippingCodeStepService.java new file mode 100644 index 0000000..7799a77 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesShippingCheckCimSeresLastOrderShippingCodeStepService.java @@ -0,0 +1,89 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.repository.seres.shipping.MesCimSeresLastOrderShippingCodeRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; + +/** + * @Description : 校验当前扫描的发运单是否为“末单” + * @Reference : + * @Author : logic + * @CreateDate : 2025/6/9 16:38 + * @Modify: + **/ +@Slf4j +@Service("mesShippingCheckCimSeresLastOrderShippingCodeStepService") +public class MesShippingCheckCimSeresLastOrderShippingCodeStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; + + @Autowired + private MesCimSeresLastOrderShippingCodeRepository mesCimSeresLastOrderShippingCodeRepository; + + @Override + public StepResult execute(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) { + stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + } + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //扫描信息置空 + String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo()); + + //验证发运组信息是否有效 + List resultList = null; + + if (StringUtils.isEmpty(scanInfo)) { + stepSendGuideAndThrowEx(reqBean, + resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), + "[人工模式]请扫描发运单号!"); + } + + //发送工步内容 + productionCustomContextStepService.sendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN); + + //判断当前扫描的发运单号是否是“末单” + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(scanInfo, "shippingCode", ddlPackBean); + boolean exitByHql = mesCimSeresLastOrderShippingCodeRepository.isExitByHql(ddlPackBean); + if (exitByHql) { + //当前发运单号为“末单”,则调用“向PLC点位发送自定义指令”工步向PLC点位发送用户自定义指令 + return ((IStepService) SpringContextsUtil.getBean("mesSendUserDefinedCmdStepService")).executeInState(reqBean); + }else { + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), null, + String.format("当前扫描信息发运单号[%s]无须发送末单指令!", scanInfo)); + } + + } + +} 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 29aeea5..50695b6 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 @@ -943,4 +943,7 @@ public class MesPcnExtConstWords { public static final String VOLVO_SEQUENCENUMBER = "sequenceNumber"; public static final String VOLVO_RACKID = "rackId"; public static final String VOLVO_POSITION = "position"; + + //向PLC点位发送用户自定义指令的变量类别 + public static final String USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY = "USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY"; } From a57f3e7cb5c8890313f3f3a508c79f5f60a93aec Mon Sep 17 00:00:00 2001 From: "logic.fang" Date: Thu, 26 Jun 2025 10:37:23 +0800 Subject: [PATCH 4/6] =?UTF-8?q?47191=20DM202504290012=20=E9=BE=99=E5=85=B4?= =?UTF-8?q?=E5=B7=A5=E5=8E=82CKPT=E7=BA=BF=E6=8E=92=E5=BA=8F=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=8B=86=E5=8D=95=E9=9C=80=E6=B1=82-EDI=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=BF=AE=E6=94=B9=EF=BC=88=E6=89=AB=E6=8F=8F=E5=8F=91?= =?UTF-8?q?=E8=BF=90=E6=96=B0=E5=A2=9E=E2=80=9C=E6=A0=A1=E9=AA=8C=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=9C=AB=E5=8D=95=E2=80=9D=E3=80=81=E2=80=9C=E5=8F=91?= =?UTF-8?q?=E9=80=81=E7=94=A8=E6=88=B7=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=E8=87=B3PLC=E7=82=B9=E4=BD=8D=E2=80=9D-=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/step/MesSendUserDefinedCmdStepService.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java index b9e2b97..60c3734 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java @@ -67,15 +67,21 @@ public class MesSendUserDefinedCmdStepService extends BaseStepService { List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct(); //根据变量类别[用户自定义指令]搜集设备数据变量接口逻辑信息 + String userDefinedEquipVariableCfgCategory = ( + null != stepParamMap && + stepParamMap.isPresent() && + stepParamMap.get().containsKey(MesPcnExtConstWords.USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY)) ? + stepParamMap.get().get(MesPcnExtConstWords.USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY).getParamValue() : + null; equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList( - equipmentVariableCfgList, MesPcnExtConstWords.USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY); + equipmentVariableCfgList, userDefinedEquipVariableCfgCategory); //当前工位使用的设备 MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); //配置错误 抛出异常 if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfgAndValue(productionProcessContext, - cellEquipContext, equipmentVariableCfgList, MesPcnExtConstWords.USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY).getSuccess()) { + cellEquipContext, equipmentVariableCfgList, userDefinedEquipVariableCfgCategory).getSuccess()) { stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); } From ce75150d145aef5fd5fd73ddc540bfd8bbce4a0d Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 2 Jul 2025 19:56:12 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E9=BE=99=E5=85=B475jph=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesSendUserDefinedCmdStepService.java | 8 ++-- ...ckCimSeresLastOrderShippingCodeStepService.java | 44 +++++++++------------- 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java index 60c3734..e491ef0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendUserDefinedCmdStepService.java @@ -136,7 +136,7 @@ public class MesSendUserDefinedCmdStepService extends BaseStepService { MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); } else { this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), - String.format("设备[%s]:初始化指令发送失败!原因:%s", cellEquipContext.getEquipmentName(), + String.format("设备[%s]:自定义指令发送失败!原因:%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipVariableRwResult)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); break; @@ -144,15 +144,15 @@ public class MesSendUserDefinedCmdStepService extends BaseStepService { } if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) { - stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:初始化指令发送失败!原因:%s", + stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:自定义指令发送失败!原因:%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage())); } if (equipVariableRwResult.getIsSuccessed()) { - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送成功!", cellEquipContext.getEquipmentName())); + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:自定义指令发送成功!", cellEquipContext.getEquipmentName())); } - stepNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult, String.format("设备[%s]:初始化指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentName(), i, equipVariableRwResult.getMessage())); + stepNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult, String.format("设备[%s]:自定义指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentName(), i, equipVariableRwResult.getMessage())); //每失败一次 睡眠 if (i != maxRetryTimes) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesShippingCheckCimSeresLastOrderShippingCodeStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesShippingCheckCimSeresLastOrderShippingCodeStepService.java index 7799a77..0512bea 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesShippingCheckCimSeresLastOrderShippingCodeStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesShippingCheckCimSeresLastOrderShippingCodeStepService.java @@ -1,27 +1,25 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.model.StationKvBean; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingQueue; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; import cn.estsh.i3plus.pojo.mes.repository.seres.shipping.MesCimSeresLastOrderShippingCodeRepository; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; -import java.util.List; - /** * @Description : 校验当前扫描的发运单是否为“末单” * @Reference : @@ -37,51 +35,45 @@ public class MesShippingCheckCimSeresLastOrderShippingCodeStepService extends Ba private IMesProductionProcessContextStepService productionProcessContextStepService; @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; + private IMesProductionDispatchContextStepService productionDispatchContextStepService; @Autowired private MesCimSeresLastOrderShippingCodeRepository mesCimSeresLastOrderShippingCodeRepository; @Override public StepResult execute(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + StepResult stepResult = StepResult.getSuccessComplete(); + //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); //配置错误 抛出异常 - if (!productionProcessContext.getSuccess()) { - stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); - } + if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); //存储生产过程上下文对象 productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); - //扫描信息置空 - String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo()); - - //验证发运组信息是否有效 - List resultList = null; - - if (StringUtils.isEmpty(scanInfo)) { - stepSendGuideAndThrowEx(reqBean, - resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), - "[人工模式]请扫描发运单号!"); - } - - //发送工步内容 - productionCustomContextStepService.sendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN); + //获取上下文发运队列信息 + MesShippingQueue shippingQueue = productionDispatchContextStepService.getShippingQueueContext(reqBean); + if ((null == shippingQueue || StringUtils.isEmpty(shippingQueue.getRfidSn()))) + return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true, + MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前未获取到缓存中有效的发运队列,默认跳过发送空托盘!"); //判断当前扫描的发运单号是否是“末单” DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(scanInfo, "shippingCode", ddlPackBean); + DdlPreparedPack.getStringEqualPack(shippingQueue.getShippingCode(), MesPcnExtConstWords.SHIPPING_CODE, ddlPackBean); boolean exitByHql = mesCimSeresLastOrderShippingCodeRepository.isExitByHql(ddlPackBean); if (exitByHql) { + this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("当前发运单号[%s]为末单,即将执行发送空托盘!", + shippingQueue.getShippingCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //当前发运单号为“末单”,则调用“向PLC点位发送自定义指令”工步向PLC点位发送用户自定义指令 return ((IStepService) SpringContextsUtil.getBean("mesSendUserDefinedCmdStepService")).executeInState(reqBean); }else { - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), null, - String.format("当前扫描信息发运单号[%s]无须发送末单指令!", scanInfo)); + return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true, + MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前发运单号[%s]非末单,默认跳过发送空托盘!", shippingQueue.getShippingCode())); } } From 88bd632347e2460316dbb18d2d18e0d83ecf39e6 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 2 Jul 2025 19:59:35 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=88=90=E9=83=BD=E6=A0=87=E7=AD=BE=20?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/print/strategy/ChengDuSplitFixCharPrintStrategy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/ChengDuSplitFixCharPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/ChengDuSplitFixCharPrintStrategy.java index 5b7b2a7..29c3a75 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/ChengDuSplitFixCharPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/ChengDuSplitFixCharPrintStrategy.java @@ -35,7 +35,7 @@ import java.io.IOException; import java.util.*; /** - * @Description : 装配目视单标签打印 + * @Description : 成都data Matrix 标签 * @Reference : * @Author : Castle * @CreateDate : 2024/6/17 16:43