|
|
|
@ -14,6 +14,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
|
|
|
@ -29,8 +30,10 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -113,6 +116,8 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
|
List<String> partNoList = (prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getOutPartNo()))).map(MesProdRuleContext::getOutPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
|
|
|
|
firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false);
|
|
|
|
|
|
|
|
|
|
//从上下文中取出工位对象
|
|
|
|
|
MesWorkCell workCell = productionProcessContext.getWorkCell();
|
|
|
|
|
//获取上下文加工结果
|
|
|
|
|
String productResult = productionDispatchContextStepService.getProductResultContext(reqBean);
|
|
|
|
|
|
|
|
|
@ -123,7 +128,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
|
//循环生成零件条码,并写入产出零件
|
|
|
|
|
List<MesProductionPsOutContext> productionPsOutContextList = new ArrayList<>();
|
|
|
|
|
prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getOutPartNo()))).forEach(o -> {
|
|
|
|
|
MesProductionPsOutContext productionPsOutContext = insertProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, o, ppMap, psMap, partMap, prodShiftContext, productResult);
|
|
|
|
|
MesProductionPsOutContext productionPsOutContext = insertProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, workCell, o, ppMap, psMap, partMap, prodShiftContext, productResult);
|
|
|
|
|
if (null != productionPsOutContext) productionPsOutContextList.add(productionPsOutContext);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
@ -135,7 +140,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//生成零件条码
|
|
|
|
|
private MesProductionPsOutContext insertProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProdRuleContext prodRuleContext,
|
|
|
|
|
private MesProductionPsOutContext insertProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCell workCell, MesProdRuleContext prodRuleContext,
|
|
|
|
|
Map<Integer, MesProductionPartContext> ppMap, Map<Integer, MesProductionPsInContext> psMap, Map<String, MesPart> partMap, MesProdShiftContext prodShiftContext, String productResult) {
|
|
|
|
|
|
|
|
|
|
//产出零件数据信息
|
|
|
|
@ -147,6 +152,8 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
|
|
|
|
|
|
//加工规则中进料零件与产出零件是否一致
|
|
|
|
|
Boolean isSamePart = isSamePart(productionPsInContext, productionPartContext);
|
|
|
|
|
//工位是否不累计工单完成数
|
|
|
|
|
Boolean isCellNoCalcQty = isCellNoCalcQty(workCell.getNoCalcOrderQty());
|
|
|
|
|
|
|
|
|
|
MesProduceSn produceSn;
|
|
|
|
|
//进出一致, 不累计工单完成数量 在显示装配件工步中已经验证了 进出一致 进出存在工单则必须一致
|
|
|
|
@ -205,7 +212,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
|
produceSn = produceSnExtService.insert(produceSn);
|
|
|
|
|
} else produceSnExtService.updateNoSync(produceSn);
|
|
|
|
|
|
|
|
|
|
return new MesProductionPsOutContext().copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(!StringUtils.isEmpty(produceSn.getWorkOrderNo()) && !isSamePart);
|
|
|
|
|
return new MesProductionPsOutContext().copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(isCalcCompleteQty(isCellNoCalcQty, produceSn.getWorkOrderNo(), isSamePart, productionPartContext, productionPsInContext));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -230,6 +237,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
|
return part.getProductMatchRule();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//加工规则中进料零件与产出零件是否一致
|
|
|
|
|
private Boolean isSamePart(MesProductionPsInContext productionPsInContext, MesProductionPartContext productionPartContext) {
|
|
|
|
|
if (null == productionPsInContext) return false;
|
|
|
|
|
if (StringUtils.isEmpty(productionPsInContext.getPartNo())) return false;
|
|
|
|
@ -238,4 +246,26 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//工位是否不累计工单完成数
|
|
|
|
|
private Boolean isCellNoCalcQty(Integer noCalcOrderQty) {
|
|
|
|
|
return (!StringUtils.isEmpty(noCalcOrderQty) && noCalcOrderQty.compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) ? true : false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//判断是否累计工单完成数
|
|
|
|
|
private Boolean isCalcCompleteQty(Boolean isCellNoCalcQty, String workOrderNo, Boolean isSamePart, MesProductionPartContext productionPartContext, MesProductionPsInContext productionPsInContext) {
|
|
|
|
|
if (isCellNoCalcQty) return false;
|
|
|
|
|
if (StringUtils.isEmpty(workOrderNo)) return false;
|
|
|
|
|
if (checkIsSameWorkOrder(isSamePart, productionPartContext, productionPsInContext)) return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//进出一致的情况下判断进出是否都存在工单
|
|
|
|
|
private Boolean checkIsSameWorkOrder(Boolean isSamePart, MesProductionPartContext productionPartContext, MesProductionPsInContext productionPsInContext) {
|
|
|
|
|
if (!isSamePart) return false;
|
|
|
|
|
//进出零件一致则无需验证进出的对象为空
|
|
|
|
|
if (StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) || StringUtils.isEmpty(productionPsInContext.getWorkOrderNo())) return false;
|
|
|
|
|
//无需验证进出的工单是否一致,在匹配加工规则的时候已经验证了必须一致
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|