弹框输入工单数量

mes-uat-changshu0609-temp-wj-250616-xisu
王杰 4 weeks ago
parent 619a3d72b5
commit 5ce006087f

@ -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<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//用弹框输入的工单数量 虚拟产出零件信息
List<MesProductionPsOutContext> 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;
}
}

@ -114,14 +114,14 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
if (null == entry) continue;
//获取对应的加工规则
List<MesProductionPsOutContext> produceSnContextList = proMap.get(entry.getKey());
List<MesProductionPsOutContext> 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;

@ -45,7 +45,17 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
//验证加工单完成数量, 验证的前提条件: 每腔均已匹配到加工规则;存在工单;
public List<MesWorkOrderCompleteQtyContext> dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, StationResultBean resultBean,
StepResult stepResult, MesProductionProcessContext productionProcessContext,
List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) {
List<MesProductionPartContext> productionPartContextList,
List<MesProductionPsInContext> productionPsInContextList) {
return dispatchWorkOrderCompleteQtyContext(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, productionPsInContextList, null);
}
//验证加工单完成数量, 验证的前提条件: 每腔均已匹配到加工规则;存在工单;
public List<MesWorkOrderCompleteQtyContext> dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, StationResultBean resultBean,
StepResult stepResult, MesProductionProcessContext productionProcessContext,
List<MesProductionPartContext> productionPartContextList,
List<MesProductionPsInContext> productionPsInContextList,
List<MesProductionPsOutContext> productionPsOutContextList) {
//是否存在产成零件信息
if (!stepResult.isCompleted() || CollectionUtils.isEmpty(productionPartContextList)) return null;
@ -63,6 +73,9 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
//根据foreignkey分组进料零件条码
Map<Integer, MesProductionPsInContext> productionPsInContextMap = CollectionUtils.isEmpty(productionPsInContextList) ? null :
productionPsInContextList.stream().filter(o -> !StringUtils.isEmpty(o.getForeignKey())).collect(Collectors.toMap(MesProductionPsInContext::getForeignKey, o -> o));
//根据foreignkey分组产出零件条码
Map<Integer, MesProductionPsOutContext> 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<MesProductionPartContext> productionPartContextList, Map<Integer, MesProductionPsInContext> productionPsInContextMap) {
List<MesProductionPartContext> productionPartContextList,
Map<Integer, MesProductionPsInContext> productionPsInContextMap,
Map<Integer, MesProductionPsOutContext> 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<Integer, MesProductionPsOutContext> 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) {

Loading…
Cancel
Save