|
@@ -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 = [];
|