打印模板事务问题修复

tags/yfai-pcn-ext-v2.3
jun 8 months ago
parent 4305ea53ab
commit a92e9ab627

@ -69,4 +69,10 @@ public interface IMesWorkOrderService {
@ApiOperation("根据工单查询工单零件信息")
List<MesWorkOrderPart> findMesWorkOrderPartByOrderNo(String organizeCode,List<String> workOrderNoList);
@ApiOperation("根据客户条码查询工单信息")
MesWorkOrder getWorkOrderNoByCustSn(String organizeCode,String custSn);
@ApiOperation("根据客户条码查询工单信息")
MesWorkOrder getWorkOrderNoByWorkOrderNo(String organizeCode,String workOrderNo);
}

@ -2,9 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
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.IMesPrintedSnLogService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnPrintService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderCutService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.printqueue.IPrintQueueStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
@ -22,11 +20,13 @@ 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.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
@ -105,6 +105,9 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
@Autowired
private IMesPrintedSnLogService mesPrintedSnLogService;
@Autowired
private IMesWorkOrderService mesWorkOrderService;
// 仅查询
public static final Integer CUT_QUERY_MODE_BY_QUERY = 1;
// 打印
@ -133,7 +136,7 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
@Override
public MesProduceSn findMesProduceSn(MesProduceSnPrintModel mesProduceSnPrintModel) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesProduceSnPrintModel.getOrganizeCode());
ddlPackBean.setWhereAppend(ddlPackBean.getWhereAppend() + " and (model.productSn = '"+mesProduceSnPrintModel.getProductSn()+"' or model.custSn = '"+mesProduceSnPrintModel.getProductSn()+"')");
ddlPackBean.setWhereAppend(ddlPackBean.getWhereAppend() + " and (model.productSn = '"+mesProduceSnPrintModel.getProductSn()+"' or model.custSn = '"+mesProduceSnPrintModel.getProductSn()+"' or model.workOrderNo = '"+mesProduceSnPrintModel.getProductSn()+"')");
MesProduceSn mesProduceSn = mesProduceSnRDao.getByProperty(ddlPackBean);
if (Objects.isNull(mesProduceSn)) {
MesPcnException.throwMesBusiException("条码【%s】信息不存在", mesProduceSnPrintModel.getProductSn());
@ -154,15 +157,7 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
//打印模板
String printTemplate = mesProduceSnPrintModel.getPrintTemplate();
//打印规则
String snRule = mesProduceSnPrintModel.getSnRule();
//获取条码规则,根据条码规则中的序列号长度截取序列号
DdlPackBean mesRulePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(snRule, "ruleCode", mesRulePackBean);
List<MesNumberRule> ruleList = mesNumberRuleRDao.findByHqlWhere(mesRulePackBean);
if (ruleList.isEmpty()) {
MesPcnException.throwMesBusiException("零件号【%s】打印规则查询不到!", mesPart.getPartNo());
}
MesNumberRule numberRule = ruleList.get(0);
MesNumberRule numberRule = getMesNumberRule(mesProduceSnPrintModel.getSnRule(), organizeCode, mesPart.getPartNo());
// 获取打印模板
MesLabelTemplate mesLabelTemplate = mesTemplateService.getMesLabelTemplate(printTemplate,organizeCode);
String methodCode = mesLabelTemplate.getMethodCode();
@ -204,26 +199,60 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
return resultModel;
//条码补打
} else {
//获取打印模板信息
mesProduceSnPrintModel.setMesLabelTemplate(mesTemplateService.getMesLabelTemplate(StringUtils.isEmpty(mesProduceSnPrintModel.getPrintTemplate()) ? mesPart.getCustLabelTemplate() : mesProduceSnPrintModel.getPrintTemplate(), organizeCode));
//查找打印记录
DdlPackBean snLogPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesProduceSnPrintModel.getProductSn(), "barcode", snLogPackBean);
List<MesPrintedSnLog> snLogList = mesPrintedSnRao.findByHqlWhere(snLogPackBean);
if (snLogList.isEmpty()) {
MesPcnException.throwMesBusiException("条码【%s】查询不到打印记录!", mesProduceSnPrintModel.getProductSn());
MesPrintedSnLog snLog = mesPrintedSnRao.getByProperty(snLogPackBean);
if (Objects.isNull(snLog)) {
//扫描条码
MesWorkOrder workOrder = mesWorkOrderService.getWorkOrderNoByCustSn(organizeCode, mesProduceSnPrintModel.getProductSn());
//扫描工单
if(Objects.isNull(workOrder)){
workOrder = mesWorkOrderService.getWorkOrderNoByWorkOrderNo(organizeCode, mesProduceSnPrintModel.getProductSn());
}
if(Objects.isNull(workOrder)){
MesPcnException.throwMesBusiException("条码【%s】查询不到打印记录!", mesProduceSnPrintModel.getProductSn());
}
//根据客户条码查询工单信息
mesProduceSnPrintModel = getMesProduceSnPrintModel(mesProduceSnPrintModel, organizeCode, mesPart, workOrder);
snLog = getMesPrintedSnLog(workOrder, JSONObject.toJSONString(mesProduceSnPrintModel.getPrintContextList().iterator().next().get(MesPcnExtConstWords.TEMPLATE_DATA)),mesProduceSnPrintModel.getUserName());
}
MesPrintedSnLog mesPrintedSnLog = snLogList.get(0);
MesProduceSnPrintDataModel model = new MesProduceSnPrintDataModel();
BeanUtil.copyProperties(mesPrintedSnLog, model);
BeanUtil.copyProperties(snLog, model);
model.setPrintDate(TimeTool.getNowTime(true));
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(model);
//记录打印日志
mesPrintedSnLogService.insertMesPrintedSnLog(mesPrintedSnLog, model.getUserName());
mesPrintedSnLogService.insertMesPrintedSnLog(snLog, model.getUserName());
return mesProduceSnPrintModel;
}
//获取打印模板信息
mesProduceSnPrintModel.setMesLabelTemplate(mesTemplateService.getMesLabelTemplate(mesProduceSnPrintModel.getPrintTemplate(),organizeCode));
}
private MesProduceSnPrintModel getMesProduceSnPrintModel(MesProduceSnPrintModel mesProduceSnPrintModel, String organizeCode, MesPart mesPart, MesWorkOrder workOrderNoByCustSn) {
mesProduceSnPrintModel.setSourceData(workOrderNoByCustSn);
// 获取打印模板
MesLabelTemplate mesLabelTemplate = mesTemplateService.getMesLabelTemplate(mesPart.getCustLabelTemplate(), organizeCode);
if (Objects.isNull(mesLabelTemplate) || StringUtils.isEmpty(mesLabelTemplate.getMethodCode())) {
MesPcnException.throwMesBusiException(String.format("当前打印模板【%s】未维护方法名", mesProduceSnPrintModel.getPrintTemplate()));
}
IPrintTemplateStrategyService templateStrategy = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(mesLabelTemplate.getMethodCode());
mesProduceSnPrintModel = templateStrategy.execute(null, mesProduceSnPrintModel, getMesNumberRule(mesPart.getCustMatchRule(), organizeCode, mesPart.getPartNo()),null,null,false);
return mesProduceSnPrintModel;
}
private MesNumberRule getMesNumberRule(String ruleCode, String organizeCode, String partNo) {
DdlPackBean mesRulePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(ruleCode, "ruleCode", mesRulePackBean);
MesNumberRule numberRule = mesNumberRuleRDao.getByProperty(mesRulePackBean);
if (StringUtils.isEmpty(ruleCode) || StringUtils.isEmpty(organizeCode) || Objects.isNull(numberRule)) {
MesPcnException.throwMesBusiException("零件号【%s】打印规则查询不到!", partNo);
}
return numberRule;
}
private String getWorkCenterCode(String organizeCode) {
List<MesConfig> mesConfigList = configService.findMesConfigByCfgCode(MesPcnExtConstWords.PRINT_WORK_CENTER_COED, organizeCode);
if(CollectionUtils.isEmpty(mesConfigList)){
@ -441,4 +470,17 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
//根据裁片方案代码对裁片方案成品明细分组
return cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode));
}
private MesPrintedSnLog getMesPrintedSnLog(MesWorkOrder workOrder, String printData,String userName) {
MesPrintedSnLog snLog = new MesPrintedSnLog();
snLog.setBarcode(workOrder.getCustSn());
snLog.setCustPartNo(workOrder.getCustPartNo());
snLog.setWorkOrderNo(workOrder.getWorkOrderNo());
snLog.setPartNo(workOrder.getPartNo());
snLog.setPartName(workOrder.getPartName());
snLog.setPrintData(printData);
ConvertBean.serviceModelInitialize(snLog, userName);
snLog.setOrganizeCode(workOrder.getOrganizeCode());
return snLog;
}
}

@ -1551,6 +1551,22 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return mesWorkOrderPartRepository.findByHqlWhere(packBean);
}
@Override
public MesWorkOrder getWorkOrderNoByCustSn(String organizeCode, String custSn) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(custSn)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(custSn, "custSn", packBean);
return mesWorkOrderRDao.getByProperty(packBean);
}
@Override
public MesWorkOrder getWorkOrderNoByWorkOrderNo(String organizeCode, String workOrderNo) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workOrderNo)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean);
return mesWorkOrderRDao.getByProperty(packBean);
}
private MesProdRuleSortCfg getMesProdRuleSortCfg(String organizeCode, MesProductionRecord record) {
MesProdRuleSortCfg mesProdRuleSortCfg = mesProdRuleSortCfgDao.getMesProdRuleSortCfg(organizeCode, record.getReportPartNo(), record.getWorkCenterCode());
if(Objects.isNull(mesProdRuleSortCfg)){

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPrintedSnLogService;
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;
@ -68,10 +69,12 @@ public class CustCodeWhqrPrintStrategy implements IPrintTemplateStrategyService
MesCustomerPart customerPart = (!Objects.isNull(genSerialNoModel) && !CollectionUtils.isEmpty(genSerialNoModel.getDataMap()) && genSerialNoModel.getDataMap().containsKey(MesCustomerPart.class.getSimpleName())) ? (MesCustomerPart) genSerialNoModel.getDataMap().get(MesCustomerPart.class.getSimpleName()) : mesCustomerPartService.getMesCustomerPart(organizeCode, mesProduceSnPrintModel.getPartNo());
numberRule = !Objects.isNull(numberRule) ? numberRule : getMesNumberRule(mesPart);
String supplierCode = !Objects.isNull(numberRule) && !StringUtil.isEmpty(numberRule.getSpiltRule()) ? numberRule.getSpiltRule().split(MesPcnExtConstWords.COMMA)[2] : "";
if (Objects.isNull(customerPart)) {
MesPcnException.throwMesBusiException("请检查客户零件信息,零件[%s]客户零件关系未维护", mesProduceSnPrintModel.getPartNo());
}
genSerialNoModel.putDataMap(MesCustomerPart.class.getSimpleName(), customerPart);
if (!isStep) {
if (!Objects.isNull(customerPart)) {
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo());
}
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo());
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
//保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());

@ -0,0 +1,125 @@
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.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPrintedSnLogService;
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.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.MesCustomerPart;
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.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.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Objects;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/26 18:20
* @Modify:
**/
@Component
@Slf4j
public class InternalBarcodePrintStrategy implements IPrintTemplateStrategyService {
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Autowired
private IMesPartService mesPartService;
@Autowired
private IMesPrintedSnLogService mesPrintedSnLogService;
@Autowired
private IMesCustomerPartService mesCustomerPartService;
@Override
public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean, Boolean isStep) {
String organizeCode = mesProduceSnPrintModel.getOrganizeCode();
//物料信息
MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), organizeCode);
MesCustomerPart customerPart = (!Objects.isNull(genSerialNoModel) && !CollectionUtils.isEmpty(genSerialNoModel.getDataMap()) && genSerialNoModel.getDataMap().containsKey(MesCustomerPart.class.getSimpleName())) ? (MesCustomerPart) genSerialNoModel.getDataMap().get(MesCustomerPart.class.getSimpleName()) : mesCustomerPartService.getMesCustomerPart(organizeCode,mesProduceSnPrintModel.getPartNo());
if (StringUtils.isEmpty(genSerialNoModel.getShiftCode()) || StringUtils.isEmpty(genSerialNoModel.getPartNo())) {
MesPcnException.throwMesBusiException("班次代码或零件号未维护");
}
if (!isStep){
if (!Objects.isNull(customerPart)) {
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo());
}
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
//保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());
//封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel);
mesProduceSnPrintModel.getMesProduceSnList().add(produceSn);
//保存打印记录
mesProduceSnPrintModel.getMesPrintedSnLogList().add(mesPrintedSnLogService.getMesPrintedSnLog(mesProduceSnPrintModel.getUserName(), organizeCode, printDataModel));
}
}else{
MesProduceSn mesProduceSn = mesProduceSnPrintModel.getMesProduceSnList().get(0);
//封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, customerPart);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel);
//保存打印记录
mesProduceSnPrintModel.getMesPrintedSnLogList().add(mesPrintedSnLogService.getMesPrintedSnLog(mesProduceSnPrintModel.getUserName(), organizeCode, printDataModel));
}
return mesProduceSnPrintModel;
}
private MesProduceSn generateMesProduceSn(MesPart mesPart, 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.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());
ConvertBean.serviceModelInitialize(mesProduceSn, userName);
return mesProduceSn;
}
private MesProduceSnPrintDataModel getModel(MesProduceSn produceSn, MesCustomerPart customerPart) {
MesProduceSnPrintDataModel mesProduceSnPrintDataModel = new MesProduceSnPrintDataModel();
mesProduceSnPrintDataModel.setPartNo(produceSn.getPartNo());
mesProduceSnPrintDataModel.setPartName(produceSn.getPartName());
if (!Objects.isNull(customerPart)) {
mesProduceSnPrintDataModel.setCustPartNo(customerPart.getCustPartNo());
}
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;
}
}

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPrintedSnLogService;
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;
@ -24,6 +25,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Objects;
@ -59,10 +61,11 @@ public class MesDPBarcodeWhPrintStrategy implements IPrintTemplateStrategyServic
//物料信息
MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), organizeCode);
MesCustomerPart customerPart = (!Objects.isNull(genSerialNoModel) && !CollectionUtils.isEmpty(genSerialNoModel.getDataMap()) && genSerialNoModel.getDataMap().containsKey(MesCustomerPart.class.getSimpleName())) ? (MesCustomerPart) genSerialNoModel.getDataMap().get(MesCustomerPart.class.getSimpleName()) : mesCustomerPartService.getMesCustomerPart(organizeCode,mesProduceSnPrintModel.getPartNo());
if (StringUtils.isEmpty(genSerialNoModel.getShiftCode()) || Objects.isNull(customerPart)) {
MesPcnException.throwMesBusiException("班次代码或客户零件号未维护");
}
if (!isStep){
if (!Objects.isNull(customerPart)) {
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo());
}
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo());
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
//保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());

@ -3,18 +3,28 @@ 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.BarCodeUtils;
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.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.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
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 com.alibaba.fastjson.JSONObject;
import com.google.zxing.WriterException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
@ -40,9 +50,15 @@ public class WuhanSnPrintStrategy implements IPrintTemplateStrategyService {
@Autowired
private MesNumberRuleRepository numberRuleRepository;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Autowired
private ISyncFuncService syncFuncService;
@Override
public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model,
MesNumberRule numberRule , StepResult stepResult, StationRequestBean reqBean,
MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean,
Boolean isStep) {
//物料信息
MesPart mesPart = mesPartService.getMesPartByPartNo(model.getPartNo(), model.getOrganizeCode());
@ -52,64 +68,151 @@ public class WuhanSnPrintStrategy implements IPrintTemplateStrategyService {
String custPartNoPrefix = StringUtils.isEmpty(custPartNo) ? "" : custPartNo.substring(0, custPartNo.length() - 4);
// 客户零件号 后四位
String custPartNoAfterFour = StringUtils.isEmpty(custPartNo) ? "" : custPartNo.substring(custPartNo.length() - 4).toUpperCase();
numberRule = Objects.isNull(numberRule) ? getMesNumberRule(mesPart) : numberRule;
// 返回的结果集合
List<Map<String, Object>> printDataMapList = new ArrayList<>();
if (!isStep) {
for (int i = 0; i < model.getPrintQty(); i++) {
//保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, model.getUserName(), model.getOrganizeCode(), 1).getResultList().get(0).toString(), model.getUserName(), model.getQty());
Map<String, Object> printMap = getPrintMap(produceSn.getCustSn(), custPartNoPrefix, custPartNoAfterFour, numberRule);
//封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(mesPart, produceSn.getCustSn(), model.getUserName(), JSONObject.toJSONString(printMap));
model.getMesProduceSnPrintDataModelList().add(printDataModel);
model.getMesProduceSnList().add(produceSn);
//保存打印记录
model.getMesPrintedSnLogList().add(getMesPrintedSnLog(printDataModel, model.getUserName(), model.getOrganizeCode()));
}
} else {
Map<String, Object> printMap = getPrintMap(model.getProductSn(), custPartNoPrefix, custPartNoAfterFour, numberRule);
printDataMapList.add(printMap);
List<Map<String, Object>> resultMapList = new ArrayList<>();
resultMapList.add(packResultMap(model, printDataMapList));
model.setPrintContextList(resultMapList);
model.getMesPrintedSnLogList().add(getMesPrintedSnLog(mesPart, model.getProductSn(), reqBean.getUserInfo(), JSONObject.toJSONString(printMap)));
}
return model;
}
private MesNumberRule getMesNumberRule(MesPart mesPart) {
String custMatchRule = StringUtils.isEmpty(mesPart.getCustMatchRule()) ? "WH_CUST_SN_RULE" : mesPart.getCustMatchRule();
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesPart.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(custMatchRule, MesPcnExtConstWords.RULE_CODE, packBean);
return numberRuleRepository.getByProperty(packBean);
}
private Map<String, Object> packResultMap(MesProduceSnPrintModel printModel, List<Map<String, Object>> printTemplateDateList) {
Map<String, Object> resultMap = new HashMap<>();
resultMap.put(MesPcnExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate());
resultMap.put(MesPcnExtConstWords.TEMPLATE_DATA, printTemplateDateList);
resultMap.put(MesPcnExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode());
resultMap.put(MesPcnExtConstWords.PRINTER, printModel.getPrinter());
return resultMap;
}
private MesPrintedSnLog getMesPrintedSnLog(MesPart mesPart, String productSn, String userName, String printData) {
MesPrintedSnLog snLog = new MesPrintedSnLog();
snLog.setBarcode(productSn);
snLog.setPartNo(mesPart.getPartNo());
snLog.setPartName(mesPart.getPartName());
snLog.setPrintData(printData);
ConvertBean.serviceModelInitialize(snLog, userName);
snLog.setOrganizeCode(mesPart.getOrganizeCode());
return snLog;
}
private MesProduceSn generateMesProduceSn(MesPart mesPart, 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.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());
ConvertBean.serviceModelInitialize(mesProduceSn, userName);
return mesProduceSn;
}
private MesProduceSnPrintDataModel getModel(MesPart mesPart, String productSn, String userName, String printData) {
MesProduceSnPrintDataModel mesProduceSnPrintDataModel = new MesProduceSnPrintDataModel();
mesProduceSnPrintDataModel.setPartNo(mesPart.getPartNo());
mesProduceSnPrintDataModel.setPartName(mesPart.getPartName());
mesProduceSnPrintDataModel.setBarcode(productSn);
mesProduceSnPrintDataModel.setPrintDate(TimeTool.getNowTime(true));
mesProduceSnPrintDataModel.setPrintData(printData);
mesProduceSnPrintDataModel.setUserName(userName);
return mesProduceSnPrintDataModel;
}
private MesPrintedSnLog getMesPrintedSnLog(MesProduceSnPrintDataModel printDataModel, String userName, String organizeCode) {
MesPrintedSnLog snLog = new MesPrintedSnLog();
BeanUtils.copyProperties(printDataModel, snLog);
ConvertBean.serviceModelInitialize(snLog, userName);
snLog.setOrganizeCode(organizeCode);
return snLog;
}
private Map<String, Object> getPrintMap(String productSn, String custPartNoPrefix, String custPartNoAfterFour, MesNumberRule numberRule) {
// 单个标签参数值
Map<String, Object> resultMap = new HashMap<>();
// 客户条码
resultMap.put(MesPcnExtConstWords.CUST_SN, model.getProductSn());
resultMap.put(MesPcnExtConstWords.CUST_SN, productSn);
// 客户零件号 前缀 排除后四位
resultMap.put(MesPcnExtConstWords.CUST_PART_NO_PREFIX, custPartNoPrefix);
// 客户零件号 后四位
resultMap.put(MesPcnExtConstWords.CUST_PART_NO_AFTER_FOUR, custPartNoAfterFour);
String snOriginal = model.getProductSn();
String[] split = snOriginal.split("");
String[] split = productSn.split("");
StringBuilder rsStr = new StringBuilder();
for (int i = 0; i < split.length-1; i++) {
for (int i = 0; i < split.length - 1; i++) {
rsStr.append(split[i]).append("%RS%");
}
rsStr.append(split[split.length - 1]);
StringBuilder gsStr = new StringBuilder();
String[] split1 = rsStr.toString().split("");
for (int i = 0; i < split1.length-1; i++) {
for (int i = 0; i < split1.length - 1; i++) {
gsStr.append(split1[i]).append("%GS%");
}
gsStr.append(split1[split1.length-1]);
gsStr.append(split1[split1.length - 1]);
String[] split2 = gsStr.toString().split("");
String sn = split2[0]+"%EOT%";
String custMatchRule = StringUtils.isEmpty(mesPart.getCustMatchRule()) ? "WH_CUST_SN_RULE" : mesPart.getCustMatchRule();
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesPart.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(custMatchRule, MesPcnExtConstWords.RULE_CODE, packBean);
numberRule = numberRuleRepository.getByProperty(packBean);
String sn = split2[0] + "%EOT%";
if (numberRule == null) {
log.error("CustSnPrintStrategy --- exec --- numberRule 为空");
return model;
return resultMap;
}
if (StringUtils.isEmpty(numberRule.getRuleLengthSpiltExt())) {
log.error("CustSnPrintStrategy --- exec --- 规则属性长度拼接 为空");
return model;
return resultMap;
}
// 规则属性长度拼接
String[] ruleLengthSpiltExt = numberRule.getRuleLengthSpiltExt().split(MesPcnExtConstWords.COMMA);
/*
* 1 2 3 4 5 6 7 8 9 10 11 12
* {spiltRule}{spiltRule}{spiltRule}{partNo}{spiltRule}{spiltRule}{spiltRule}{year}{day}{spiltRule}{serialNo}{spiltRule}
* 14,14,5,8,7,9,7,2,3,5,4,9
* [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT%
* [)>06Y4110000000000XP26560848Z12V545238347T1A24269A2B4C0005
* [)>%RS%06%GS%Y4110000000000X%GS%P26560850%GS%12V545238347%GS%T1A24269A2B4C0019%RS
* VPPS 2
* DUNS 5
* 7 A1 11
* */
* 1 2 3 4 5 6 7 8 9 10 11 12
* {spiltRule}{spiltRule}{spiltRule}{partNo}{spiltRule}{spiltRule}{spiltRule}{year}{day}{spiltRule}{serialNo}{spiltRule}
* 14,14,5,8,7,9,7,2,3,5,4,9
* [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT%
* [)>06Y4110000000000XP26560848Z12V545238347T1A24269A2B4C0005
* [)>%RS%06%GS%Y4110000000000X%GS%P26560850%GS%12V545238347%GS%T1A24269A2B4C0019%RS
* VPPS 2
* DUNS 5
* 7 A1 11
* */
int vppsLengthStart = 0;
int vppsLengthEnd = 0;
@ -145,33 +248,16 @@ public class WuhanSnPrintStrategy implements IPrintTemplateStrategyService {
// 客户条码 dataMatrix
ByteArrayOutputStream dataMatrixCode;
try {
dataMatrixCode = BarCodeUtils.createDataMatrixCode(model.getProductSn());
dataMatrixCode = BarCodeUtils.createDataMatrixCode(productSn);
} catch (WriterException e) {
log.error("CustSnPrintStrategy --- execute --- 报错:{}", e.getMessage());
return model;
return resultMap;
} catch (IOException e) {
log.error("CustSnPrintStrategy --- execute --- 报错:{}", e.getMessage());
return model;
return resultMap;
}
resultMap.put(MesPcnExtConstWords.CUST_SN_DATA_MATRIX, Base64.getEncoder().encodeToString(dataMatrixCode.toByteArray()));
//resultMap.put(MesPcnExtConstWords.CUST_SN_DATA_MATRIX_BASE64, );
printDataMapList.add(resultMap);
model.setPrintContextList(packResultMapList(model, printDataMapList));
return model;
}
private List<Map<String, Object>> packResultMapList(MesProduceSnPrintModel printModel, List<Map<String, Object>> printTemplateDateList) {
List<Map<String, Object>> resultMapList = new ArrayList<>();
Map<String, Object> resultMap = new HashMap<>();
resultMap.put(MesPcnExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate());
resultMap.put(MesPcnExtConstWords.TEMPLATE_DATA, printTemplateDateList);
resultMap.put(MesPcnExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode());
resultMap.put(MesPcnExtConstWords.PRINTER, printModel.getPrinter());
resultMapList.add(resultMap);
return resultMapList;
return resultMap;
}
}

Loading…
Cancel
Save