裁片工单打印优化

tags/yfai-pcn-ext-v2.3
yxw 8 months ago
parent 8290261d5b
commit ca1aa4a652

@ -120,7 +120,7 @@ public class MesProduceSnPrintController {
@ApiOperation(value = "裁片工单查询")
public ResultBean findMesWorkOrderCut(MesWorkOrderCut workOrderCut) {
try {
ValidatorBean.checkNotNull(workOrderCut.getWorkCenterCode(), "产线代码不能为空");
ValidatorBean.checkNotNull(workOrderCut.getWorkCenterCodeQuery(), "产线代码不能为空");
ValidatorBean.checkNotNull(workOrderCut.getOrganizeCode(), "工厂代码不能为空");
ValidatorBean.checkNotNull(workOrderCut.getModifyUser(), "操作人不能为空");

@ -8,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateSt
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.model.MesWorkOrderCutPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.INumberRulePackAttributeStrategyService;
@ -27,6 +28,7 @@ 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 org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -36,6 +38,7 @@ import org.springframework.util.StringUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Description :
@ -98,6 +101,21 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
@Autowired
private MesLabelTemplateParamRepository labelTemplateParamRepository;
@Autowired
private MesCutSchemeFgRepository cutSchemeFgRepository;
@Autowired
private MesCutSchemeMaterialRepository cutSchemeMaterialRepository;
@Autowired
private MesCutSchemeEquipmentRepository cutSchemeEquipmentRepository;
@Autowired
private MesCutSchemeEquipmentDetailRepository cutSchemeEquipmentDetailRepository;
@Autowired
private IMesPrintedSnLogRepository printedSnLogRepository;
// 仅查询
public static final Integer CUT_QUERY_MODE_BY_QUERY = 1;
// 打印
@ -261,7 +279,7 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
pager.setCurrentPage(1);
pager.setPageSize(30);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderCut.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(workOrderCut.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getInPackList(Arrays.asList(workOrderCut.getWorkCenterCodeQuery().split(MesPcnExtConstWords.COMMA)), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getIsNull(MesPcnExtConstWords.REMARK, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), MesPcnExtConstWords.PRINT_STATUS, packBean);
List<MesWorkOrderCut> workOrderCutList = workOrderCutRepository.findByHqlWherePage(packBean, pager);
@ -271,15 +289,27 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
// model 为空时,该情况为异常情况,mode由前端返回,不会为空,该情况下返回数据为空
if (workOrderCut.getMode() != null && workOrderCut.getMode().equals(CUT_QUERY_MODE_BY_QUERY)) {
workOrderCutList.forEach(o -> o.setWorkOrderStatusName(MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(o.getWorkOrderStatus())));
return workOrderCutList;
} else if (workOrderCut.getMode() != null) {
List<String> cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList());
// 根据 裁片方案代码 获取裁片方案设备
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, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList);
// 根据 裁片方案代码 对 裁片方案原材料信息 分组
Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode = getCutSchemeMaterialMapByCutCode(cutCodeList);
// 根据 裁片方案代码 对 裁片设备信息 分组
Map<String, List<MesCutSchemeEquipment>> cutSchemeEquipmentMapByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentList) ? new HashMap<>() : cutSchemeEquipmentList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipment::getCutCode));
// 根据pid对 设备参数 分组
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = getCutSchemeEquipmentDetailMapByPid(workOrderCut.getOrganizeCode(), cutSchemeEquipmentList);
for (MesWorkOrderCut workOrderCutDb : workOrderCutList) {
@ -290,8 +320,8 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
//模板信息丢失抛出异常
if (labelTemplate == null) {
workOrderCutDb.setRemark(String.format("请检查裁片方案,裁片方案[%s]模板代码[%s]无效!", cutScheme.getCutCode(), cutScheme.getTemplateCode()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
continue;
}
@ -301,20 +331,20 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
//模板信息丢失抛出异常
if (methodCode == null) {
workOrderCutDb.setRemark(String.format("裁片方案[%s]模板代码[%s]方法类为空,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
continue;
}
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
mesProduceSnPrintModel.setSourceData(workOrderCutList);
mesProduceSnPrintModel.setSourceData(Stream.of(packMesWorkOrderCutPrintModel(cutSchemeMapByCutCode, cutSchemeFgMapByCutCode, cutSchemeMaterialMapByCutCode, cutSchemeEquipmentMapByCutCode, cutSchemeEquipmentDetailMapByPid, workOrderCutDb, cutScheme)).collect(Collectors.toList()));
mesProduceSnPrintModel.setPrinter(cutScheme.getPrinter());
MesProduceSnPrintModel printModel = null;
MesProduceSnPrintModel snPrintModel = null;
try {
IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode);
printModel = strategyService.execute(null, mesProduceSnPrintModel, null, null, null ,false);
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());
@ -322,11 +352,19 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
continue;
}
workOrderCutDb.setPrintContent(printModel.getPrintContextList());
workOrderCutDb.setPrintContent(snPrintModel.getPrintContextList());
workOrderCutDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
workOrderCutDb.setPrintTime(TimeTool.getNowTime(true));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
workOrderCutRepository.save(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);
}
return workOrderCutList;
@ -335,6 +373,77 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
return workOrderCutList;
}
private List<MesCutSchemeEquipment> getMesCutSchemeEquipments(MesWorkOrderCut workOrderCut, List<String> cutCodeList) {
List<MesCutSchemeEquipment> cutSchemeEquipmentList = getMesCutSchemeEquipments(workOrderCut.getOrganizeCode(), cutCodeList);
// 过滤出只需要打印的裁片方案设备
cutSchemeEquipmentList = cutSchemeEquipmentList.stream().filter(o -> o.getIsPrint() != null && o.getIsPrint() == CommonEnumUtil.VALID).collect(Collectors.toList());
return cutSchemeEquipmentList;
}
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()));
printModel.setCutSchemeEquipmentDetailMapByPid(cutSchemeEquipmentDetailMapByPid);
return printModel;
}
private List<MesCutSchemeEquipmentDetail> getMesCutSchemeEquipmentDetails(String organizeCode, List<MesCutSchemeEquipment> cutSchemeEquipmentList) {
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);
return cutSchemeEquipmentDetailRepository.findByHqlWhere(packBean);
}
return null;
}
private Map<Long, List<MesCutSchemeEquipmentDetail>> getCutSchemeEquipmentDetailMapByPid(String organizeCode, List<MesCutSchemeEquipment> cutSchemeEquipmentList) {
List<MesCutSchemeEquipmentDetail> cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(organizeCode, cutSchemeEquipmentList);
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid));
return cutSchemeEquipmentDetailMapByPid;
}
private List<MesCutSchemeEquipment> getMesCutSchemeEquipments(String organizeCode, List<String> cutCodeList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
List<MesCutSchemeEquipment> cutSchemeEquipmentList = cutSchemeEquipmentRepository.findByHqlWhere(packBean);
return cutSchemeEquipmentList;
}
private List<MesCutSchemeMaterial> getMesCutSchemeMaterials(List<String> cutCodeList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
List<MesCutSchemeMaterial> cutSchemeMaterialList = cutSchemeMaterialRepository.findByHqlWhere(packBean);
return cutSchemeMaterialList;
}
private Map<String, List<MesCutSchemeMaterial>> getCutSchemeMaterialMapByCutCode(List<String> cutCodeList) {
List<MesCutSchemeMaterial> cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList);
//根据裁片方案代码对裁片方案原材料分组
Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode));
return cutSchemeMaterialMapByCutCode;
}
private List<MesCutSchemeFg> getMesCutSchemeFgs(List<String> cutCodeList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean);
List<MesCutSchemeFg> cutSchemeFgList = cutSchemeFgRepository.findByHqlWhere(packBean);
return cutSchemeFgList;
}
private Map<String, List<MesCutSchemeFg>> getCutSchemeFgMapByCutCode(List<String> cutCodeList) {
List<MesCutSchemeFg> cutSchemeFgList = getMesCutSchemeFgs(cutCodeList);
//根据裁片方案代码对裁片方案成品明细分组
Map<String, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode = cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode));
return cutSchemeFgMapByCutCode;
}
private MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) {
DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(templateCode, MesPcnExtConstWords.TEMPLATE_CODE, templatePackBean);

@ -2,10 +2,10 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
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;
@ -53,58 +53,38 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic
@Override
public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model, MesNumberRule numberRule , StepResult stepResult, StationRequestBean reqBean, Boolean isStep) {
List<MesWorkOrderCut> workOrderCutList = (List<MesWorkOrderCut>)model.getSourceData();
List<MesWorkOrderCutPrintModel> workOrderCutPrintModelList = (List<MesWorkOrderCutPrintModel>)model.getSourceData();
List<Map<String, Object>> printDataMapList = new ArrayList<>();
// 裁片方案代码集合
List<String> cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList());
for (MesWorkOrderCutPrintModel workOrderCutPrintModel : workOrderCutPrintModelList) {
List<MesCutSchemeFg> mesCutSchemeFgList = workOrderCutPrintModel.getCutSchemeFgList();
List<MesCutSchemeMaterial> mesCutSchemeMaterialList = workOrderCutPrintModel.getCutSchemeMaterialList();
Map<String, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList);
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = workOrderCutPrintModel.getCutSchemeEquipmentDetailMapByPid();
List<MesCutSchemeMaterial> cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList);
//根据裁片方案代码对裁片方案原材料分组
Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode));
List<MesCutSchemeEquipment> cutSchemeEquipmentList = getMesCutSchemeEquipments(model, cutCodeList);
cutSchemeEquipmentList = cutSchemeEquipmentList.stream().filter(o -> o.getIsPrint() != null && o.getIsPrint() == CommonEnumUtil.VALID).collect(Collectors.toList());
// 根据裁片方案代码对裁片设备信息分组
Map<String, List<MesCutSchemeEquipment>> cutSchemeEquipmentMapByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentList) ? null : cutSchemeEquipmentList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipment::getCutCode));
List<MesCutSchemeEquipmentDetail> cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(model, cutSchemeEquipmentList);
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid));
for (MesWorkOrderCut workOrderCut : workOrderCutList) {
List<MesCutSchemeFg> mesCutSchemeFgList = cutSchemeFgMapByCutCode.get(workOrderCut.getCutCode());
List<MesCutSchemeMaterial> mesCutSchemeMaterialList = cutSchemeMaterialMapByCutCode.get(workOrderCut.getCutCode());
MesCutSchemeMaterial cutSchemeMaterial = CollectionUtils.isEmpty(mesCutSchemeMaterialList) ? null : mesCutSchemeMaterialList.stream().findFirst().get();
MesCutSchemeMaterial cutSchemeMaterial = mesCutSchemeMaterialList.get(0);
List<MesCutSchemeEquipment> cutSchemeEquipmentListByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentMapByCutCode) ? null : cutSchemeEquipmentMapByCutCode.get(workOrderCut.getCutCode());
List<MesCutSchemeEquipment> cutSchemeEquipmentListByCutCode = workOrderCutPrintModel.getCutSchemeEquipmentList();
if (!CollectionUtils.isEmpty(cutSchemeEquipmentListByCutCode)) cutSchemeEquipmentListByCutCode.sort(Comparator.comparing(MesCutSchemeEquipment::getSeq));
Map<String, Object> resultMap = new HashMap<>();
resultMap.put(MesPcnExtConstWords.CUT_WORK_ORDER_NO, workOrderCut.getCutWorkOrderNo());
resultMap.put(MesPcnExtConstWords.CUT_NAME, workOrderCut.getCutName());
resultMap.put(MesPcnExtConstWords.CUT_WORK_ORDER_NO, workOrderCutPrintModel.getCutWorkOrderNo());
resultMap.put(MesPcnExtConstWords.CUT_NAME, workOrderCutPrintModel.getCutName());
// 原材料零件号
resultMap.put(MesPcnExtConstWords.RAW_PART_NO, cutSchemeMaterial.getPartNo());
resultMap.put(MesPcnExtConstWords.RAW_PART_NO, cutSchemeMaterial == null ? "" : cutSchemeMaterial.getPartNo());
// 拉料信息 START
resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LENGTH, getValByDouble(cutSchemeMaterial.getPullingMaterialLength()));
resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getPullingMaterialLayerNumber()));
resultMap.put(MesPcnExtConstWords.PER_LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getPerLayerNumber()));
resultMap.put(MesPcnExtConstWords.MATERIAL_DOSAGE, getValByDouble(cutSchemeMaterial.getMaterialDosage()));
resultMap.put(MesPcnExtConstWords.USING_LENGTH, getValByDouble(cutSchemeMaterial.getUsingLength()));
resultMap.put(MesPcnExtConstWords.LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getLayerNumber()));
resultMap.put(MesPcnExtConstWords.TENSION_PARAM, getValByDouble(cutSchemeMaterial.getTensionParam()));
resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LENGTH, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getPullingMaterialLength()));
resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getPullingMaterialLayerNumber()));
resultMap.put(MesPcnExtConstWords.PER_LAYER_NUMBER, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getPerLayerNumber()));
resultMap.put(MesPcnExtConstWords.MATERIAL_DOSAGE, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getMaterialDosage()));
resultMap.put(MesPcnExtConstWords.USING_LENGTH, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getUsingLength()));
resultMap.put(MesPcnExtConstWords.LAYER_NUMBER, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getLayerNumber()));
resultMap.put(MesPcnExtConstWords.TENSION_PARAM, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getTensionParam()));
resultMap.put(MesPcnExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyy-M-d H:mm:ss"));
// 拉料信息 END
@ -150,6 +130,24 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic
return model;
}
private boolean checkCutSchemeMaterialIsNull(MesCutSchemeMaterial cutSchemeMaterial) {
return cutSchemeMaterial == null ? true : false;
}
private Map<Long, List<MesCutSchemeEquipmentDetail>> getCutSchemeEquipmentDetailMapByPid(MesProduceSnPrintModel model, List<MesCutSchemeEquipment> cutSchemeEquipmentList) {
List<MesCutSchemeEquipmentDetail> cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(model, cutSchemeEquipmentList);
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid));
return cutSchemeEquipmentDetailMapByPid;
}
private Map<String, List<MesCutSchemeMaterial>> getCutSchemeMaterialMapByCutCode(List<String> cutCodeList) {
List<MesCutSchemeMaterial> cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList);
//根据裁片方案代码对裁片方案原材料分组
Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode));
return cutSchemeMaterialMapByCutCode;
}
private String getValByDouble(Double val) {
return val == null ? "" : val.toString();
}

@ -280,10 +280,10 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
if (mesPackingDefine == null)
return stepResult.isCompleted(false).msg(String.format("裁片方案代码[%s]关联产成零件[%s]箱类别代号[%s]无效!", mesCutSchemeFg.getCutCode(), mesCutSchemeFg.getPartNo(), mesCutSchemeFg.getPackageSnRuleCode()));
if (StringUtils.isEmpty(mesPackingDefine.getPrinter()))
if (StringUtils.isEmpty(cutScheme.getPackageSnPrinter()) && StringUtils.isEmpty(mesPackingDefine.getPrinter()))
return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护打印机!", mesPackingDefine.getPackCode()));
if (StringUtils.isEmpty(mesPackingDefine.getPrintTemplate()))
if (StringUtils.isEmpty(cutScheme.getPackageLabelTemplateCode()) && StringUtils.isEmpty(mesPackingDefine.getPrintTemplate()))
return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护打印模板!", mesPackingDefine.getPackCode()));
if (StringUtils.isEmpty(mesPackingDefine.getPackageBarcodeRule()))
@ -303,8 +303,8 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo());
mesPartContext.setCopies(mesPackingDefine.getPrintCopies() == null ? 1 : mesPackingDefine.getPrintCopies());
mesPartContext.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule());
mesPartContext.setPrinter(mesPackingDefine.getPrinter());
mesPartContext.setLabelTemplate(mesPackingDefine.getPakcageTemplate());
mesPartContext.setPrinter(StringUtils.isEmpty(cutScheme.getPackageSnPrinter()) ? mesPackingDefine.getPrinter() : cutScheme.getPackageSnPrinter());
mesPartContext.setLabelTemplate(StringUtils.isEmpty(cutScheme.getPackageLabelTemplateCode()) ? mesPackingDefine.getPakcageTemplate() : cutScheme.getPackageLabelTemplateCode());
mesPartContext.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo());
partDataExtContext.put(mesCutSchemeFg.getPartNo(), mesPartContext);

@ -17,16 +17,16 @@ import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut;
import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.repository.IMesPrintedSnLogRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateParamRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCutRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -60,6 +60,9 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
@Autowired
private MesWorkOrderCutRepository workOrderCutRepository;
@Autowired
private IMesPrintedSnLogRepository snLogRepository;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -71,10 +74,6 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
*
*/
//Map.Entry<String, MesPartContext> entry = partDataExtContext.entrySet().stream().findFirst().get();
//
//String labelTemplateCode = entry.getValue().getLabelTemplate();
List<Map<String, Object>> resultMap = new ArrayList<>();
Map<String, List<MesWorkOrderCutDetailModel>> workOrderCutDetailModelMapByPartNo = workOrderCutFgDataContext.stream().collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getPrinter()).add(o.getLabelTemplate()).toString()));
@ -94,15 +93,14 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
List<String> partNoList = workOrderCutDetailModelList.stream().map(MesWorkOrderCutDetailModel::getPartNo).distinct().collect(Collectors.toList());
//模板信息丢失抛出异常
if (labelTemplate == null) {
if (labelTemplate == null)
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查包装定义信息,零件号%s对应模板代码[%s]无效!", partNoList, model.getLabelTemplate()));
}
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
//模板信息丢失抛出异常
if (StringUtils.isEmpty(methodCode))
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的反射类丢失,请配置!", partNoList, labelTemplate.getTemplateCode()));
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的方法类为空,请配置!", partNoList, labelTemplate.getTemplateCode()));
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
@ -124,6 +122,22 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS},
new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.FALSE, MesExtEnumUtil.CUT_ORDER_STATUS.PRINTED.getValue()});
List<MesPrintedSnLog> snLogList = new ArrayList<>();
workOrderCutFgDataContext.stream().forEach(o -> {
MesPrintedSnLog printedSnLog = new MesPrintedSnLog();
printedSnLog.setWorkOrderNo(o.getWorkOrderNo());
printedSnLog.setBarcode(o.getPackageNo());
printedSnLog.setPartNo(o.getPartNo());
printedSnLog.setPartName(o.getPartName());
printedSnLog.setCustPartNo(o.getCustPartNo());
printedSnLog.setProductDate(o.getLotNo());
printedSnLog.setOrganizeCode(reqBean.getOrganizeCode());
ConvertBean.serviceModelInitialize(printedSnLog, reqBean.getUserInfo());
snLogList.add(printedSnLog);
});
snLogRepository.saveAll(snLogList);
// 裁片方案代码
// 根据裁片方案代码查询裁片方案成品配置
//返回打印标识 给前端

@ -160,7 +160,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
newWorkOrderCutDetailModel.setCopies(mesPartContext.getCopies());
newWorkOrderCutDetailModel.setPackageSnRule(mesPartContext.getPackageSnRule());
newWorkOrderCutDetailModel.setPrinter(mesPartContext.getPrinter());
newWorkOrderCutDetailModel.setCustPartNo(mesPartContext == null ? "" : mesPartContext.getCustPartNo());
newWorkOrderCutDetailModel.setCustPartNo(mesPartContext.getCustPartNo());
newWorkOrderCutDetailModel.setLabelTemplate(mesPartContext.getLabelTemplate());
newWorkOrderCutDetailModel.setOrganizeCode(mesPartContext.getOrganizeCode());

@ -0,0 +1,74 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.hibernate.annotations.ColumnDefault;
import javax.persistence.Column;
import javax.persistence.Transient;
import java.util.List;
import java.util.Map;
/**
* @Description : Model
* @Reference :
* @Author : xinwang.yi
* @CreateDate 2024/6/13 15:48
* @Modify:
**/
@Data
public class MesWorkOrderCutPrintModel {
@ApiParam("工厂代码")
private String organizeCode;
@ApiParam("裁片工单号")
private String cutWorkOrderNo;
@ApiParam("产线代码")
private String workCenterCode;
@ApiParam("裁片方案代码")
private String cutCode;
@ApiParam("裁片方案名称")
private String cutName;
@ApiParam("工单状态")
@AnnoOutputColumn(refClass = MesExtEnumUtil.CUT_ORDER_STATUS.class, refForeignKey = "value", value = "description")
private Integer workOrderStatus;
@ApiParam("打印状态")
@ColumnDefault("10")
@AnnoOutputColumn(refClass = MesExtEnumUtil.PRINT_STATUS.class, refForeignKey = "value", value = "description")
private Integer printStatus;
@Column(name = "PRINT_TIME")
@ApiParam("打印时间")
private String printTime;
@ApiParam("打印内容")
private List<Map<String, Object>> printContent;
@ApiParam("裁片方案")
private MesCutScheme cutScheme;
@ApiParam("裁片方案成品")
private List<MesCutSchemeFg> cutSchemeFgList;
@ApiParam("裁片方案原材料")
private List<MesCutSchemeMaterial> cutSchemeMaterialList;
@ApiParam("裁片方案设备")
private List<MesCutSchemeEquipment> cutSchemeEquipmentList;
@ApiParam("裁片方案设备参数")
private Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid;
@Transient
@ApiParam("查询模式1-仅仅查询2-查询并带打印模板修改打印状态")
private Integer mode;
}
Loading…
Cancel
Save