|
|
|
@ -4,9 +4,12 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
|
|
|
|
|
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.base.IConfigService;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
@ -30,6 +33,7 @@ import org.springframework.util.StringUtils;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Optional;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@ -62,6 +66,9 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesTemplateService mesTemplateService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IConfigService configService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public StepResult execute(StationRequestBean reqBean) {
|
|
|
|
|
// /**
|
|
|
|
@ -83,6 +90,9 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
|
|
|
|
|
//1. 获取上下文中生成的主条码
|
|
|
|
|
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
|
|
|
|
|
|
|
|
|
|
//获取上下文产品加工规则数据信息集合
|
|
|
|
|
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
|
|
|
|
|
|
|
|
|
|
// 排除掉空腔的partContext数据
|
|
|
|
|
productionPartContextList = CollectionUtils.isEmpty(productionPartContextList) ? null :productionPartContextList.stream().filter(o -> o.getForeignKey() != null).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
@ -97,53 +107,68 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
|
|
|
|
|
// 根据工单号分组
|
|
|
|
|
Map<String, MesWorkOrder> workOrderMap = getMesWorkOrderMap(reqBean, productionPartContextList);
|
|
|
|
|
|
|
|
|
|
//加工规则根据数据关联键分组
|
|
|
|
|
Map<Integer, MesProdRuleContext> prodRuleContextMap = prodRuleContextList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o));
|
|
|
|
|
|
|
|
|
|
// 获取零件信息上下文
|
|
|
|
|
Map<String, MesPart> partDataContext = productionProcessContextStepService.getPartDataContext(reqBean);
|
|
|
|
|
|
|
|
|
|
//默认客户条码编码规则配置代码
|
|
|
|
|
String defaultCustMatchRule = getDefaultCustMatchRule(reqBean.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
List<MesPrintedSnLog> snLogList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
List<Map<String, Object>> resultMap = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
for (MesProductionPartContext sn : productionPartContextList) {
|
|
|
|
|
for (MesProductionPartContext productionPartContext : productionPartContextList) {
|
|
|
|
|
|
|
|
|
|
// 根据工单号获取工单信息
|
|
|
|
|
MesWorkOrder workOrder = workOrderMap.get(sn.getWorkOrderNo());
|
|
|
|
|
MesWorkOrder workOrder = workOrderMap.get(productionPartContext.getWorkOrderNo());
|
|
|
|
|
|
|
|
|
|
if (null == workOrder) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号:{}无效!", sn.getWorkOrderNo()));
|
|
|
|
|
if (null == workOrder) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号:{}无效!", productionPartContext.getWorkOrderNo()));
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(partDataContext) || !partDataContext.containsKey(workOrder.getPartNo()))
|
|
|
|
|
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]丢失零件信息缓存!", sn.getWorkOrderNo(), sn.getPartNo()));
|
|
|
|
|
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]丢失零件信息缓存!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo()));
|
|
|
|
|
|
|
|
|
|
MesPart mesPart = partDataContext.get(sn.getPartNo());
|
|
|
|
|
MesPart mesPart = partDataContext.get(productionPartContext.getPartNo());
|
|
|
|
|
|
|
|
|
|
String custMatchRule = StringUtils.isEmpty(mesPart.getCustMatchRule()) ? "WH_CUST_SN_RULE" : mesPart.getCustMatchRule();
|
|
|
|
|
//验证是否配置客户条码编码规则信息
|
|
|
|
|
String custMatchRule = !StringUtils.isEmpty(mesPart.getCustMatchRule()) ? mesPart.getCustMatchRule() : defaultCustMatchRule;
|
|
|
|
|
if (StringUtils.isEmpty(custMatchRule)) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]未维护客户条码编码规则!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo()));
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(custMatchRule, MesPcnExtConstWords.RULE_CODE, packBean);
|
|
|
|
|
MesNumberRule numberRule = numberRuleRepository.getByProperty(packBean);
|
|
|
|
|
if (null == numberRule) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]客户条码编码规则[%s]无效!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo(), custMatchRule));
|
|
|
|
|
|
|
|
|
|
//过滤打印配置信息
|
|
|
|
|
MesProdRuleContext prodRuleContext = prodRuleContextMap.get(productionPartContext.getForeignKey());
|
|
|
|
|
MesProductionAssemblySortContext productionAssemblySortContext = filterPrintInfo(prodRuleContext);
|
|
|
|
|
|
|
|
|
|
//获取打印模版和打印机
|
|
|
|
|
String labelTemplateCode = null != productionAssemblySortContext ? productionAssemblySortContext.getPrintTemplate() : null;
|
|
|
|
|
String printer = null != productionAssemblySortContext ? productionAssemblySortContext.getPrinter() : null;
|
|
|
|
|
if (StringUtils.isEmpty(labelTemplateCode)) {
|
|
|
|
|
labelTemplateCode = mesPart.getCustLabelTemplate();
|
|
|
|
|
printer = mesPart.getProductPrinterCode();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (null == numberRule) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]客户条码编码规则[%s]无效!", sn.getWorkOrderNo(), sn.getPartNo(), custMatchRule));
|
|
|
|
|
|
|
|
|
|
// 从物料信息中获取标签模板
|
|
|
|
|
String labelTemplateCode = partDataContext.get(sn.getPartNo()).getCustLabelTemplate();
|
|
|
|
|
|
|
|
|
|
if (null == labelTemplateCode) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]未在ERP物料信息维护打印模板,请检查并修改!", sn.getWorkOrderNo(), sn.getPartNo()));
|
|
|
|
|
if (null == labelTemplateCode) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]未在ERP物料信息维护打印模板,请检查并修改!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo()));
|
|
|
|
|
|
|
|
|
|
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
|
|
|
|
|
// 查模板代码
|
|
|
|
|
MesLabelTemplate labelTemplate = mesTemplateService.getLabelTemplate(labelTemplateCode, organizeCode);
|
|
|
|
|
if (null == labelTemplate) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]无效,请检查并修改!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo(), labelTemplateCode));
|
|
|
|
|
|
|
|
|
|
if (null == labelTemplate) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]无效,请检查并修改!", sn.getWorkOrderNo(), sn.getPartNo(), labelTemplateCode));
|
|
|
|
|
|
|
|
|
|
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
|
|
|
|
|
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
|
|
|
|
|
mesProduceSnPrintModel.setPrinter(partDataContext.get(sn.getPartNo()).getProductPrinterCode());
|
|
|
|
|
mesProduceSnPrintModel.setPartNo(sn.getPartNo());
|
|
|
|
|
mesProduceSnPrintModel.setPrinter(printer);
|
|
|
|
|
mesProduceSnPrintModel.setPartNo(productionPartContext.getPartNo());
|
|
|
|
|
mesProduceSnPrintModel.setOrganizeCode(organizeCode);
|
|
|
|
|
mesProduceSnPrintModel.setSourceData(workOrder);
|
|
|
|
|
mesProduceSnPrintModel.setUserName(reqBean.getUserInfo());
|
|
|
|
|
//根据反射获取策略类--封装打印数据
|
|
|
|
|
String methodCode = labelTemplate.getMethodCode();
|
|
|
|
|
//模板信息丢失抛出异常
|
|
|
|
|
if (StringUtils.isEmpty(methodCode)) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]的反射类丢失,请配置!", sn.getWorkOrderNo(), sn.getPartNo(), labelTemplateCode));
|
|
|
|
|
if (StringUtils.isEmpty(methodCode)) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]的反射类丢失,请配置!", productionPartContext.getWorkOrderNo(), productionPartContext.getPartNo(), labelTemplateCode));
|
|
|
|
|
|
|
|
|
|
IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode);
|
|
|
|
|
MesProduceSnPrintModel printModel = strategyService.execute(null, mesProduceSnPrintModel, numberRule, stepResult, reqBean, true);
|
|
|
|
@ -163,6 +188,12 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
|
|
|
|
|
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "打印成功!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//默认客户条码编码规则配置代码
|
|
|
|
|
private String getDefaultCustMatchRule(String organizeCode) {
|
|
|
|
|
List<MesConfig> configList = configService.doCachedConfigList(MesPcnExtConstWords.DEFAULT_CUST_MATCH_RULE, organizeCode);
|
|
|
|
|
return !CollectionUtils.isEmpty(configList) ? configList.get(0).getCfgValue() : null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesPrintedSnLog getMesPrintedSnLog(StationRequestBean reqBean, MesWorkOrder workOrder,String printData) {
|
|
|
|
|
MesPrintedSnLog snLog = new MesPrintedSnLog();
|
|
|
|
|
snLog.setBarcode(workOrder.getCustSn());
|
|
|
|
@ -191,4 +222,13 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
|
|
|
|
|
return CollectionUtils.isEmpty(workOrderList) ? null :
|
|
|
|
|
workOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//过滤打印配置信息
|
|
|
|
|
private MesProductionAssemblySortContext filterPrintInfo(MesProdRuleContext prodRuleContext) {
|
|
|
|
|
List<MesProductionAssemblySortContext> productionAssemblySortContextList = prodRuleContext.getSortAssemblyDataContext();
|
|
|
|
|
Optional<MesProductionAssemblySortContext> optional = CollectionUtils.isEmpty(productionAssemblySortContextList) ? null :
|
|
|
|
|
productionAssemblySortContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPrintTemplate()))).findFirst();
|
|
|
|
|
return (null != optional && optional.isPresent()) ? optional.get() : null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|