diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesNingDeBarcodePrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesNingDeBarcodePrintStrategy.java index e21ac53..b938bde 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesNingDeBarcodePrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesNingDeBarcodePrintStrategy.java @@ -1,24 +1,22 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPrintedSnLogService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; -import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintDataModel; 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.IPartService; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; -import cn.estsh.i3plus.mes.pcn.util.DateUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; -import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule; -import cn.estsh.i3plus.pojo.mes.bean.MesPart; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.repository.MesNumberRuleRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -26,21 +24,21 @@ import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.Date; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.StringJoiner; /** - * @Description :门板及cnsl总成条码(单件) + * @Description :宁德单件条码打印 * @Reference : - * @Author : junsheng.li + * @Author : wangjie * @CreateDate 2024/9/26 18:20 * @Modify: **/ @Component @Slf4j -public class MesDPBarcodeSubStringPartSnParamWhPrintStrategy implements IPrintTemplateStrategyService { +public class MesNingDeBarcodePrintStrategy implements IPrintTemplateStrategyService { @Autowired private ISyncFuncService syncFuncService; @@ -52,10 +50,13 @@ public class MesDPBarcodeSubStringPartSnParamWhPrintStrategy implements IPrintTe private IPartService partService; @Autowired - private IMesPrintedSnLogService mesPrintedSnLogService; + private IMesCustomerPartService customerPartService; @Autowired - private IMesCustomerPartService mesCustomerPartService; + private MesNumberRuleRepository numberRuleRepository; + + @Autowired + private IMesTemplateService templateService; @Override public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean, Boolean isStep) { @@ -65,94 +66,98 @@ public class MesDPBarcodeSubStringPartSnParamWhPrintStrategy implements IPrintTe MesPart part = (!CollectionUtils.isEmpty(dataMap) && dataMap.containsKey(MesPart.class.getSimpleName())) ? (MesPart)dataMap.get(MesPart.class.getSimpleName()) : partService.getPartByNo(mesProduceSnPrintModel.getOrganizeCode(), mesProduceSnPrintModel.getPartNo()); + MesCustomerPart customerPart = (!CollectionUtils.isEmpty(dataMap) && dataMap.containsKey(MesCustomerPart.class.getSimpleName())) + ? (MesCustomerPart)dataMap.get(MesCustomerPart.class.getSimpleName()) + : customerPartService.getMesCustomerPart(mesProduceSnPrintModel.getOrganizeCode(), mesProduceSnPrintModel.getPartNo()); + + if (null == part) MesPcnException.throwBusiException("零件编码[%s]信息不存在!", mesProduceSnPrintModel.getPartNo()); + if (StringUtils.isEmpty(part.getProductMatchRule())) MesPcnException.throwBusiException("零件编码[%s]信息未维护零件条码匹配规则!", mesProduceSnPrintModel.getPartNo()); + if (null == customerPart) MesPcnException.throwBusiException("零件编码[%s]未维护客户零件号!", mesProduceSnPrintModel.getPartNo()); + if (null == numberRule) numberRule = numberRuleRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.RULE_CODE}, + new Object[]{mesProduceSnPrintModel.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), part.getProductMatchRule()}); + if (null == numberRule) MesPcnException.throwBusiException("零件编码[%s]维护的零件条码匹配规则[%s]信息不存在!", mesProduceSnPrintModel.getPartNo(), part.getProductMatchRule()); + Map customParamValue = templateService.queryMesLabelTemplateParamPartValue(mesProduceSnPrintModel.getPartNo(), part.getProductLabelTemplate(), mesProduceSnPrintModel.getOrganizeCode()); if (!isStep){ if (null == genSerialNoModel) MesPcnException.throwBusiException("入参缺少[GenSerialNoModel]!"); - if (null == part) MesPcnException.throwBusiException("请检查零件信息,零件号[%s]信息不存在!", genSerialNoModel.getPartNo()); - if (StringUtils.isEmpty(part.getPartSnParam())) MesPcnException.throwBusiException("请检查零件信息,零件号[%s]未维护零件条码参数!", part.getPartNo()); - if (part.getPartSnParam().length() < 4) MesPcnException.throwBusiException("请检查零件信息,零件号[%s]维护零件条码参数[%s]长度小于4!", part.getPartNo(), part.getPartSnParam()); - if (StringUtils.isEmpty(genSerialNoModel.getShiftCode())) MesPcnException.throwBusiException("入参缺少班次代码!"); - if (CollectionUtils.isEmpty(dataMap) || !dataMap.containsKey(MesPart.class.getSimpleName())) genSerialNoModel.putDataMap(MesPart.class.getSimpleName(), part); - genSerialNoModel.partSnParam(part.getPartSnParam()) - .dynamicRule(new StringJoiner(MesPcnExtConstWords.COMMA).add(part.getPartSnParam().substring(part.getPartSnParam().length() - 4)).add(genSerialNoModel.getShiftCode()).toString()); - //年月日缩写 - Date date = new Date(); - genSerialNoModel.setYear(getYearShort(date)); - genSerialNoModel.setMonth(getMonthShort(date)); - genSerialNoModel.setDay(getDayShort(date)); + if (CollectionUtils.isEmpty(dataMap) || !dataMap.containsKey(MesCustomerPart.class.getSimpleName())) genSerialNoModel.putDataMap(MesCustomerPart.class.getSimpleName(), customerPart); + genSerialNoModel.partSnParam(part.getPartSnParam()).setCustPartNo(customerPart.getCustPartNo()); List productSnList = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getOrganizeCode(), mesProduceSnPrintModel.getPrintQty()).getResultList(); if (CollectionUtils.isEmpty(productSnList)) MesPcnException.throwBusiException("根据编码规则[%s]生成零件条码失败!", genSerialNoModel.getRuleCode()); for (Object productSn : productSnList) { - //保存条码信息 MesProduceSn produceSn = generateMesProduceSn(part, productSn.toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); - //封装打印信息 - MesProduceSnPrintDataModel printDataModel = getModel(produceSn, part); - mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); + Map printTemplateData = generatePrintTemplateData(part, customerPart, numberRule, produceSn, customParamValue); mesProduceSnPrintModel.getMesProduceSnList().add(produceSn); - //保存打印记录 - mesProduceSnPrintModel.getMesPrintedSnLogList().add(mesPrintedSnLogService.getMesPrintedSnLog(mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getOrganizeCode(), printDataModel)); + mesProduceSnPrintModel.getPrintContextList().add(printTemplateData); + mesProduceSnPrintModel.getMesPrintedSnLogList().add(getMesPrintedSnLog(mesProduceSnPrintModel, part, customerPart, produceSn.getProductSn(), printTemplateData)); } }else{ - MesProduceSn mesProduceSn = mesProduceSnPrintModel.getMesProduceSnList().get(0); - //封装打印信息 - MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, part); - mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); - //保存打印记录 - mesProduceSnPrintModel.getMesPrintedSnLogList().add(mesPrintedSnLogService.getMesPrintedSnLog(mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getOrganizeCode(), printDataModel)); + MesProduceSn produceSn = mesProduceSnPrintModel.getMesProduceSnList().get(0); + Map printTemplateData = generatePrintTemplateData(part, customerPart, numberRule, produceSn, customParamValue); + List> printDataMapList = new ArrayList<>(); + printDataMapList.add(printTemplateData); + mesProduceSnPrintModel.getPrintContextList().add(packResultMap(mesProduceSnPrintModel, printDataMapList)); + mesProduceSnPrintModel.getMesPrintedSnLogList().add(getMesPrintedSnLog(mesProduceSnPrintModel, part, customerPart, produceSn.getProductSn(), printTemplateData)); } return mesProduceSnPrintModel; } - private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, String userName, Double qty) { + private Map packResultMap(MesProduceSnPrintModel printModel, List> printDataMapList) { + Map resultMap = new HashMap<>(); + resultMap.put(MesPcnExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate()); + resultMap.put(MesPcnExtConstWords.TEMPLATE_DATA, printDataMapList); + resultMap.put(MesPcnExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode()); + resultMap.put(MesPcnExtConstWords.PRINTER, printModel.getPrinter()); + return resultMap; + } + + private Map generatePrintTemplateData(MesPart part, MesCustomerPart customerPart, MesNumberRule numberRule, MesProduceSn produceSn, Map customParamValue) { + Map printTemplateData = new HashMap<>(); + printTemplateData.put(MesPcnExtConstWords.QR_CODE, customerPart.getCustPartNo()); + printTemplateData.put(MesPcnExtConstWords.PART_NAME, part.getPartName()); + printTemplateData.put(MesPcnExtConstWords.LOT_NO, StringUtils.isEmpty(numberRule.getPrefix()) ? + produceSn.getProductSn() : produceSn.getProductSn().replace(numberRule.getPrefix(), MesPcnExtConstWords.EMPTY)); + printTemplateData.put(MesPcnExtConstWords.BAR_CODE, produceSn.getProductSn()); + if (!CollectionUtils.isEmpty(customParamValue)) printTemplateData.putAll(customParamValue); + return printTemplateData; + } + + private MesProduceSn generateMesProduceSn(MesPart part, String sn, String userName, Double qty) { MesProduceSn mesProduceSn = new MesProduceSn(); mesProduceSn.setSerialNumber(snowflakeIdMaker.nextId() + ""); mesProduceSn.setProductSn(sn); mesProduceSn.setCustSn(sn); - mesProduceSn.setPartNo(mesPart.getPartNo()); - mesProduceSn.setPartName(mesPart.getPartName()); - mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate()); - mesProduceSn.setCustLabelTemplate(mesPart.getCustLabelTemplate()); - mesProduceSn.setProdLabelTemplate(mesPart.getProductLabelTemplate()); + mesProduceSn.setPartNo(part.getPartNo()); + mesProduceSn.setPartName(part.getPartName()); + mesProduceSn.setProcessLabelTemplate(part.getProcessLabelTemplate()); + mesProduceSn.setCustLabelTemplate(part.getCustLabelTemplate()); + mesProduceSn.setProdLabelTemplate(part.getProductLabelTemplate()); mesProduceSn.setQty(qty); mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); mesProduceSn.setLotNo(TimeTool.getToday()); mesProduceSn.setPrintCount(MesPcnExtConstWords.ONE); mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); - mesProduceSn.setOrganizeCode(mesPart.getOrganizeCode()); + mesProduceSn.setOrganizeCode(part.getOrganizeCode()); ConvertBean.serviceModelInitialize(mesProduceSn, userName); return mesProduceSn; } - private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, MesPart part) { - MesProduceSnPrintDataModel mesProduceSnPrintDataModel = new MesProduceSnPrintDataModel(); - mesProduceSnPrintDataModel.setPartNo(produceSn.getPartNo()); - mesProduceSnPrintDataModel.setPartName(produceSn.getPartName()); - if (null != part && !StringUtils.isEmpty(part.getPartSnParam()) && part.getPartSnParam().length() >= 4) { - mesProduceSnPrintDataModel.setCustPartNo(part.getPartSnParam().substring(0, 4)); - mesProduceSnPrintDataModel.setCustPartNo1(part.getPartSnParam().substring(part.getPartSnParam().length() - 4)); - } - mesProduceSnPrintDataModel.setBarcode(produceSn.getProductSn()); - mesProduceSnPrintDataModel.setPrintDate(TimeTool.getNowTime(true)); - mesProduceSnPrintDataModel.setUserName(produceSn.getCreateUser()); - mesProduceSnPrintDataModel.setProductDate(TimeTool.parseStringFormat(produceSn.getLotNo(), DateUtil.SHORT_FORMAT, "yyyy/MM/dd")); - return mesProduceSnPrintDataModel; - } - - private String getYearShort(Date date) { - return MesExtEnumUtil.YEAR_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getYear(date))); - } - - private String getMonthShort(Date date) { - return MesExtEnumUtil.MONTH_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getMonth(date))); - } - - private String getDayShort(Date date) { - return TimeTool.getDay(date); + private MesPrintedSnLog getMesPrintedSnLog(MesProduceSnPrintModel mesProduceSnPrintModel, MesPart part, MesCustomerPart customerPart, String productSn, Map printTemplateData) { + MesPrintedSnLog snLog = new MesPrintedSnLog(); + snLog.setBarcode(productSn); + snLog.setPartNo(part.getPartNo()); + snLog.setPartName(part.getPartName()); + snLog.setCustPartNo(customerPart.getCustPartNo()); + snLog.setPrintContext(printTemplateData); + ConvertBean.serviceModelInitialize(snLog, mesProduceSnPrintModel.getUserName()); + snLog.setOrganizeCode(mesProduceSnPrintModel.getOrganizeCode()); + return snLog; } }