|
|
|
|
@ -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 = '贵州';
|
|
|
|
|
|
|
|
|
|
|