@ -2,7 +2,7 @@ import {makeAutoObservable, runInAction, toJS } from "mobx";
import { fetchJSON } from '@haina/utils-request' ;
import { fetchJSON } from '@haina/utils-request' ;
import * as config from "../config" ;
import * as config from "../config" ;
import { groupsMappedByKey , sitesMappedByCode , pivotBy } from './../libs/ht' ;
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 { show _vs _tag , } from "./../utils/commons" ;
import moment from 'moment' ;
import moment from 'moment' ;
@ -14,6 +14,29 @@ const getDetailData = async (param) => {
return json . errcode === 0 ? json . result : [ ] ;
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 calcSummaryRow = ( data1 , data2 ) => {
const summaryFields = [ 'ConfirmOrder' , 'SumOrder' , 'SumML' , 'transactions' , 'SumPersonNum' , 'ConfirmPersonNum' , 'ConfirmOrderKPIvalue' , 'OrderKPIvalue' , 'MLKPIvalue' ] ;
const summaryFields = [ 'ConfirmOrder' , 'SumOrder' , 'SumML' , 'transactions' , 'SumPersonNum' , 'ConfirmPersonNum' , 'ConfirmOrderKPIvalue' , 'OrderKPIvalue' , 'MLKPIvalue' ] ;
@ -33,6 +56,65 @@ const calcSummaryRow = (data1, data2) => {
xSummary . vsData = xSummary2 ;
xSummary . vsData = xSummary2 ;
return xSummary ;
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 {
class CustomerStore {
@ -634,7 +716,50 @@ class CustomerStore {
eurusdSummary . key = '欧美4国' ;
eurusdSummary . key = '欧美4国' ;
eurusdSummary . country = '欧美4国' ;
eurusdSummary . country = '欧美4国' ;
this . sales _regular _data . countrySummary = [ aseanSummary , eurusdSummary ] ;
// 西班牙语国家/地区
const esLgc = [ '阿根廷' , '玻利维亚' , '智利' , '哥伦比亚' , '哥斯达黎加' , '古巴' , '多米尼加共和国' , '厄瓜多尔' , '萨尔瓦多' , '赤道几内亚' , '危地马拉' , '洪都拉斯' , '墨西哥' , '尼加拉瓜' , '巴拿马' , '巴拉圭' , '秘鲁' , '波多黎各' , '西班牙' , '乌拉圭' , '委内瑞拉' ] ;
const [ esLgc1 , esLgc2 ] = [
pivot1 . filter ( ( ele ) => esLgc . includes ( ele . country ) ) ,
pivot2 . filter ( ( ele ) => esLgc . includes ( ele . country ) ) ,
] ;
const esLgcSummary = calcSummaryRow ( esLgc1 , esLgc2 ) ;
esLgcSummary . key = '西班牙语国家/地区' ;
esLgcSummary . country = '西班牙语国家/地区' ;
// 意大利语国家/地区
const itLgc = [ '意大利' , '圣马力诺' , '梵蒂冈' , '瑞士' , ] ;
const [ itLgc1 , itLgc2 ] = [
pivot1 . filter ( ( ele ) => itLgc . includes ( ele . country ) ) ,
pivot2 . filter ( ( ele ) => itLgc . includes ( ele . country ) ) ,
] ;
const itLgcSummary = calcSummaryRow ( itLgc1 , itLgc2 ) ;
itLgcSummary . key = '意大利语国家/地区' ;
itLgcSummary . country = '意大利语国家/地区' ;
// 德语国家/地区
const deLgc = [ '德国' , '奥地利' , '瑞士' , '列支敦士登' , '卢森堡' , '比利时' , ] ;
const [ deLgc1 , deLgc2 ] = [
pivot1 . filter ( ( ele ) => deLgc . includes ( ele . country ) ) ,
pivot2 . filter ( ( ele ) => deLgc . includes ( ele . country ) ) ,
] ;
const deLgcSummary = calcSummaryRow ( deLgc1 , deLgc2 ) ;
deLgcSummary . key = '德语国家/地区' ;
deLgcSummary . country = '德语国家/地区' ;
// 葡萄牙语国家
const ptLgc = [ '葡萄牙' , '巴西' , '安哥拉' , '莫桑比克' , '几内亚比绍' , '佛得角' , '圣多美和普林西比' , '东帝汶' , ] ;
const [ ptLgc1 , ptLgc2 ] = [
pivot1 . filter ( ( ele ) => ptLgc . includes ( ele . country ) ) ,
pivot2 . filter ( ( ele ) => ptLgc . includes ( ele . country ) ) ,
] ;
const ptLgcSummary = calcSummaryRow ( ptLgc1 , ptLgc2 ) ;
ptLgcSummary . key = '葡萄牙语国家/地区' ;
ptLgcSummary . country = '葡萄牙语国家/地区' ;
this . sales _regular _data . countrySummary = [
aseanSummary , eurusdSummary ,
esLgcSummary , itLgcSummary , deLgcSummary , ptLgcSummary ,
] ;
}
}
if ( pivotRow === 'destinations' ) {
if ( pivotRow === 'destinations' ) {
const city1 = [ '昆明' , '大理' , '丽江' , '中甸' , '德钦' , '西双版纳' , '普洱' , '泸沽湖' , '腾冲' ] ;
const city1 = [ '昆明' , '大理' , '丽江' , '中甸' , '德钦' , '西双版纳' , '普洱' , '泸沽湖' , '腾冲' ] ;
@ -642,7 +767,7 @@ class CustomerStore {
pivot1 . filter ( ( ele ) => city1 . includes ( ele . destinations ) ) ,
pivot1 . filter ( ( ele ) => city1 . includes ( ele . destinations ) ) ,
pivot2 . filter ( ( ele ) => city1 . includes ( ele . destinations ) ) ,
pivot2 . filter ( ( ele ) => city1 . includes ( ele . destinations ) ) ,
] ;
] ;
const city1Summary = calcSummary Row( city11 , city12 ) ;
const city1Summary = calcSummary Unique Row( city11 , city12 , toJS ( this . sales _regular _data . rawDataArr ) ) ;
city1Summary . key = '云南' ;
city1Summary . key = '云南' ;
city1Summary . destinations = '云南' ;
city1Summary . destinations = '云南' ;
@ -651,7 +776,7 @@ class CustomerStore {
pivot1 . filter ( ( ele ) => city2 . includes ( ele . destinations ) ) ,
pivot1 . filter ( ( ele ) => city2 . includes ( ele . destinations ) ) ,
pivot2 . filter ( ( ele ) => city2 . includes ( ele . destinations ) ) ,
pivot2 . filter ( ( ele ) => city2 . includes ( ele . destinations ) ) ,
] ;
] ;
const city2Summary = calcSummary Row( city21 , city22 ) ;
const city2Summary = calcSummary Unique Row( city21 , city22 , toJS ( this . sales _regular _data . rawDataArr ) ) ;
city2Summary . key = '华东' ;
city2Summary . key = '华东' ;
city2Summary . destinations = '华东' ;
city2Summary . destinations = '华东' ;
@ -660,7 +785,7 @@ class CustomerStore {
pivot1 . filter ( ( ele ) => city3 . includes ( ele . destinations ) ) ,
pivot1 . filter ( ( ele ) => city3 . includes ( ele . destinations ) ) ,
pivot2 . filter ( ( ele ) => city3 . includes ( ele . destinations ) ) ,
pivot2 . filter ( ( ele ) => city3 . includes ( ele . destinations ) ) ,
] ;
] ;
const city3Summary = calcSummary Row( city31 , city32 ) ;
const city3Summary = calcSummary Unique Row( city31 , city32 , toJS ( this . sales _regular _data . rawDataArr ) ) ;
city3Summary . key = '新疆' ;
city3Summary . key = '新疆' ;
city3Summary . destinations = '新疆' ;
city3Summary . destinations = '新疆' ;
const city4 = [ '拉萨' , '江孜' , '林芝' , '鲁朗' , '巴松措' , '然乌' , '波密' , '日喀则' , '定日' , '泽当' , '塔钦' ] ;
const city4 = [ '拉萨' , '江孜' , '林芝' , '鲁朗' , '巴松措' , '然乌' , '波密' , '日喀则' , '定日' , '泽当' , '塔钦' ] ;
@ -668,7 +793,7 @@ class CustomerStore {
pivot1 . filter ( ( ele ) => city4 . includes ( ele . destinations ) ) ,
pivot1 . filter ( ( ele ) => city4 . includes ( ele . destinations ) ) ,
pivot2 . filter ( ( ele ) => city4 . includes ( ele . destinations ) ) ,
pivot2 . filter ( ( ele ) => city4 . includes ( ele . destinations ) ) ,
] ;
] ;
const city4Summary = calcSummary Row( city41 , city42 ) ;
const city4Summary = calcSummary Unique Row( city41 , city42 , toJS ( this . sales _regular _data . rawDataArr ) ) ;
city4Summary . key = '西藏' ;
city4Summary . key = '西藏' ;
city4Summary . destinations = '西藏' ;
city4Summary . destinations = '西藏' ;
@ -677,7 +802,7 @@ class CustomerStore {
pivot1 . filter ( ( ele ) => city5 . includes ( ele . destinations ) ) ,
pivot1 . filter ( ( ele ) => city5 . includes ( ele . destinations ) ) ,
pivot2 . filter ( ( ele ) => city5 . includes ( ele . destinations ) ) ,
pivot2 . filter ( ( ele ) => city5 . includes ( ele . destinations ) ) ,
] ;
] ;
const city5Summary = calcSummary Row( city51 , city52 ) ;
const city5Summary = calcSummary Unique Row( city51 , city52 , toJS ( this . sales _regular _data . rawDataArr ) ) ;
city5Summary . key = '贵州' ;
city5Summary . key = '贵州' ;
city5Summary . destinations = '贵州' ;
city5Summary . destinations = '贵州' ;