Browse Source

报表预处理,新增分类汇总方法

MaiXinRong 5 tháng trước cách đây
mục cha
commit
2d8d0d390c
1 tập tin đã thay đổi với 36 bổ sung0 xóa
  1. 36 0
      app/lib/rpt_data_analysis.js

+ 36 - 0
app/lib/rpt_data_analysis.js

@@ -2026,6 +2026,41 @@ const orderBy = {
         });
     }
 };
+const GroupBy = {
+    name: "分类汇总",
+    hint: "类似Sql语句中的Group By",
+    defaultSetting: {
+        table: 'mem_change_bills',
+        keyFields: ['cid', 'gcl_id'],
+        sumFields: ['qty'],
+        outputTable: '',
+    },
+    fun(ctx, data, fieldsKey, options, csRela) {
+        if (!options || !options.table || !options.keyFields) return;
+        if (!options.sumFields) options.sumFields = [];
+        if (!options.outputTable) options.outputTable = options.table;
+
+        const groupData = [];
+        for (const d of data[options.table]) {
+            let gd = groupData.find(x => {
+                for (const kf of options.keyFields) {
+                    if (x[kf] !== d[kf]) return false;
+                }
+                return true;
+            });
+            if (!gd) {
+                gd = JSON.parse(JSON.stringify(d));
+                groupData.push(gd);
+            } else {
+                for (const sf of options.sumFields) {
+                    gd[sf] = this.ctx.helper.add(gd[sf], d[sf]);
+                }
+            }
+        }
+
+        data[options.outputTable] = groupData;
+    }
+};
 
 const analysisObj = {
     changeSort,
@@ -2053,6 +2088,7 @@ const analysisObj = {
     gatherMaterialGl,
     masterCross,
     orderBy,
+    GroupBy,
 };
 const analysisDefine = (function(obj) {
     const result = [];