From 9a59a5ac0e69888bd9ab848939bf91e285b45a94 Mon Sep 17 00:00:00 2001 From: Lei OT Date: Mon, 16 Mar 2026 15:13:55 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=80=81=E5=AE=A2=E6=88=B7-=E5=88=86?= =?UTF-8?q?=E6=9E=90:=20=E7=9B=AE=E7=9A=84=E5=9C=B0=E5=9F=8E=E5=B8=82?= =?UTF-8?q?=E7=9A=84=E7=9C=81/=E5=9C=B0=E5=8C=BA=E6=B1=87=E6=80=BB,=20?= =?UTF-8?q?=E5=8E=BB=E9=99=A4=E9=87=8D=E5=A4=8D=E8=AE=A1=E7=AE=97=E7=9A=84?= =?UTF-8?q?=E5=9F=8E=E5=B8=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/CustomerStore.js | 94 ++++++++++++++++++++++++++++++++++--- 1 file changed, 88 insertions(+), 6 deletions(-) diff --git a/src/stores/CustomerStore.js b/src/stores/CustomerStore.js index 3129de3..f5a295a 100644 --- a/src/stores/CustomerStore.js +++ b/src/stores/CustomerStore.js @@ -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 = '贵州';