|
|
|
@ -53,9 +53,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesMediaFileCfgService mediaFileCfgService;
|
|
|
|
|
|
|
|
|
|
//【排序线】获取生产工单装配件绑定记录 -同时- 关联不可用规则
|
|
|
|
|
//【排序线】获取生产工单装配件绑定记录 -同时- 关联不可用规则 ; 判断是否剔除平行工位
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesProductionAssemblySortContext> getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap) {
|
|
|
|
|
public List<MesProductionAssemblySortContext> getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Boolean isFilterParallel) {
|
|
|
|
|
|
|
|
|
|
if (null == prodRuleContext) return null;
|
|
|
|
|
|
|
|
|
@ -67,6 +67,12 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null;
|
|
|
|
|
|
|
|
|
|
//平行工位 获取当前工位的第一个装配件的工艺顺序号
|
|
|
|
|
Integer processSeq = isFilterParallel ? getProcessSeq(workOrderAssemblyList, prodRuleContext.getWorkCellCode()) : null;
|
|
|
|
|
if (!StringUtils.isEmpty(processSeq)) {
|
|
|
|
|
prodRuleContext.setParallelInfo(String.format("{%s:%s}", MesPcnExtConstWords.PROCESS_SEQ, processSeq));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 搜集待装配或者解绑的数据
|
|
|
|
|
List<MesWorkOrderAssembly> unBindList = workOrderAssemblyList.stream().filter(o -> (null != o &&
|
|
|
|
|
(o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0 ||
|
|
|
|
@ -88,7 +94,8 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
|
|
|
|
|
|
|
|
|
|
//【排序线】获取生产工单装配件绑定记录 [前道所有装配件,无爆炸图与音频文件逻辑] -同时- 关联不可用规则 ; 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map<String, MesWorkCell> workCellMap, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Boolean isFilterParallel, Boolean isFilterAfterCraft) {
|
|
|
|
|
public List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map<String, MesWorkCell> workCellMap,
|
|
|
|
|
Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Boolean isFilterParallel, Boolean isFilterAfterCraft) {
|
|
|
|
|
|
|
|
|
|
if (null == prodRuleContext) return null;
|
|
|
|
|
|
|
|
|
@ -147,35 +154,85 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//【排序线】获取生产工单装配件清单[前道所有装配件] 判断是否剔除平行工位 ; 判断是否过滤后道
|
|
|
|
|
//【排序线】获取生产工单装配件清单[前道所有装配件] 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesWorkOrderAssembly> getWorkOrderAssemblyListPreCraft(MesProdRuleContext prodRuleContext, Boolean isFilterParallel, Boolean isFilterAfterCraft) {
|
|
|
|
|
|
|
|
|
|
//【排序线】获取生产工单装配件清单
|
|
|
|
|
List<MesWorkOrderAssembly> workOrderAssemblyList = getWorkOrderAssemblyList(prodRuleContext, true);
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return workOrderAssemblyList;
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderAssemblyList) || (!isFilterParallel && !isFilterAfterCraft)) return workOrderAssemblyList;
|
|
|
|
|
|
|
|
|
|
//获取当前工位的第一个装配件的工艺顺序号
|
|
|
|
|
Optional<MesWorkOrderAssembly> optional = workOrderAssemblyList.stream().filter(o -> (null != o && prodRuleContext.getWorkCellCode().equals(o.getWorkCellCode()))).findFirst();
|
|
|
|
|
if ((null == optional || !optional.isPresent()) || StringUtils.isEmpty(optional.get().getProcessSeq())) return workOrderAssemblyList;
|
|
|
|
|
Integer processSeq = isFilterAfterCraft ? getProcessSeq(workOrderAssemblyList, prodRuleContext.getWorkCellCode()) : null;
|
|
|
|
|
|
|
|
|
|
//平行工位, 需要剔除相同工艺顺序号的工位的装配件
|
|
|
|
|
//平行工位
|
|
|
|
|
if (isFilterParallel) {
|
|
|
|
|
workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> (null != o && (StringUtils.isEmpty(o.getProcessSeq()) ||
|
|
|
|
|
o.getProcessSeq().compareTo(optional.get().getProcessSeq()) != 0 || o.getWorkCellCode().equals(prodRuleContext.getWorkCellCode())))).collect(Collectors.toList());
|
|
|
|
|
//返回涉及到的平行工位代码集合
|
|
|
|
|
List<String> parallelCellCodeList = checkIsExistParallelCellCode(workOrderAssemblyList, prodRuleContext.getWorkCellCode(), processSeq);
|
|
|
|
|
if (!CollectionUtils.isEmpty(parallelCellCodeList)) {
|
|
|
|
|
prodRuleContext.setParallelInfo(String.format("{%s:%s}", MesPcnExtConstWords.WORK_CELL_CODE, JSONObject.toJSONString(parallelCellCodeList)));
|
|
|
|
|
//剔除平行工位的装配件
|
|
|
|
|
workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> (null != o && (StringUtils.isEmpty(o.getProcessSeq())
|
|
|
|
|
|| StringUtils.isEmpty(o.getWorkCellCode()) || !parallelCellCodeList.contains(o.getWorkCellCode())))).collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return workOrderAssemblyList;
|
|
|
|
|
|
|
|
|
|
//根据工序顺序号过滤后道
|
|
|
|
|
if (isFilterAfterCraft) {
|
|
|
|
|
if (isFilterAfterCraft && !StringUtils.isEmpty(processSeq)) {
|
|
|
|
|
workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> (null != o &&
|
|
|
|
|
(StringUtils.isEmpty(o.getProcessSeq()) || o.getProcessSeq().compareTo(optional.get().getProcessSeq()) <= 0))).collect(Collectors.toList());
|
|
|
|
|
(StringUtils.isEmpty(o.getProcessSeq()) || o.getProcessSeq().compareTo(processSeq) <= 0))).collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return workOrderAssemblyList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取当前工位的第一个装配件的工艺顺序号
|
|
|
|
|
private Integer getProcessSeq(List<MesWorkOrderAssembly> workOrderAssemblyList, String workCellCode) {
|
|
|
|
|
Optional<MesWorkOrderAssembly> optional = workOrderAssemblyList.stream().filter(o -> (null != o && workCellCode.equals(o.getWorkCellCode()) && !StringUtils.isEmpty(o.getProcessSeq()))).findFirst();
|
|
|
|
|
return (null != optional && optional.isPresent()) ? optional.get().getProcessSeq() : null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//返回涉及到的平行工位代码集合
|
|
|
|
|
private List<String> checkIsExistParallelCellCode(List<MesWorkOrderAssembly> workOrderAssemblyList, String workCellCode, Integer processSeq) {
|
|
|
|
|
//根据工艺顺序号分组
|
|
|
|
|
Map<String, List<MesWorkOrderAssembly>> processSeqMap = CollectionUtils.isEmpty(workOrderAssemblyList) ? null :
|
|
|
|
|
workOrderAssemblyList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkCellCode()) &&
|
|
|
|
|
!StringUtils.isEmpty(o.getProcessSeq()) && !StringUtils.isEmpty(o.getCraftCode())))
|
|
|
|
|
.collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getCraftCode()).add(o.getProcessSeq().toString()).toString()));
|
|
|
|
|
if (CollectionUtils.isEmpty(processSeqMap)) return null;
|
|
|
|
|
List<String> parallelCellCodeList = null;
|
|
|
|
|
for (Map.Entry<String, List<MesWorkOrderAssembly>> entry : processSeqMap.entrySet()) {
|
|
|
|
|
if (null == entry) continue;
|
|
|
|
|
//搜集工位代码集合再去重
|
|
|
|
|
List<String> workCellCodeList = (entry.getValue().stream().filter(o -> null != o).map(MesWorkOrderAssembly::getWorkCellCode)
|
|
|
|
|
.collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
|
|
|
|
if (CollectionUtils.isEmpty(workCellCodeList) || workCellCodeList.size() == 1) continue;
|
|
|
|
|
//判断是否是当前工位的平行工位
|
|
|
|
|
if (!workCellCodeList.contains(workCellCode)) {
|
|
|
|
|
//存在processSeq则表示需要过滤后道, 判断当前循环的工艺顺序号是否属于后道
|
|
|
|
|
if (!StringUtils.isEmpty(processSeq)) {
|
|
|
|
|
List<Integer> processSeqList = (entry.getValue().stream().filter(o -> null != o).map(MesWorkOrderAssembly::getProcessSeq)
|
|
|
|
|
.collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
|
|
|
|
//工艺顺序号升序
|
|
|
|
|
processSeqList.sort(Comparator.naturalOrder());
|
|
|
|
|
if (processSeqList.get(0).compareTo(processSeq) > 0) continue;
|
|
|
|
|
}
|
|
|
|
|
//工艺顺序号升序
|
|
|
|
|
workCellCodeList.sort(Comparator.naturalOrder());
|
|
|
|
|
workCellCodeList.remove(0);
|
|
|
|
|
} else {
|
|
|
|
|
//当前工位
|
|
|
|
|
workCellCodeList.remove(workCellCode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(parallelCellCodeList)) parallelCellCodeList = new ArrayList<>();
|
|
|
|
|
parallelCellCodeList.addAll(workCellCodeList);
|
|
|
|
|
}
|
|
|
|
|
return parallelCellCodeList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取装配件绑定记录【排序】
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesProductionAssembly> getProductionAssemblySortList(String organizeCode, String productSn) {
|
|
|
|
|