perf: 老客户-分析: 目的地城市的省/地区汇总, 去除重复计算的城市

main
Lei OT 1 month ago
parent 11be41a446
commit 9a59a5ac0e

@ -2,7 +2,7 @@ import {makeAutoObservable, runInAction, toJS } from "mobx";
import { fetchJSON } from '@haina/utils-request';
import * as config from "../config";
import { groupsMappedByKey, sitesMappedByCode, pivotBy } from './../libs/ht';
import { sortBy, formatPercent, groupBy, isEmpty, uniqWith, formatPercentToFloat, fixTo2Decimals } from "@haina/utils-commons";
import { sortBy, formatPercent, groupBy, isEmpty, uniqWith, formatPercentToFloat, fixTo2Decimals, unique } from "@haina/utils-commons";
import { show_vs_tag, } from "./../utils/commons";
import moment from 'moment';
@ -14,6 +14,29 @@ const getDetailData = async (param) => {
return json.errcode === 0 ? json.result : [];
};
const initialSummaryRow = {
SumOrder: 0,
ResumeOrder: 0,
ResumeConfirmOrder: 0,
SumPersonNum: 0,
ConfirmPersonNum: 0,
ConfirmOrder: 0,
transactions: 0,
SumML: 0,
SumML_txt: '',
quotePrice: 0,
tourdays: 0,
applyDays: 0,
confirmDays: 0,
SingleML: 0,
OrderValue: 0,
PPPrice: 0,
AvgPPPrice: 0,
confirmTourdays: 0,
PPPriceRange: '',
unitPPPriceRange: '',
};
const calcSummaryRow = (data1, data2) => {
const summaryFields = ['ConfirmOrder', 'SumOrder', 'SumML', 'transactions', 'SumPersonNum', 'ConfirmPersonNum', 'ConfirmOrderKPIvalue', 'OrderKPIvalue', 'MLKPIvalue'];
@ -33,6 +56,65 @@ const calcSummaryRow = (data1, data2) => {
xSummary.vsData = xSummary2;
return xSummary;
};
const calcSummaryUniqueRow = (_data1, _data2, rawData = [[], []]) => {
console.log('calcSummaryRow', _data1, _data2, rawData);
const uniqueKeysData1 = unique(_data1.reduce((a, r) => a.concat(r.key.split('_').reduce((a1, r1) => a1.concat(r1.split('@')[0]), [])), [])).map(x => Number(x));
const uniqueKeysData2 = unique(_data2.reduce((a, r) => a.concat(r.key.split('_').reduce((a1, r1) => a1.concat(r1.split('@')[0]), [])), [])).map(x => Number(x));
console.log(uniqueKeysData1, uniqueKeysData2);
const data1 = rawData[0].filterHasOld.filter(row => uniqueKeysData1.includes((row.key)));
const data2 = rawData[1].filterHasOld.filter(row => uniqueKeysData2.includes((row.key)));
console.log(data1, data2);
const xSummary = data1.reduce((r, v) => {
r.SumOrder += 1;
r.SumPersonNum += v.personNum;
r.ConfirmPersonNum += Number(v.orderState) === 1 ? v.personNum : 0;
r.ConfirmOrder += Number(v.orderState) === 1 ? 1 : 0;
r.ResumeOrder += v.hasOld === 1 ? 1 : 0;
r.ResumeConfirmOrder += Number(v.orderState) === 1 && v.hasOld === 1 ? 1 : 0;
r.transactions += v.transactions;
r.SumML += Number(v.orderState) === 1 ? v.ML : 0;
r.quotePrice += Number(v.orderState) === 1 ? v.quotePrice : 0;
r.tourdays += v.tourdays;
r.applyDays += v.applyDays;
r.confirmDays += v.confirmDays;
// r.PPPrice += Number(v.orderState) === 1 ? v.PPPrice : 0;
r.confirmTourdays += Number(v.orderState) === 1 ? v.tourdays : 0;
return r;
}, structuredClone(initialSummaryRow));
const xSummary2 = data2.reduce((r, v) => {
r.SumOrder += 1;
r.SumPersonNum += v.personNum;
r.ConfirmPersonNum += Number(v.orderState) === 1 ? v.personNum : 0;
r.ConfirmOrder += Number(v.orderState) === 1 ? 1 : 0;
r.ResumeOrder += v.hasOld === 1 ? 1 : 0;
r.ResumeConfirmOrder += Number(v.orderState) === 1 && v.hasOld === 1 ? 1 : 0;
r.transactions += v.transactions;
r.SumML += Number(v.orderState) === 1 ? v.ML : 0;
r.quotePrice += Number(v.orderState) === 1 ? v.quotePrice : 0;
r.tourdays += v.tourdays;
r.applyDays += v.applyDays;
r.confirmDays += v.confirmDays;
// r.PPPrice += Number(v.orderState) === 1 ? v.PPPrice : 0;
r.confirmTourdays += Number(v.orderState) === 1 ? v.tourdays : 0;
return r;
}, structuredClone(initialSummaryRow));
xSummary.ConfirmRates = xSummary.SumOrder ? fixTo2Decimals((xSummary.ConfirmOrder / xSummary.SumOrder) * 100) : 0;
xSummary.ConfirmRates_txt = xSummary.ConfirmRates; // + '%';
xSummary.confirmTourdays = '-';
xSummary.SingleML = '-';
xSummary._data = data1;
xSummary2.ConfirmRates = xSummary2.SumOrder ? fixTo2Decimals((xSummary2.ConfirmOrder / xSummary2.SumOrder) * 100) : 0;
xSummary2.ConfirmRates_txt = xSummary2.ConfirmRates; // + '%';
xSummary2.confirmTourdays = '-';
xSummary2.SingleML = '-';
xSummary2._data = data2;
xSummary.vsData = xSummary2;
return xSummary;
};
class CustomerStore {
@ -685,7 +767,7 @@ class CustomerStore {
pivot1.filter((ele) => city1.includes(ele.destinations)),
pivot2.filter((ele) => city1.includes(ele.destinations)),
];
const city1Summary = calcSummaryRow(city11, city12);
const city1Summary = calcSummaryUniqueRow(city11, city12, toJS(this.sales_regular_data.rawDataArr));
city1Summary.key = '云南';
city1Summary.destinations = '云南';
@ -694,7 +776,7 @@ class CustomerStore {
pivot1.filter((ele) => city2.includes(ele.destinations)),
pivot2.filter((ele) => city2.includes(ele.destinations)),
];
const city2Summary = calcSummaryRow(city21, city22);
const city2Summary = calcSummaryUniqueRow(city21, city22, toJS(this.sales_regular_data.rawDataArr));
city2Summary.key = '华东';
city2Summary.destinations = '华东';
@ -703,7 +785,7 @@ class CustomerStore {
pivot1.filter((ele) => city3.includes(ele.destinations)),
pivot2.filter((ele) => city3.includes(ele.destinations)),
];
const city3Summary = calcSummaryRow(city31, city32);
const city3Summary = calcSummaryUniqueRow(city31, city32, toJS(this.sales_regular_data.rawDataArr));
city3Summary.key = '新疆';
city3Summary.destinations = '新疆';
const city4 = ['拉萨','江孜','林芝','鲁朗','巴松措','然乌','波密','日喀则','定日','泽当','塔钦'];
@ -711,7 +793,7 @@ class CustomerStore {
pivot1.filter((ele) => city4.includes(ele.destinations)),
pivot2.filter((ele) => city4.includes(ele.destinations)),
];
const city4Summary = calcSummaryRow(city41, city42);
const city4Summary = calcSummaryUniqueRow(city41, city42, toJS(this.sales_regular_data.rawDataArr));
city4Summary.key = '西藏';
city4Summary.destinations = '西藏';
@ -720,7 +802,7 @@ class CustomerStore {
pivot1.filter((ele) => city5.includes(ele.destinations)),
pivot2.filter((ele) => city5.includes(ele.destinations)),
];
const city5Summary = calcSummaryRow(city51, city52);
const city5Summary = calcSummaryUniqueRow(city51, city52, toJS(this.sales_regular_data.rawDataArr));
city5Summary.key = '贵州';
city5Summary.destinations = '贵州';

Loading…
Cancel
Save