From f686dcbe06b099bd2cd5a1f23b196755ef2c32e8 Mon Sep 17 00:00:00 2001 From: zzs Date: Wed, 5 Feb 2025 11:48:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=9B=BE=E5=86=8C=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../em/dynamic/SelectsalenoDynamicoEdit.java | 111 ++++++++++------- .../com/yem/em/utils/SubRelationUtils.java | 112 ++++++++++++++++-- .../java/com/yem/or/api/AssepcDynamic.java | 78 ++++-------- 3 files changed, 196 insertions(+), 105 deletions(-) diff --git a/src/main/java/com/yem/em/dynamic/SelectsalenoDynamicoEdit.java b/src/main/java/com/yem/em/dynamic/SelectsalenoDynamicoEdit.java index 7fca4458..54526467 100644 --- a/src/main/java/com/yem/em/dynamic/SelectsalenoDynamicoEdit.java +++ b/src/main/java/com/yem/em/dynamic/SelectsalenoDynamicoEdit.java @@ -1,5 +1,6 @@ package com.yem.em.dynamic; +import com.alibaba.fastjson.JSONObject; import com.yem.em.utils.SubRelationUtils; import com.yem.wm.utils.StringUtils; import kd.bos.algo.DataSet; @@ -33,6 +34,8 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import static com.yem.em.utils.SubRelationUtils.queryBoughtPartInfo; + /** * @author zhouc * @date 2023/8/31 17:48 @@ -75,47 +78,75 @@ public class SelectsalenoDynamicoEdit extends AbstractFormPlugin implements RowC } if (customParas.get("Tpye").equals("searchap2")) {//零件 if (customParas.containsKey("yem_salesorderno")) { - List qFilters = new ArrayList<>(); - String algoKey = this.getClass().getName(); - //查询零件明细表 根据零件编码过滤 -// qFilters.add(new QFilter("yem_entryentity.yem_partnumber", QCP.equals, customParas.get("yem_salesorderno"))); -// DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_em_assatlasdet", "number ljnumber", qFilters.toArray(new QFilter[]{})); -// DataSet dataSet2 = ORM.create().queryDataSet(algoKey, "yem_em_cmmptable", "yem_entryentity.yem_asscomponent.number yem_ccode,number ", null); -// DataSet dataSet3 = dataSet.leftJoin(dataSet2).on("ljnumber", "yem_ccode").select(new String[]{"ljnumber"}, new String[]{"number"}).finish(); - DynamicObject object1 = SubRelationUtils.getfirstNumber(customParas.get("yem_salesorderno").toString()); - DynamicObject getfirstid = SubRelationUtils.getfirstid(customParas.get("yem_salesorderno").toString()); - if (getfirstid != null) { - qFilters.add(new QFilter("yem_entryentity.yem_asscomponent.number", QCP.equals, getfirstid.getString("number"))); - DataSet dataSet3 = ORM.create().queryDataSet(algoKey, "yem_em_cmmptable", "number", qFilters.toArray(new QFilter[]{})); - //查询设备档案 与 查询零件明细表DataSet通过资源号编码进行左关联 - String selectField1 = "yem_model.number yem_modelno,yem_model.yem_products.number yem_products" + - ",yem_model.yem_productsgroup.name yem_productsgroup,yem_dateofpurchase,yem_salesorderno"; - DataSet dataSet1 = ORM.create().queryDataSet(algoKey, "yem_em_devicefiles", selectField1, null); - DataSet dataSetdi11 = dataSet3.leftJoin(dataSet1).on("number", "yem_modelno") - .select(new String[]{"number"}, - new String[]{"yem_modelno", "yem_products", "yem_productsgroup", "yem_dateofpurchase", "yem_salesorderno"}) - .finish().where("yem_salesorderno is not null"); - DataSet dataSetdis = dataSetdi11.distinct(); - if (dataSetdis != null) { - for (Row data : dataSetdis) { - if (data.get("yem_salesorderno") != null) { - DynamicObject entryentity = yem_entryentity.addNew(); - entryentity.set("yem_salesorderno", data.get("yem_salesorderno")); - entryentity.set("yem_resourceno", data.getString("yem_modelno")); - entryentity.set("yem_products", data.getString("yem_products")); - entryentity.set("yem_productsgroup", data.getString("yem_productsgroup")); - if (object1 != null) { - entryentity.set("yem_parentpartcode", object1.getString("number")); - } - entryentity.set("yem_partcode", customParas.get("yem_salesorderno")); - if (data.getString("yem_dateofpurchase") != null) { - Date yem_dateofpurchase = formatDate(data.getString("yem_dateofpurchase"), "yyyy-MM-dd"); - entryentity.set("yem_dateofpurchase", yem_dateofpurchase); - } - } - } - } + + String modelnumber = (String) customParas.get("yem_salesorderno"); + DataSet dataSet = queryBoughtPartInfo(modelnumber, null); + + DynamicObjectCollection collection = ORM.create().toPlainDynamicObjectCollection(dataSet); + Map res = new HashMap<>(); + for (DynamicObject data : collection) { + String salesorderno = (String) data.get("yem_salesorderno"); + String ass_number = data.getString("ass_number"); + res.put(salesorderno + "_" + modelnumber + "_" + ass_number, data); } + + for (DynamicObject data : res.values()) { + DynamicObject obj = yem_entryentity.addNew(); + obj.set("yem_salesorderno", data.getString("yem_salesorderno")); + obj.set("yem_dateofpurchase", data.getDate("yem_dateofpurchase")); + obj.set("yem_resourceno", data.getString("resource_no")); + obj.set("yem_products", data.getString("yem_products")); + obj.set("yem_productsgroup", data.getString("yem_productsgroup")); + obj.set("yem_partcode", modelnumber); + obj.set("yem_parentpartcode", data.getString("ass_number")); + } + +// List qFilters = new ArrayList<>(); +// String algoKey = this.getClass().getName(); +// //查询零件明细表 根据零件编码过滤 +//// qFilters.add(new QFilter("yem_entryentity.yem_partnumber", QCP.equals, customParas.get("yem_salesorderno"))); +//// DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_em_assatlasdet", "number ljnumber", qFilters.toArray(new QFilter[]{})); +//// DataSet dataSet2 = ORM.create().queryDataSet(algoKey, "yem_em_cmmptable", "yem_entryentity.yem_asscomponent.number yem_ccode,number ", null); +//// DataSet dataSet3 = dataSet.leftJoin(dataSet2).on("ljnumber", "yem_ccode").select(new String[]{"ljnumber"}, new String[]{"number"}).finish(); +// DynamicObject[] object1 = SubRelationUtils.getfirstNumber(customParas.get("yem_salesorderno").toString()); +// Set resultList = new HashSet<>(); +//// SubRelationUtils.getfirstid(customParas.get("yem_salesorderno").toString(), resultList); +// Set queryNum = new HashSet<>(); +// for (DynamicObject object : resultList) { +// queryNum.add(object.getString("number")); +// } +// if (!resultList.isEmpty()) { +// qFilters.add(new QFilter("yem_entryentity.yem_asscomponent.number", QCP.in, queryNum)); +// DataSet dataSet3 = ORM.create().queryDataSet(algoKey, "yem_em_cmmptable", "number", qFilters.toArray(new QFilter[]{})); +// //查询设备档案 与 查询零件明细表DataSet通过资源号编码进行左关联 +// String selectField1 = "yem_model.number yem_modelno,yem_model.yem_products.number yem_products" + +// ",yem_model.yem_productsgroup.name yem_productsgroup,yem_dateofpurchase,yem_salesorderno"; +// DataSet dataSet1 = ORM.create().queryDataSet(algoKey, "yem_em_devicefiles", selectField1, null); +// DataSet dataSetdi11 = dataSet3.leftJoin(dataSet1).on("number", "yem_modelno") +// .select(new String[]{"number"}, +// new String[]{"yem_modelno", "yem_products", "yem_productsgroup", "yem_dateofpurchase", "yem_salesorderno"}) +// .finish().where("yem_salesorderno is not null"); +// DataSet dataSetdis = dataSetdi11.distinct(); +// if (dataSetdis != null) { +// for (Row data : dataSetdis) { +// if (data.get("yem_salesorderno") != null) { +// DynamicObject entryentity = yem_entryentity.addNew(); +// entryentity.set("yem_salesorderno", data.get("yem_salesorderno")); +// entryentity.set("yem_resourceno", data.getString("yem_modelno")); +// entryentity.set("yem_products", data.getString("yem_products")); +// entryentity.set("yem_productsgroup", data.getString("yem_productsgroup")); +// if (object1.length > 0) { +// entryentity.set("yem_parentpartcode", object1[0].getString("number")); +// } +// entryentity.set("yem_partcode", customParas.get("yem_salesorderno")); +// if (data.getString("yem_dateofpurchase") != null) { +// Date yem_dateofpurchase = formatDate(data.getString("yem_dateofpurchase"), "yyyy-MM-dd"); +// entryentity.set("yem_dateofpurchase", yem_dateofpurchase); +// } +// } +// } +// } +// } } } } diff --git a/src/main/java/com/yem/em/utils/SubRelationUtils.java b/src/main/java/com/yem/em/utils/SubRelationUtils.java index 5742969b..04af0011 100644 --- a/src/main/java/com/yem/em/utils/SubRelationUtils.java +++ b/src/main/java/com/yem/em/utils/SubRelationUtils.java @@ -1,22 +1,28 @@ package com.yem.em.utils; +import com.alibaba.fastjson.JSONObject; import com.yem.wm.utils.DynamicObjectUtil; +import com.yem.wm.utils.RptUtil; +import com.yem.wm.utils.YEM; +import kd.bos.algo.DataSet; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; -import kd.bos.entity.datamodel.IDataModel; import kd.bos.entity.operate.result.OperationResult; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; +import kd.bos.openapi.common.custom.annotation.ApiParam; +import kd.bos.orm.ORM; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.springframework.lang.Nullable; import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -644,6 +650,7 @@ public class SubRelationUtils { * 层级为2:编号为1.1.1,1.1.2,1.1.3 * 对图册中编号按照层级进行排序,之后取最大的编号,给最后一位数加一,返回加一后的时 * 如果按照以上规则无法获取到正确的编号,返回空字符串,后续手动维护编号 + * * @param repno * @return */ @@ -675,8 +682,9 @@ public class SubRelationUtils { /** * 对图册中编号按照层级进行排序,之后取最大的编号,给最后一位数加一,返回加一后的时 + * * @param hierarchicalStrings 已有编号 - * @param levels 层级 + * @param levels 层级 * @return 下一个编号 */ public static String findNextMax(Set hierarchicalStrings, int levels) { @@ -717,6 +725,7 @@ public class SubRelationUtils { /** * 最后一位编号加一 + * * @param maxString 当前最大编号 */ private static String getNextValue(String maxString) { @@ -773,19 +782,17 @@ public class SubRelationUtils { * @param yem_partnumber 零件编码 * @return */ - public static DynamicObject getfirstNumber(String yem_partnumber) { + public static DynamicObject[] getfirstNumber(String yem_partnumber) { QFilter qFilter = new QFilter("yem_entryentity.yem_partnumber", QCP.equals, yem_partnumber);// qFilter.and(new QFilter("status", QCP.equals, "C")); String selectfield = DynamicObjectUtil.getSelectfields("yem_em_assatlasdet", false); String selectfields = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_em_assatlasdet", "yem_entryentity", false); - DynamicObject Object = BusinessDataServiceHelper.loadSingle("yem_em_assatlasdet", selectfields, qFilter.toArray()); - return Object; + return BusinessDataServiceHelper.load("yem_em_assatlasdet", selectfields, qFilter.toArray()); } /** * 获取零件一级部件 * - * @param yem_partnumber 零件编码 * @return */ public static DynamicObject getfirstid(String yem_partnumber) { @@ -805,6 +812,33 @@ public class SubRelationUtils { return Object; } + public static List getTopLevelPart(String yem_partnumber) { + List topLevelObjects = new ArrayList<>(); + findTopLevelRecursively(yem_partnumber, topLevelObjects); + return topLevelObjects; + } + + private static void findTopLevelRecursively(String currentPartNumber, List topLevelObjects) { + QFilter qFilter = new QFilter("yem_entryentity.yem_partnumber", QCP.equals, currentPartNumber); + qFilter.and(new QFilter("status", QCP.equals, "C")); + + DynamicObject[] objects = BusinessDataServiceHelper.load("yem_em_assatlasdet", "id, number, yem_issup", qFilter.toArray()); + + if (objects == null || objects.length == 0) { + return; // 没有找到关联数据,直接返回 + } + + for (DynamicObject object : objects) { + boolean yem_issup = object.getBoolean("yem_issup"); + if (yem_issup) { + String number = object.getString("number"); + findTopLevelRecursively(number, topLevelObjects); + } else { + topLevelObjects.add(object); // 将最上级对象添加到列表 + } + } + } + /** * 获取零件一级部件 * @@ -847,4 +881,68 @@ public class SubRelationUtils { } + /** + * 根据零件编码查询订单信息 + * @param modelnumber 零件面板 + * @param clientnumber 客户 + * @return mix dataset + */ + public static DataSet queryBoughtPartInfo(String modelnumber, @Nullable String clientnumber) { + + String algoKey = SubRelationUtils.class.getName(); + Map res = new HashMap<>(); + QFilter qFilter = new QFilter("status", "=", "C"); + List dfFields = new ArrayList<>(); + dfFields.add("number df_number"); + dfFields.add("yem_model.number resource_no"); + dfFields.add("yem_salesorderno"); + dfFields.add("group");//产品类型 + dfFields.add("yem_dateofpurchase"); + dfFields.add("yem_groupcustomer.number cus_no");//业务主体 + dfFields.add("yem_model.yem_products.number yem_products"); + dfFields.add("yem_model.yem_productsgroup.name yem_productsgroup"); + DataSet df = ORM.create().queryDataSet(algoKey, "yem_em_devicefiles", String.join(",", dfFields), qFilter.toArray()); + + List cpField = new ArrayList<>(); + cpField.add("number cp_number"); + cpField.add("yem_entryentity.yem_assatlasdet.id assatlasdet_id"); + + DataSet cp = ORM.create().queryDataSet(algoKey, "yem_em_cmmptable", String.join(",", cpField), qFilter.toArray()); + + List assField = new ArrayList<>(); + assField.add("number ass_number"); + assField.add("id ass_id"); + assField.add("yem_entryentity.yem_partnumber part_no"); + + DataSet ass = ORM.create().queryDataSet(algoKey, "yem_em_assatlasdet", String.join(",", assField), qFilter.toArray()); + + List egField = new ArrayList<>(); + egField.add("id eg_id"); + egField.add("yem_model"); + egField.add("yem_modelname"); + egField.add("yem_modelenname"); + DataSet eg = ORM.create().queryDataSet(algoKey, "yem_em_electronicgroup", String.join(",", egField), new QFilter[]{new QFilter("status", "=", "C")}); + + DataSet dataSet = df.leftJoin(cp) + .select(RptUtil.getDataSetFiledAlias(df), RptUtil.getDataSetFiledAlias(cp)) + .on("resource_no", "cp_number") + .finish(); + dataSet = dataSet.leftJoin(ass.copy()) + .select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(ass.copy())) + .on("assatlasdet_id", "ass_id") + .finish(); + dataSet = dataSet.leftJoin(eg) + .select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(eg)) + .on("group", "eg_id") + .finish(); + + if (YEM.isNotEmpty(clientnumber)) { + dataSet = dataSet.where(String.format("part_no = '%s' AND cus_no = '%s'", modelnumber, clientnumber)).orderBy(new String[]{"yem_salesorderno"}); + } else { + dataSet = dataSet.where(String.format("part_no = '%s'", modelnumber)).orderBy(new String[]{"yem_salesorderno"}); + } + dataSet = dataSet.distinct(); + + return dataSet; + } } diff --git a/src/main/java/com/yem/or/api/AssepcDynamic.java b/src/main/java/com/yem/or/api/AssepcDynamic.java index 98dab9c1..98a1b874 100644 --- a/src/main/java/com/yem/or/api/AssepcDynamic.java +++ b/src/main/java/com/yem/or/api/AssepcDynamic.java @@ -14,7 +14,6 @@ import com.yem.wm.utils.YEM; import com.yem.wm.utils.groupfunc.GroupTopOneFunction; import kd.bos.algo.DataSet; import kd.bos.algo.Row; -import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.openapi.common.custom.annotation.ApiController; @@ -36,10 +35,6 @@ import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; /** * @author zhouc @@ -313,69 +308,36 @@ public class AssepcDynamic { */ @ApiPostMapping("/assepcdynamic/queryassemblies") public CustomApiResult queryassemblies(@NotNull @ApiParam("部件编码") String modelnumber, @NotNull @ApiParam("客户编码") String clientnumber) throws IOException { - JSONObject object = new JSONObject(); try { - List qFilters = new ArrayList<>(); - String algoKey = this.getClass().getName(); - JSONArray jsonArray = new JSONArray(); - DynamicObject object1 = SubRelationUtils.getfirstNumber(modelnumber); - DynamicObject getfirstid = SubRelationUtils.getfirstid(modelnumber); - if (getfirstid != null) { - qFilters.add(new QFilter("yem_entryentity.yem_asscomponent.number", QCP.equals, getfirstid.getString("number"))); - DataSet dataSet3 = ORM.create().queryDataSet(algoKey, "yem_em_cmmptable", "number", qFilters.toArray(new QFilter[]{})); + DataSet dataSet = SubRelationUtils.queryBoughtPartInfo(modelnumber, clientnumber); - //查询设备档案 与 查询零件明细表DataSet通过资源号编码进行左关联 - String selectField1 = "yem_model.number yem_modelno,yem_model.yem_products.number yem_products" + - ",yem_model.yem_productsgroup.name yem_productsgroup,yem_dateofpurchase,yem_salesorderno,group"; -// DataSet dataSet1 = ORM.create().queryDataSet(algoKey, "yem_em_devicefiles", selectField1, null); - DataSet dataSet1 = ORM.create().queryDataSet(algoKey, "yem_em_devicefiles", selectField1, new QFilter[]{new QFilter("yem_customer.number", QCP.equals, clientnumber)}); - DataSet dataSetdi11 = dataSet3.leftJoin(dataSet1).on("number", "yem_modelno") - .select(new String[]{"number"}, - new String[]{"yem_modelno", "yem_products", "yem_productsgroup", "yem_dateofpurchase", "yem_salesorderno", "group"}) - .finish().where("yem_salesorderno is not null"); - DataSet dataSetdis = dataSetdi11.distinct(); + DynamicObjectCollection collection = ORM.create().toPlainDynamicObjectCollection(dataSet); + Map res = new HashMap<>(); + for (DynamicObject d : collection) { + JSONObject obj = new JSONObject(); - if (dataSetdis != null) { - for (Row data : dataSetdis) { - JSONObject jsonObject = new JSONObject(); - DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("yem_em_electronicgroup", "id,number,yem_model,yem_modelname,yem_modelenname" - , new QFilter[]{new QFilter("id", QCP.equals, data.getLong("group"))}); - if (data.get("yem_salesorderno") != null) { - jsonObject.put("yem_salesorderno", data.get("yem_salesorderno")); - jsonObject.put("yem_resourceno", data.getString("yem_modelno")); - jsonObject.put("yem_products", data.getString("yem_products")); - jsonObject.put("yem_productsgroup", data.getString("yem_productsgroup")); - if (object1 != null) { - jsonObject.put("yem_parentpartcode", object1.getString("number")); - } else { - jsonObject.put("yem_parentpartcode", ""); - } - jsonObject.put("yem_firstNumber", getfirstid.getString("number")); - jsonObject.put("yem_partcode", modelnumber); - jsonObject.put("producttypeno", dynamicObject.getString("yem_model")); - jsonObject.put("producttypename", dynamicObject.getString("yem_modelname")); - jsonObject.put("producttypeenname", dynamicObject.getString("yem_modelenname")); - if (data.getString("yem_dateofpurchase") != null) { - Date yem_dateofpurchase = formatDate(data.getString("yem_dateofpurchase"), "yyyy-MM-dd"); - jsonObject.put("yem_dateofpurchase", yem_dateofpurchase); - } - jsonArray.add(jsonObject); - } - } - } + String salesorderno = (String) d.get("yem_salesorderno"); + String ass_number = d.getString("ass_number"); + obj.put("yem_salesorderno", d.get("yem_salesorderno")); + obj.put("yem_resourceno", d.getString("resource_no")); + obj.put("yem_products", d.getString("yem_products")); + obj.put("yem_productsgroup", d.getString("yem_productsgroup")); + obj.put("yem_parentpartcode", d.getString("ass_number")); + obj.put("yem_partcode", modelnumber); + obj.put("producttypeno", d.getString("yem_model")); + obj.put("producttypename", d.getString("yem_modelname")); + obj.put("producttypeenname", d.getString("yem_modelenname")); + obj.put("yem_dateofpurchase", d.getDate("yem_dateofpurchase")); + res.put(salesorderno + "_" + modelnumber + "_" + ass_number, obj); } - object.put("status", "success"); - object.put("mag", ""); - object.put("list", jsonArray); + return CustomApiResult.success(res.values()); } catch ( Exception e) { + e.printStackTrace(); return CustomApiResult. fail("501", e.getMessage()); } - return CustomApiResult. - - success(object); } public Date formatDate(String date, String format) {