|
|
|
@ -27,6 +27,7 @@ import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -84,7 +85,7 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
|
|
|
|
|
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
|
|
|
|
|
|
|
|
|
|
//获取上下文进料零件条码信息集合
|
|
|
|
|
//List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
|
|
|
|
|
List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
|
|
|
|
|
|
|
|
|
|
//根据现有数据【产出零件数据】【进料零件条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询
|
|
|
|
|
if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>();
|
|
|
|
@ -92,7 +93,7 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
|
|
|
|
|
|
|
|
|
|
//封装非排序加工规则
|
|
|
|
|
if (!doHandleProdRuleData(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext,
|
|
|
|
|
prodRuleContextList, productionPartContextList).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
|
|
|
|
|
prodRuleContextList, productionPartContextList, productionPsInContextList).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
|
|
|
|
|
|
|
|
|
|
//匹配失败需要清除本次扫描/读取信息
|
|
|
|
|
//if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, stepResult, productionPartContextList, productionPsInContextList))
|
|
|
|
@ -104,7 +105,9 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
|
|
|
|
|
//保存上下文产品加工规则信息集合
|
|
|
|
|
productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList);
|
|
|
|
|
//保存上下文产出零件信息
|
|
|
|
|
//if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
|
|
|
|
|
if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
|
|
|
|
|
//保存进料主条码数据
|
|
|
|
|
if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "匹配完成!");
|
|
|
|
@ -113,11 +116,12 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
|
|
|
|
|
private StepResult doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
|
|
|
|
|
MesProductionProcessContext productionProcessContext,
|
|
|
|
|
MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList,
|
|
|
|
|
List<MesProductionPartContext> productionPartContextList) {
|
|
|
|
|
List<MesProductionPartContext> productionPartContextList,
|
|
|
|
|
List<MesProductionPsInContext> productionPsInContextList) {
|
|
|
|
|
|
|
|
|
|
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 (只能查询到一条,否则报错)
|
|
|
|
|
return doHandleProdRuleDataByProductionPart(reqBean, resultBean, stepResult, productionProcessContext,
|
|
|
|
|
cellEquipContext, prodRuleContextList, productionPartContextList);
|
|
|
|
|
cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -127,7 +131,8 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
|
|
|
|
|
MesProductionProcessContext productionProcessContext,
|
|
|
|
|
MesCellEquipContext cellEquipContext,
|
|
|
|
|
List<MesProdRuleContext> prodRuleContextList,
|
|
|
|
|
List<MesProductionPartContext> productionPartContextList) {
|
|
|
|
|
List<MesProductionPartContext> productionPartContextList,
|
|
|
|
|
List<MesProductionPsInContext> productionPsInContextList) {
|
|
|
|
|
|
|
|
|
|
//加工规则的数据已与产出零件的数量一致
|
|
|
|
|
//if (!CollectionUtils.isEmpty(prodRuleContextList) && prodRuleContextList.size() == productionPartContextList.size()) return stepResult;
|
|
|
|
@ -149,9 +154,9 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
|
|
|
|
|
|
|
|
|
|
log.info("doHandleProdRuleDataByProductionPart --- outPartNoList:{}", foreignKey);
|
|
|
|
|
|
|
|
|
|
//没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错)
|
|
|
|
|
//根据产出零件条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错)
|
|
|
|
|
return doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, productionProcessContext,
|
|
|
|
|
cellEquipContext, prodRuleContextList, productionPartContextList, outPartNoList, foreignKey);
|
|
|
|
|
cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList, outPartNoList, foreignKey);
|
|
|
|
|
//存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 (只能查询到一条,否则报错)
|
|
|
|
|
//else return doHandleProdRuleDataByProductionPartAndProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList, outPartNoList, foreignKey);
|
|
|
|
|
|
|
|
|
@ -159,7 +164,8 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
|
|
|
|
|
|
|
|
|
|
//没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错)
|
|
|
|
|
private StepResult doHandleProdRuleDataByProductionPartAndEmptyProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext,
|
|
|
|
|
MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<String> outPartNoList, Integer foreignKey) {
|
|
|
|
|
MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList,
|
|
|
|
|
List<MesProductionPsInContext> productionPsInContextList, List<String> outPartNoList, Integer foreignKey) {
|
|
|
|
|
|
|
|
|
|
//【非排序线】获取产品加工规则 ; 条件进料[NULL]
|
|
|
|
|
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).outPartNos(outPartNoList).inPartIsEmpty(true));
|
|
|
|
@ -175,6 +181,9 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
|
|
|
|
|
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format(
|
|
|
|
|
"未维护裁片方案代码[%s]设备[%s]的裁片设备配置信息!", cutCode, cellEquipContext.getEquipmentName()));
|
|
|
|
|
|
|
|
|
|
// 根据工单分组进料条码
|
|
|
|
|
Map<String, MesProductionPsInContext> productionPsInContextMapByWorkOrder = CollectionUtils.isEmpty(productionPsInContextList) ? null : productionPsInContextList.stream().collect(Collectors.toMap(MesProductionPsInContext::getWorkOrderNo, Function.identity(), (x, y) -> y));
|
|
|
|
|
|
|
|
|
|
for (MesProductionPartContext productionPartContext : productionPartContextList) {
|
|
|
|
|
|
|
|
|
|
log.info("doHandleProdRuleDataByProductionPartAndEmptyProductSn --- 是否找加工规则:{}", null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey()));
|
|
|
|
@ -193,9 +202,12 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
|
|
|
|
|
MesProdRuleContext prodRuleContext = prodRuleCfgExtService.getProdRuleNosortContext(
|
|
|
|
|
new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())
|
|
|
|
|
.copy(filterList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey()));
|
|
|
|
|
prodRuleContext.setIsPrint(cutSchemeEquipment.getIsPrint());
|
|
|
|
|
//prodRuleContext.setIsPrint(cutSchemeEquipment.getIsPrint());
|
|
|
|
|
prodRuleContextList.add(prodRuleContext);
|
|
|
|
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(productionPsInContextMapByWorkOrder) && productionPsInContextMapByWorkOrder.containsKey(productionPartContext.getWorkOrderNo()))
|
|
|
|
|
productionPsInContextMapByWorkOrder.get(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.getForeignKey());
|
|
|
|
|
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- 设备:{} 产出零件信息:{} 产品加工规则:{} ---", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
|
|
|
|
|
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), cellEquipContext.getEquipmentCode(), JSONObject.toJSONString(productionPartContext), JSONObject.toJSONString(prodRuleContext));
|
|
|
|
|
|
|
|
|
|