From 715f8be640d1c49fff526406651f18df64a0cace Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 3 Aug 2024 04:35:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=A8=A1=E6=9D=BF=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesProduceSnPrintService.java | 140 +-------------------- .../numberrule/GqxnyNumberRuleStrategyService.java | 36 +----- .../print/strategy/AionPrintStrategy.java | 83 +++--------- .../print/strategy/GqaaPrintStrategy.java | 83 +++--------- .../print/strategy/GqxnyPrintStrategy.java | 88 +++---------- .../ext/mes/pcn/apiservice/util/StringUtilExt.java | 45 +++++++ .../pcn/pojo/model/MesProduceSnPrintDataModel.java | 6 + 7 files changed, 107 insertions(+), 374 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/util/StringUtilExt.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java index ad94bab..05764d7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java @@ -194,6 +194,7 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { MesPrintedSnLog mesPrintedSnLog = snLogList.get(0); MesProduceSnPrintDataModel model = new MesProduceSnPrintDataModel(); BeanUtil.copyProperties(mesPrintedSnLog, model); + model.setPrintDate(TimeTool.getNowTime(true)); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(model); } //获取打印模板信息 @@ -209,149 +210,10 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { return mesConfigList.iterator().next().getCfgValue(); } - private String getTemplate(MesProduceSnPrintModel mesProduceSnPrintModel, MesPart mesPart) { - Date date = new Date(); - StringBuilder template = new StringBuilder(); - if (MesPcnEnumUtil.PRINT_TEMPLATE.B2M.getCode().equals(mesProduceSnPrintModel.getPrintTemplate()) || MesPcnEnumUtil.PRINT_TEMPLATE.GQAA.getCode().equals(mesProduceSnPrintModel.getPrintTemplate())) { - //获取客户零件号 - MesCustomerPart mesCustomerPart = getMesCustomerPart(mesProduceSnPrintModel); - mesProduceSnPrintModel.setCustPartNo(mesCustomerPart.getCustPartNo()); - //"+"(1)+零件简号(4)+ 供应商代码(SE103)+生产线代号(1)+生产日期(4)+供应商生产流水号(4) +软件版本代号(2) - template.append("+").append(mesPart.getPartSnParam()).append("SE103").append("1").append(getDateTime(date)).append("serialNo").append("01"); - } else if (MesPcnEnumUtil.PRINT_TEMPLATE.GQXNY.getCode().equals(mesProduceSnPrintModel.getPrintTemplate())) { - //获取客户零件号 - MesCustomerPart mesCustomerPart = getMesCustomerPart(mesProduceSnPrintModel); - mesProduceSnPrintModel.setCustPartNo(mesCustomerPart.getCustPartNo()); - //零件号(17)+扩展位(2)+供应商代码(7)+扩展位(3)+产线(1)+年月日(6位)+流水号(4)+扩展位(4)+"+" - template.append(stringFormat(mesCustomerPart.getCustPartNo(), 17)).append("00").append(stringFormat("VD501", 7)).append("000").append("1").append(TimeTool.pareDateToString("yyMMdd", date)).append("serialNo").append("0000").append("+"); - } else if (MesPcnEnumUtil.PRINT_TEMPLATE.NO_SORT_BAR_CODE_GZ.getCode().equals(mesProduceSnPrintModel.getPrintTemplate())) { - //内部条码:M00061102-R619+"10158" - //条码拼接规则:零件号+年月日+5位流水号 - template.append(mesPart.getPartNo()).append("-").append(getDateTime(date)).append("serialNo"); - } else if (MesPcnEnumUtil.PRINT_TEMPLATE.NO_SORT_BAR_CODE_GZ_NEW.getCode().equals(mesProduceSnPrintModel.getPrintTemplate())) { - //获取客户零件号 - MesCustomerPart mesCustomerPart = getMesCustomerPart(mesProduceSnPrintModel); - mesProduceSnPrintModel.setCustPartNo(mesCustomerPart.getCustPartNo()); - //小鹏客户条码:6205100EF3-S5-06-R61910027 - //条码拼接规则:客户零件号+中杠+年月日+5位流水号(按天递增) - template.append(mesCustomerPart.getCustPartNo()).append("-").append(getDateTime(date)).append("serialNo"); - } - return template.toString(); - } - - private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, String no, String custPartNo, String factoryName) { - MesProduceSnPrintDataModel mesProduceSnPrintDataModel = new MesProduceSnPrintDataModel(); - mesProduceSnPrintDataModel.setFactoryName(factoryName); - mesProduceSnPrintDataModel.setPartNo(produceSn.getPartNo()); - mesProduceSnPrintDataModel.setPartName(produceSn.getPartName()); - mesProduceSnPrintDataModel.setNo(no); - mesProduceSnPrintDataModel.setBarcode(produceSn.getProductSn()); - mesProduceSnPrintDataModel.setCustPartNo(custPartNo); - mesProduceSnPrintDataModel.setProductDate(produceSn.getLotNo()); - return mesProduceSnPrintDataModel; - } - - private MesCustomerPart getMesCustomerPart(MesProduceSnPrintModel mesProduceSnPrintModel) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesProduceSnPrintModel.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(mesProduceSnPrintModel.getPartNo(), "erpPartNo", ddlPackBean); MesCustomerPart mesCustomerPart = mesCustomerPartRDao.getByProperty(ddlPackBean); return mesCustomerPart; } - - private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, String userName, Double qty, String format) { - 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.setQty(qty); - mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); - mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - mesProduceSn.setLotNo(TimeTool.getNowTime(format)); - mesProduceSn.setPrintCount(MesPcnExtConstWords.ONE); - mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); - mesProduceSn.setOrganizeCode(mesPart.getOrganizeCode()); - ConvertBean.serviceModelInitialize(mesProduceSn, userName); - return mesProduceSn; - } - - private String getDateTime(Date date) { - StringBuilder dateTime = new StringBuilder(); - String yearStr = MesExtEnumUtil.YEAR_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getYear(date))); - if (StringUtils.isEmpty(yearStr)) { - MesPcnException.throwMesBusiException("【%s】年月简号不存在", TimeTool.getYear(date)); - } - String monthStr = MesExtEnumUtil.MONTH_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getMonth(date))); - if (StringUtils.isEmpty(monthStr)) { - MesPcnException.throwMesBusiException("【%s】月简号不存在", TimeTool.getMonth(date)); - } - return dateTime.append(yearStr).append(monthStr).append(TimeTool.getDay(date)).toString(); - } - - private String getYearShort(Date date) { - String yearStr = MesExtEnumUtil.YEAR_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getYear(date))); - if (StringUtils.isEmpty(yearStr)) { - MesPcnException.throwMesBusiException("【%s】年月简号不存在", TimeTool.getYear(date)); - } - return yearStr; - } - - private String getMonthShort(Date date) { - String monthStr = MesExtEnumUtil.MONTH_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getMonth(date))); - if (StringUtils.isEmpty(monthStr)) { - MesPcnException.throwMesBusiException("【%s】月简号不存在", TimeTool.getMonth(date)); - } - return monthStr; - } - - private String getDayShort(Date date) { - String day = TimeTool.getDay(date); - return day; - } - - private String stringFormat(String data, Integer length) { - return stringFormat(data, length, true, "*"); - } - - private String stringFormat(String data, Integer length, boolean left, String symbol) { - //数据长途大于填充位数直接返回 - if (data.length() >= length) { - return data; - } - StringBuilder dataBuffer = new StringBuilder(); - //右拼接 - if (left) { - dataBuffer.append(data); - for (int i = 0; i < length - data.length(); i++) { - dataBuffer.append(symbol); - } - } - - //左拼接 - if (!left) { - for (int i = 0; i < length - data.length(); i++) { - dataBuffer.append(symbol); - } - dataBuffer.append(data); - } - return dataBuffer.toString(); - } - - // 34进制字符集 - private String toBase34(int number) { - String base34Chars = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"; - StringBuilder sb = new StringBuilder(); - - while (number > 0) { - int remainder = number % 34; - sb.append(base34Chars.charAt(remainder)); - number /= 34; - } - return sb.reverse().toString(); - } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/GqxnyNumberRuleStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/GqxnyNumberRuleStrategyService.java index 67891bf..5509b73 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/GqxnyNumberRuleStrategyService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/GqxnyNumberRuleStrategyService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.numberrule; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.StringUtilExt; 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.api.iservice.busi.INumberRulePackAttributeStrategyService; @@ -48,9 +49,7 @@ public class GqxnyNumberRuleStrategyService implements INumberRulePackAttributeS MesCustomerPart customerPart = (!CollectionUtils.isEmpty(dataMap) && dataMap.containsKey(MesCustomerPart.class.getSimpleName())) ? (MesCustomerPart)dataMap.get(MesCustomerPart.class.getSimpleName()) : getMesCustomerPart(genSerialNoModel.getOrganizeCode(), genSerialNoModel.getPartNo()); if (null != customerPart) { - String custPartNo = customerPart.getCustPartNo(); - String custPartNoFormat = stringFormat(custPartNo, 17); - genSerialNoModel.setCustPartNo(custPartNoFormat); + genSerialNoModel.setCustPartNo(customerPart.getCustPartNo()); } //拓展位 2位 00 包含0~9,A~Z 不使用时,补“0”填充 {SPILTRULE} @@ -58,8 +57,7 @@ public class GqxnyNumberRuleStrategyService implements INumberRulePackAttributeS MesConfig supplierConfig = configService.getMesConfigByCfgCodeKeyOrg(MesPcnExtConstWords.SUPPLIER_CODE, MesExtEnumUtil.MES_PRINT_TEMPLATE.GQXNY.getValue(), genSerialNoModel.getOrganizeCode()); if (null != supplierConfig) { String supplierCode = supplierConfig.getCfgValue(); - String supplierCodeFormat = stringFormat(supplierCode, 7); - genSerialNoModel.setCustCode(supplierCodeFormat); + genSerialNoModel.setCustCode(StringUtilExt.stringFormat(supplierCode, 7,MesPcnExtConstWords.SEPARATOR)); } //扩展位 3位 预留扩展位0~9 A~Z 不使用时,补 0 {SPILTRULE} @@ -75,34 +73,6 @@ public class GqxnyNumberRuleStrategyService implements INumberRulePackAttributeS return genSerialNoModel; } - private String stringFormat(String data, Integer length) { - return stringFormat(data, length, true, MesPcnExtConstWords.SEPARATOR); - } - - private String stringFormat(String data, Integer length, boolean left, String symbol) { - //数据长途大于填充位数直接返回 - if (data.length() >= length) { - return data; - } - StringBuilder dataBuffer = new StringBuilder(); - //右拼接 - if (left) { - dataBuffer.append(data); - for (int i = 0; i < length - data.length(); i++) { - dataBuffer.append(symbol); - } - } - - //左拼接 - if (!left) { - for (int i = 0; i < length - data.length(); i++) { - dataBuffer.append(symbol); - } - dataBuffer.append(data); - } - return dataBuffer.toString(); - } - private MesCustomerPart getMesCustomerPart(String orgaizeCode, String partNo) { if (StringUtils.isEmpty(orgaizeCode) || StringUtils.isEmpty(partNo)) return null; DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(orgaizeCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AionPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AionPrintStrategy.java index c64f1a1..e1be928 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AionPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AionPrintStrategy.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; 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.apiservice.util.StringUtilExt; 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; @@ -79,19 +80,10 @@ public class AionPrintStrategy implements IPrintTemplateStrategyService { if (!isStep){ for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1); - String sn = resultBean.getResultList().get(0).toString(); - int versionNoLength = numberRule.getSpiltRule().substring(numberRule.getSpiltRule().lastIndexOf(",") + 1).length(); - Integer serialNoLength = numberRule.getSerialnoLength(); - String snPrefix = sn.substring(0, sn.length() - versionNoLength - serialNoLength); - String snSuffix = sn.substring(sn.length() - versionNoLength); - String serialNo = sn.substring(sn.length() - versionNoLength - serialNoLength, sn.length() - versionNoLength); - String serialNo34 = toBase34(Integer.parseInt(serialNo)); - serialNo34 = stringFormat(serialNo34, 4, false, "0"); - sn = snPrefix + serialNo34 + snSuffix; //保存条码信息 - MesProduceSn produceSn = generateMesProduceSn(mesPart, sn, mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); + MesProduceSn produceSn = generateMesProduceSn(mesPart, resultBean.getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); //封装打印信息 - MesProduceSnPrintDataModel printDataModel = getModel(produceSn, serialNo, custPartNo, organizeName); + MesProduceSnPrintDataModel printDataModel = getModel(produceSn, numberRule, custPartNo, organizeName); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); mesProduceSnPrintModel.getMesProduceSnList().add(produceSn); //保存打印记录 @@ -103,20 +95,9 @@ public class AionPrintStrategy implements IPrintTemplateStrategyService { } }else { numberRule = getNumberRule(organizeCode, mesPart); - String sn = mesProduceSnPrintModel.getProductSn(); MesProduceSn mesProduceSn = mesProduceSnPrintModel.getMesProduceSnList().get(0); - //如下目的主要是截取流水号,主要把流水号转换为32位 - int versionNoLength = numberRule.getSpiltRule().substring(numberRule.getSpiltRule().lastIndexOf(",") + 1).length(); - Integer serialNoLength = numberRule.getSerialnoLength(); - String snPrefix = sn.substring(0, sn.length() - versionNoLength - serialNoLength); - String snSuffix = sn.substring(sn.length() - versionNoLength); - String serialNo = sn.substring(sn.length() - versionNoLength - serialNoLength, sn.length() - versionNoLength); - String serialNo34 = toBase34(Integer.parseInt(serialNo)); - serialNo34 = stringFormat(serialNo34, 4, false, "0"); - sn = snPrefix + serialNo34 + snSuffix; //封装打印信息 - MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, serialNo34, custPartNo, organizeName); - printDataModel.setBarcode(sn); + MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, numberRule, custPartNo, organizeName); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); //保存打印记录 MesPrintedSnLog snLog = new MesPrintedSnLog(); @@ -128,13 +109,24 @@ public class AionPrintStrategy implements IPrintTemplateStrategyService { return mesProduceSnPrintModel; } - private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, String no, String custPartNo, String factoryName) { + private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, MesNumberRule numberRule, String custPartNo, String factoryName) { + //34进制 + String sn = produceSn.getProductSn(); + int versionNoLength = numberRule.getSpiltRule().substring(numberRule.getSpiltRule().lastIndexOf(",") + 1).length(); + Integer serialNoLength = numberRule.getSerialnoLength(); + String snPrefix = sn.substring(0, sn.length() - versionNoLength - serialNoLength); + String snSuffix = sn.substring(sn.length() - versionNoLength); + String serialNo = sn.substring(sn.length() - versionNoLength - serialNoLength, sn.length() - versionNoLength); + String serialNo34 = StringUtilExt.stringFormat(StringUtilExt.toBase34(Integer.parseInt(serialNo)), 4, false, "0"); + MesProduceSnPrintDataModel mesProduceSnPrintDataModel = new MesProduceSnPrintDataModel(); mesProduceSnPrintDataModel.setFactoryName(factoryName); mesProduceSnPrintDataModel.setPartNo(produceSn.getPartNo()); mesProduceSnPrintDataModel.setPartName(produceSn.getPartName()); - mesProduceSnPrintDataModel.setNo(no); + mesProduceSnPrintDataModel.setNo(StringUtilExt.stringFormat(serialNo, 4, false, "0")); mesProduceSnPrintDataModel.setBarcode(produceSn.getProductSn()); + mesProduceSnPrintDataModel.setNo34(serialNo34); + mesProduceSnPrintDataModel.setBarcode34(snPrefix + serialNo34 + snSuffix); mesProduceSnPrintDataModel.setCustPartNo(custPartNo); mesProduceSnPrintDataModel.setPrintDate(TimeTool.getNowTime(true)); mesProduceSnPrintDataModel.setProductDate(TimeTool.parseStringFormat(produceSn.getLotNo(), DateUtil.SHORT_FORMAT,"yyyy/MM/dd")); @@ -148,47 +140,6 @@ public class AionPrintStrategy implements IPrintTemplateStrategyService { if (null == numberRule) MesPcnException.throwMesBusiException("物料[%s]维护的零件条码匹配规则[%s]信息不存在", part.getPartNo(), part.getProcessMatchRule()); return numberRule; } - // 34进制字符集 - private String toBase34(int number) { - String base34Chars = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"; - StringBuilder sb = new StringBuilder(); - - while (number > 0) { - int remainder = number % 34; - sb.append(base34Chars.charAt(remainder)); - number /= 34; - } - return sb.reverse().toString(); - } - - - private String stringFormat(String data, Integer length) { - return stringFormat(data, length, true, "*"); - } - - private String stringFormat(String data, Integer length, boolean left, String symbol) { - //数据长途大于填充位数直接返回 - if (data.length() >= length) { - return data; - } - StringBuilder dataBuffer = new StringBuilder(); - //右拼接 - if (left) { - dataBuffer.append(data); - for (int i = 0; i < length - data.length(); i++) { - dataBuffer.append(symbol); - } - } - - //左拼接 - if (!left) { - for (int i = 0; i < length - data.length(); i++) { - dataBuffer.append(symbol); - } - dataBuffer.append(data); - } - return dataBuffer.toString(); - } private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, String userName, Double qty) { MesProduceSn mesProduceSn = new MesProduceSn(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqaaPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqaaPrintStrategy.java index a53ada8..e255ac6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqaaPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqaaPrintStrategy.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; 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.apiservice.util.StringUtilExt; 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; @@ -77,19 +78,10 @@ public class GqaaPrintStrategy implements IPrintTemplateStrategyService { if (!isStep){ for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1); - String sn = resultBean.getResultList().get(0).toString(); - int versionNoLength = numberRule.getSpiltRule().substring(numberRule.getSpiltRule().lastIndexOf(",") + 1).length(); - Integer serialNoLength = numberRule.getSerialnoLength(); - String snPrefix = sn.substring(0, sn.length() - versionNoLength - serialNoLength); - String snSuffix = sn.substring(sn.length() - versionNoLength); - String serialNo = sn.substring(sn.length() - versionNoLength - serialNoLength, sn.length() - versionNoLength); - String serialNo34 = toBase34(Integer.parseInt(serialNo)); - serialNo34 = stringFormat(serialNo34, 4, false, "0"); - sn = snPrefix + serialNo34 + snSuffix; //保存条码信息 - MesProduceSn produceSn = generateMesProduceSn(mesPart, sn, mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); + MesProduceSn produceSn = generateMesProduceSn(mesPart, resultBean.getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); //封装打印信息 - MesProduceSnPrintDataModel printDataModel = getModel(produceSn, serialNo, mesCustomerPart.getCustPartNo(), organizeName); + MesProduceSnPrintDataModel printDataModel = getModel(produceSn, numberRule, mesCustomerPart.getCustPartNo(), organizeName); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); mesProduceSnPrintModel.getMesProduceSnList().add(produceSn); //保存打印记录 @@ -101,20 +93,9 @@ public class GqaaPrintStrategy implements IPrintTemplateStrategyService { } }else { numberRule = getNumberRule(organizeCode, mesPart); - String sn = mesProduceSnPrintModel.getProductSn(); MesProduceSn mesProduceSn = mesProduceSnPrintModel.getMesProduceSnList().get(0); - //如下目的主要是截取流水号,主要把流水号转换为32位 - int versionNoLength = numberRule.getSpiltRule().substring(numberRule.getSpiltRule().lastIndexOf(",") + 1).length(); - Integer serialNoLength = numberRule.getSerialnoLength(); - String snPrefix = sn.substring(0, sn.length() - versionNoLength - serialNoLength); - String snSuffix = sn.substring(sn.length() - versionNoLength); - String serialNo = sn.substring(sn.length() - versionNoLength - serialNoLength, sn.length() - versionNoLength); - String serialNo34 = toBase34(Integer.parseInt(serialNo)); - serialNo34 = stringFormat(serialNo34, 4, false, "0"); - sn = snPrefix + serialNo34 + snSuffix; //封装打印信息 - MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, serialNo34, mesCustomerPart.getCustPartNo(), organizeName); - printDataModel.setBarcode(sn); + MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, numberRule, mesCustomerPart.getCustPartNo(), organizeName); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); //保存打印记录 MesPrintedSnLog snLog = new MesPrintedSnLog(); @@ -126,13 +107,24 @@ public class GqaaPrintStrategy implements IPrintTemplateStrategyService { return mesProduceSnPrintModel; } - private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, String no, String custPartNo, String factoryName) { + private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, MesNumberRule numberRule, String custPartNo, String factoryName) { + //34进制 + String sn = produceSn.getProductSn(); + int versionNoLength = numberRule.getSpiltRule().substring(numberRule.getSpiltRule().lastIndexOf(",") + 1).length(); + Integer serialNoLength = numberRule.getSerialnoLength(); + String snPrefix = sn.substring(0, sn.length() - versionNoLength - serialNoLength); + String snSuffix = sn.substring(sn.length() - versionNoLength); + String serialNo = sn.substring(sn.length() - versionNoLength - serialNoLength, sn.length() - versionNoLength); + String serialNo34 = StringUtilExt.stringFormat(StringUtilExt.toBase34(Integer.parseInt(serialNo)), 4, false, "0"); + MesProduceSnPrintDataModel mesProduceSnPrintDataModel = new MesProduceSnPrintDataModel(); mesProduceSnPrintDataModel.setFactoryName(factoryName); mesProduceSnPrintDataModel.setPartNo(produceSn.getPartNo()); mesProduceSnPrintDataModel.setPartName(produceSn.getPartName()); - mesProduceSnPrintDataModel.setNo(no); + mesProduceSnPrintDataModel.setNo(StringUtilExt.stringFormat(serialNo, 4, false, "0")); mesProduceSnPrintDataModel.setBarcode(produceSn.getProductSn()); + mesProduceSnPrintDataModel.setNo34(serialNo34); + mesProduceSnPrintDataModel.setBarcode34(snPrefix+serialNo34+snSuffix); mesProduceSnPrintDataModel.setCustPartNo(custPartNo); mesProduceSnPrintDataModel.setPrintDate(TimeTool.getNowTime(true)); mesProduceSnPrintDataModel.setProductDate(TimeTool.parseStringFormat(produceSn.getLotNo(),DateUtil.SHORT_FORMAT,"yyyy/MM/dd")); @@ -146,47 +138,6 @@ public class GqaaPrintStrategy implements IPrintTemplateStrategyService { if (null == numberRule) MesPcnException.throwMesBusiException("物料[%s]维护的零件条码匹配规则[%s]信息不存在", part.getPartNo(), part.getProductMatchRule()); return numberRule; } - // 34进制字符集 - private String toBase34(int number) { - String base34Chars = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"; - StringBuilder sb = new StringBuilder(); - - while (number > 0) { - int remainder = number % 34; - sb.append(base34Chars.charAt(remainder)); - number /= 34; - } - return sb.reverse().toString(); - } - - - private String stringFormat(String data, Integer length) { - return stringFormat(data, length, true, "*"); - } - - private String stringFormat(String data, Integer length, boolean left, String symbol) { - //数据长途大于填充位数直接返回 - if (data.length() >= length) { - return data; - } - StringBuilder dataBuffer = new StringBuilder(); - //右拼接 - if (left) { - dataBuffer.append(data); - for (int i = 0; i < length - data.length(); i++) { - dataBuffer.append(symbol); - } - } - - //左拼接 - if (!left) { - for (int i = 0; i < length - data.length(); i++) { - dataBuffer.append(symbol); - } - dataBuffer.append(data); - } - return dataBuffer.toString(); - } private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, String userName, Double qty) { MesProduceSn mesProduceSn = new MesProduceSn(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqxnyPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqxnyPrintStrategy.java index e7a1868..ac7858c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqxnyPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqxnyPrintStrategy.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; 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.apiservice.util.StringUtilExt; 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; @@ -93,8 +94,7 @@ public class GqxnyPrintStrategy implements IPrintTemplateStrategyService { //供应商代码 7位 供应商代码 0~9,A~Z;不足7位 右测补* MesConfig supplierConfig = configService.getMesConfigByCfgCodeKeyOrg(MesPcnExtConstWords.SUPPLIER_CODE, MesExtEnumUtil.MES_PRINT_TEMPLATE.GQXNY.getValue(), organizeCode); String supplierCode = supplierConfig.getCfgValue(); - String supplierCodeFormat = stringFormat(supplierCode, 7); - genSerialNoModel.setCustCode(supplierCodeFormat); + genSerialNoModel.setCustCode(StringUtilExt.stringFormat(supplierCode, 7,MesPcnExtConstWords.SEPARATOR)); //扩展位 3位 预留扩展位0~9 A~Z 不使用时,补 0 {SPILTRULE} //产线 1位 供应商产线号,表示由数字1~9 和字母A~Z(I/O除外)组成; {SPILTRULE} //年月日 6位 yyMMdd 零部件生产日期,年月日各2位 @@ -106,47 +106,26 @@ public class GqxnyPrintStrategy implements IPrintTemplateStrategyService { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1); String sn = resultBean.getResultList().get(0).toString(); - /** - * 2024/7/24 - * 按照广州现场条码修改,逻辑由文档中 流水码需要转换位34进制 - * 改为 - * 保留十进制 - */ -// String snPrefix = sn.substring(0, sn.length() - 9); -// String snSuffix = sn.substring(sn.length() - 5); - String serialNo = sn.substring(sn.length() - 9, sn.length() - 5); -// String serialNo34 = toBase34(Integer.parseInt(serialNo)); -// serialNo34 = stringFormat(serialNo34, 4, false, "0"); -// sn = snPrefix + serialNo34 + snSuffix; //保存条码信息 MesProduceSn produceSn = generateMesProduceSn(mesPart, sn, mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); //封装打印信息 - MesProduceSnPrintDataModel printDataModel = getModel(produceSn, serialNo, custPartNo, organizeName); + MesProduceSnPrintDataModel printDataModel = getModel(produceSn, numberRule, custPartNo, organizeName); printDataModel.setSupplierCode(supplierCode); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); + mesProduceSnPrintModel.getMesProduceSnList().add(produceSn); //保存打印记录 MesPrintedSnLog snLog = new MesPrintedSnLog(); BeanUtil.copyProperties(printDataModel, snLog); snLog.setOrganizeCode(organizeCode); ConvertBean.serviceModelInitialize(snLog, mesProduceSnPrintModel.getUserName()); - mesProduceSnPrintModel.getMesProduceSnList().add(produceSn); + mesProduceSnPrintModel.getMesPrintedSnLogList().add(snLog); } }else { numberRule = getNumberRule(organizeCode, mesPart); - String sn = mesProduceSnPrintModel.getProductSn(); MesProduceSn mesProduceSn = mesProduceSnPrintModel.getMesProduceSnList().get(0); - //零件长度17位,拓展2位,供应商7位,扩展位3个0,产线1,年月日,流水号4位,扩展位4位,标识+ - //{custPartNo}{spiltrule}{custCode}{spiltrule}{spiltrule}{year}{serialNo}{spiltrule}{spiltrule} - //客户零件号-扩展位-客户代码-预留位000-产线1-年月日-条码-扩展0000-追溯位+ - //splitRule 00,000,1,0000,+ - //如下目的主要是截取流水号,主要把流水号转换为32位 - Integer serialNoLength = numberRule.getSerialnoLength(); - String serialNo = sn.substring(sn.length()-serialNoLength-5, sn.length()-5); - String serialNo34 = toBase34(Integer.parseInt(serialNo)); - serialNo34 = stringFormat(serialNo34, 4, false, "0"); //封装打印信息 - MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, serialNo34, custPartNo, organizeName); + MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, numberRule, custPartNo, organizeName); printDataModel.setSupplierCode(configService.getMesConfigByCfgCodeKeyOrg(MesPcnExtConstWords.SUPPLIER_CODE, MesExtEnumUtil.MES_PRINT_TEMPLATE.GQXNY.getValue(), organizeCode).getCfgValue()); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); //保存打印记录 @@ -177,47 +156,6 @@ public class GqxnyPrintStrategy implements IPrintTemplateStrategyService { return numberRule; } - private String stringFormat(String data, Integer length) { - return stringFormat(data, length, true, "0"); - } - - private String stringFormat(String data, Integer length, boolean left, String symbol) { - //数据长途大于填充位数直接返回 - if (data.length() >= length) { - return data; - } - StringBuilder dataBuffer = new StringBuilder(); - //右拼接 - if (left) { - dataBuffer.append(data); - for (int i = 0; i < length - data.length(); i++) { - dataBuffer.append(symbol); - } - } - - //左拼接 - if (!left) { - for (int i = 0; i < length - data.length(); i++) { - dataBuffer.append(symbol); - } - dataBuffer.append(data); - } - return dataBuffer.toString(); - } - - // 34进制字符集 - private String toBase34(int number) { - String base34Chars = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"; - StringBuilder sb = new StringBuilder(); - - while (number > 0) { - int remainder = number % 34; - sb.append(base34Chars.charAt(remainder)); - number /= 34; - } - return sb.reverse().toString(); - } - private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, String userName, Double qty) { MesProduceSn mesProduceSn = new MesProduceSn(); mesProduceSn.setSerialNumber(snowflakeIdMaker.nextId() + ""); @@ -239,13 +177,23 @@ public class GqxnyPrintStrategy implements IPrintTemplateStrategyService { return mesProduceSn; } - private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, String no, String custPartNo, String factoryName) { + private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, MesNumberRule numberRule, String custPartNo, String factoryName) { + //34进制 + String sn = produceSn.getProductSn(); + Integer serialNoLength = numberRule.getSerialnoLength(); + String serialNo = sn.substring(sn.length()-serialNoLength-5, sn.length()-5); + String snPrefix = sn.substring(0, sn.length()-serialNoLength-5); + String snSuffix = sn.substring(sn.length()-5); + String serialNo34 = StringUtilExt.stringFormat(StringUtilExt.toBase34(Integer.parseInt(serialNo)), 4, false, "0"); + MesProduceSnPrintDataModel mesProduceSnPrintDataModel = new MesProduceSnPrintDataModel(); mesProduceSnPrintDataModel.setFactoryName(factoryName); mesProduceSnPrintDataModel.setPartNo(produceSn.getPartNo()); mesProduceSnPrintDataModel.setPartName(produceSn.getPartName()); - mesProduceSnPrintDataModel.setNo(no); + mesProduceSnPrintDataModel.setNo(StringUtilExt.stringFormat(serialNo, 4, false, "0")); + mesProduceSnPrintDataModel.setNo34(serialNo34); mesProduceSnPrintDataModel.setBarcode(produceSn.getProductSn()); + mesProduceSnPrintDataModel.setBarcode34(snPrefix+serialNo34+snSuffix); mesProduceSnPrintDataModel.setCustPartNo(custPartNo); mesProduceSnPrintDataModel.setPrintDate(TimeTool.getNowTime(true)); mesProduceSnPrintDataModel.setProductDate(TimeTool.parseStringFormat(produceSn.getLotNo(),DateUtil.SHORT_FORMAT,"yyyy/MM/dd")); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/util/StringUtilExt.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/util/StringUtilExt.java new file mode 100644 index 0000000..7b7db05 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/util/StringUtilExt.java @@ -0,0 +1,45 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.util; + +public class StringUtilExt { + + public static String stringFormat(String data, Integer length,String symbol) { + return stringFormat(data, length, true, symbol); + } + + public static String stringFormat(String data, Integer length, boolean left, String symbol) { + //数据长途大于填充位数直接返回 + if (data.length() >= length) { + return data; + } + StringBuilder dataBuffer = new StringBuilder(); + //右拼接 + if (left) { + dataBuffer.append(data); + for (int i = 0; i < length - data.length(); i++) { + dataBuffer.append(symbol); + } + } + + //左拼接 + if (!left) { + for (int i = 0; i < length - data.length(); i++) { + dataBuffer.append(symbol); + } + dataBuffer.append(data); + } + return dataBuffer.toString(); + } + + // 34进制字符集 + public static String toBase34(int number) { + String base34Chars = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"; + StringBuilder sb = new StringBuilder(); + + while (number > 0) { + int remainder = number % 34; + sb.append(base34Chars.charAt(remainder)); + number /= 34; + } + return sb.reverse().toString(); + } +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintDataModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintDataModel.java index 029c761..74be499 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintDataModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintDataModel.java @@ -27,9 +27,15 @@ public class MesProduceSnPrintDataModel { @ApiParam("流水号") private String no; + @ApiParam("34位流水号") + private String no34; + @ApiParam("二维码") private String barcode; + @ApiParam("二维码34") + private String barcode34; + @ApiParam("生产日期") private String productDate;