|
|
@@ -0,0 +1,84 @@
|
|
|
+package nckd.pur.scp.plugin.form;
|
|
|
+
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
+import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
+import kd.bos.form.FormShowParameter;
|
|
|
+import kd.bos.form.events.BeforeCreateListDataProviderArgs;
|
|
|
+import kd.bos.list.plugin.AbstractListPlugin;
|
|
|
+import kd.bos.mvc.list.ListDataProvider;
|
|
|
+import nckd.base.common.constant.BaseFieldConst;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Author:Zt
|
|
|
+ * @Date:2026/1/5
|
|
|
+ **/
|
|
|
+public class BosF7ListPlugin extends AbstractListPlugin {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterCreateNewData(EventObject e) {
|
|
|
+ super.afterCreateNewData(e);
|
|
|
+ FormShowParameter formShowParameter = this.getView().getFormShowParameter();
|
|
|
+ Map<String, Object> map = formShowParameter.getCustomParams();
|
|
|
+ if ("botp_draw".equals(map.get("bos_call_source_type"))) {
|
|
|
+ this.getView().getPageCache().put("type", "botp_draw");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void beforeCreateListDataProvider(BeforeCreateListDataProviderArgs args) {
|
|
|
+ super.beforeCreateListDataProvider(args);
|
|
|
+ String type = this.getView().getPageCache().get("type");
|
|
|
+ //自定义取数器
|
|
|
+ args.setListDataProvider(new ListDataProvider() {
|
|
|
+ @Override
|
|
|
+ public DynamicObjectCollection getData(int arg0, int arg1) {
|
|
|
+ DynamicObjectCollection rows = super.getData(arg0, arg1);
|
|
|
+ DynamicObject billtype = (DynamicObject) rows.get(0).get("billtype");
|
|
|
+ String billFormId = billtype.getString(BaseFieldConst.NUMBER);
|
|
|
+
|
|
|
+ //采购订单
|
|
|
+ if (StringUtils.isNotBlank(type) && billFormId.contains("pm_PurOrder")) {
|
|
|
+ if (type.equals("botp_draw")) {
|
|
|
+ // 先按单据编号分组,然后对每组内的 entryentity.seq 进行排序
|
|
|
+ Map<String, List<DynamicObject>> groupedByBillNo = new LinkedHashMap<>();
|
|
|
+
|
|
|
+ // 按 billno 分组
|
|
|
+ for (DynamicObject row : rows) {
|
|
|
+ String billNo = (String) row.get("billno");
|
|
|
+ groupedByBillNo.computeIfAbsent(billNo, k -> new ArrayList<>()).add(row);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 对每组内的数据按 entryentity.seq 排序
|
|
|
+ List<DynamicObject> sortedRows = new ArrayList<>();
|
|
|
+ for (List<DynamicObject> group : groupedByBillNo.values()) {
|
|
|
+ group.sort((row1, row2) -> {
|
|
|
+ Object seq1 = row1.get("billentry.seq");
|
|
|
+ Object seq2 = row2.get("billentry.seq");
|
|
|
+
|
|
|
+ if (seq1 == null && seq2 == null) return 0;
|
|
|
+ if (seq1 == null) return -1;
|
|
|
+ if (seq2 == null) return 1;
|
|
|
+
|
|
|
+ if (seq1 instanceof Number && seq2 instanceof Number) {
|
|
|
+ return Double.compare(((Number) seq1).doubleValue(), ((Number) seq2).doubleValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ return String.valueOf(seq1).compareTo(String.valueOf(seq2));
|
|
|
+ });
|
|
|
+ sortedRows.addAll(group);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新原始集合的顺序
|
|
|
+ rows.clear();
|
|
|
+ rows.addAll(sortedRows);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rows;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+}
|