tags/yfai-pcn-ext-v1.0
王杰 11 months ago
parent 02d5c0ed65
commit de49a8120d

@ -44,12 +44,9 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen
@Override
public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
StationResultBean stationResultBean = new StationResultBean().busiType(buttonDynamicModel.getButtonCode()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT.getValue());
//获取生产过程上下文对象
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean);
if (!productionProcessContext.getSuccess()) this.sendMessage(reqBean, stationResultBean.message(productionProcessContext.getMessage()));
if (!productionProcessContext.getSuccess()) return false;
MesWorkCell workCell = productionProcessContext.getWorkCell();
@ -57,7 +54,6 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen
if (StringUtils.isEmpty(workCell.getIsAllowOrder()) || CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == workCell.getIsAllowOrder()) {
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,工位未设置允许界面选工单!",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
this.sendMessage(reqBean, stationResultBean.message(resultBean.getMessage()));
return false;
}
@ -65,7 +61,6 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen
if (CollectionUtils.isEmpty(resultList)) {
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,请检查选择的工单信息[%s]的有效性!",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
this.sendMessage(reqBean, stationResultBean.message(resultBean.getMessage()));
return false;
}
@ -74,7 +69,6 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功,请等待验证! 提交信息[%s]",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
this.sendMessage(reqBean, stationResultBean.dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()).message(resultBean.getMessage()));
reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean));
reqBean.setInterfaceType(MesPcnConstWords.SHIPPING);

@ -30,20 +30,15 @@ public class MesFunctionJumpProcessService extends BaseSwsService implements IFs
@Override
public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
StationResultBean stationResultBean = new StationResultBean().busiType(buttonDynamicModel.getButtonCode()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT.getValue());
Map<String, String> wcpcMap = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean);
String jumpState = wcpcMap.get(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.JUMP_STATE.getCode());
if (StringUtils.isEmpty(jumpState)) {
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,未配置工位参数[%s]!",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_JUMP_PROCESS.getCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
this.sendMessage(reqBean, stationResultBean.message(resultBean.getMessage()));
return false;
}
this.sendMessage(reqBean, stationResultBean.dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()));
reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean));
reqBean.setInterfaceType(MesPcnConstWords.SHIPPING);
reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN);

@ -30,20 +30,15 @@ public class MesFunctionJumpStateService extends BaseSwsService implements IFsmM
@Override
public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
StationResultBean stationResultBean = new StationResultBean().busiType(buttonDynamicModel.getButtonCode()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT.getValue());
Map<String, String> wcpcMap = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean);
String jumpState = wcpcMap.get(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.JUMP_STATE.getCode());
if (StringUtils.isEmpty(jumpState)) {
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,未配置工位参数[%s]!",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.JUMP_STATE.getCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
this.sendMessage(reqBean, stationResultBean.message(resultBean.getMessage()));
return false;
}
this.sendMessage(reqBean, stationResultBean.dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()));
reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean));
reqBean.setInterfaceType(MesPcnConstWords.SHIPPING);
reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN);

@ -36,7 +36,6 @@ public class MesFunctionProductionLockService extends BaseSwsService implements
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功!",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
this.sendMessage(reqBean, new StationResultBean().busiType(buttonDynamicModel.getButtonCode()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()).message(resultBean.getMessage()));
return true;

@ -26,7 +26,6 @@ public class MesFunctionProductionStatisticsService extends BaseSwsService imple
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功!",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
this.sendMessage(reqBean, new StationResultBean().busiType(buttonDynamicModel.getButtonCode()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()).message(resultBean.getMessage()));
return true;

@ -36,7 +36,6 @@ public class MesFunctionProductionUnlockService extends BaseSwsService implement
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功!",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
this.sendMessage(reqBean, new StationResultBean().busiType(buttonDynamicModel.getButtonCode()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()).message(resultBean.getMessage()));
reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean));
reqBean.setInterfaceType(MesPcnConstWords.SHIPPING);

@ -34,7 +34,6 @@ public class MesFunctionResetCellContextService extends BaseSwsService implement
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功!",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
this.sendMessage(reqBean, new StationResultBean().busiType(buttonDynamicModel.getButtonCode()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()).message(resultBean.getMessage()));
return true;

@ -24,7 +24,6 @@ public class MesFunctionSwitchCellService extends BaseSwsService implements IFsm
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s,客户端已下线!",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
this.sendMessage(reqBean, new StationResultBean().busiType(buttonDynamicModel.getButtonCode()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()).message(resultBean.getMessage()));
return true;

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdRuleCfgExtService;
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.pojo.context.*;
@ -9,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
@ -42,10 +42,10 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProdRuleCfgExtService prodRuleCfgExtService;
private IMesNumberRuleMatchDispatchService numberRuleMatchDispatchService;
@Autowired
private IMesNumberRuleMatchDispatchService numberRuleMatchDispatchService;
private MesAssemblyShowNosortStepService assemblyShowNosortStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -65,7 +65,6 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
//获取上下文产品加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
if (CollectionUtils.isEmpty(prodRuleContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前上下文中不存在非排序加工规则数据,请重置工序!");
//从上下文中取出生产线对象
@ -77,115 +76,52 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
//获取上下文进料零件条码信息集合
List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
//获取上下文生产扫/读信息:装配件条码
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanAssemblySnContext(reqBean);
//删除上下文扫/读信息:装配件条码
if (!CollectionUtils.isEmpty(equipVariableCollectContextList)) productionDispatchContextStepService.deleteScanAssemblySnContext(reqBean);
//未知腔数[工位参数]
String cavityUnknownCfg = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_UNKNOWN_CFG);
if (!CollectionUtils.isEmpty(productionPartContextList) && !CollectionUtils.isEmpty(productionPsInContextList)) //存在产出零件 存在进料主条码
doMatchAssemblyHasPpAndPs(reqBean, resultBean, stepResult, productionPartContextList, productionPsInContextList, prodRuleContextList, equipVariableCollectContextList);
else if (!CollectionUtils.isEmpty(productionPartContextList)) //存在产出零件 不存在进料主条码
doMatchAssemblyHasPp(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, productionPartContextList, prodRuleContextList, equipVariableCollectContextList);
else if (!CollectionUtils.isEmpty(productionPsInContextList)) //不存在产出零件 存在进料主条码
doMatchAssemblyHasPs(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, productionPsInContextList, prodRuleContextList, equipVariableCollectContextList);
else if (StringUtils.isEmpty(cavityUnknownCfg)) //不存在产出零件 不存在进料主条码 根据设备腔数反向匹配加工规则
doMatchAssemblyHasCavity(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, prodRuleContextList, equipVariableCollectContextList);
else //不存在产出零件 不存在进料主条码 未知腔数 反向完成匹配后获取对应的加工规则
doMatchAssemblyUnknowCavity(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, prodRuleContextList, equipVariableCollectContextList);
return stepResult;
}
//存在产出零件 存在进料主条码
private StepResult doMatchAssemblyHasPpAndPs(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList,
List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
//存在产出零件 存在进料主条码 不存在待验证装配件条码
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
return hasUnBindAssembly(prodRuleContextList) ?
stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg("当前上下文中不存在待验证的装配件条码,但还存在未装配的装配件清单!") :
(productionPartContextList.size() == productionPsInContextList.size() ? stepResult :
stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg(
String.format("当前上下文中不存在待验证的装配件条码,请扫描第[%s]腔主条码,共[%s]腔!", productionPsInContextList.size() + MesPcnExtConstWords.ONE, productionPartContextList.size())));
//遍历产品加工规则
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
//没有装配件的条件
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
//获取非排序装配件清单
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext();
//遍历装配件清单
for (MesProductionAssemblyNosortContext productionAssemblyNosortContext : productionAssemblyNosortContextList) {
//已装配
if (null == productionAssemblyNosortContext || productionAssemblyNosortContext.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) != 0) continue;
//遍历装配件条码
for (MesEquipVariableCollectContext equipVariableCollectContext : equipVariableCollectContextList) {
//已被消费
if (null == equipVariableCollectContext || equipVariableCollectContext.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) continue;
//匹配规则
List<MesProductionAssemblyNosortContext> filterList = (List<MesProductionAssemblyNosortContext>)
numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), Stream.of(productionAssemblyNosortContext).collect(Collectors.toList()));
//匹配失败
if (CollectionUtils.isEmpty(filterList)) continue;
//验证是否存在待绑定数据
Boolean IsNeedScanAssembly = checkIsNeedScanAssembly(prodRuleContextList);
Boolean hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
//匹配成功
equipVariableCollectContext.isConsume();
//根据产出零件或者腔数拿到需要的加工规则数量, 优先使用产出零件数量
Integer needQty = !CollectionUtils.isEmpty(productionPartContextList) ? productionPartContextList.size() : cellEquipContext.getCavity();
//装配件清单该数据标记已装配
productionAssemblyNosortContext.assemblyStatus().assemblySn(equipVariableCollectContext.getEquipVariableValue());
//没有待绑定数据, 验证当前是否满足腔数 没有进料主条码代码当前加工规则已经全部加载, 有的话需要判断是否全部扫完 没有扫完需要返回false继续扫描主条码
if (!IsNeedScanAssembly || !hasUnBindAssembly)
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult,
(CollectionUtils.isEmpty(productionPsInContextList) || productionPsInContextList.size() >= needQty) ? true : stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN).isCompleted(),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, !IsNeedScanAssembly ? "当前上下文中的加工规则未配置装配件扫描项,当前无需匹配装配件条码!" : "当前上下文中的加工规则对应的装配件扫描项均匹配完毕!");
}
//是否验证顺序装配
if (!StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) &&
prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0 &&
productionAssemblyNosortContext.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) != 0) break;
//获取上下文生产扫/读信息:装配件条码
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanAssemblySnContext(reqBean);
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前上下文中不存在装配件条码!");
}
//删除上下文扫/读信息:装配件条码
productionDispatchContextStepService.deleteScanAssemblySnContext(reqBean);
prodRuleContext.assemblyDataJson(productionAssemblyNosortContextList);
//处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成]
Boolean result = doHandleMatchAssembly(reqBean, resultBean, stepResult, prodRuleContextList, equipVariableCollectContextList);
//TODO 发送设备加工参数
if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0) doSendEquipProdParam(reqBean, resultBean, stepResult, prodRuleContext, productionAssemblyNosortContextList);
//验证是否存在待绑定数据
hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
}
String assemblySn = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString();
if (result || !hasUnBindAssembly) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList);
if (result || !hasUnBindAssembly) assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList, productionPartContextList);
List<MesEquipVariableCollectContext> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList());
//没有待绑定数据, 验证当前是否满足腔数 没有进料主条码代码当前加工规则已经全部加载, 有的话需要判断是否全部扫完 没有扫完需要返回false继续扫描主条码
if (!hasUnBindAssembly)
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult,
(CollectionUtils.isEmpty(productionPsInContextList) || productionPsInContextList.size() >= needQty) ? true : stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN).isCompleted(),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("上下文中的装配件条码%s匹配成功!当前上下文中的加工规则对应的装配件扫描项均匹配完毕!", assemblySn));
if (CollectionUtils.isEmpty(filterList)) {
if (result) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的装配件条码%s匹配成功!", assemblySn));
Boolean hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
if ((!hasUnBindAssembly && equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) == 0) || equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0)
productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList);
String msg = String.format("当前上下文中的装配件条码%s匹配完成", filterList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString());
return hasUnBindAssembly ? stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg(String.format("%s,但还存在未装配的装配件清单!", msg)) :
(productionPartContextList.size() == productionPsInContextList.size() ? stepResult.msg(msg) :
stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg(
String.format("%s,请扫描第[%s]腔主条码,共[%s]腔!", msg, productionPsInContextList.size() + MesPcnExtConstWords.ONE, productionPartContextList.size())));
} else {
String msg = String.format("当前上下文中的装配件条码%s匹配失败", filterList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString());
return hasUnBindAssembly(prodRuleContextList) ? stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg(String.format("%s,但还存在未装配的装配件清单!", msg)) :
(productionPartContextList.size() == productionPsInContextList.size() ? stepResult.msg(String.format("%s,但不存在未装配的装配件清单!", msg)) :
stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg(
String.format("%s,请扫描第[%s]腔主条码,共[%s]腔!", msg, productionPsInContextList.size() + MesPcnExtConstWords.ONE, productionPartContextList.size())));
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的装配件条码%s匹配失败!", assemblySn));
}
//判断是否存在装配件清单
private Boolean checkIsNeedScanAssembly(List<MesProdRuleContext> prodRuleContextList) {
Optional<MesProdRuleContext> optional = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getAssemblyDataJson()))).findFirst();
return (null == optional || !optional.isPresent()) ? false : true;
}
//验证是否存在待绑定数据
@ -202,12 +138,8 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
return hasUnBindAssembly;
}
//存在产出零件 不存在进料主条码
private StepResult doMatchAssemblyHasPp(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesProductionPartContext> productionPartContextList, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
//存在产出零件 存在进料主条码 不存在待验证装配件条码
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
return hasUnBindAssembly(prodRuleContextList) ? stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg("当前上下文中不存在待验证的装配件条码,但还存在未装配的装配件清单!") : stepResult;
//处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成]
private Boolean doHandleMatchAssembly(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
//遍历产品加工规则
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
@ -218,6 +150,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
//获取非排序装配件清单
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext();
Boolean flag = false;
//遍历装配件清单
for (MesProductionAssemblyNosortContext productionAssemblyNosortContext : productionAssemblyNosortContextList) {
@ -239,6 +172,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
//匹配成功
equipVariableCollectContext.isConsume();
flag = true;
//装配件清单该数据标记已装配
productionAssemblyNosortContext.assemblyStatus().assemblySn(equipVariableCollectContext.getEquipVariableValue());
@ -248,48 +182,17 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
//是否验证顺序装配
if (!StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) &&
prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0 &&
productionAssemblyNosortContext.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) != 0) break;
}
prodRuleContext.assemblyDataJson(productionAssemblyNosortContextList);
//TODO 发送设备加工参数
if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0) doSendEquipProdParam(reqBean, resultBean, stepResult, prodRuleContext, productionAssemblyNosortContextList);
}
List<MesEquipVariableCollectContext> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList());
productionAssemblyNosortContext.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0) break;
if (CollectionUtils.isEmpty(filterList)) {
Boolean hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
if ((!hasUnBindAssembly && equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) == 0) || equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0)
productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList);
String msg = String.format("当前上下文中的装配件条码%s匹配完成", filterList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString());
return hasUnBindAssembly ? stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg(String.format("%s,但还存在未装配的装配件清单!", msg)) : stepResult.msg(msg);
} else {
String msg = String.format("当前上下文中的装配件条码%s匹配失败", filterList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString());
return hasUnBindAssembly(prodRuleContextList) ? stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg(String.format("%s,但还存在未装配的装配件清单!", msg)) : stepResult.msg(msg);
}
}
//存在匹配成功的数据
if (flag) prodRuleContext.assemblyDataJson(productionAssemblyNosortContextList);
if (flag && equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0) return true;
//不存在产出零件 存在进料主条码
private void doMatchAssemblyHasPs(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesProductionPsInContext> productionPsInContextList, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
}
//不存在产出零件 不存在进料主条码 根据设备腔数反向匹配加工规则
private void doMatchAssemblyHasCavity(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
}
//不存在产出零件 不存在进料主条码 未知腔数 反向完成匹配后获取对应的加工规则
private void doMatchAssemblyUnknowCavity(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
}
//TODO 发送设备加工参数
private void doSendEquipProdParam(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProdRuleContext prodRuleContext, List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList) {
Optional<MesProductionAssemblyNosortContext> optional = productionAssemblyNosortContextList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0)).findFirst();
if (null != optional && optional.isPresent()) return;
return false;
}

@ -83,8 +83,12 @@ public class MesAssemblyReadStepService extends BaseStepService {
//当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//验证当前是否需要读装配件条码
if (!checkIsNeedReedAssembly(reqBean)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前上下文中的加工规则未配置装配件扫描项,无需读设备[%s]装配件条码!", cellEquipContext.getEquipmentCode()));
//获取上下文产品加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
//验证当前是否需要读装配件条码: 是否存在装配件清单
if (!CollectionUtils.isEmpty(prodRuleContextList) && !checkIsNeedReedAssembly(prodRuleContextList))
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前上下文中的加工规则未配置装配件扫描项,无需读设备[%s]装配件条码!", cellEquipContext.getEquipmentCode()));
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -127,20 +131,10 @@ public class MesAssemblyReadStepService extends BaseStepService {
}
private Boolean checkIsNeedReedAssembly(StationRequestBean reqBean) {
//获取上下文产品加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
//没有加工规则代表需要反向匹配出加工规则, 需要直接读取
if (CollectionUtils.isEmpty(prodRuleContextList)) return true;
//判断加工规则中是否存在还有装配件的数据
//判断是否存在装配件清单
private Boolean checkIsNeedReedAssembly(List<MesProdRuleContext> prodRuleContextList) {
Optional<MesProdRuleContext> optional = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getAssemblyDataJson()))).findFirst();
//不存在返回fasle不用读取
return (null == optional || !optional.isPresent()) ? false : true;
}
//匹配读取的装配件的有效性

@ -3,12 +3,10 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
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.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
@ -56,50 +54,91 @@ public class MesAssemblyScanStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
//验证当前是否需要读装配件条码 【当前验证只能对内部触发生效】
if (!checkIsNeedScanAssembly(reqBean)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前上下文中的加工规则未配置装配件扫描项,无需扫描装配件条码!");
if (StringUtils.isEmpty(reqBean.getScanInfo())) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), "请扫描装配件条码!");
//扫描信息置空
String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo());
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, productionProcessContext.getMessage());
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//保存设备当前一轮工序待验证的装配件条码信息
productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, getAssemblySnJson(reqBean, scanInfo));
//获取上下文产品加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
//验证当前是否需要扫描装配件条码: 是否存在装配件清单 【当前验证只能对内部触发生效】
if (!CollectionUtils.isEmpty(prodRuleContextList) && !checkIsNeedScanAssembly(prodRuleContextList))
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前上下文中的加工规则未配置装配件扫描项,当前无需扫描装配件条码!");
//验证当前是否需要读装配件条码: 验证是否存在待绑定数据 【当前验证只能对内部触发生效】
if (!CollectionUtils.isEmpty(prodRuleContextList) && !hasUnBindAssembly(prodRuleContextList))
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前上下文中的加工规则对应的装配件清单已扫描完毕,当前无需扫描装配件条码!");
if (StringUtils.isEmpty(scanInfo)) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), "请扫描装配件条码!");
//发送工步内容
productionCustomContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息装配件条码[%s]!", scanInfo));
//封装当前扫描的装配件信息
List<MesEquipVariableCollectContext> equipVariableCollectContextList = getAssemblySnJson(reqBean, scanInfo);
//从上下文中取出工位当前要使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//需要扫描的绑定数量 [没有加工规则场景]
Integer needQty = cellEquipContext.getCavity() * cellEquipContext.getBindQty();
//没有加工规则代表需要反向匹配出加工规则, 需要根据设备腔数直接批量扫描 生成零件号
if (CollectionUtils.isEmpty(prodRuleContextList)) {
//获取上下文生产扫/读信息:装配件条码
List<MesEquipVariableCollectContext> cachedEquipVariableCollectContextList = productionDispatchContextStepService.getScanAssemblySnContext(reqBean);
//删除上下文扫/读信息:装配件条码
productionDispatchContextStepService.deleteScanAssemblySnContext(reqBean);
if (!CollectionUtils.isEmpty(cachedEquipVariableCollectContextList) && cachedEquipVariableCollectContextList.size() > needQty)
execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("当前上下文中的装配件条码数量[%s]已经超过设备腔数[%s]每腔个数[%s]配置,请重新扫描装配件条码!", cachedEquipVariableCollectContextList.size(), cellEquipContext.getCavity(), cellEquipContext.getBindQty()));
if (!CollectionUtils.isEmpty(cachedEquipVariableCollectContextList) && cachedEquipVariableCollectContextList.size() == needQty) equipVariableCollectContextList = cachedEquipVariableCollectContextList;
else equipVariableCollectContextList.addAll(cachedEquipVariableCollectContextList);
}
private Boolean checkIsNeedScanAssembly(StationRequestBean reqBean) {
//保存上下文扫/读信息:装配件条码
productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, equipVariableCollectContextList);
//获取上下文产出零件信息
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//存在加工规则 默认扫描一次 匹配一次 循环处理直到当前的加工规则全部匹配完毕
if (!CollectionUtils.isEmpty(prodRuleContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息装配件条码[%s]!", scanInfo));
//获取上下文产品加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
if (equipVariableCollectContextList.size() == needQty) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息装配件条码[%s],已扫描个数[%s]!", scanInfo, equipVariableCollectContextList.size() + "/" + needQty));
//没有加工规则代表需要反向匹配出加工规则, 需要直接读取
if (CollectionUtils.isEmpty(prodRuleContextList)) return true;
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息装配件条码[%s],请继续扫描装配件条码,已扫描个数[%s]!", scanInfo, equipVariableCollectContextList.size() + "/" + needQty));
//判断加工规则中是否存在还有装配件的数据
Optional<MesProdRuleContext> optional = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getAssemblyDataJson()))).findFirst();
}
//不存在返回fasle不用读取
//判断是否存在装配件清单
private Boolean checkIsNeedScanAssembly(List<MesProdRuleContext> prodRuleContextList) {
Optional<MesProdRuleContext> optional = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getAssemblyDataJson()))).findFirst();
return (null == optional || !optional.isPresent()) ? false : true;
}
//验证是否存在待绑定数据
private Boolean hasUnBindAssembly(List<MesProdRuleContext> prodRuleContextList) {
Boolean hasUnBindAssembly = false;
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext();
Optional<MesProductionAssemblyNosortContext> optional = productionAssemblyNosortContextList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0)).findFirst();
if (null == optional || !optional.isPresent()) continue;
hasUnBindAssembly = true;
break;
}
return hasUnBindAssembly;
}
private List<MesEquipVariableCollectContext> getAssemblySnJson(StationRequestBean reqBean, String scanInfo) {

@ -17,7 +17,6 @@ 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.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -106,17 +105,17 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
private StepResult doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext,
List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) {
//没有【产出零件数据】【进料零件条码信息】,则直接跳过 【当前场景是直接匹配装配件规则来获取产品加工规则
//没有【产出零件数据】【进料零件条码信息】,则直接跳过 【当前是生成零件号场景】
if (CollectionUtils.isEmpty(productionPartContextList) && CollectionUtils.isEmpty(productionPsInContextList)) return stepResult;
//根据进料条件获取匹配加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
//根据进料条件获取匹配加工规则数据(只能查询到一条,否则报错)
if (CollectionUtils.isEmpty(productionPartContextList)) return doHandleProdRuleDataByProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPsInContextList);
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 (只能查询到一条,否则报错)
else return doHandleProdRuleDataByProductionPart(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList);
}
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 (只能查询到一条,否则报错)
private StepResult doHandleProdRuleDataByProductionPart(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext,
MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) {
@ -130,14 +129,14 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
//搜集未匹配规则的产出零件
List<String> outPartNoList = productionPartContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList());
//没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
//没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错)
if (CollectionUtils.isEmpty(productionPsInContextList)) return doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, outPartNoList, foreignKey);
//存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据
//存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 (只能查询到一条,否则报错)
else return doHandleProdRuleDataByProductionPartAndProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList, outPartNoList, foreignKey);
}
//没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
//没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错)
private StepResult doHandleProdRuleDataByProductionPartAndEmptyProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext,
MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<String> outPartNoList, Integer foreignKey) {
@ -152,21 +151,20 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
if (null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue;
List<MesProdRuleNosortCfg> filterList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null;
if (CollectionUtils.isEmpty(prodRuleNosortCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]产出零件[%s]进料零件[空]进料零件规则[空]的配置信息", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo()));
if (CollectionUtils.isEmpty(filterList) || filterList.size() > 1) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format(
"请检查非排序产品加工规则信息,根据设备[%s]产出零件[%s]进料零件[空]进料零件规则[空]查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo(), CollectionUtils.isEmpty(filterList) ? MesPcnExtConstWords.ZERO : filterList.size()));
//【非排序线】获取产品加工规则对应的装配件信息
if (prodRuleNosortCfgList.size() == 1) prodRuleContextList.add(prodRuleCfgExtService.getProdRuleContext(
new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleContext(new MesProdRuleContext(
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).
copy(prodRuleNosortCfgList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey())));
if (prodRuleNosortCfgList.size() > 1) this.sendMessage(reqBean, resultBean, String.format(
"显示装配件匹配非排序产品加工规则[%s]条,直接跳过,后续通过装配件规则匹配加工规则,数据源:[%s]!", prodRuleNosortCfgList.size(), JSONObject.toJSONString(productionPartContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
}
return stepResult;
}
//没有【产出零件数据】信息 , 根据进料条件获取匹配加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
//没有【产出零件数据】信息 , 根据进料条件获取匹配加工规则数据(只能查询到一条,否则报错)
private StepResult doHandleProdRuleDataByProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext,
MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPsInContext> productionPsInContextList) {
@ -188,15 +186,13 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
//进料零件条码匹配进料零件规则
else filterList = (List<MesProdRuleNosortCfg>) numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), filterProdRuleNosortCfgList(prodRuleNosortCfgList));
if (CollectionUtils.isEmpty(filterList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]进料零件%s的配置信息",
cellEquipContext.getEquipmentCode(), !StringUtils.isEmpty(productionPsInContext.getPartNo()) ? String.format("号匹配[%s]", productionPsInContext.getPartNo()) : String.format("规则匹配[%s]", productionPsInContext.getProductSn())));
if (CollectionUtils.isEmpty(filterList) || filterList.size() > 1) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format(
"请检查非排序产品加工规则信息,根据设备[%s]进料零件条码[%s]查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentCode(), productionPsInContext.getProductSn(), CollectionUtils.isEmpty(filterList) ? MesPcnExtConstWords.ZERO : filterList.size()));
//【非排序线】获取产品加工规则对应的装配件信息
if (filterList.size() == 1) prodRuleContextList.add(prodRuleCfgExtService.getProdRuleContext(
new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).copy(prodRuleNosortCfgList.get(0)).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey())));
if (filterList.size() > 1) this.sendMessage(reqBean, resultBean, String.format(
"显示装配件匹配非排序产品加工规则[%s]条,直接跳过,后续通过装配件规则匹配加工规则,数据源:[%s]!", filterList.size(), JSONObject.toJSONString(productionPsInContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleContext(new MesProdRuleContext(
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())
.copy(prodRuleNosortCfgList.get(0)).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey())));
}
@ -214,7 +210,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
return prodRuleNosortCfgList;
}
//存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据
//存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 (只能查询到一条,否则报错)
private StepResult doHandleProdRuleDataByProductionPartAndProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext,
List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList, List<String> outPartNoList, Integer foreignKey) {
@ -231,19 +227,18 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
//获取匹配产出零件的所有加工规则
List<MesProdRuleNosortCfg> outPartNoProdRuleList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null;
MesProdRuleNosortCfg filter = null;
String productSn = null;
//判断是否还存在待匹配的主条码信息, 内部循环匹配成功会标记 foreignKey
Optional<MesProductionPsInContext> optional = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst();
if (null == optional || !optional.isPresent()) break;
List<MesProdRuleNosortCfg> innerfilterList = null;
for (MesProductionPsInContext productionPsInContext : productionPsInContextList) {
//foreignKey有值代表已经匹配过产品加工规则
if (null == productionPsInContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPsInContext.getForeignKey())) continue;
List<MesProdRuleNosortCfg> innerfilterList;
//搜集进料零件号匹配的产品加工规则
if (!StringUtils.isEmpty(productionPsInContext.getPartNo())) innerfilterList = filterProdRuleNosortCfgList(outPartNoProdRuleList, productionPsInContext.getPartNo());
//进料零件条码匹配进料零件规则
@ -251,25 +246,26 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
if (CollectionUtils.isEmpty(innerfilterList) || innerfilterList.size() > 1) continue;
filter = innerfilterList.get(0);
//TODO 验证时效性
//if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && !checkTimeEfficientCfg(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), filter.getId(), dataSource, stepResult).isComplete()) return stepResult;
productionPartContext.foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey());
productSn = productionPsInContext.getProductSn();
break;
}
if (null == filter) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]产出零件[%s]匹配任意一个主条码的配置信息", cellEquipContext.getEquipmentCode(), productionPartContext.getPartName()));
if (CollectionUtils.isEmpty(innerfilterList) || innerfilterList.size() > 1) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format(
"请检查非排序产品加工规则信息,根据设备[%s]产出零件[%s]匹配任意一个主条码%s查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo(),
productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).map(MesProductionPsInContext::getProductSn).collect(Collectors.toList()).toString(),
CollectionUtils.isEmpty(innerfilterList) ? MesPcnExtConstWords.ZERO : innerfilterList.size()));
//【非排序线】获取产品加工规则对应的装配件信息
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleContext(
new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).copy(filter).workOrderNo(productionPartContext.getWorkOrderNo()).productSn(productSn)).foreignKey(productionPartContext.getForeignKey()));
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleContext(new MesProdRuleContext(
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).
copy(innerfilterList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).productSn(productSn)).foreignKey(productionPartContext.getForeignKey()));
}

@ -28,6 +28,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@ -233,8 +234,10 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
//封装展示组件MODULE_CONTENT内容
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList, Boolean isFirstMouldNo) {
List<List<StationKvBean>> dataList = new ArrayList<>();
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList,
new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName())));
AtomicReference<Integer> index = new AtomicReference<>(0);
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()),
new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName()), new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", index.updateAndGet(v -> v + 1) + "/" + productionPartContextList.size())));
return dataList;
}

@ -86,13 +86,16 @@ public class MesProductSnSaveStepService extends BaseStepService {
String productResult = productionDispatchContextStepService.getProductResultContext(reqBean);
Map<String, MesPart> partMap = (Map<String, MesPart>) stepResult.getObj();
productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> saveProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, o, partMap, prodShiftContext, productResult));
productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> o.copy(saveProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, o, partMap, prodShiftContext, productResult)));
//保存上下文产出条码数据信息集合
productionDispatchContextStepService.saveProductionPsOutContext(reqBean, productionPsOutContextList);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存零件条码成功!");
}
private void saveProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, Map<String, MesPart> partMap, MesProdShiftContext prodShiftContext, String productResult) {
private MesProduceSn saveProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, Map<String, MesPart> partMap, MesProdShiftContext prodShiftContext, String productResult) {
//根据零件条码ID查询零件条码信息
MesProduceSn produceSn = produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsOutContext.getId());
@ -126,7 +129,7 @@ public class MesProductSnSaveStepService extends BaseStepService {
produceSn.setOutWorkCenterTime(produceSn.getModifyDatetime());
produceSn.setLotNo(produceSn.getModifyDatetime().substring(0, 10));
produceSnRepository.save(produceSn);
return produceSnRepository.save(produceSn);
}

@ -79,7 +79,7 @@ public class MesProductSnScanNosortStepService extends BaseStepService {
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//当前工位使用的设备
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//获取上下文产出零件信息
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
@ -100,10 +100,10 @@ public class MesProductSnScanNosortStepService extends BaseStepService {
Integer scanedQty = calcScanedQty(equipVariableCollectContextList, productionPsInContextList);
//根据产出零件或者腔数拿到需要的扫描数量, 优先使用产出零件数量
Integer needQty = !CollectionUtils.isEmpty(productionPartContextList) ? productionPartContextList.size() : cellEquipmentContext.getCavity();
Integer needQty = !CollectionUtils.isEmpty(productionPartContextList) ? productionPartContextList.size() : cellEquipContext.getCavity();
//验证前期扫描数量是否已超过匹配腔数
checkIsAboveNeedQty(reqBean, resultBean, stepResult, scanedQty, needQty, equipVariableCollectContextList, productionPsInContextList, productionPartContextList, cellEquipmentContext);
checkIsAboveNeedQty(reqBean, resultBean, stepResult, scanedQty, needQty, equipVariableCollectContextList, productionPsInContextList, productionPartContextList, cellEquipContext);
//验证是否支持跳过
Boolean isAllowJump = checkIsAllowJump(productionPsInContextList);
@ -210,14 +210,14 @@ public class MesProductSnScanNosortStepService extends BaseStepService {
//验证前期扫描数量是否已超过匹配腔数
private void checkIsAboveNeedQty(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, Integer scanedQty, Integer needQty,
List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProductionPsInContext> productionPsInContextList, List<MesProductionPartContext> productionPartContextList, MesCellEquipContext cellEquipmentContext) {
List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProductionPsInContext> productionPsInContextList, List<MesProductionPartContext> productionPartContextList, MesCellEquipContext cellEquipContext) {
if (scanedQty.compareTo(needQty) <= 0) return;
String message = String.format("请检查相关数据,上下文中的主条码个数[%s]已满足腔数[%s],可重置工序解决!", scanedQty, needQty);
this.sendMessage(reqBean, resultBean, message +
" --- List<MesEquipVariableCollectContext> --- [" + getJsonMessage(equipVariableCollectContextList) + "]" +
" --- List<MesProductionPsInContext> --- [" + getJsonMessage(productionPsInContextList) + "]" +
" --- List<MesProductionPartContext> --- [" + getJsonMessage(productionPartContextList) + "]" +
" --- MesCellEquipContext --- [" + JSONObject.toJSONString(cellEquipmentContext) + "] ---", MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
" --- MesCellEquipContext --- [" + JSONObject.toJSONString(cellEquipContext) + "] ---", MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), message);
}

@ -27,6 +27,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@ -199,7 +200,10 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
//封装展示组件MODULE_CONTENT内容
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
List<List<StationKvBean>> dataList = new ArrayList<>();
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName())));
AtomicReference<Integer> index = new AtomicReference<>(0);
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName()),
new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", index.updateAndGet(v -> v + 1) + "/" + productionPartContextList.size())));
return dataList;
}

@ -30,6 +30,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@ -158,9 +159,11 @@ public class MesWorkOrderCheckStepService extends BaseStepService {
List<List<StationKvBean>> dataList = new ArrayList<>();
List<MesProductionPartContext> orderList = filterProductionPartContext(productionPartContextList, true);
List<MesProductionPartContext> finishCodeList = filterProductionPartContext(productionPartContextList, false);
AtomicReference<Integer> index = new AtomicReference<>(0);
if (!CollectionUtils.isEmpty(orderList))
orderList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "工单号", o.getWorkOrderNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.QTY, "工单数", String.valueOf(o.getQty().intValue()))));
new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "工单号", o.getWorkOrderNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()),
new StationKvBean(MesPcnExtConstWords.QTY, "工单数", String.valueOf(o.getQty().intValue())), new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", index.updateAndGet(v -> v + 1) + "/" + productionPartContextList.size())));
if (!CollectionUtils.isEmpty(finishCodeList))
StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY_FINISH_CODE, "空腔数", String.valueOf(finishCodeList.size())));
return dataList;

@ -33,6 +33,11 @@ public class MesProductionPsOutContext extends MesProduceSn implements Serializa
return this;
}
public MesProductionPsOutContext copy(MesProduceSn produceSn) {
BeanUtils.copyProperties(produceSn, this);
return this;
}
public MesProductionPsOutContext isCalcCompleteQty(String workOrderNo) {
if (!StringUtils.isEmpty(workOrderNo)) this.isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
return this;

Loading…
Cancel
Save