|
|
|
@ -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);
|
|
|
|
|