|
|
|
@ -169,18 +169,18 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
|
|
|
|
|
String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON;
|
|
|
|
|
|
|
|
|
|
//判断主条码的当前工艺是否包含在产品工艺路线中
|
|
|
|
|
Optional<MesCraftRouteDetail> optionalPs = StringUtils.isEmpty(productionPsInContext.getCraftCode()) ? null : craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionPsInContext.getCraftCode()))).findFirst();
|
|
|
|
|
Optional<MesCraftRouteDetail> optionalPs = StringUtils.isEmpty(productionPsInContext.getCraftCode()) ? null : craftRouteDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()) && o.getCraftCode().toUpperCase().equals(productionPsInContext.getCraftCode().toUpperCase()))).findFirst();
|
|
|
|
|
if (!StringUtils.isEmpty(productionPsInContext.getCraftCode()) && (null == optionalPs || !optionalPs.isPresent()))
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("%s%s[%s]对应的工艺代码[%s]不匹配零件[%s]对应的产品工艺路线[%s]",
|
|
|
|
|
message, suffix, productionPsInContext.getProductSn(), productionPsInContext.getCraftCode(), productionPsInContext.getPartNo(), craftRouteDetailList.get(0).getCraftRouteCode())).isCompleted();
|
|
|
|
|
|
|
|
|
|
//验证工艺对应工序最多经过1个: 当前主条码的工艺字段有值, 对应的工艺路线明细信息设置了【true】, 当前工位的工艺与主条码的当前工艺相同, 当前工位的工序与主条码的当前工序不相同
|
|
|
|
|
if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getAtMostProcess().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode()) && !reqBean.getProcessCode().equals(productionPsInContext.getProcessCode()))
|
|
|
|
|
if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getAtMostProcess().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionProcessContext.getCraftCode().toUpperCase().equals(productionPsInContext.getCraftCode().toUpperCase()) && !reqBean.getProcessCode().toUpperCase().equals(productionPsInContext.getProcessCode().toUpperCase()))
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("%s%s[%s]产品工艺路线[%s]相同工艺对应工序最多经过1个,上道工艺[%s]当前工位工艺[%s]",
|
|
|
|
|
message, suffix, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftRouteCode(), productionPsInContext.getCraftCode(), productionProcessContext.getCraftCode())).isCompleted();
|
|
|
|
|
|
|
|
|
|
//判断条码是否在当前已完成的工序工位上重做
|
|
|
|
|
Boolean isPsProcessRepeat = null != optionalPs && optionalPs.isPresent() && reqBean.getProcessCode().equals(productionPsInContext.getProcessCode());
|
|
|
|
|
Boolean isPsProcessRepeat = null != optionalPs && optionalPs.isPresent() && reqBean.getProcessCode().toUpperCase().equals(productionPsInContext.getProcessCode().toUpperCase());
|
|
|
|
|
List<MesProductionRecord> productionRecordList = null;
|
|
|
|
|
//验证已完成工序最大重复次数: 如果当前工位的工序与主条码的当前工序一致的情况下, 根据条码+物料+工序+工艺查询加工记录, 判断加工记录条数
|
|
|
|
|
if (isPsProcessRepeat) {
|
|
|
|
@ -188,7 +188,10 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
|
|
|
|
|
productionRecordList = productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), productionPsInContext.getProductSn());
|
|
|
|
|
//条码+物料+工序+工艺搜集加工记录
|
|
|
|
|
List<MesProductionRecord> filterList = CollectionUtils.isEmpty(productionRecordList) ? null :
|
|
|
|
|
productionRecordList.stream().filter(o -> (null != o && o.getPartNo().equals(productionPsInContext.getPartNo()) && o.getProcessCode().equals(reqBean.getProcessCode()) && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).collect(Collectors.toList());
|
|
|
|
|
productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()) && !StringUtils.isEmpty(o.getProcessCode()) && !StringUtils.isEmpty(o.getCraftCode())
|
|
|
|
|
&& o.getPartNo().toUpperCase().equals(productionPsInContext.getPartNo().toUpperCase())
|
|
|
|
|
&& o.getProcessCode().toUpperCase().equals(reqBean.getProcessCode().toUpperCase())
|
|
|
|
|
&& o.getCraftCode().toUpperCase().equals(productionProcessContext.getCraftCode().toUpperCase()))).collect(Collectors.toList());
|
|
|
|
|
if (!CollectionUtils.isEmpty(filterList) && filterList.size() >=
|
|
|
|
|
((!StringUtils.isEmpty(optionalPs.get().getRepeatTimes()) && optionalPs.get().getRepeatTimes().compareTo(MesPcnExtConstWords.ZERO) > 0) ? optionalPs.get().getRepeatTimes() : MesPcnExtConstWords.ONE))
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("%s%s[%s]当前工序[%s]产品工艺路线[%s]已完成工序最大重复次数[%s]",
|
|
|
|
@ -196,7 +199,7 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//判断当前工位的工序对应的工艺是否包含在产品工艺路线中
|
|
|
|
|
Optional<MesCraftRouteDetail> optionalCell = craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).findFirst();
|
|
|
|
|
Optional<MesCraftRouteDetail> optionalCell = craftRouteDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()) && o.getCraftCode().toUpperCase().equals(productionProcessContext.getCraftCode().toUpperCase()))).findFirst();
|
|
|
|
|
//根据当前工位对应的工艺 获取 所有前道工艺, 如果当前工位的工序对应工艺不在工艺路线明细内, 则默认所有明细均为所有前道工艺, 否则搜集当前工位工序对应工艺前面的所有前道工艺
|
|
|
|
|
List<MesCraftRouteDetail> beforeCellCraftList;
|
|
|
|
|
if (null == optionalCell || !optionalCell.isPresent()) beforeCellCraftList = craftRouteDetailList;
|
|
|
|
@ -228,7 +231,7 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
|
|
|
|
|
//当主条码存在已做工序 且 与当前工位的工序不一致时, 判断当前工位的工序是否已经存在加工记录
|
|
|
|
|
if (!CollectionUtils.isEmpty(productionRecordList)
|
|
|
|
|
&& !StringUtils.isEmpty(productionPsInContext.getProcessCode())
|
|
|
|
|
&& !reqBean.getProcessCode().equals(productionPsInContext.getProcessCode())
|
|
|
|
|
&& !reqBean.getProcessCode().toUpperCase().equals(productionPsInContext.getProcessCode().toUpperCase())
|
|
|
|
|
&& isExistProductionRecord(productionRecordMap2Process(productionRecordList), reqBean.getProcessCode())) {
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("%s%s[%s]已经过当前工序[%s]", message, suffix, productionPsInContext.getProductSn(), reqBean.getProcessCode())).isCompleted();
|
|
|
|
|
}
|
|
|
|
@ -238,15 +241,15 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, List<MesProductionRecord>> productionRecordMap2Craft(List<MesProductionRecord> productionRecordList) {
|
|
|
|
|
return CollectionUtils.isEmpty(productionRecordList) ? null : productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()))).collect(Collectors.groupingBy(MesProductionRecord::getCraftCode));
|
|
|
|
|
return CollectionUtils.isEmpty(productionRecordList) ? null : productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()))).collect(Collectors.groupingBy(o -> o.getCraftCode().toUpperCase()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, List<MesProductionRecord>> productionRecordMap2Process(List<MesProductionRecord> productionRecordList) {
|
|
|
|
|
return CollectionUtils.isEmpty(productionRecordList) ? null : productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getProcessCode()))).collect(Collectors.groupingBy(MesProductionRecord::getProcessCode));
|
|
|
|
|
return CollectionUtils.isEmpty(productionRecordList) ? null : productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getProcessCode()))).collect(Collectors.groupingBy(o -> o.getProcessCode().toUpperCase()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Boolean isExistProductionRecord(Map<String, List<MesProductionRecord>> prMapByCraft, String craftCode) {
|
|
|
|
|
return (CollectionUtils.isEmpty(prMapByCraft) || !prMapByCraft.containsKey(craftCode)) ? false : true;
|
|
|
|
|
private Boolean isExistProductionRecord(Map<String, List<MesProductionRecord>> prMapByCraft, String code) {
|
|
|
|
|
return (CollectionUtils.isEmpty(prMapByCraft) || !prMapByCraft.containsKey(code.toUpperCase())) ? false : true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|