From b695fc1742183390616d594067923222c7311fee Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 15 Jan 2025 20:21:59 +0800 Subject: [PATCH] =?UTF-8?q?44517=20=E8=A3=85=E7=AE=B1=E9=98=B2=E9=94=99?= =?UTF-8?q?=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82=EF=BC=88?= =?UTF-8?q?=E8=8A=9C=E6=B9=96=EF=BC=89=E4=B8=B4=E6=97=B6=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesFunctionPackageProgressService.java | 50 ++++++++++++++-------- .../step/MesPackageNoGenerateStepService.java | 47 ++++++++++++-------- .../method/IMesPackageNoGenerateStepService.java | 27 ++++++++++++ 3 files changed, 86 insertions(+), 38 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java index 662ace3..64e3fd8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java @@ -1,8 +1,9 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.MesPackageNoGenerateStepService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.IMesPackageNoGenerateStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageDataContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; @@ -12,7 +13,9 @@ import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; 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 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.CollectionUtils; @@ -24,6 +27,7 @@ import java.util.stream.Collectors; /** * @Description : 工位参数按钮事件接口实现【打包进度】 **/ +@Slf4j @Service public class MesFunctionPackageProgressService extends BaseSwsService implements IFsmModuleFunctionService { @@ -31,7 +35,7 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements private IMesProductionCustomContextStepService productionCustomContextStepService; @Autowired - private MesPackageNoGenerateStepService packageNoGenerateStepService; + private IMesPackageNoGenerateStepService packageNoGenerateStepService; @Override public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { @@ -69,63 +73,71 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements resultMap.put(MesPcnExtConstWords.DATA, resultList); if (StringUtils.isEmpty(buttonDynamicModel.getFunctionValue())) return resultMap; - resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(buttonDynamicModel.getFunctionValue()); - resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT.getValue()); MesPackageDataContext packageDataContext = JSONObject.parseObject(buttonDynamicModel.getFunctionValue(), MesPackageDataContext.class); + + resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(packageDataContext.getPackageNo()); + if (null == packageDataContext) { - return packResultMap(reqBean, resultBean, resultMap, + return doPackResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,参数异常!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); } if (CollectionUtils.isEmpty(packageDataContextMap) || !packageDataContextMap.containsKey(packageDataContext.getPartNo())) { - return packResultMap(reqBean, resultBean, resultMap, + return doPackResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,当前已无零件号[%s]未封箱状态的包装信息!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPartNo())); } List packageDataContextList = JSONObject.parseArray(packageDataContextMap.get(packageDataContext.getPartNo()), MesPackageDataContext.class); if (CollectionUtils.isEmpty(packageDataContextList) || !packageDataContextList.get(0).getPackageNo().equals(packageDataContext.getPackageNo())) { - return packResultMap(reqBean, resultBean, resultMap, + return doPackResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,打包进度列表中已经不存在包装条码[%s],请刷新重试!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPackageNo())); } MesPackage packageDb = packageNoGenerateStepService.getMesPackage(reqBean.getOrganizeCode(), packageDataContextList.get(0).getPackageId()); if (null == packageDb) { - return packResultMap(reqBean, resultBean, resultMap, + return doPackResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,包装条码[%s]信息已经不存在,请刷新重试!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPackageNo())); } StepResult stepResult = StepResult.getSuccessComplete(); - doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb); + try { + doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb, packageDataContextMap); + } catch (ImppBusiException e) { + stepResult.msg(e.getMessage()); + } catch (Exception e) { + stepResult.msg(e.getMessage()); + } if (!StringUtils.isEmpty(stepResult.getMsg())) { - return packResultMap(reqBean, resultBean, resultMap, + return doPackResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,%s", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), stepResult.getMsg())); } - // 保存打包数据 - packageDataContextMap.remove(packageDataContext.getPartNo()); - productionCustomContextStepService.dispatchPackageDataContext(reqBean, packageDataContextMap); - resultList = resultList.stream().filter(o -> (null != o && !o.getPackageNo().equals(packageDataContext.getPackageNo()))).collect(Collectors.toList()); if (CollectionUtils.isEmpty(resultList)) resultMap.remove(MesPcnExtConstWords.DATA); else resultMap.put(MesPcnExtConstWords.DATA, resultList); resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()); - return packResultMap(reqBean, resultBean, resultMap, String.format("零件号[%s]强制封箱成功!", packageDataContext.getPartNo())); + return doPackResultMap(reqBean, resultBean, resultMap, String.format("零件号[%s]强制封箱成功!", packageDataContext.getPartNo())); } - private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map resultMap, String message) { + private Object doPackResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map resultMap, String message) { this.sendMessage(reqBean, resultBean, message, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); resultMap.put(MesPcnExtConstWords.MESSAGE, message); return resultMap; } - private void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List packageDataContextList, MesPackage packageDb) { - packageNoGenerateStepService.savePackageDb(reqBean, packageDb, packageDataContextList.size(), true); + private void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + List packageDataContextList, MesPackage packageDb, Map packageDataContextMap) { + packageNoGenerateStepService.savePackageDb(reqBean, packageDb, packageDataContextList.size(), true, false); List packageList = new ArrayList<>(); packageList.add(packageDb); - packageNoGenerateStepService.execPrint(reqBean, resultBean, stepResult, packageDataContextList.get(0), null, null, packageList, true); + MesProduceSnPrintModel printModel = packageNoGenerateStepService.printProduceSn(reqBean, resultBean, stepResult, packageDataContextList.get(0), null, null, packageList, true); + packageNoGenerateStepService.doPrint(reqBean, printModel); + packageNoGenerateStepService.savePackageDbById(reqBean, packageDb); + packageDataContextMap.remove(packageDb.getPartNo()); + productionCustomContextStepService.dispatchPackageDataContext(reqBean, packageDataContextMap); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java index 134e8f8..5913cde 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -7,6 +7,8 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepServi import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.IMesPackageNoGenerateStepService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageDataContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageRuleContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; @@ -50,7 +52,7 @@ import java.util.stream.Collectors; **/ @Slf4j @Service("mesPackageNoGenerateStepService") -public class MesPackageNoGenerateStepService extends BaseStepService { +public class MesPackageNoGenerateStepService extends BaseStepService implements IMesPackageNoGenerateStepService { @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; @@ -177,7 +179,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService { //判断存在包装信息则进行打印 if (!CollectionUtils.isEmpty(stepResult.getDataCollection())) { - execPrint(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List) stepResult.getDataCollection(), false); + MesProduceSnPrintModel printModel = printProduceSn(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List) stepResult.getDataCollection(), false); + doPrint(reqBean, printModel); } } @@ -301,7 +304,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService { //判断当前是否满包 Boolean isSealed = curQty >= packageRuleContext.getPackSpecQty().intValue(); //判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态 - packageDb = savePackageDb(reqBean, packageDb, curQty, isSealed); + packageDb = savePackageDb(reqBean, packageDb, curQty, isSealed, true); //判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据 List resultList = insertPackageDetailAndBackUnSealedResultList(reqBean, packageRuleContext, packageDb, productSnList2Cur, isSealed); @@ -321,6 +324,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService { } //根据ID查询包装信息 + @Override public MesPackage getMesPackage(String organizeCode, Long packageId) { return packageExtService.getMesPackage(organizeCode, packageId); } //生成包装条码信息 @@ -350,7 +354,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService { } //判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态 - public MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed) { + @Override + public MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed, Boolean isSave) { if (!StringUtils.isEmpty(packageDb.getId())) { //下面直接根据ID进行修改, 所以此处置为游离态 @@ -365,8 +370,17 @@ public class MesPackageNoGenerateStepService extends BaseStepService { packageDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); } + if (!isSave) return packageDb; + if (StringUtils.isEmpty(packageDb.getId())) return packageRepository.insert(packageDb); + savePackageDbById(reqBean, packageDb); + + return packageDb; + } + + @Override + public void savePackageDbById(StationRequestBean reqBean, MesPackage packageDb) { packageRepository.updateByPropertiesNoSync( new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.ID}, new Object[]{reqBean.getOrganizeCode(), packageDb.getId()}, @@ -374,8 +388,6 @@ public class MesPackageNoGenerateStepService extends BaseStepService { MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME}, new Object[]{packageDb.getQty(), packageDb.getIsSealed(), packageDb.getPrintStatus(), packageDb.getLotNo(), packageDb.getModifyUser(), packageDb.getModifyDatetime(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY}); - - return packageDb; } //判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据 @@ -443,7 +455,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService { return null; } - public void execPrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, + @Override + public MesProduceSnPrintModel printProduceSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List packageList, Boolean isAsyn) { if (null == strategyService) { //查询模版信息 @@ -452,10 +465,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService { } if (null == strategyService) { if (!isAsyn) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("零件编码[%s]未配置有效的包装条码模版[%s]信息!", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate())); - else { - stepResult.msg(String.format("零件编码[%s]未配置有效的包装条码模版[%s]信息!", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate())); - return; - } + else MesPcnException.throwBusiException("零件编码[%s]未配置有效的包装条码模版[%s]信息!", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate()); } MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); @@ -472,22 +482,21 @@ public class MesPackageNoGenerateStepService extends BaseStepService { printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, true); } catch (ImppBusiException e) { if (!isAsyn) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), e.getErrorDetail()); - else { - stepResult.msg(e.getErrorDetail()); - return; - } + else MesPcnException.throwBusiException(e.getErrorDetail()); } catch (Exception e) { String webMsg = String.format("零件编码[%s]包装条码模版[%s]打印包装条码%s", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate(), fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode())); if (!isAsyn) { this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.ERROR.getValue()), webMsg, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, true); foundExThrowNoShowMsg(); - } else { - stepResult.msg(webMsg); - return; - } + } else MesPcnException.throwBusiException("%s %s!", webMsg, e.toString()); } + return printModel; + } + + @Override + public void doPrint(StationRequestBean reqBean, MesProduceSnPrintModel printModel) { if (CollectionUtils.isEmpty(printModel.getPrintContextList())) return; //发送打印信息 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java new file mode 100644 index 0000000..72f7a1a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java @@ -0,0 +1,27 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageRuleContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; +import cn.estsh.i3plus.pojo.mes.bean.MesPackage; +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 java.util.List; + +public interface IMesPackageNoGenerateStepService { + + MesPackage getMesPackage(String organizeCode, Long packageId); + + MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed, Boolean isSave); + + void savePackageDbById(StationRequestBean reqBean, MesPackage packageDb); + + MesProduceSnPrintModel printProduceSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, + MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List packageList, Boolean isAsyn); + + void doPrint(StationRequestBean reqBean, MesProduceSnPrintModel printModel); + +}