|
|
|
@ -214,57 +214,7 @@ class Trade {
|
|
|
|
|
async fetchTradeDataAll(queryData) {
|
|
|
|
|
const traditional = await this.fetchTradeData(queryData);
|
|
|
|
|
const biz = await this.fetchTradeDataBiz(queryData);
|
|
|
|
|
const rr = ['result1', 'result2'].reduce((res, resKey) => {
|
|
|
|
|
const mergeItem = {
|
|
|
|
|
traditional: traditional[resKey].map(ele => ({...ele, groupsLabel: `传统 `})), // ${ele.groupsLabel}
|
|
|
|
|
biz: biz[resKey].map(ele => ({...ele, groupsLabel: `商务 `})), // ${ele.groupsLabel}
|
|
|
|
|
};
|
|
|
|
|
const mergeRes = [].concat(traditional[resKey], biz[resKey]);
|
|
|
|
|
const groupsData = mergeRes.reduce((r, v) => {
|
|
|
|
|
if (v.groupsLabel ) {
|
|
|
|
|
(r[v.groupsLabel] || (r[v.groupsLabel] = [])).push(v);
|
|
|
|
|
}
|
|
|
|
|
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) }),
|
|
|
|
|
ByDate[dateVal]?.[0] || {}
|
|
|
|
|
);
|
|
|
|
|
const pickFields = pick(ByDate[dateVal], Object.keys(ByDate[dateVal]).filter(_k => _k.endsWith('KPIvalue') ));
|
|
|
|
|
return {...sumFields, ...pickFields};
|
|
|
|
|
}, {}).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}
|
|
|
|
|
ConfirmOrderKPIrates: row.ConfirmOrderKPIvalue ? fixTo2Decimals((row.ConfirmOrder/row.ConfirmOrderKPIvalue)*100) : 0,
|
|
|
|
|
OrderKPIrates: row.OrderKPIvalue ? fixTo2Decimals((row.SumOrder/row.OrderKPIvalue)*100) : 0,
|
|
|
|
|
// ConfirmRatesKPIrates: 0, // todo:
|
|
|
|
|
}));
|
|
|
|
|
// 按对象汇总
|
|
|
|
|
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[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}
|
|
|
|
|
}));
|
|
|
|
|
return Object.assign(res, { [resKey]: Object.assign({}, mergeItem, { summary, summaryRows }) });
|
|
|
|
|
}, {});
|
|
|
|
|
const rr = parseMergeItem({ traditional, biz });
|
|
|
|
|
return rr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -327,5 +277,81 @@ class Trade {
|
|
|
|
|
{key: 'transactions', title: '营收', dataIndex: 'transactions', render: (v) => dataFieldAlias.transactions.formatter(v)},
|
|
|
|
|
], dataSource: [] };
|
|
|
|
|
}
|
|
|
|
|
export const parseMergeItem = ({traditional, biz}) => {
|
|
|
|
|
return ['result1', 'result2'].reduce((res, resKey) => {
|
|
|
|
|
const mergeItem = {
|
|
|
|
|
traditional: traditional[resKey].map(ele => ({...ele, groupsLabel: `传统 `})), // ${ele.groupsLabel}
|
|
|
|
|
biz: biz[resKey].map(ele => ({...ele, groupsLabel: `商务 `})), // ${ele.groupsLabel}
|
|
|
|
|
};
|
|
|
|
|
const mergeRes = [].concat(traditional[resKey], biz[resKey]);
|
|
|
|
|
const groupsData = mergeRes.reduce((r, v) => {
|
|
|
|
|
if (v.groupsLabel ) {
|
|
|
|
|
(r[v.groupsLabel] || (r[v.groupsLabel] = [])).push(v);
|
|
|
|
|
}
|
|
|
|
|
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) }),
|
|
|
|
|
ByDate[dateVal]?.[0] || {}
|
|
|
|
|
);
|
|
|
|
|
const pickFields = pick(ByDate[dateVal], Object.keys(ByDate[dateVal]).filter(_k => _k.endsWith('KPIvalue') ));
|
|
|
|
|
return {...sumFields, ...pickFields};
|
|
|
|
|
}, {}).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}
|
|
|
|
|
ConfirmOrderKPIrates: row.ConfirmOrderKPIvalue ? fixTo2Decimals((row.ConfirmOrder/row.ConfirmOrderKPIvalue)*100) : 0,
|
|
|
|
|
OrderKPIrates: row.OrderKPIvalue ? fixTo2Decimals((row.SumOrder/row.OrderKPIvalue)*100) : 0,
|
|
|
|
|
// ConfirmRatesKPIrates: 0, // todo:
|
|
|
|
|
}));
|
|
|
|
|
// 按对象汇总
|
|
|
|
|
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[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}
|
|
|
|
|
}));
|
|
|
|
|
// 按每一行
|
|
|
|
|
// const ByDate = sortKeys(groupBy(mergeRes, ele => ele.groupDateVal));
|
|
|
|
|
const allRowsKeysData = groupBy(mergeRes, ele => `${ele.groupsKey}@${ele.groupDateVal}`);
|
|
|
|
|
const mergeRows = Object.keys(allRowsKeysData).map(rkey => {
|
|
|
|
|
const _groupsKey = allRowsKeysData[rkey]?.[0]?.groupsKey || '';
|
|
|
|
|
const sumFields = ['ConfirmOrder', 'SumOrder', 'SumML', 'transactions', 'SumPersonNum'].reduce(
|
|
|
|
|
(r, skey) => ({ ...r,
|
|
|
|
|
[skey]: allRowsKeysData[rkey].reduce((a, c) => a + c[skey], 0),
|
|
|
|
|
[`${skey}_arr`]: [ _groupsKey ? TMapped?.[_groupsKey]?.[skey] || 0 : 0, _groupsKey ? BMapped?.[_groupsKey]?.[skey] || 0 : 0,],
|
|
|
|
|
}),
|
|
|
|
|
allRowsKeysData[rkey]?.[0] || {}
|
|
|
|
|
);
|
|
|
|
|
const pickFields = pick(allRowsKeysData[rkey], Object.keys(allRowsKeysData[rkey]).filter(_k => _k.endsWith('KPIvalue') ));
|
|
|
|
|
return {...sumFields, ...pickFields};
|
|
|
|
|
}, {}).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}
|
|
|
|
|
ConfirmOrderKPIrates: row.ConfirmOrderKPIvalue ? fixTo2Decimals((row.ConfirmOrder/row.ConfirmOrderKPIvalue)*100) : 0,
|
|
|
|
|
OrderKPIrates: row.OrderKPIvalue ? fixTo2Decimals((row.SumOrder/row.OrderKPIvalue)*100) : 0,
|
|
|
|
|
// ConfirmRatesKPIrates: 0, // todo:
|
|
|
|
|
}));
|
|
|
|
|
return Object.assign(res, { [resKey]: Object.assign({}, mergeItem, { mergeRows, summary, summaryRows }) });
|
|
|
|
|
}, {});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default Trade;
|
|
|
|
|