diff --git a/src/main/java/com/yem/em/task/GenerateReplaceRelationshipTaskEdit.java b/src/main/java/com/yem/em/task/GenerateReplaceRelationshipTaskEdit.java index 8a4aee7a..c1363273 100644 --- a/src/main/java/com/yem/em/task/GenerateReplaceRelationshipTaskEdit.java +++ b/src/main/java/com/yem/em/task/GenerateReplaceRelationshipTaskEdit.java @@ -122,39 +122,41 @@ public class GenerateReplaceRelationshipTaskEdit extends AbstractTask { Map successMap = new HashMap<>(); DynamicObject bomChange = createBOMChange(plmObj, enabled); DynamicObjectCollection entry = bomChange.getDynamicObjectCollection("yem_entryentity"); - String selectfields = DynamicObjectUtil.getSelectfields("yem_em_replace"); - selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_em_replace", "yem_entryentity"); - if (!entry.isEmpty()) { - DynamicObject replace = null; - String billno = plmObj.getString("billno"); - String gybg_no = plmObj.getString("yem_gybg_no"); - if (entry.size() == 1) { - logger.info("生成替换关系:PLM单号:{}, PLM工艺变更单号:{},父项编码:{}", billno, gybg_no, entry.get(0).getString("yem_parentno")); - logger.info("生成_当前替换关系:{}", entry.get(0).getString("yem_replace")); - replace = AtlasUtils.Addreplace(bomChange, entry.get(0), null, "yem_em_replace", "add", "PLM"); - successMap.put(entry.get(0).getLong("id"), bomChange); - } else { - for (DynamicObject entryObject : entry) { - int idx = entry.indexOf(entryObject); - if (idx == 0) { - QFilter qFilter = new QFilter("status", "=", "C"); - qFilter.and("number", "=", bomChange.getString("number")); - DynamicObject[] load = BusinessDataServiceHelper.load("yem_em_replace", selectfields, qFilter.toArray()); - if (load.length == 1) { - replace = load[0]; - replace = AtlasUtils.Addreplace(bomChange, entry.get(0), replace, "yem_em_replace", "update", "PLM"); - } else { - replace = AtlasUtils.Addreplace(bomChange, entry.get(0), null, "yem_em_replace", "add", "PLM"); - } - continue; - }; - logger.info("更新替换关系:PLM单号:{}, PLM工艺变更单号:{},父项编码:{}", billno, gybg_no, entryObject.getString("yem_parentno")); - logger.info("更新_替换关系:{}", entryObject.getString("yem_replace")); - replace = AtlasUtils.Addreplace(bomChange, entry.get(0), replace, "yem_em_replace", "update", "PLM"); - successMap.put(entryObject.getLong("id"), bomChange); - } - } + + for (DynamicObject entryObject : entry) { + useExistReplace(bomChange, entryObject, successMap); } +// if (!entry.isEmpty()) { +// DynamicObject replace = null; +// String billno = plmObj.getString("billno"); +// String gybg_no = plmObj.getString("yem_gybg_no"); +// if (entry.size() == 1) { +// logger.info("生成替换关系:PLM单号:{}, PLM工艺变更单号:{},父项编码:{}", billno, gybg_no, entry.get(0).getString("yem_parentno")); +// logger.info("生成_当前替换关系:{}", entry.get(0).getString("yem_replace")); +// replace = AtlasUtils.Addreplace(bomChange, entry.get(0), null, "yem_em_replace", "add", "PLM"); +// successMap.put(entry.get(0).getLong("id"), bomChange); +// } else { +// for (DynamicObject entryObject : entry) { +// int idx = entry.indexOf(entryObject); +// if (idx == 0) { +// QFilter qFilter = new QFilter("status", "=", "C"); +// qFilter.and("number", "=", entryObject.getString("yem_parentno")); +// DynamicObject[] load = BusinessDataServiceHelper.load("yem_em_replace", selectfields, qFilter.toArray()); +// if (load.length == 1) { +// replace = load[0]; +// replace = AtlasUtils.Addreplace(bomChange, entry.get(0), replace, "yem_em_replace", "update", "PLM"); +// } else { +// replace = AtlasUtils.Addreplace(bomChange, entry.get(0), null, "yem_em_replace", "add", "PLM"); +// } +// continue; +// }; +// logger.info("更新替换关系:PLM单号:{}, PLM工艺变更单号:{},父项编码:{}", billno, gybg_no, entryObject.getString("yem_parentno")); +// logger.info("更新_替换关系:{}", entryObject.getString("yem_replace")); +// replace = AtlasUtils.Addreplace(bomChange, entry.get(0), replace, "yem_em_replace", "update", "PLM"); +// successMap.put(entryObject.getLong("id"), bomChange); +// } +// } +// } List list = new ArrayList<>(); for (Map.Entry mapEntry : successMap.entrySet()) { Long bomChangeEntryId = mapEntry.getKey(); @@ -188,6 +190,31 @@ public class GenerateReplaceRelationshipTaskEdit extends AbstractTask { syncImage(plmObj, list); } + /** + * 查询已存在的替换关系 + * + * @param bomChange + * @param bomChangeEntry + * @param successMap + * @return + */ + private void useExistReplace(DynamicObject bomChange, DynamicObject bomChangeEntry, Map successMap) { + QFilter qFilter = new QFilter("status", "=", "C"); + qFilter.and("number", "=", bomChangeEntry.getString("yem_parentno")); + DynamicObject[] load = BusinessDataServiceHelper.load("yem_em_replace", "id, billno", qFilter.toArray()); + if (load.length > 0) { + DynamicObject replace = load[0]; + replace = BusinessDataServiceHelper.loadSingle(replace.getPkValue(), replace.getDataEntityType().getName()); + logger.info("使用已有替换关系:{}", replace.getString("number")); + AtlasUtils.Addreplace(bomChange, bomChangeEntry, replace, "yem_em_replace", "update", "PLM"); + successMap.put(bomChangeEntry.getLong("id"), bomChange); + } else { + logger.info("创建新的替换关系:{}", bomChangeEntry.getString("yem_parentno")); + AtlasUtils.Addreplace(bomChange, bomChangeEntry, null, "yem_em_replace", "add", "PLM"); + successMap.put(bomChangeEntry.getLong("id"), bomChange); + } + } + /** * 根据PLM创建BOM,用于生成替换关系 * @@ -334,6 +361,7 @@ public class GenerateReplaceRelationshipTaskEdit extends AbstractTask { * 查询匹配的 总成图册明细 * PLM:变更后父项编码 - 总成图册明细.编码 * PLM:变更后子项编码 - 替换关系:ABC 替换编码,E(删除):不匹配,D(新增)替换前编码 + * * @return */ private DynamicObject queryMatchAssemblyAtlasDetails(DynamicObject plmObj, DynamicObject d) { diff --git a/src/main/java/com/yem/em/utils/SubRelationUtils.java b/src/main/java/com/yem/em/utils/SubRelationUtils.java index 2188b6c6..d0c7ac0e 100644 --- a/src/main/java/com/yem/em/utils/SubRelationUtils.java +++ b/src/main/java/com/yem/em/utils/SubRelationUtils.java @@ -13,10 +13,7 @@ import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper; import java.math.BigDecimal; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.List; +import java.util.*; import java.util.stream.Stream; /** @@ -109,7 +106,7 @@ public class SubRelationUtils { qFilter.and(new QFilter("yem_entryentity.yem_completetime", QCP.less_equals, new Date())); String selectfield = DynamicObjectUtil.getSelectfields("yem_em_replace", false); String selectfields = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_em_replace", "yem_entryentity", false); - object = QueryServiceHelper.query("yem_em_replace", selectfields, new QFilter[]{qFilter}, "yem_entryentity.yem_completetime DESC"); + object = QueryServiceHelper.query("yem_em_replace", "yem_entryentity.id," + selectfields, new QFilter[]{qFilter}, "yem_entryentity.yem_completetime DESC"); if (object.size() > 0) { object = queryAssemblyreplevel(object, replacement, isComplete, yem_completetime); } @@ -147,12 +144,22 @@ public class SubRelationUtils { String selectfield = DynamicObjectUtil.getSelectfields("yem_em_replace", false); String selectfields = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_em_replace", "yem_entryentity", false); DynamicObjectCollection yem_em_replace = QueryServiceHelper.query("yem_em_replace", - selectfields, new QFilter[]{qFilter}, "yem_entryentity.yem_completetime DESC"); - if (yem_em_replace.size() > 0) { - for (int j = 0; j < yem_em_replace.size(); j++) { - object.add(yem_em_replace.get(j)); + "yem_entryentity.id," + selectfields, new QFilter[]{qFilter}, "yem_entryentity.yem_completetime DESC"); + if (!yem_em_replace.isEmpty()) { + int count = 0; + Set ids = new HashSet<>(); + for (DynamicObject dynamicObject : object) { + ids.add(dynamicObject.getLong("yem_entryentity.id")); + } + for (DynamicObject dynamicObject : yem_em_replace) { + if (!ids.contains(dynamicObject.getLong("yem_entryentity.id"))) { + object.add(dynamicObject); + count++; + } + } + if (count > 0) { + queryAssemblyreplevel(yem_em_replace, replacement, isComplete, yem_completetime); } - queryAssemblyreplevel(yem_em_replace, replacement, isComplete, yem_completetime); } } return object;