|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
import { makeAutoObservable, runInAction, toJS } from 'mobx';
|
|
|
|
|
import * as req from '../utils/request';
|
|
|
|
|
import { isEmpty, sortBy, pick, merge, fixTo2Decimals, groupBy, sortKeys, fixToInt } from '../utils/commons';
|
|
|
|
|
import { isEmpty, sortBy, pick, merge, fixTo2Decimals, groupBy, sortKeys, fixToInt, cloneDeep } from '../utils/commons';
|
|
|
|
|
import { dataFieldAlias } from './../libs/ht';
|
|
|
|
|
|
|
|
|
|
class Trade {
|
|
|
|
@ -16,7 +16,7 @@ class Trade {
|
|
|
|
|
this.summaryData.loading = true;
|
|
|
|
|
queryData.groupType = queryData?.groupType || 'overview';
|
|
|
|
|
queryData.groupDateType = 'year';
|
|
|
|
|
const multiData = await this.fetchTradeDataAll(queryData);
|
|
|
|
|
const multiData = await this.fetchTradeDataAll(cloneDeep(queryData));
|
|
|
|
|
const { summary, traditional, biz } = multiData.result1;
|
|
|
|
|
// console.log(JSON.stringify(summary), 'mmmmmmmmmmm');
|
|
|
|
|
const summaryData = {
|
|
|
|
@ -86,7 +86,7 @@ class Trade {
|
|
|
|
|
queryData = Object.assign({}, this.searchPayloadHome, queryData); // queryData || this.searchPayloadHome;
|
|
|
|
|
queryData.groupType = queryData?.groupType || 'overview';
|
|
|
|
|
Object.assign(queryData, { groupDateType: this.timeLineKey });
|
|
|
|
|
const multiData = await this.fetchTradeDataAll(queryData);
|
|
|
|
|
const multiData = await this.fetchTradeDataAll(cloneDeep(queryData));
|
|
|
|
|
const { traditional, biz } = multiData.result1;
|
|
|
|
|
// console.log(biz, 'mmmmmmmm', queryData, multiData);
|
|
|
|
|
const mergeData = [].concat(traditional, biz);
|
|
|
|
@ -170,19 +170,21 @@ class Trade {
|
|
|
|
|
/**
|
|
|
|
|
* TOP
|
|
|
|
|
*/
|
|
|
|
|
fetchTradeDataByType(orderType, queryData) {
|
|
|
|
|
async fetchTradeDataByType(orderType, queryData) {
|
|
|
|
|
this.topData[orderType] = { loading: true, dataSource: [], originData: [] };
|
|
|
|
|
Object.assign(queryData, { groupType: orderType, groupDateType: 'year' });
|
|
|
|
|
this.fetchTradeData(queryData).then((json) => {
|
|
|
|
|
if (json.errcode === 0) {
|
|
|
|
|
|
|
|
|
|
const multiData = await this.fetchTradeDataAll(cloneDeep(queryData));
|
|
|
|
|
const { traditional, biz, summary } = multiData.result1;
|
|
|
|
|
// console.log(biz, orderType, 'mmmmmmmm', queryData, multiData);
|
|
|
|
|
// const mergeData = [].concat(traditional, biz);
|
|
|
|
|
// const dateKeyData = groupBy(mergeData, ele => ele.groupDateVal);
|
|
|
|
|
runInAction(() => {
|
|
|
|
|
this.topData[orderType].loading = false;
|
|
|
|
|
this.topData[orderType].dataSource = json.result1;
|
|
|
|
|
this.topData[orderType].dataSource = summary;
|
|
|
|
|
this.getTargetsRes(orderType);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取业绩数据: 传统订单
|
|
|
|
@ -225,6 +227,7 @@ class Trade {
|
|
|
|
|
return r;
|
|
|
|
|
}, {});
|
|
|
|
|
const ByDate = sortKeys(groupBy(mergeRes, ele => ele.groupDateVal));
|
|
|
|
|
// 按日期汇总
|
|
|
|
|
const summaryRows = Object.keys(ByDate).map(dateVal => {
|
|
|
|
|
const sumFields = ['ConfirmOrder', 'SumOrder', 'SumML', 'transactions', 'SumPersonNum'].reduce(
|
|
|
|
|
(r, skey) => ({ ...r, [skey]: ByDate[dateVal].reduce((a, c) => a + c[skey], 0) }),
|
|
|
|
@ -236,21 +239,29 @@ class Trade {
|
|
|
|
|
ConfirmRates: row.SumOrder ? fixTo2Decimals((row.ConfirmOrder/row.SumOrder)*100) : 0,
|
|
|
|
|
MLKPIrates: row.MLKPIvalue ? fixTo2Decimals((row.SumML/row.MLKPIvalue)*100) : 0,
|
|
|
|
|
OrderValue: row.SumOrder ? fixToInt((row.SumML/row.SumOrder)) : 0,
|
|
|
|
|
groupsLabel: `总 `, // ${row.groupsLabel}
|
|
|
|
|
// groupsLabel: `总 `, // ${row.groupsLabel}
|
|
|
|
|
ConfirmOrderKPIrates: row.ConfirmOrderKPIvalue ? fixTo2Decimals((row.ConfirmOrder/row.ConfirmOrderKPIvalue)*100) : 0,
|
|
|
|
|
OrderKPIrates: row.OrderKPIvalue ? fixTo2Decimals((row.SumOrder/row.OrderKPIvalue)*100) : 0,
|
|
|
|
|
// ConfirmRatesKPIrates: 0, // todo:
|
|
|
|
|
}));
|
|
|
|
|
const summary = Object.keys(groupsData).map(groupsKey => {
|
|
|
|
|
// 按对象汇总
|
|
|
|
|
const TMapped = traditional[resKey].reduce((r, v) => ({...r, [v.groupsKey]: v}), {});
|
|
|
|
|
const BMapped = biz[resKey].reduce((r, v) => ({...r, [v.groupsKey]: v}), {});
|
|
|
|
|
const summary = Object.keys(groupsData).map(groupsLabel => {
|
|
|
|
|
const _groupsKey = groupsData[groupsLabel]?.[0]?.groupsKey || '';
|
|
|
|
|
return ['ConfirmOrder', 'SumOrder', 'SumML', 'transactions', 'SumPersonNum'].reduce(
|
|
|
|
|
(r, skey) => ({ ...r, [skey]: groupsData[groupsKey].reduce((a, c) => a + c[skey], 0) }),
|
|
|
|
|
groupsData[groupsKey]?.[0] || {}
|
|
|
|
|
(r, skey) => ({ ...r,
|
|
|
|
|
[skey]: groupsData[groupsLabel].reduce((a, c) => a + c[skey], 0),
|
|
|
|
|
// [`${skey}_arr`]: groupsData[groupsLabel].map(sv => sv[skey]),
|
|
|
|
|
[`${skey}_arr`]: [ _groupsKey ? TMapped?.[_groupsKey]?.[skey] || 0 : 0, _groupsKey ? BMapped?.[_groupsKey]?.[skey] || 0 : 0,],
|
|
|
|
|
}),
|
|
|
|
|
groupsData[groupsLabel]?.[0] || {}
|
|
|
|
|
);
|
|
|
|
|
}).map(row => ({...row,
|
|
|
|
|
ConfirmRates: row.SumOrder ? fixTo2Decimals((row.ConfirmOrder/row.SumOrder)*100) : 0,
|
|
|
|
|
MLKPIrates: row.MLKPIvalue ? fixTo2Decimals((row.SumML/row.MLKPIvalue)*100) : 0,
|
|
|
|
|
OrderValue: row.SumOrder ? fixToInt((row.SumML/row.SumOrder)) : 0,
|
|
|
|
|
groupsLabel: `总 `, // ${row.groupsLabel}
|
|
|
|
|
// groupsLabel: `总 `, // ${row.groupsLabel}
|
|
|
|
|
}));
|
|
|
|
|
return Object.assign(res, { [resKey]: Object.assign({}, mergeItem, { summary, summaryRows }) });
|
|
|
|
|
}, {});
|
|
|
|
@ -313,6 +324,7 @@ class Trade {
|
|
|
|
|
{key: 'ConfirmOrder', title: '成行数', dataIndex: 'ConfirmOrder'},
|
|
|
|
|
{key: 'ConfirmRates', title: '成行率', dataIndex: 'ConfirmRates'},
|
|
|
|
|
{key: 'SumML', title: '毛利', dataIndex: 'SumML', render: (v) => dataFieldAlias.SumML.formatter(v)},
|
|
|
|
|
{key: 'transactions', title: '营收', dataIndex: 'transactions', render: (v) => dataFieldAlias.transactions.formatter(v)},
|
|
|
|
|
], dataSource: [] };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|