|
|
|
@ -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"));
|
|
|
|
|