From 68927597823859a267e94301009b3cbdc64e3c23 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Fri, 17 Jan 2025 16:08:40 +0800 Subject: [PATCH] =?UTF-8?q?=2044435=20PCN=EF=BC=9A=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E4=B8=8B=E7=BA=BF=E6=9D=A1=E7=A0=81=E6=89=93=E5=8D=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AEfollow=20Pisces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesProductSnPrintSortStepService.java | 72 +++++++++++++++++----- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 3 + 2 files changed, 59 insertions(+), 16 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintSortStepService.java index 5b6dc9e..0c08b8e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintSortStepService.java @@ -4,9 +4,12 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService; 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.pojo.context.MesProdRuleContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -30,6 +33,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; @@ -62,6 +66,9 @@ public class MesProductSnPrintSortStepService extends BaseStepService { @Autowired private IMesTemplateService mesTemplateService; + @Autowired + private IConfigService configService; + @Override public StepResult execute(StationRequestBean reqBean) { // /** @@ -83,6 +90,9 @@ public class MesProductSnPrintSortStepService extends BaseStepService { //1. 获取上下文中生成的主条码 List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + //获取上下文产品加工规则数据信息集合 + List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); + // 排除掉空腔的partContext数据 productionPartContextList = CollectionUtils.isEmpty(productionPartContextList) ? null :productionPartContextList.stream().filter(o -> o.getForeignKey() != null).collect(Collectors.toList()); @@ -97,53 +107,68 @@ public class MesProductSnPrintSortStepService extends BaseStepService { // 根据工单号分组 Map workOrderMap = getMesWorkOrderMap(reqBean, productionPartContextList); + //加工规则根据数据关联键分组 + Map prodRuleContextMap = prodRuleContextList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o)); + // 获取零件信息上下文 Map partDataContext = productionProcessContextStepService.getPartDataContext(reqBean); + //默认客户条码编码规则配置代码 + String defaultCustMatchRule = getDefaultCustMatchRule(reqBean.getOrganizeCode()); + List snLogList = new ArrayList<>(); List> resultMap = new ArrayList<>(); - for (MesProductionPartContext sn : productionPartContextList) { + for (MesProductionPartContext productionPartContext : productionPartContextList) { // 根据工单号获取工单信息 - MesWorkOrder workOrder = workOrderMap.get(sn.getWorkOrderNo()); + MesWorkOrder workOrder = workOrderMap.get(productionPartContext.getWorkOrderNo()); - if (null == workOrder) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号:{}无效!", sn.getWorkOrderNo())); + if (null == workOrder) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号:{}无效!", productionPartContext.getWorkOrderNo())); if (CollectionUtils.isEmpty(partDataContext) || !partDataContext.containsKey(workOrder.getPartNo())) - stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]丢失零件信息缓存!", sn.getWorkOrderNo(), sn.getPartNo())); + stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]丢失零件信息缓存!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo())); - MesPart mesPart = partDataContext.get(sn.getPartNo()); + MesPart mesPart = partDataContext.get(productionPartContext.getPartNo()); - String custMatchRule = StringUtils.isEmpty(mesPart.getCustMatchRule()) ? "WH_CUST_SN_RULE" : mesPart.getCustMatchRule(); + //验证是否配置客户条码编码规则信息 + String custMatchRule = !StringUtils.isEmpty(mesPart.getCustMatchRule()) ? mesPart.getCustMatchRule() : defaultCustMatchRule; + if (StringUtils.isEmpty(custMatchRule)) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]未维护客户条码编码规则!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo())); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(custMatchRule, MesPcnExtConstWords.RULE_CODE, packBean); MesNumberRule numberRule = numberRuleRepository.getByProperty(packBean); + if (null == numberRule) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]客户条码编码规则[%s]无效!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo(), custMatchRule)); - if (null == numberRule) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]客户条码编码规则[%s]无效!", sn.getWorkOrderNo(), sn.getPartNo(), custMatchRule)); + //过滤打印配置信息 + MesProdRuleContext prodRuleContext = prodRuleContextMap.get(productionPartContext.getForeignKey()); + MesProductionAssemblySortContext productionAssemblySortContext = filterPrintInfo(prodRuleContext); - // 从物料信息中获取标签模板 - String labelTemplateCode = partDataContext.get(sn.getPartNo()).getCustLabelTemplate(); + //获取打印模版和打印机 + String labelTemplateCode = null != productionAssemblySortContext ? productionAssemblySortContext.getPrintTemplate() : null; + String printer = null != productionAssemblySortContext ? productionAssemblySortContext.getPrinter() : null; + if (StringUtils.isEmpty(labelTemplateCode)) { + labelTemplateCode = mesPart.getCustLabelTemplate(); + printer = mesPart.getProductPrinterCode(); + } - if (null == labelTemplateCode) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]未在ERP物料信息维护打印模板,请检查并修改!", sn.getWorkOrderNo(), sn.getPartNo())); + if (null == labelTemplateCode) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]未在ERP物料信息维护打印模板,请检查并修改!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo())); - MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); // 查模板代码 MesLabelTemplate labelTemplate = mesTemplateService.getLabelTemplate(labelTemplateCode, organizeCode); + if (null == labelTemplate) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]无效,请检查并修改!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo(), labelTemplateCode)); - if (null == labelTemplate) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]无效,请检查并修改!", sn.getWorkOrderNo(), sn.getPartNo(), labelTemplateCode)); - + MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); - mesProduceSnPrintModel.setPrinter(partDataContext.get(sn.getPartNo()).getProductPrinterCode()); - mesProduceSnPrintModel.setPartNo(sn.getPartNo()); + mesProduceSnPrintModel.setPrinter(printer); + mesProduceSnPrintModel.setPartNo(productionPartContext.getPartNo()); mesProduceSnPrintModel.setOrganizeCode(organizeCode); mesProduceSnPrintModel.setSourceData(workOrder); mesProduceSnPrintModel.setUserName(reqBean.getUserInfo()); //根据反射获取策略类--封装打印数据 String methodCode = labelTemplate.getMethodCode(); //模板信息丢失抛出异常 - if (StringUtils.isEmpty(methodCode)) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]的反射类丢失,请配置!", sn.getWorkOrderNo(), sn.getPartNo(), labelTemplateCode)); + if (StringUtils.isEmpty(methodCode)) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]的反射类丢失,请配置!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo(), labelTemplateCode)); IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); MesProduceSnPrintModel printModel = strategyService.execute(null, mesProduceSnPrintModel, numberRule, stepResult, reqBean, true); @@ -163,6 +188,12 @@ public class MesProductSnPrintSortStepService extends BaseStepService { return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "打印成功!"); } + //默认客户条码编码规则配置代码 + private String getDefaultCustMatchRule(String organizeCode) { + List configList = configService.doCachedConfigList(MesPcnExtConstWords.DEFAULT_CUST_MATCH_RULE, organizeCode); + return !CollectionUtils.isEmpty(configList) ? configList.get(0).getCfgValue() : null; + } + private MesPrintedSnLog getMesPrintedSnLog(StationRequestBean reqBean, MesWorkOrder workOrder,String printData) { MesPrintedSnLog snLog = new MesPrintedSnLog(); snLog.setBarcode(workOrder.getCustSn()); @@ -191,4 +222,13 @@ public class MesProductSnPrintSortStepService extends BaseStepService { return CollectionUtils.isEmpty(workOrderList) ? null : workOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y)); } + + //过滤打印配置信息 + private MesProductionAssemblySortContext filterPrintInfo(MesProdRuleContext prodRuleContext) { + List productionAssemblySortContextList = prodRuleContext.getSortAssemblyDataContext(); + Optional optional = CollectionUtils.isEmpty(productionAssemblySortContextList) ? null : + productionAssemblySortContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPrintTemplate()))).findFirst(); + return (null != optional && optional.isPresent()) ? optional.get() : null; + } + } 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 e9d756c..4605bac 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 @@ -344,6 +344,9 @@ public class MesPcnExtConstWords { // 扩展字段 public static final String EXTEND = "extend"; + // 默认客户条码编码规则配置代码 + public static final String DEFAULT_CUST_MATCH_RULE = "DEFAULT_CUST_MATCH_RULE"; + // 用户缓存 public static final String USER_INFO_CONTEXT = "USER_INFO_CONTEXT"; // 装箱防错