diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintServiceImpl.java index aa13503..453d1fe 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintServiceImpl.java @@ -4,25 +4,30 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnPrintService; 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.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.MesCustomerPartRepository; import cn.estsh.i3plus.pojo.mes.repository.MesPackingDefineDetailsRepository; import cn.estsh.i3plus.pojo.mes.repository.MesPackingDefineRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.util.ValidatorBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -58,6 +63,9 @@ public class MesProduceSnPrintServiceImpl implements IMesProduceSnPrintService { @Autowired private IMesTemplateService mesTemplateService; + @Autowired + private MesCustomerPartRepository mesCustomerPartRDao; + @Override public MesProduceSnPrintModel findMesPackingDefine(MesProduceSnPrintModel mesProduceSnPrintModel) { //查询SAP下发物料信息 @@ -91,36 +99,90 @@ public class MesProduceSnPrintServiceImpl implements IMesProduceSnPrintService { @Override public MesProduceSnPrintModel doPrint(MesProduceSnPrintModel mesProduceSnPrintModel) { + String organizeName = AuthUtil.getOrganize().getName(); //物料信息 MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), mesProduceSnPrintModel.getOrganizeCode()); //条码生成 if (StringUtils.isEmpty(mesProduceSnPrintModel.getProductSn())) { ValidatorBean.checkNotNull(mesProduceSnPrintModel.getSnRule(), "条码规则不能为空"); ValidatorBean.checkNotNull(mesProduceSnPrintModel.getPrintTemplate(), "打印模板不能为空"); - //生成条码 - List snList = getStringList(mesProduceSnPrintModel); - for (String sn : snList) { - mesProduceSnPrintModel.getMesProduceSnList().add(generateMesProduceSn(mesPart, sn, mesProduceSnPrintModel.getUserName(),mesProduceSnPrintModel.getQty())); + //流水码 + List resultList = getStringList(mesProduceSnPrintModel); + //条码模板 + StringBuilder template = getTemplate(mesProduceSnPrintModel); + + List mesMesProduceSnList = new ArrayList<>(); + for (String no : resultList) { + String reportSn = no; + if (MesPcnEnumUtil.PRINT_TEMPLATE.GQXNY.getCode().equals(mesProduceSnPrintModel.getPrintTemplate())) { + no = no.replace(MesPcnEnumUtil.PRINT_TEMPLATE.GQXNY.getValue(), ""); + reportSn = template.toString().replace("serialNo", no); + } + //保存条码信息 + MesProduceSn produceSn = generateMesProduceSn(mesPart, reportSn, mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); + mesMesProduceSnList.add(produceSn); + //封装打印信息 + mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(getModel(produceSn, no, organizeName)); } - mesProduceSnRDao.saveAll(mesProduceSnPrintModel.getMesProduceSnList()); + mesProduceSnRDao.saveAll(mesMesProduceSnList); //条码补打 } else { ValidatorBean.checkNotNull(mesPart.getProductLabelTemplate(), "打印模板不能为空"); mesProduceSnPrintModel.setPrintTemplate(mesPart.getProductLabelTemplate()); - mesProduceSnPrintModel.getMesProduceSnList().add(findMesProduceSn(mesProduceSnPrintModel)); + MesProduceSn mesProduceSn = findMesProduceSn(mesProduceSnPrintModel); + String no = ""; + if (MesPcnEnumUtil.PRINT_TEMPLATE.GQXNY.getCode().equals(mesProduceSnPrintModel.getPrintTemplate()) + && !Objects.isNull(mesProduceSn.getProductSn()) + && mesProduceSn.getProductSn().length() >= 40) { + no = mesProduceSn.getProductSn().substring(36, 40); + } + mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(getModel(mesProduceSn, no, organizeName)); } //获取打印模板信息 mesProduceSnPrintModel.setMesLabelTemplate(mesTemplateService.getMesLabelTemplate(mesProduceSnPrintModel.getPrintTemplate())); return mesProduceSnPrintModel; } + private StringBuilder getTemplate(MesProduceSnPrintModel mesProduceSnPrintModel) { + StringBuilder template = new StringBuilder(); + //广乘 GQXNY.btw + if (MesPcnEnumUtil.PRINT_TEMPLATE.GQXNY.getCode().equals(mesProduceSnPrintModel.getPrintTemplate())) { + //获取客户零件号 + MesCustomerPart mesCustomerPart = getMesCustomerPart(mesProduceSnPrintModel); + //零件号(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.getNowTime("yyMMdd")).append("serialNo").append("0000").append("+"); + } + return template; + } + + private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, String no, 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.setProductDate(TimeTool.getDateTimeShort()); + return mesProduceSnPrintDataModel; + } + private List getStringList(MesProduceSnPrintModel mesProduceSnPrintModel) { GenSerialNoModel genSerialNoModel = new GenSerialNoModel(mesProduceSnPrintModel.getSnRule()); List resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getOrganizeCode(), mesProduceSnPrintModel.getPrintQty()).getResultList(); return resultList; } - private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, String userName,Double qty) { + private MesCustomerPart getMesCustomerPart(MesProduceSnPrintModel mesProduceSnPrintModel) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesProduceSnPrintModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesProduceSnPrintModel.getPartNo(), "erpPartNo", ddlPackBean); + MesCustomerPart mesCustomerPart = mesCustomerPartRDao.getByProperty(ddlPackBean); + if (Objects.isNull(mesCustomerPart)) { + MesPcnException.throwMesBusiException("物料【%s】客户零件关系未维护", mesProduceSnPrintModel.getPartNo()); + } + return mesCustomerPart; + } + + private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, String userName, Double qty) { MesProduceSn mesProduceSn = new MesProduceSn(); mesProduceSn.setSerialNumber(snowflakeIdMaker.nextId() + ""); mesProduceSn.setProductSn(sn); @@ -140,4 +202,17 @@ public class MesProduceSnPrintServiceImpl implements IMesProduceSnPrintService { ConvertBean.serviceModelInitialize(mesProduceSn, userName); return mesProduceSn; } + + private String stringFormat(String data, Integer length) { + //数据长途大于填充位数直接返回 + if (data.length() >= length) { + return data; + } + StringBuilder dataBuffer = new StringBuilder(); + dataBuffer.append(data); + for (int i = 0; i < length - data.length(); i++) { + dataBuffer.append('*'); + } + return dataBuffer.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 new file mode 100644 index 0000000..e582b02 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintDataModel.java @@ -0,0 +1,39 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import io.swagger.annotations.ApiParam; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description : 打印数据 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/20 11:40 + * @Modify: + **/ +@Data +@NoArgsConstructor +public class MesProduceSnPrintDataModel { + + @ApiParam("物料号") + private String partNo; + + @ApiParam("物料名称") + private String partName; + + @ApiParam("生产厂家名称") + private String factoryName; + + @ApiParam("流水号") + private String no; + + @ApiParam("二维码") + private String barcode; + + @ApiParam("生产日期") + private String productDate; + + @ApiParam("供应商代码") + private String supplierCode; + +} \ No newline at end of file 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 8c1017b..e69a4cc 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 @@ -2,7 +2,6 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.model; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import io.swagger.annotations.ApiParam; import lombok.Data; @@ -59,7 +58,7 @@ public class MesProduceSnPrintModel { private MesLabelTemplate mesLabelTemplate; @ApiParam(name = "产品条码信息") - private List mesProduceSnList = new ArrayList<>(); + private List mesProduceSnPrintDataModelList = new ArrayList<>(); public Double getQty() { return qty == null || qty <= 0d ? 1d : qty;