46664 裁切工单无法打印

uat-temp-wj-chongqingdaqu-prod-merge-longxing-shipping-lijia
王杰 3 months ago
parent 7abfa524fd
commit 056b423c31

@ -21,6 +21,7 @@ import cn.hutool.core.util.ObjectUtil;
import org.apache.shiro.util.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.List;
@ -74,6 +75,7 @@ public class MesTemplateServiceImpl implements IMesTemplateService {
@Override
public MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) {
if (StringUtils.isEmpty(templateCode) || StringUtils.isEmpty(organizeCode)) return null;
DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(templateCode, MesPcnExtConstWords.TEMPLATE_CODE, templatePackBean);
MesLabelTemplate mesLabelTemplate = mesLabelTemplateRDao.getByProperty(templatePackBean);

@ -305,6 +305,8 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), MesPcnExtConstWords.PRINT_STATUS, packBean);
List<MesWorkOrderCut> workOrderCutList = workOrderCutRepository.findByHqlWherePage(packBean, pager);
if (CollectionUtils.isEmpty(workOrderCutList)) return workOrderCutList;
// model 不为空 并= 1 时 仅仅查询裁片工单数据
// model 不为空时则 查询裁片工单数据并封装打印模板和打印数据,封装完后修改打印状态为已打印
// model 为空时,该情况为异常情况,mode由前端返回,不会为空,该情况下返回数据为空
@ -317,14 +319,19 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
} else if (workOrderCut.getMode() != null) {
List<String> cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList());
log.info("工厂{}裁片工单打印 --- 查询到裁片工单数据量[{}] --- cutCodeList:{} --- {} ---", workOrderCut.getOrganizeCode(), workOrderCutList.size(), JSONObject.toJSONString(cutCodeList), Thread.currentThread().getName());
// 根据 裁片方案代码 获取裁片方案设备
List<MesCutScheme> mesCutSchemeList = workOrderCutService.queryCutSchemeList(cutCodeList, workOrderCut.getOrganizeCode());
// 根据 裁片方案代码 获取裁片方案设备
List<MesCutSchemeEquipment> cutSchemeEquipmentList = getMesCutSchemeEquipments(workOrderCut, cutCodeList);
// 根据 裁片方案代码 对 裁片方案信息 分组
Map<String, MesCutScheme> cutSchemeMapByCutCode = mesCutSchemeList.stream().collect(Collectors.toMap(MesCutScheme::getCutCode, Function.identity(), (x, y) -> y));
Map<String, MesCutScheme> cutSchemeMapByCutCode = CollectionUtils.isEmpty(mesCutSchemeList) ? null :
mesCutSchemeList.stream().collect(Collectors.toMap(MesCutScheme::getCutCode, Function.identity(), (x, y) -> y));
// 根据 裁片方案代码 对 裁片方案成品信息 分组
Map<String, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList,workOrderCut.getOrganizeCode());
Map<String, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList, workOrderCut.getOrganizeCode());
// 根据 裁片方案代码 对 裁片方案原材料信息 分组
Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode = getCutSchemeMaterialMapByCutCode(cutCodeList,workOrderCut.getOrganizeCode());
// 根据 裁片方案代码 对 裁片设备信息 分组
@ -336,59 +343,73 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
for (MesWorkOrderCut workOrderCutDb : workOrderCutList) {
MesCutScheme cutScheme = cutSchemeMapByCutCode.get(workOrderCutDb.getCutCode());
log.info("工厂{}裁片工单打印 --- 处理裁片工单[{}] --- {} ---", workOrderCut.getOrganizeCode(), workOrderCutDb.getCutWorkOrderNo(), Thread.currentThread().getName());
MesLabelTemplate labelTemplate = mesTemplateService.getLabelTemplate(cutScheme.getTemplateCode(), workOrderCut.getOrganizeCode());
//模板信息丢失抛出异常
if (labelTemplate == null) {
workOrderCutDb.setRemark(String.format("请检查裁片方案,裁片方案[%s]模板代码[%s]无效!", cutScheme.getCutCode(), cutScheme.getTemplateCode()));
workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE);
try {
MesCutScheme cutScheme = CollectionUtils.isEmpty(cutSchemeMapByCutCode) ? null : cutSchemeMapByCutCode.get(workOrderCutDb.getCutCode());
MesLabelTemplate labelTemplate = null == cutScheme ? null : mesTemplateService.getLabelTemplate(cutScheme.getTemplateCode(), workOrderCut.getOrganizeCode());
//模板信息丢失抛出异常
if (labelTemplate == null) {
workOrderCutDb.setRemark(String.format("请检查裁片方案,裁片方案[%s]模板代码[%s]无效!", cutScheme.getCutCode(), cutScheme.getTemplateCode()));
workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
continue;
}
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
//模板信息丢失抛出异常
if (StringUtils.isEmpty(methodCode)) {
workOrderCutDb.setRemark(String.format("裁片方案[%s]模板代码[%s]方法类为空,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode()));
workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
continue;
}
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
mesProduceSnPrintModel.setSourceData(Stream.of(packMesWorkOrderCutPrintModel(cutSchemeMapByCutCode, cutSchemeFgMapByCutCode, cutSchemeMaterialMapByCutCode, cutSchemeEquipmentMapByCutCode, cutSchemeEquipmentDetailMapByPid, workOrderCutDb, cutScheme)).collect(Collectors.toList()));
mesProduceSnPrintModel.setPrinter(cutScheme.getPrinter());
MesProduceSnPrintModel snPrintModel = null;
try {
IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode);
snPrintModel = strategyService.execute(null, mesProduceSnPrintModel, null, null, null ,false);
} catch (Exception e) {
workOrderCutDb.setRemark(String.format("裁片方案[%s]模板代码[%s]方法类[%s]执行异常,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode(), labelTemplate.getMethodCode()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE);
log.info("工厂{}裁片工单打印 --- 处理裁片工单[{}] --- EXCEPTION:{} --- {} ---", workOrderCut.getOrganizeCode(), workOrderCutDb.getCutWorkOrderNo(), JSONObject.toJSONString(e), Thread.currentThread().getName());
continue;
}
workOrderCutDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
workOrderCutDb.setPrintTime(TimeTool.getNowTime(true));
workOrderCutDb.setWorkOrderStatusName(MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
continue;
}
workOrderCutDb.setPrintContent(snPrintModel.getPrintContextList());
workOrderCutShowList.add(workOrderCutDb);
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
MesPrintedSnLog printedSnLog = new MesPrintedSnLog();
printedSnLog.setOrganizeCode(workOrderCut.getOrganizeCode());
printedSnLog.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo());
printedSnLog.setBarcode(workOrderCut.getCutWorkOrderNo());
ConvertBean.serviceModelInitialize(printedSnLog, workOrderCut.getModifyUser());
printedSnLogRepository.save(printedSnLog);
//模板信息丢失抛出异常
if (StringUtils.isEmpty(methodCode)) {
workOrderCutDb.setRemark(String.format("裁片方案[%s]模板代码[%s]方法类为空,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode()));
workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
continue;
}
} finally {
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
mesProduceSnPrintModel.setSourceData(Stream.of(packMesWorkOrderCutPrintModel(cutSchemeMapByCutCode, cutSchemeFgMapByCutCode, cutSchemeMaterialMapByCutCode, cutSchemeEquipmentMapByCutCode, cutSchemeEquipmentDetailMapByPid, workOrderCutDb, cutScheme)).collect(Collectors.toList()));
mesProduceSnPrintModel.setPrinter(cutScheme.getPrinter());
workOrderCutRepository.save(workOrderCutDb);
MesProduceSnPrintModel snPrintModel = null;
try {
IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode);
snPrintModel = strategyService.execute(null, mesProduceSnPrintModel, null, null, null ,false);
} catch (BeansException e) {
workOrderCutDb.setRemark(String.format("裁片方案[%s]模板代码[%s]方法类[%s]执行异常,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode(), labelTemplate.getMethodCode()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE);
continue;
}
log.info("工厂{}裁片工单打印 --- 处理裁片工单[{}] --- {} --- {} ---", workOrderCut.getOrganizeCode(), workOrderCutDb.getCutWorkOrderNo(), JSONObject.toJSONString(workOrderCutDb), Thread.currentThread().getName());
workOrderCutDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
workOrderCutDb.setPrintTime(TimeTool.getNowTime(true));
workOrderCutDb.setWorkOrderStatusName(MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
workOrderCutRepository.save(workOrderCutDb);
workOrderCutDb.setPrintContent(snPrintModel.getPrintContextList());
workOrderCutShowList.add(workOrderCutDb);
MesPrintedSnLog printedSnLog = new MesPrintedSnLog();
printedSnLog.setOrganizeCode(workOrderCut.getOrganizeCode());
printedSnLog.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo());
printedSnLog.setBarcode(workOrderCut.getCutWorkOrderNo());
ConvertBean.serviceModelInitialize(printedSnLog, workOrderCut.getModifyUser());
printedSnLogRepository.save(printedSnLog);
}
}
@ -431,6 +452,7 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
private List<MesCutSchemeEquipment> getMesCutSchemeEquipments(MesWorkOrderCut workOrderCut, List<String> cutCodeList) {
List<MesCutSchemeEquipment> cutSchemeEquipmentList = getMesCutSchemeEquipments(workOrderCut.getOrganizeCode(), cutCodeList);
if (CollectionUtils.isEmpty(cutSchemeEquipmentList)) return null;
// 过滤出只需要打印的裁片方案设备
cutSchemeEquipmentList = cutSchemeEquipmentList.stream().filter(o -> o.getIsPrint() != null && o.getIsPrint() == CommonEnumUtil.VALID).collect(Collectors.toList());
return cutSchemeEquipmentList;
@ -439,10 +461,10 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
private static MesWorkOrderCutPrintModel packMesWorkOrderCutPrintModel(Map<String, MesCutScheme> cutSchemeMapByCutCode, Map<String, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode, Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode, Map<String, List<MesCutSchemeEquipment>> cutSchemeEquipmentMapByCutCode, Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid, MesWorkOrderCut workOrderCutDb, MesCutScheme cutScheme) {
MesWorkOrderCutPrintModel printModel = new MesWorkOrderCutPrintModel();
BeanUtils.copyProperties(workOrderCutDb, printModel);
printModel.setCutScheme(cutSchemeMapByCutCode.get(cutScheme.getCutCode()));
printModel.setCutSchemeFgList(cutSchemeFgMapByCutCode.get(cutScheme.getCutCode()));
printModel.setCutSchemeMaterialList(cutSchemeMaterialMapByCutCode.get(cutScheme.getCutCode()));
printModel.setCutSchemeEquipmentList(cutSchemeEquipmentMapByCutCode.get(cutScheme.getCutCode()));
if (!CollectionUtils.isEmpty(cutSchemeMapByCutCode)) printModel.setCutScheme(cutSchemeMapByCutCode.get(cutScheme.getCutCode()));
if (!CollectionUtils.isEmpty(cutSchemeFgMapByCutCode)) printModel.setCutSchemeFgList(cutSchemeFgMapByCutCode.get(cutScheme.getCutCode()));
if (!CollectionUtils.isEmpty(cutSchemeMaterialMapByCutCode)) printModel.setCutSchemeMaterialList(cutSchemeMaterialMapByCutCode.get(cutScheme.getCutCode()));
if (!CollectionUtils.isEmpty(cutSchemeEquipmentMapByCutCode)) printModel.setCutSchemeEquipmentList(cutSchemeEquipmentMapByCutCode.get(cutScheme.getCutCode()));
printModel.setCutSchemeEquipmentDetailMapByPid(cutSchemeEquipmentDetailMapByPid);
return printModel;
}
@ -451,7 +473,8 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
if (!CollectionUtils.isEmpty(cutSchemeEquipmentList)) {
List<Long> idList = cutSchemeEquipmentList.stream().map(MesCutSchemeEquipment::getId).collect(Collectors.toList());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, MesPcnExtConstWords.PID, packBean);
if (idList.size() == 1) DdlPreparedPack.getNumEqualPack(idList.get(0), MesPcnExtConstWords.PID, packBean);
else DdlPreparedPack.getInPackList(idList, MesPcnExtConstWords.PID, packBean);
return cutSchemeEquipmentDetailRepository.findByHqlWhere(packBean);
}
return null;
@ -460,36 +483,43 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
private Map<Long, List<MesCutSchemeEquipmentDetail>> getCutSchemeEquipmentDetailMapByPid(String organizeCode, List<MesCutSchemeEquipment> cutSchemeEquipmentList) {
List<MesCutSchemeEquipmentDetail> cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(organizeCode, cutSchemeEquipmentList);
return CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid));
return CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid));
}
private List<MesCutSchemeEquipment> getMesCutSchemeEquipments(String organizeCode, List<String> cutCodeList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(cutCodeList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
if (cutCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(cutCodeList.get(0), MesPcnExtConstWords.CUT_CODE, packBean);
else DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
return cutSchemeEquipmentRepository.findByHqlWhere(packBean);
}
private List<MesCutSchemeMaterial> getMesCutSchemeMaterials(List<String> cutCodeList,String orgnaizeCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(orgnaizeCode);
DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
private List<MesCutSchemeMaterial> getMesCutSchemeMaterials(List<String> cutCodeList,String organizeCode) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(cutCodeList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (cutCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(cutCodeList.get(0), MesPcnExtConstWords.CUT_CODE, packBean);
else DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
return cutSchemeMaterialRepository.findByHqlWhere(packBean);
}
private Map<String, List<MesCutSchemeMaterial>> getCutSchemeMaterialMapByCutCode(List<String> cutCodeList,String orgnaizeCode) {
List<MesCutSchemeMaterial> cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList,orgnaizeCode);
if (CollectionUtils.isEmpty(cutSchemeMaterialList)) return null;
//根据裁片方案代码对裁片方案原材料分组
return cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode));
}
private List<MesCutSchemeFg> getMesCutSchemeFgs(List<String> cutCodeList, String organizeCode) {
if (CollectionUtils.isEmpty(cutCodeList) || StringUtils.isEmpty(organizeCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
if (cutCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(cutCodeList.get(0), MesPcnExtConstWords.CUT_CODE, packBean);
else DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
return cutSchemeFgRepository.findByHqlWhere(packBean);
}
private Map<String, List<MesCutSchemeFg>> getCutSchemeFgMapByCutCode(List<String> cutCodeList, String organizeCode) {
List<MesCutSchemeFg> cutSchemeFgList = getMesCutSchemeFgs(cutCodeList,organizeCode);
if (CollectionUtils.isEmpty(cutSchemeFgList)) return null;
//根据裁片方案代码对裁片方案成品明细分组
return cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode));
}

@ -10,6 +10,7 @@ import cn.estsh.i3plus.pojo.mes.repository.*;
import java.util.Collections;
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.List;
@ -64,8 +65,10 @@ public class MesWorkOrderCutService implements IMesWorkOrderCutService {
@Override
public List<MesCutScheme> queryCutSchemeList(List<String> cutCodeList, String organizeCode) {
if (CollectionUtils.isEmpty(cutCodeList) || StringUtils.isEmpty(organizeCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
if (cutCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(cutCodeList.get(0), MesPcnExtConstWords.CUT_CODE, packBean);
else DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
return cutSchemeRepository.findByHqlWhere(packBean);
}

@ -76,7 +76,7 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic
//设备参数值标题
resultMap.put(MesPcnExtConstWords.EQUIPMENT_NAME+(i+1), mesCutSchemeEquipment == null ? "" : mesCutSchemeEquipment.getEquipmentName());
for (int l = 0; l < EQUIP_PARAM_TITLE_NUM; l++) {
if (cutSchemeEquipmentDetails.size() > l) {
if (!CollectionUtils.isEmpty(cutSchemeEquipmentDetails) && cutSchemeEquipmentDetails.size() > l) {
//设备参数值标题1
resultMap.put(MesPcnExtConstWords.EQUIP_PARAM_NAME+(l+1), cutSchemeEquipmentDetails.get(l).getName());
//设备参数值1

Loading…
Cancel
Save