fix:图册查询零件查询逻辑调整

This commit is contained in:
zzs 2025-02-05 11:48:18 +08:00
parent 396c9fdb2a
commit f686dcbe06
3 changed files with 196 additions and 105 deletions

View File

@ -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<QFilter> 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<String, DynamicObject> 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<QFilter> 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<DynamicObject> resultList = new HashSet<>();
//// SubRelationUtils.getfirstid(customParas.get("yem_salesorderno").toString(), resultList);
// Set<String> 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);
// }
// }
// }
// }
// }
}
}
}

View File

@ -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.11.1.21.1.3
* 对图册中编号按照层级进行排序之后取最大的编号给最后一位数加一返回加一后的时
* 如果按照以上规则无法获取到正确的编号返回空字符串后续手动维护编号
*
* @param repno
* @return
*/
@ -675,8 +682,9 @@ public class SubRelationUtils {
/**
* 对图册中编号按照层级进行排序之后取最大的编号给最后一位数加一返回加一后的时
*
* @param hierarchicalStrings 已有编号
* @param levels 层级
* @param levels 层级
* @return 下一个编号
*/
public static String findNextMax(Set<String> 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<DynamicObject> getTopLevelPart(String yem_partnumber) {
List<DynamicObject> topLevelObjects = new ArrayList<>();
findTopLevelRecursively(yem_partnumber, topLevelObjects);
return topLevelObjects;
}
private static void findTopLevelRecursively(String currentPartNumber, List<DynamicObject> 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<String, JSONObject> res = new HashMap<>();
QFilter qFilter = new QFilter("status", "=", "C");
List<String> 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<String> 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<String> 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<String> 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;
}
}

View File

@ -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<Object> queryassemblies(@NotNull @ApiParam("部件编码") String modelnumber, @NotNull @ApiParam("客户编码") String clientnumber) throws IOException {
JSONObject object = new JSONObject();
try {
List<QFilter> 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<String, JSONObject> 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) {