重新提交自定义打印功能,用于合并test

uat-temp-nht-202502260000-customprint
jason 3 months ago
parent 9953e8a9ac
commit 17b7c10a7a

@ -1,8 +1,12 @@
package cn.estsh.i3plus.ext.mes.pcn.api.base; package cn.estsh.i3plus.ext.mes.pcn.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateFieldValue;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
public interface IMesTemplateService { public interface IMesTemplateService {
/** /**
@ -16,4 +20,6 @@ public interface IMesTemplateService {
@ApiOperation(value = "按条件查询", notes = "按条件查询") @ApiOperation(value = "按条件查询", notes = "按条件查询")
MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode); MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode);
Map<String, Object> queryMesLabelTemplateParamPartValue(String partNo, String labelTemplate, String organizeCode);
} }

@ -4,6 +4,8 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintDataModel;
import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog; import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.Map;
/** /**
* @Description : * @Description :
* @Reference : * @Reference :
@ -16,6 +18,9 @@ public interface IMesPrintedSnLogService {
@ApiOperation(value = "条码打印记录表") @ApiOperation(value = "条码打印记录表")
MesPrintedSnLog getMesPrintedSnLog(String userName, String organizeCode, MesProduceSnPrintDataModel printDataModel); MesPrintedSnLog getMesPrintedSnLog(String userName, String organizeCode, MesProduceSnPrintDataModel printDataModel);
@ApiOperation(value = "条码打印记录表")
MesPrintedSnLog getMesCustomPrintedSnLog(String userName, String organizeCode, MesProduceSnPrintDataModel printDataModel, Map<String, Object> printContext);
@ApiOperation(value = "写入条码打印记录表") @ApiOperation(value = "写入条码打印记录表")
void insertMesPrintedSnLog(MesPrintedSnLog mesPrintedSnLog,String userName); void insertMesPrintedSnLog(MesPrintedSnLog mesPrintedSnLog,String userName);
} }

@ -7,15 +7,25 @@ import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateFieldInfo;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateFieldValue;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateFieldInfoRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateFieldValueRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateParamRepository; import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateParamRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository; import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.hutool.core.util.ObjectUtil;
import org.apache.shiro.util.CollectionUtils; import org.apache.shiro.util.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/** /**
* @Description : * @Description :
@ -33,6 +43,12 @@ public class MesTemplateServiceImpl implements IMesTemplateService {
@Autowired @Autowired
private MesLabelTemplateParamRepository mesLabelTemplateParamRDao; private MesLabelTemplateParamRepository mesLabelTemplateParamRDao;
@Autowired
private MesLabelTemplateFieldInfoRepository labelTemplateFieldInfoRDao;
@Autowired
private MesLabelTemplateFieldValueRepository labelTemplateFieldValueRDao;
@Override @Override
public MesLabelTemplate getMesLabelTemplate(String templateCode,String organizeCode) { public MesLabelTemplate getMesLabelTemplate(String templateCode,String organizeCode) {
// 根据标签模板代码查询【MES_标签模板表】获取对应的方法代码 // 根据标签模板代码查询【MES_标签模板表】获取对应的方法代码
@ -70,4 +86,43 @@ public class MesTemplateServiceImpl implements IMesTemplateService {
} }
return mesLabelTemplate; return mesLabelTemplate;
} }
@Override
public Map<String, Object> queryMesLabelTemplateParamPartValue(String partNo, String labelTemplate, String organizeCode) {
if (StringUtil.isEmpty(labelTemplate)) {
MesPcnException.throwMesBusiException("零件号【%s】未维护\"零件条码匹配模板\"字段值", partNo);
}
Map<String, Object> result = new HashMap<>();
List<MesLabelTemplateFieldInfo> templateFieldInfos = labelTemplateFieldInfoRDao.findByProperty(
new String[]{"templateCode", "templateFieldType", MesPcnConstWords.IS_VALID, MesPcnConstWords.IS_DELETED, MesPcnConstWords.ORGANIZE_CODE},
new Object[]{labelTemplate, MesExtEnumUtil.LABEL_TEMPLATE_FIELD_TYPE.CUSTOM.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(),
CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), organizeCode});
Map<String, MesLabelTemplateFieldInfo> templateFieldInfoMap = new TreeMap<>();
for (MesLabelTemplateFieldInfo info : templateFieldInfos) {
templateFieldInfoMap.putIfAbsent(info.getTemplateParam(), info);
}
List<MesLabelTemplateFieldValue> fieldValueList = labelTemplateFieldValueRDao.findByProperty(
new String[]{"partNo", "templateCode", MesPcnConstWords.IS_VALID, MesPcnConstWords.IS_DELETED, MesPcnConstWords.ORGANIZE_CODE},
new Object[]{partNo, labelTemplate, CommonEnumUtil.IS_VAILD.VAILD.getValue(),
CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), organizeCode});
if (!CollectionUtils.isEmpty(fieldValueList)) {
for (MesLabelTemplateFieldValue fieldValue : fieldValueList) {
if (StringUtil.isEmpty(fieldValue.getTemplateParam())) {
continue;
}
MesLabelTemplateFieldInfo templateFieldInfo = templateFieldInfoMap.remove(fieldValue.getTemplateParam());
if (templateFieldInfo != null) {
result.put(templateFieldInfo.getTemplateParam(), ObjectUtil.clone(fieldValue.getFieldValue()));
}
}
}
for (Map.Entry<String, MesLabelTemplateFieldInfo> entry : templateFieldInfoMap.entrySet()) {
MesLabelTemplateFieldInfo fieldInfo = entry.getValue();
result.put(fieldInfo.getTemplateParam(), null);
}
return result;
}
} }

@ -13,6 +13,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Map;
/** /**
* @Description : * @Description :
* @Reference : * @Reference :
@ -39,6 +41,18 @@ public class MesPrintedSnLogServiceImpl implements IMesPrintedSnLogService {
} }
@Override @Override
public MesPrintedSnLog getMesCustomPrintedSnLog(String userName, String organizeCode, MesProduceSnPrintDataModel printDataModel, Map<String, Object> printContext) {
MesPrintedSnLog snLog = new MesPrintedSnLog();
BeanUtil.copyProperties(printDataModel, snLog);
snLog.setOrganizeCode(organizeCode);
snLog.setPrintContext(printContext);
snLog.setPrintData(JSONObject.toJSONString(printContext));
snLog.setPrintType(MesExtEnumUtil.PRINT_LOG_TYPE.PRINT_LOG_TYPE_10.getValue());
ConvertBean.serviceModelInitialize(snLog, userName);
return snLog;
}
@Override
public void insertMesPrintedSnLog(MesPrintedSnLog mesPrintedSnLog, String userName) { public void insertMesPrintedSnLog(MesPrintedSnLog mesPrintedSnLog, String userName) {
MesPrintedSnLog snLog = new MesPrintedSnLog(); MesPrintedSnLog snLog = new MesPrintedSnLog();
BeanUtil.copyProperties(mesPrintedSnLog, snLog, MesPcnExtConstWords.BASE_BEAN_FIELDS); BeanUtil.copyProperties(mesPrintedSnLog, snLog, MesPcnExtConstWords.BASE_BEAN_FIELDS);

@ -225,8 +225,13 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
} }
MesProduceSnPrintDataModel model = new MesProduceSnPrintDataModel(); MesProduceSnPrintDataModel model = new MesProduceSnPrintDataModel();
BeanUtil.copyProperties(snLog, model); BeanUtil.copyProperties(snLog, model);
model.setPrintDate(TimeTool.getNowTime(true)); if (CollectionUtils.isEmpty(snLog.getPrintContext())) {
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(model); model.setPrintDate(TimeTool.getNowTime(true));
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(model);
} else {
snLog.getPrintContext().put(MesPcnExtConstWords.PRINT_DATE, TimeTool.getNowTime(true));
mesProduceSnPrintModel.getPrintContextList().add(snLog.getPrintContext());
}
//记录打印日志 //记录打印日志
mesPrintedSnLogService.insertMesPrintedSnLog(snLog, model.getUserName()); mesPrintedSnLogService.insertMesPrintedSnLog(snLog, model.getUserName());
return mesProduceSnPrintModel; return mesProduceSnPrintModel;

@ -0,0 +1,156 @@
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.base.IMesTemplateService;
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.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 java.util.*;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/26 18:20
* @Modify:
**/
@Component
@Slf4j
public class CustomFieldPrintStrategy implements IPrintTemplateStrategyService {
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Autowired
private IMesPartService mesPartService;
@Autowired
private IMesPrintedSnLogService mesPrintedSnLogService;
@Autowired
private IMesCustomerPartService mesCustomerPartService;
@Autowired
private IMesTemplateService mesTemplateService;
@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());
Map<String, Object> customParamValue = mesTemplateService.queryMesLabelTemplateParamPartValue(mesPart.getPartNo(), mesPart.getProductLabelTemplate(), organizeCode);
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.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());
//封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().clear();
mesProduceSnPrintModel.getMesProduceSnList().add(produceSn);
Map<String, Object> printTemplateData = new HashMap<>(getPrintContextMap(produceSn, customerPart));
printTemplateData.putAll(customParamValue);
mesProduceSnPrintModel.getPrintContextList().add(printTemplateData);
//保存打印记录
mesProduceSnPrintModel.getMesPrintedSnLogList().add(mesPrintedSnLogService.getMesCustomPrintedSnLog(mesProduceSnPrintModel.getUserName(), organizeCode, printDataModel, printTemplateData));
}
}else{
MesProduceSn mesProduceSn = mesProduceSnPrintModel.getMesProduceSnList().get(0);
//封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, customerPart);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().clear();
Map<String, Object> printTemplateData = new HashMap<>(getPrintContextMap(mesProduceSn, customerPart));
printTemplateData.putAll(customParamValue);
List<Map<String, Object>> printDataMapList = new ArrayList<>();
printDataMapList.add(printTemplateData);
mesProduceSnPrintModel.getPrintContextList().add(packResultMap(mesProduceSnPrintModel, printDataMapList));
//保存打印记录
mesProduceSnPrintModel.getMesPrintedSnLogList().add(mesPrintedSnLogService.getMesCustomPrintedSnLog(mesProduceSnPrintModel.getUserName(), organizeCode, printDataModel, printTemplateData));
}
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;
}
private Map<String, Object> getPrintContextMap(MesProduceSn produceSn, MesCustomerPart customerPart) {
Map<String, Object> result = new HashMap<>();
result.put(MesPcnExtConstWords.PART_NO, produceSn.getPartNo());
result.put(MesPcnExtConstWords.PART_NAME, produceSn.getPartName());
if (!Objects.isNull(customerPart)) {
result.put(MesPcnExtConstWords.CUST_PART_NO, customerPart.getCustPartNo());
}
result.put(MesPcnExtConstWords.PRINT_BAR_CODE, produceSn.getProductSn());
result.put(MesPcnExtConstWords.PRINT_DATE, TimeTool.getNowTime(true));
result.put(MesPcnExtConstWords.USER_NAME, produceSn.getCreateUser());
return result;
}
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;
}
}

@ -707,6 +707,8 @@ public class MesPcnExtConstWords {
public static final String QR_CODE = "qrCode"; public static final String QR_CODE = "qrCode";
//条形码 //条形码
public static final String BAR_CODE = "barCode"; public static final String BAR_CODE = "barCode";
//打印条形码
public static final String PRINT_BAR_CODE = "barcode";
//竖杠 //竖杠
public static final String VERTICAL_BAR = "|"; public static final String VERTICAL_BAR = "|";
@ -736,6 +738,8 @@ public class MesPcnExtConstWords {
public static final String PARAM = "param"; public static final String PARAM = "param";
//成品零件号 //成品零件号
public static final String FG_PART_NO = "fgPartNo"; public static final String FG_PART_NO = "fgPartNo";
// 打印日期
public static final String PRINT_DATE = "printDate";
// 打印时间 // 打印时间
public static final String PRINT_TIME = "printTime"; public static final String PRINT_TIME = "printTime";
//替换数 //替换数

Loading…
Cancel
Save