diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionCutOrderDialogPrintService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionCutOrderDialogPrintService.java index 25960a9..44ea004 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionCutOrderDialogPrintService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionCutOrderDialogPrintService.java @@ -105,9 +105,9 @@ public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implem productionDispatchContextStepService.dispatchMesWorkOrderCutFgDataContext(reqBean, mesWorkOrderCutFgDataContextList); - return mesWorkOrderCutFgDataContextList; } - return mesWorkOrderCutFgDataContextList; + // 成品列表为空则表示不需要弹框 + return CollectionUtils.isEmpty(mesWorkOrderCutFgDataContextList) ? null :mesWorkOrderCutFgDataContextList; } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java index ef64c4f..9147299 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java @@ -9,12 +9,16 @@ 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.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; 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.MesLabelTemplateParamRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; @@ -61,6 +65,12 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { @Autowired private IMesCustomerPartService customerPartService; + @Autowired + private MesLabelTemplateRepository labelTemplateRao; + + @Autowired + private MesLabelTemplateParamRepository labelTemplateParamRao; + @Override public StepResult execute(StationRequestBean reqBean) { @@ -270,23 +280,32 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { if (mesPackingDefine == null) return stepResult.isCompleted(false).msg(String.format("裁片方案代码[%s]关联产成零件[%s]箱类别代号[%s]无效!", mesCutSchemeFg.getCutCode(), mesCutSchemeFg.getPartNo(), mesCutSchemeFg.getPackageSnRuleCode())); + if (StringUtils.isEmpty(mesPackingDefine.getPrinter())) + return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护打印机!", mesPackingDefine.getPackCode())); + + if (StringUtils.isEmpty(mesPackingDefine.getPrintTemplate())) + return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护打印模板!", mesPackingDefine.getPackCode())); + + if (StringUtils.isEmpty(mesPackingDefine.getPackageBarcodeRule())) + return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护条码规则!", mesPackingDefine.getPackCode())); + MesWorkOrderCutDetailModel workOrderCutDetailModel = new MesWorkOrderCutDetailModel(); BeanUtils.copyProperties(mesCutSchemeFg, workOrderCutDetailModel); MesCustomerPart customerPart = customerPartService.getMesCustomerPartByPartNo(mesCutSchemeFg.getPartNo(), mesPackingDefine.getCustCode(), reqBean.getOrganizeCode()); + MesLabelTemplate labelTemplate = getLabelTemplate(mesPackingDefine.getPakcageTemplate(), reqBean.getOrganizeCode()); + + if (labelTemplate == null) + return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,零件号[%s]对应模板代码[%s]无效!", mesCutSchemeFg.getPartNo(), cutScheme.getCutCode())); + MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo()); - mesPartContext.setCopies(mesPackingDefine.getPrintCopies()); + mesPartContext.setCopies(mesPackingDefine.getPrintCopies() == null ? 1 : mesPackingDefine.getPrintCopies()); mesPartContext.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule()); mesPartContext.setPrinter(mesPackingDefine.getPrinter()); mesPartContext.setLabelTemplate(mesPackingDefine.getPakcageTemplate()); mesPartContext.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo()); - workOrderCutDetailModel.setCopies(mesPackingDefine.getPrintCopies()); - workOrderCutDetailModel.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule()); - workOrderCutDetailModel.setPrinter(mesPackingDefine.getPrinter()); - workOrderCutDetailModel.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo()); - partDataExtContext.put(mesCutSchemeFg.getPartNo(), mesPartContext); workOrderCutDetailModelList.add(workOrderCutDetailModel); @@ -395,4 +414,18 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { return true; } + private MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) { + DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(templateCode, MesPcnExtConstWords.TEMPLATE_CODE, templatePackBean); + MesLabelTemplate mesLabelTemplate = labelTemplateRao.getByProperty(templatePackBean); + if (mesLabelTemplate != null) { + //级联获取labelTemplateParam + DdlPackBean templateParamPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesLabelTemplate.getId(), "templateId", templateParamPackBean); + List params = labelTemplateParamRao.findByHqlWhere(templateParamPackBean); + mesLabelTemplate.setLabelTemplateParamList(params); + } + return mesLabelTemplate; + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java new file mode 100644 index 0000000..9bfd58e --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java @@ -0,0 +1,144 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +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.bean.MesLabelTemplate; +import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam; +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.MesLabelTemplateParamRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.StringJoiner; +import java.util.stream.Collectors; + +/** + * @Description : 打印裁片工单包装条码 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/6 13:39 + * @Modify: + **/ +@Service("mesWorkOrderCutPackagePrintStepService") +public class MesWorkOrderCutPackagePrintStepService extends BaseStepService { + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private MesLabelTemplateRepository labelTemplateRao; + + @Autowired + private MesLabelTemplateParamRepository labelTemplateParamRao; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + StepResult stepResult = StepResult.getSuccessComplete(); + List workOrderCutFgDataContext = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean); + + /** + * 重构,返回给前端弹框数据数据 + */ + + //Map.Entry entry = partDataExtContext.entrySet().stream().findFirst().get(); + // + //String labelTemplateCode = entry.getValue().getLabelTemplate(); + + List> resultMap = null; + + Map> workOrderCutDetailModelMapByPartNo = workOrderCutFgDataContext.stream().collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getPrinter()).add(o.getLabelTemplate()).toString())); + + if (CollectionUtils.isEmpty(workOrderCutDetailModelMapByPartNo)) return stepResult; + + // 根据不同的打印机和打印模板分组 + + for (Map.Entry> entry : workOrderCutDetailModelMapByPartNo.entrySet()) { + + List workOrderCutDetailModelList = entry.getValue(); + + MesWorkOrderCutDetailModel model = workOrderCutDetailModelList.stream().findFirst().get(); + + MesLabelTemplate labelTemplate = getLabelTemplate(model.getLabelTemplate(), reqBean.getOrganizeCode()); + + List partNoList = workOrderCutDetailModelList.stream().map(MesWorkOrderCutDetailModel::getPartNo).distinct().collect(Collectors.toList()); + + //模板信息丢失抛出异常 + if (labelTemplate == null) { + stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查包装定义信息,零件号%s对应模板代码[%s]无效!", partNoList, model.getLabelTemplate())); + } + + //根据反射获取策略类--封装打印数据 + String methodCode = labelTemplate.getMethodCode(); + //模板信息丢失抛出异常 + if (methodCode == null) { + stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的反射类丢失,请配置!", partNoList, labelTemplate.getTemplateCode())); + } + + MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); + mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); + mesProduceSnPrintModel.setSourceData(workOrderCutDetailModelList); + mesProduceSnPrintModel.setPrinter(model.getPrinter()); + + IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); + // GenSerialNoModel model , MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean, Boolean isStep + MesProduceSnPrintModel printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, true); + + resultMap = printModel.getPrintContextList(); + } + + // 裁片方案代码 + // 根据裁片方案代码查询裁片方案成品配置 + //返回打印标识 给前端 + //前端接收到busiType是customComponent,并且 dataType是file类型的消息,就需要打印后续消息里的数据,一个模板对应多个打印数据 + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue()); + resultBean.setCustomPageName("CUT_PACKAGE_SN_PRINT"); + resultBean.setResultObj(resultMap); + //3. 发送数据给到前端 + this.sendMessage(reqBean, resultBean); + return stepSuccessCompleteAndSendMsgReturn(reqBean, + resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), + stepResult, "执行打印成功!"); + } + + /** + * 根据templateCode 获取模板信息 + * + * @param templateCode + * @param organizeCode + * @return + */ + private MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) { + DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(templateCode, MesPcnExtConstWords.TEMPLATE_CODE, templatePackBean); + MesLabelTemplate mesLabelTemplate = labelTemplateRao.getByProperty(templatePackBean); + if (mesLabelTemplate != null) { + //级联获取labelTemplateParam + DdlPackBean templateParamPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesLabelTemplate.getId(), "templateId", templateParamPackBean); + List params = labelTemplateParamRao.findByHqlWhere(templateParamPackBean); + mesLabelTemplate.setLabelTemplateParamList(params); + } + return mesLabelTemplate; + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackageSnSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackageSnSaveStepService.java index a5fb462..3c271d8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackageSnSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackageSnSaveStepService.java @@ -17,6 +17,7 @@ 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.MesWorkOrderCutPackageRepository; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -49,6 +50,9 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService { @Autowired private IFsmRouteDataService fsmRouteDataService; + @Autowired + private MesWorkOrderCutPackageRepository workOrderCutPackageRepository; + @Override public StepResult execute(StationRequestBean reqBean) { @@ -108,6 +112,9 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService { remainder, workOrderCutPackages, newWorkOrderCutFgDataContextList); } + // 保存条码数据 + workOrderCutPackageRepository.saveAll(workOrderCutPackages); + } productionDispatchContextStepService.dispatchMesWorkOrderCutFgDataContext(reqBean, newWorkOrderCutFgDataContextList); @@ -138,8 +145,12 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService { BeanUtils.copyProperties(workOrderCutDetailModel, newWorkOrderCutDetailModel); newWorkOrderCutDetailModel.setQty(qty); newWorkOrderCutDetailModel.setCreateDatetime(cutPackage.getCreateDatetime()); - newWorkOrderCutDetailModel.setPrinter(mesPartContext.getPrinter()); + newWorkOrderCutDetailModel.setLotNo(cutPackage.getLotNo()); newWorkOrderCutDetailModel.setCopies(mesPartContext.getCopies()); + newWorkOrderCutDetailModel.setPackageSnRule(mesPartContext.getPackageSnRule()); + newWorkOrderCutDetailModel.setPrinter(mesPartContext.getPrinter()); + newWorkOrderCutDetailModel.setCustPartNo(mesPartContext == null ? "" : mesPartContext.getCustPartNo()); + newWorkOrderCutDetailModel.setLabelTemplate(mesPartContext.getLabelTemplate()); workOrderCutPackages.add(cutPackage); newWorkOrderCutFgDataContextList.add(newWorkOrderCutDetailModel); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintModel.java index 7cff2d5..70ca919 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintModel.java @@ -73,8 +73,8 @@ public class MesProduceSnPrintModel { @ApiParam(name = "源数据 使用功能:1-裁片") private Object sourceData; - @ApiParam(name = "打印参数值 使用功能:1-裁片") - List> printParamValueList = new ArrayList<>(); + @ApiParam(name = "打印内容 使用功能:1-裁片") + List> printContextList = new ArrayList<>(); public Double getQty() { return qty == null || qty <= 0d ? 1d : qty; 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 be64516..3a6d2a7 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 @@ -466,4 +466,18 @@ public class MesPcnExtConstWords { // 模板代码 public static final String TEMPLATE_CODE = "templateCode"; + + //打印模板 + public static final String LABEL_TEMPLATE = "labelTemplate"; + //打印模板数据 + public static final String TEMPLATE_DATA = "templateData"; + //打印机 + public static final String PRINTERE = "printer"; + //客户零件号 + public static final String CUST_PART_NO = "custPartNo"; + + //生产日期 + public static final String LOT_NO = "lotNo"; + //包装数量 + public static final String PACKAGE_QTY = "packageQty"; }