|
|
@ -20,6 +20,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
@ -41,24 +42,23 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private IMesProductionCustomContextStepService productionCustomContextStepService;
|
|
|
|
private IMesProductionCustomContextStepService productionCustomContextStepService;
|
|
|
|
|
|
|
|
|
|
|
|
//flag=1【验证】
|
|
|
|
|
|
|
|
//验证加工单完成数量, 验证的前提条件: 每腔均已匹配到加工规则;存在工单;
|
|
|
|
//验证加工单完成数量, 验证的前提条件: 每腔均已匹配到加工规则;存在工单;
|
|
|
|
public void dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, StationResultBean resultBean,
|
|
|
|
public List<MesWorkOrderCompleteQtyContext> dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, StationResultBean resultBean,
|
|
|
|
StepResult stepResult, MesProductionProcessContext productionProcessContext,
|
|
|
|
StepResult stepResult, MesProductionProcessContext productionProcessContext,
|
|
|
|
List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) {
|
|
|
|
List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) {
|
|
|
|
//是否存在产成零件信息
|
|
|
|
//是否存在产成零件信息
|
|
|
|
if (!stepResult.isCompleted() || CollectionUtils.isEmpty(productionPartContextList)) return;
|
|
|
|
if (!stepResult.isCompleted() || CollectionUtils.isEmpty(productionPartContextList)) return null;
|
|
|
|
|
|
|
|
|
|
|
|
//根据产出零件或者腔数拿到需要的加工规则数量, 优先使用产出零件数量
|
|
|
|
//根据产出零件或者腔数拿到需要的加工规则数量, 优先使用产出零件数量
|
|
|
|
Integer needQty = !CollectionUtils.isEmpty(productionPartContextList) ? productionPartContextList.size() : productionProcessContext.getCurCellEquip().getCavity();
|
|
|
|
Integer needQty = !CollectionUtils.isEmpty(productionPartContextList) ? productionPartContextList.size() : productionProcessContext.getCurCellEquip().getCavity();
|
|
|
|
//验证是否满足腔数
|
|
|
|
//验证是否满足腔数
|
|
|
|
if (!CollectionUtils.isEmpty(productionPsInContextList) && productionPsInContextList.size() < needQty) return;
|
|
|
|
if (!CollectionUtils.isEmpty(productionPsInContextList) && productionPsInContextList.size() < needQty) return null;
|
|
|
|
|
|
|
|
|
|
|
|
//对MesProductionPartContext中的工单号经行分组,每个工单可能对应多条数据, 筛选掉foreignkey为空的数据
|
|
|
|
//对MesProductionPartContext中的工单号经行分组,每个工单可能对应多条数据, 筛选掉foreignkey为空的数据
|
|
|
|
Map<String, List<MesProductionPartContext>> productionPartContextMap = productionPartContextList.stream().filter(o ->
|
|
|
|
Map<String, List<MesProductionPartContext>> productionPartContextMap = productionPartContextList.stream().filter(o ->
|
|
|
|
(!StringUtils.isEmpty(o.getWorkOrderNo()) && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.groupingBy(MesProductionPartContext::getWorkOrderNo));
|
|
|
|
(!StringUtils.isEmpty(o.getWorkOrderNo()) && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.groupingBy(MesProductionPartContext::getWorkOrderNo));
|
|
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(productionPartContextMap)) return;
|
|
|
|
if (CollectionUtils.isEmpty(productionPartContextMap)) return null;
|
|
|
|
|
|
|
|
|
|
|
|
//根据foreignkey分组进料零件条码
|
|
|
|
//根据foreignkey分组进料零件条码
|
|
|
|
Map<Integer, MesProductionPsInContext> productionPsInContextMap = CollectionUtils.isEmpty(productionPsInContextList) ? null :
|
|
|
|
Map<Integer, MesProductionPsInContext> productionPsInContextMap = CollectionUtils.isEmpty(productionPsInContextList) ? null :
|
|
|
@ -71,20 +71,32 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
|
|
|
|
Boolean isCellNoCalcQty = isCellNoCalcQty(workCell.getNoCalcOrderQty());
|
|
|
|
Boolean isCellNoCalcQty = isCellNoCalcQty(workCell.getNoCalcOrderQty());
|
|
|
|
|
|
|
|
|
|
|
|
//遍历验证加工单完成数量
|
|
|
|
//遍历验证加工单完成数量
|
|
|
|
|
|
|
|
List<MesWorkOrderCompleteQtyContext> workOrderCompleteQtyContextList = null;
|
|
|
|
for (Map.Entry<String, List<MesProductionPartContext>> entry : productionPartContextMap.entrySet()) {
|
|
|
|
for (Map.Entry<String, List<MesProductionPartContext>> entry : productionPartContextMap.entrySet()) {
|
|
|
|
if (null == entry) continue;
|
|
|
|
if (null == entry) continue;
|
|
|
|
|
|
|
|
|
|
|
|
//验证加工单完成数量
|
|
|
|
//验证加工单完成数量
|
|
|
|
dispatchWorkOrderCompleteQty(reqBean, resultBean, stepResult, workCenter, isCellNoCalcQty, entry.getValue(), productionPsInContextMap);
|
|
|
|
MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = dispatchWorkOrderCompleteQty(reqBean, resultBean, stepResult, workCenter, isCellNoCalcQty, entry.getValue(), productionPsInContextMap);
|
|
|
|
|
|
|
|
|
|
|
|
//验证失败直接退出
|
|
|
|
//验证失败直接退出
|
|
|
|
if (!stepResult.isCompleted()) break;
|
|
|
|
if (!stepResult.isCompleted()) break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (null != workOrderCompleteQtyContext) {
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderCompleteQtyContextList)) workOrderCompleteQtyContextList = new ArrayList<>();
|
|
|
|
|
|
|
|
workOrderCompleteQtyContextList.add(workOrderCompleteQtyContext);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//验证失败标记删除标志
|
|
|
|
//验证失败标记删除标志
|
|
|
|
if (!stepResult.isCompleted()) {
|
|
|
|
if (!stepResult.isCompleted()) {
|
|
|
|
productionPartContextList.forEach(o -> o.busiCheckToDelete());
|
|
|
|
productionPartContextList.forEach(o -> o.busiCheckToDelete());
|
|
|
|
if (!CollectionUtils.isEmpty(productionPsInContextList)) productionPsInContextList.forEach(o -> o.busiCheckToDelete());
|
|
|
|
if (!CollectionUtils.isEmpty(productionPsInContextList)) productionPsInContextList.forEach(o -> o.busiCheckToDelete());
|
|
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(workOrderCompleteQtyContextList)) workOrderCompleteQtyContextList.clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return workOrderCompleteQtyContextList;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//验证加工单完成数量
|
|
|
|
//验证加工单完成数量
|
|
|
@ -101,14 +113,23 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
|
|
|
|
if (isCalcCompleteQty) calcCompleteQty = MathOperation.add(calcCompleteQty, new Double(MesPcnExtConstWords.ONE));
|
|
|
|
if (isCalcCompleteQty) calcCompleteQty = MathOperation.add(calcCompleteQty, new Double(MesPcnExtConstWords.ONE));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//当前工单无须计算工单完成数
|
|
|
|
//当前工单无须计算工单完成数
|
|
|
|
if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) return;
|
|
|
|
if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) return null;
|
|
|
|
|
|
|
|
|
|
|
|
//处理工位维度的工单完成数上下文
|
|
|
|
//处理工位维度的工单完成数上下文;
|
|
|
|
|
|
|
|
//flag查询=1;保存=2
|
|
|
|
|
|
|
|
//【isCellNoCalcQty=true代表工位维度的统计,最终不一定会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计】
|
|
|
|
MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = productionCustomContextStepService.dispatchWorkOrderCompleteQtyCellContext(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), isCellNoCalcQty, reqBean, productionPartContextList.get(0), calcCompleteQty);
|
|
|
|
MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = productionCustomContextStepService.dispatchWorkOrderCompleteQtyCellContext(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), isCellNoCalcQty, reqBean, productionPartContextList.get(0), calcCompleteQty);
|
|
|
|
|
|
|
|
|
|
|
|
//验证工单完成数
|
|
|
|
//验证工单完成数
|
|
|
|
checkWorkOrderCompleteQty(reqBean, resultBean, stepResult, workCenter, workOrderCompleteQtyContext, calcCompleteQty);
|
|
|
|
checkWorkOrderCompleteQty(reqBean, resultBean, stepResult, workCenter, workOrderCompleteQtyContext, calcCompleteQty);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!stepResult.isCompleted()) return null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//标记累加数量
|
|
|
|
|
|
|
|
workOrderCompleteQtyContext.calcCompleteQty(calcCompleteQty, isCellNoCalcQty);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return workOrderCompleteQtyContext;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//工位是否不累计工单完成数
|
|
|
|
//工位是否不累计工单完成数
|
|
|
|