diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogInputOrderQtyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogInputOrderQtyService.java new file mode 100644 index 0000000..0f2f46d --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogInputOrderQtyService.java @@ -0,0 +1,84 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; + +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.step.method.MesWorkOrderCheckCompleteQtyStepService; +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.MesProductionPsOutContext; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 弹框输入工单数量接口实现【输入工单数量弹框】 + **/ +@Service +public class MesFunctionDialogInputOrderQtyService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private MesWorkOrderCheckCompleteQtyStepService workOrderCheckCompleteQtyStepService; + + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Override + public Boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + + this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(buttonDynamicModel.getFunctionValue()), + String.format("生产线[%s]工位[%s]工单数量弹框提交成功,请等待验证!提交信息[%s]", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getFunctionValue()), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); + + //获取上下文产出零件信息 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + + //用弹框输入的工单数量 虚拟产出零件信息 + List productionPsOutContextList = new ArrayList<>(); + productionPartContextList.forEach(o -> { + MesProductionPsOutContext productionPsOutContext = new MesProductionPsOutContext().foreignKey(o.getForeignKey()); + productionPsOutContext.setQty(new Double(buttonDynamicModel.getFunctionValue())); + productionPsOutContextList.add(productionPsOutContext); + }); + + StepResult stepResult = StepResult.getSuccessComplete(); + //验证加工单完成数量 + workOrderCheckCompleteQtyStepService.dispatchWorkOrderCompleteQtyContext(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, null, productionPsOutContextList); + + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); + reqBean.setBusiType(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_DO_SCAN.getCode()); + + if (!stepResult.isCompleted()) { + reqBean.setTriggerAutoFsm(true); + } else { + reqBean.setButtonCode(buttonDynamicModel.getButtonCode()); + reqBean.setStepDialogStatus(true); + } + + shippingDispatchService.sendScanQueueNextExec(reqBean); + + return true; + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepService.java index 82cb66f..209a070 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepService.java @@ -114,14 +114,14 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService { if (null == entry) continue; //获取对应的加工规则 - List produceSnContextList = proMap.get(entry.getKey()); + List productionPsOutContextList2Order = proMap.get(entry.getKey()); //生产数量 Double calcCompleteQty = new Double(MesPcnExtConstWords.ZERO); //遍历产出物料 - for (MesProductionPsOutContext productionPsOutContext : produceSnContextList) { + for (MesProductionPsOutContext productionPsOutContext : productionPsOutContextList2Order) { if (null == productionPsOutContext) continue; //产出零件需要计算工单完成数量 - if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty = MathOperation.add(calcCompleteQty, new Double(MesPcnExtConstWords.ONE)); + if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty = MathOperation.add(calcCompleteQty, productionPsOutContext.getQty()); } if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) continue; @@ -192,7 +192,7 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService { for (MesProductionPsOutContext productionPsOutContext : entry.getValue()) { if (null == productionPsOutContext) continue; //产出零件需要计算工单完成数量 - if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty = MathOperation.add(calcCompleteQty, new Double(MesPcnExtConstWords.ONE)); + if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty = MathOperation.add(calcCompleteQty, productionPsOutContext.getQty()); } if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) continue; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesWorkOrderCheckCompleteQtyStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesWorkOrderCheckCompleteQtyStepService.java index 31ae2c8..19de831 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesWorkOrderCheckCompleteQtyStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesWorkOrderCheckCompleteQtyStepService.java @@ -45,7 +45,17 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { //验证加工单完成数量, 验证的前提条件: 每腔均已匹配到加工规则;存在工单; public List dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, - List productionPartContextList, List productionPsInContextList) { + List productionPartContextList, + List productionPsInContextList) { + return dispatchWorkOrderCompleteQtyContext(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, productionPsInContextList, null); + } + + //验证加工单完成数量, 验证的前提条件: 每腔均已匹配到加工规则;存在工单; + public List dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, StationResultBean resultBean, + StepResult stepResult, MesProductionProcessContext productionProcessContext, + List productionPartContextList, + List productionPsInContextList, + List productionPsOutContextList) { //是否存在产成零件信息 if (!stepResult.isCompleted() || CollectionUtils.isEmpty(productionPartContextList)) return null; @@ -63,6 +73,9 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { //根据foreignkey分组进料零件条码 Map productionPsInContextMap = CollectionUtils.isEmpty(productionPsInContextList) ? null : productionPsInContextList.stream().filter(o -> !StringUtils.isEmpty(o.getForeignKey())).collect(Collectors.toMap(MesProductionPsInContext::getForeignKey, o -> o)); + //根据foreignkey分组产出零件条码 + Map productionPsOutContextMap = CollectionUtils.isEmpty(productionPsOutContextList) ? null : + productionPsOutContextList.stream().filter(o -> !StringUtils.isEmpty(o.getForeignKey())).collect(Collectors.toMap(MesProductionPsOutContext::getForeignKey, o -> o)); //生产线与工位信息 MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); @@ -76,7 +89,8 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { if (null == entry) continue; //验证加工单完成数量 - MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = dispatchWorkOrderCompleteQty(reqBean, resultBean, stepResult, workCenter, noCalcOrderQty, entry.getValue(), productionPsInContextMap); + MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = dispatchWorkOrderCompleteQty( + reqBean, resultBean, stepResult, workCenter, noCalcOrderQty, entry.getValue(), productionPsInContextMap, productionPsOutContextMap); //验证失败直接退出 if (!stepResult.isCompleted()) break; @@ -102,15 +116,19 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { //验证加工单完成数量 private MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQty(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, Boolean noCalcOrderQty, - List productionPartContextList, Map productionPsInContextMap) { + List productionPartContextList, + Map productionPsInContextMap, + Map productionPsOutContextMap) { + Double calcCompleteQty = new Double(MesPcnExtConstWords.ZERO); for (MesProductionPartContext productionPartContext : productionPartContextList) { MesProductionPsInContext productionPsInContext = getProductionPsInContext(productionPsInContextMap, productionPartContext.getForeignKey()); + MesProductionPsOutContext productionPsOutContext = getProductionPsOutContext(productionPsOutContextMap, productionPartContext.getForeignKey()); //验证进料零件与产出零件是否一致 Boolean isSamePart = isSamePart(productionPsInContext, productionPartContext, null); //验证是否计数 Boolean isCalcCompleteQty = isCalcCompleteQty(isSamePart, productionPsInContext, productionPartContext); - if (isCalcCompleteQty) calcCompleteQty = MathOperation.add(calcCompleteQty, new Double(MesPcnExtConstWords.ONE)); + if (isCalcCompleteQty) calcCompleteQty = MathOperation.add(calcCompleteQty, null != productionPsOutContext ? productionPsOutContext.getQty() : new Double(MesPcnExtConstWords.ONE)); } //当前工单无须计算工单完成数 if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) return null; @@ -166,6 +184,12 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { return productionPsInContextMap.get(foreignKey); } + //根据数据关联键获取产出零件信息 + private MesProductionPsOutContext getProductionPsOutContext(Map productionPsOutContextMap, Integer foreignKey) { + if (CollectionUtils.isEmpty(productionPsOutContextMap) || StringUtils.isEmpty(foreignKey)) return null; + return productionPsOutContextMap.get(foreignKey); + } + //验证工单完成数 private void checkWorkOrderCompleteQty(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext, Double calcCompleteQty, Boolean noCalcOrderQty) {