perf: GH例会: 顾问成交; 年数据用1.1-12.31; CH顾问成交用总览

feature/hotel-cruise
Lei OT 1 year ago
parent 00f0c1a7b1
commit 1025d321ef

@ -3,7 +3,7 @@ import { fetchJSON } from '../utils/request';
import { objectMapper, pick, price_to_number, } from '../utils/commons'; import { objectMapper, pick, price_to_number, } from '../utils/commons';
import { pivotBy } from './../libs/ht'; import { pivotBy } from './../libs/ht';
import moment from "moment"; import moment from "moment";
import { DATE_FORMAT } from './../config'; import { DATE_FORMAT, DATETIME_FORMAT, SMALL_DATETIME_FORMAT } from '../config';
/** /**
* 用于透视的数据 * 用于透视的数据
@ -40,9 +40,28 @@ const getAgentGroupInfoALL = async (param) => {
const json = await fetchJSON(url, paramBody); const json = await fetchJSON(url, paramBody);
return json.errcode === 0 ? json : {}; return json.errcode === 0 ? json : {};
}; };
const getDepartmentOrderMLByType = async (param) => {
const paramBody = objectMapper(param, {
DateType: 'DateType',
DepartmentList: 'DepartmentList', // { key: 'DepartmentList', transform: (v) => v.join(',') },
OrderType: 'OrderType', // 总览, 产品类型
});
const url = '/service-web/QueryData/GetDepartmentOrderMLByType';
const json = await fetchJSON(url, paramBody);
const { result1 } = json.errcode === 0 ? json : { result1: [] };
const total1 = ['COLI_CJCount', 'COLI_ML2',].reduce(
(r, col) => ({
...r,
[col]: result1.reduce((rr, row) => rr + row[col], 0),
}),
{}
);
return { total1, result1 };
};
const GHproductTypeListSetting = { const GHproductTypeListSetting = {
ja: ['日本', '东亚跨国'], ja: ['日本', '东亚跨国'],
se: ['东南亚跨国', '泰国', '越南', '印度尼西亚', '水灯节'], se: ['东南亚跨国', '泰国', '越南', '印度尼西亚', '水灯节', '柬埔寨', '老挝'],
in: ['印度', '印度次大陆跨国', '尼泊尔', '不丹', '斯里兰卡'], in: ['印度', '印度次大陆跨国', '尼泊尔', '不丹', '斯里兰卡'],
}; };
@ -102,27 +121,40 @@ const dataGHOther = (rawData, yearData) => {
return { ...rowItem(filterData), rowYear }; return { ...rowItem(filterData), rowYear };
}; };
const dataSales = (tKey, rawData, yearData) => { const dataSales = (tKey, rawData, yearData, yearData2) => {
const productTypeList = GHproductTypeListSetting[tKey]; const productTypeList = GHproductTypeListSetting[tKey];
const filterData = rawData.filter((ele) => productTypeList.some((item) => ele.OrderType.toLocaleLowerCase().indexOf(item) !== -1)); const filterData = rawData.filter((ele) => productTypeList.some((item) => ele.OrderType.toLocaleLowerCase().indexOf(item) !== -1));
const filterDataYear = yearData.filter((ele) => productTypeList.some((item) => ele.OrderType.toLocaleLowerCase().indexOf(item) !== -1)); const filterDataYear = yearData.filter((ele) => productTypeList.some((item) => ele.OrderType.toLocaleLowerCase().indexOf(item) !== -1));
const rowYearData = ['YJLY', 'CJCount'].reduce((r, key) => ({ ...r, [key]: filterDataYear.reduce((a, c) => a + price_to_number(c[key]), 0) }), {}); const rowYearData = ['YJLY', 'CJCount'].reduce((r, key) => ({ ...r, [key]: filterDataYear.reduce((a, c) => a + price_to_number(c[key]), 0) }), {});
const rowYear = { YJLY: price_to_number(rowYearData.YJLY), CJCount: rowYearData.CJCount };
const filterDataYear2 = yearData2.filter((ele) => productTypeList.some((item) => ele.OrderType.toLocaleLowerCase().indexOf(item) !== -1));
const rowYearData2 = ['YJLY', 'CJCount'].reduce((r, key) => ({ ...r, [key]: filterDataYear2.reduce((a, c) => a + price_to_number(c[key]), 0) }), {});
const rowYear = {
YJLY: price_to_number(rowYearData.YJLY), CJCount: rowYearData.CJCount,
YJLY2: price_to_number(rowYearData2.YJLY), CJCount2: rowYearData2.CJCount,
};
const cols = ['YJLY', 'CJCount'].reduce((r, key) => ({ ...r, [key]: filterData.reduce((a, c) => a + price_to_number(c[key]), 0) }), {}); const cols = ['YJLY', 'CJCount'].reduce((r, key) => ({ ...r, [key]: filterData.reduce((a, c) => a + price_to_number(c[key]), 0) }), {});
// console.log(tKey, filterData, filterDataYear); // console.log(tKey, filterData, filterDataYear, filterDataYear2);
return { ...cols, rowYear }; return { ...cols, rowYear, rawData: filterData, rawYearData: filterDataYear, rawYearData2: filterDataYear2 };
}; };
const dataSalesGHOther = (rawData, yearData) => { const dataSalesGHOther = (rawData, yearData, yearData2) => {
const exceptProduct = Object.values(GHproductTypeListSetting).reduce((r, c) => r.concat(c), []); const exceptProduct = Object.values(GHproductTypeListSetting).reduce((r, c) => r.concat(c), []);
const filterData = rawData.filter((ele) => exceptProduct.every((item) => ele.OrderType.toLocaleLowerCase().indexOf(item) === -1)); const filterData = rawData.filter((ele) => exceptProduct.every((item) => ele.OrderType.toLocaleLowerCase().indexOf(item) === -1));
const filterDataYear = yearData.filter((ele) => exceptProduct.every((item) => ele.OrderType.toLocaleLowerCase().indexOf(item) === -1)); const filterDataYear = yearData.filter((ele) => exceptProduct.every((item) => ele.OrderType.toLocaleLowerCase().indexOf(item) === -1));
const rowYearData = ['YJLY', 'CJCount'].reduce((r, key) => ({ ...r, [key]: filterDataYear.reduce((a, c) => a + price_to_number(c[key]), 0) }), {}); const rowYearData = ['YJLY', 'CJCount'].reduce((r, key) => ({ ...r, [key]: filterDataYear.reduce((a, c) => a + price_to_number(c[key]), 0) }), {});
const rowYear = { YJLY: price_to_number(rowYearData.YJLY), CJCount: rowYearData.CJCount };
const filterDataYear2 = yearData2.filter((ele) => exceptProduct.every((item) => ele.OrderType.toLocaleLowerCase().indexOf(item) === -1));
const rowYearData2 = ['YJLY', 'CJCount'].reduce((r, key) => ({ ...r, [key]: filterDataYear2.reduce((a, c) => a + price_to_number(c[key]), 0) }), {});
const rowYear = {
YJLY: price_to_number(rowYearData.YJLY), CJCount: rowYearData.CJCount,
YJLY2: price_to_number(rowYearData2.YJLY), CJCount2: rowYearData2.CJCount,
};
const cols = ['YJLY', 'CJCount'].reduce((r, key) => ({ ...r, [key]: filterData.reduce((a, c) => a + price_to_number(c[key]), 0) }), {}); const cols = ['YJLY', 'CJCount'].reduce((r, key) => ({ ...r, [key]: filterData.reduce((a, c) => a + price_to_number(c[key]), 0) }), {});
// console.log('Oo', filterData, filterDataYear); // console.log('Oo', filterData, filterDataYear, filterDataYear2);
return { ...cols, rowYear }; return { ...cols, rowYear, rawData: filterData, rawYearData: filterDataYear, rawYearData2: filterDataYear2 };
}; };
class MeetingData { class MeetingData {
@ -199,38 +231,38 @@ class MeetingData {
*/ */
dataGHSales = async (param) => { dataGHSales = async (param) => {
this.GHSalesLoading = true; this.GHSalesLoading = true;
const salesParam = { ...param, DateType: 'confirmDate' }; const salesParam = { ...param, DateType: 'confirmDate', 'WebCode': 'All', };
// console.log(param); // console.log(param);
const { ordercountTotal1: CHSalesDataWeek } = await getOrderCountByType({ ...salesParam, 'DepartmentList': '1', 'WebCode': 'All', OrderType: 'LineClass' }); const { total1: CHSalesDataWeek } = await getDepartmentOrderMLByType({...salesParam, DepartmentList: '1', OrderType:'ALL'});
const { ordercount1: exceptCHSalesDataWeek } = await getOrderCountByType({ ...salesParam, 'DepartmentList': '28,33', 'WebCode': 'All', OrderType: 'Product' }); const { ordercount1: exceptCHSalesDataWeek } = await getOrderCountByType({ ...salesParam, 'DepartmentList': '28,33', 'WebCode': 'All', OrderType: 'Product' });
const yearStart = moment().startOf("year").format(DATE_FORMAT); const yearStart = moment().startOf("year").format(DATE_FORMAT);
const yearEnd = moment().endOf("year").format(DATE_FORMAT); const yearEnd = moment().endOf("year").format(SMALL_DATETIME_FORMAT);
/** 截至今年 - 成交 */ /** 截至今年 - 成交 */
const { ordercountTotal1: CHDataYear } = await getOrderCountByType({ ...salesParam, Date1: yearStart,Date2:yearEnd, 'DepartmentList': '1', 'WebCode': 'All', OrderType: 'LineClass' }); const { total1: CHDataYear } = await getDepartmentOrderMLByType({...salesParam, Date1: yearStart,Date2:yearEnd,DepartmentList: '1', OrderType:'ALL' });
const { ordercount1: ColLineClassDataYear } = await getOrderCountByType({ ...salesParam, Date1: yearStart,Date2:yearEnd, 'DepartmentList': '28,33', WebCode: 'All', OrderType: 'Product' }); const { ordercount1: ColLineClassDataYear } = await getOrderCountByType({ ...salesParam, Date1: yearStart,Date2:yearEnd, 'DepartmentList': '28,33', WebCode: 'All', OrderType: 'Product' });
/** 截至今年 - 走团 */ /** 截至今年 - 走团 */
const { ordercountTotal1: CHStartDataYear } = await getOrderCountByType({ ...salesParam, Date1: yearStart,Date2:yearEnd, DepartmentList: '1', 'WebCode': 'All', OrderType: 'LineClass', DateType: 'startDate' }); const { total1: CHStartDataYear } = await getDepartmentOrderMLByType({...salesParam, Date1: yearStart,Date2:yearEnd,DepartmentList: '1', OrderType:'ALL',DateType: 'startDate' });
const { ordercount1: GHStartDataYear } = await getOrderCountByType({ ...salesParam, Date1: yearStart,Date2:yearEnd, DepartmentList: '28,33', WebCode: 'All', OrderType: 'Product', DateType: 'startDate' }); const { ordercount1: GHStartDataYear } = await getOrderCountByType({ ...salesParam, Date1: yearStart,Date2:yearEnd, DepartmentList: '28,33', WebCode: 'All', OrderType: 'Product', DateType: 'startDate' });
const rows = [ const rows = [
{ {
key: 'ch', key: 'ch',
label: '中国', label: '中国',
YJLY: price_to_number(CHSalesDataWeek.YJLY), YJLY: price_to_number(CHSalesDataWeek.COLI_ML2),
CJCount: (CHSalesDataWeek.CJCount), CJCount: (CHSalesDataWeek.COLI_CJCount),
rowYear: { YJLY: price_to_number(CHDataYear.YJLY), CJCount: CHDataYear.CJCount, StartProfit: price_to_number(CHStartDataYear.YJLY) }, rowYear: { YJLY: price_to_number(CHDataYear.COLI_ML2), CJCount: CHDataYear.COLI_CJCount, YJLY2: price_to_number(CHStartDataYear.COLI_ML2) },
}, },
{ key: 'ja', label: '日本+', ...dataSales('ja', exceptCHSalesDataWeek, ColLineClassDataYear) }, { key: 'ja', label: '日本+', ...dataSales('ja', exceptCHSalesDataWeek, ColLineClassDataYear, GHStartDataYear) },
{ key: 'se', label: '东南亚+', ...dataSales('se', exceptCHSalesDataWeek, ColLineClassDataYear) }, { key: 'se', label: '东南亚+', ...dataSales('se', exceptCHSalesDataWeek, ColLineClassDataYear, GHStartDataYear) },
{ key: 'in', label: '印度+', ...dataSales('in', exceptCHSalesDataWeek, ColLineClassDataYear) }, { key: 'in', label: '印度+', ...dataSales('in', exceptCHSalesDataWeek, ColLineClassDataYear, GHStartDataYear) },
{ key: 'other', label: '其他GH', ...dataSalesGHOther(exceptCHSalesDataWeek, ColLineClassDataYear) }, { key: 'other', label: '其他GH', ...dataSalesGHOther(exceptCHSalesDataWeek, ColLineClassDataYear, GHStartDataYear) },
]; ];
const columnsSum = ['CJCount', 'YJLY'].reduce((r, col) => ({ ...r, [col]: rows.reduce((rr, row) => rr + row[col], 0) }), {}); const columnsSum = ['CJCount', 'YJLY'].reduce((r, col) => ({ ...r, [col]: rows.reduce((rr, row) => rr + row[col], 0) }), {});
const allYearData = rows.map(row => row.rowYear); const allYearData = rows.map(row => row.rowYear);
const rowYear = ['CJCount', 'YJLY'].reduce((r, col) => ({ ...r, [col]: allYearData.reduce((rr, row) => rr + row[col], 0) }), {}); const rowYear = ['CJCount', 'YJLY', 'CJCount2', 'YJLY2', ].reduce((r, col) => ({ ...r, [col]: allYearData.reduce((rr, row) => rr + (row[col] || 0), 0) }), {});
rows.push({ key: 'columnSum', label: '合计', ...columnsSum, rowYear }); rows.push({ key: 'columnSum', label: '合计', ...columnsSum, rowYear });
// console.log(rows, rowYear); // console.log(rows, allYearData, rowYear);
runInAction(() => { runInAction(() => {
this.GHSalesTableData = rows; this.GHSalesTableData = rows;
this.GHSalesLoading = false; this.GHSalesLoading = false;

@ -21,9 +21,9 @@ export default observer((props) => {
const { formValues, formValuesToSub, siderBroken } = searchFormStore; const { formValues, formValuesToSub, siderBroken } = searchFormStore;
const dataRefresh = async (obj) => { const dataRefresh = async (obj) => {
// MeetingDataStore.dataGHOrder({ ...(obj || formValuesToSub) }); MeetingDataStore.dataGHOrder({ ...(obj || formValuesToSub) });
MeetingDataStore.dataGHSales({ ...(obj || formValuesToSub) }); MeetingDataStore.dataGHSales({ ...(obj || formValuesToSub) });
// MeetingDataStore.dataGHService({ ...(obj || formValuesToSub) }); MeetingDataStore.dataGHService({ ...(obj || formValuesToSub) });
}; };
const targetTableProps = { const targetTableProps = {
@ -49,7 +49,7 @@ export default observer((props) => {
{ key: 'YJLY', title: '周成交毛利(万)', dataIndex: 'YJLY', render: (text) => numberConvert10K(text) }, { key: 'YJLY', title: '周成交毛利(万)', dataIndex: 'YJLY', render: (text) => numberConvert10K(text) },
{ key: 'CJCount1', title: '年成交个数', dataIndex: ['rowYear', 'CJCount'] }, { key: 'CJCount1', title: '年成交个数', dataIndex: ['rowYear', 'CJCount'] },
{ key: 'YJLY1', title: '年成交毛利(万)', dataIndex: ['rowYear', 'YJLY'], render: (text) => numberConvert10K(text) }, { key: 'YJLY1', title: '年成交毛利(万)', dataIndex: ['rowYear', 'YJLY'], render: (text) => numberConvert10K(text) },
{ key: 'YJLY2', title: '年走团毛利(万)', dataIndex: ['rowYear', 'StartProfit'], render: (text) => numberConvert10K(text) }, { key: 'YJLY2', title: '年走团毛利(万)', dataIndex: ['rowYear', 'YJLY2'], render: (text) => numberConvert10K(text) },
], ],
serviceColumns: [ serviceColumns: [
{ key: 'label', title: '', dataIndex: 'label', width: 150, }, { key: 'label', title: '', dataIndex: 'label', width: 150, },
@ -86,19 +86,19 @@ export default observer((props) => {
<Divider orientation="right" plain> <Divider orientation="right" plain>
<span>2024-GH: 市场</span> <span>2024-GH: 市场</span>
<TableExportBtn label={formValuesToSub.Date1} {...{ columns: targetTableProps.orderColumns, dataSource: MeetingDataStore.GHTableData }} /> <TableExportBtn label={`${formValuesToSub.Date1}-2024-GH: 市场`} {...{ columns: targetTableProps.orderColumns, dataSource: MeetingDataStore.GHTableData }} />
</Divider> </Divider>
<Table {...targetTableProps} key={'GHTable'} dataSource={MeetingDataStore.GHTableData} columns={targetTableProps.orderColumns} loading={MeetingDataStore.GHTableLoading} /> <Table {...targetTableProps} key={'GHTable'} dataSource={MeetingDataStore.GHTableData} columns={targetTableProps.orderColumns} loading={MeetingDataStore.GHTableLoading} />
<Divider orientation="right" plain> <Divider orientation="right" plain>
<span>2024-GH: 顾问成交</span> <span>2024-GH: 顾问成交</span>
<TableExportBtn label={formValuesToSub.Date1} {...{ columns: targetTableProps.salesColumns, dataSource: MeetingDataStore.GHSalesTableData }} /> <TableExportBtn label={`${formValuesToSub.Date1}-2024-GH: 顾问成交`} {...{ columns: targetTableProps.salesColumns, dataSource: MeetingDataStore.GHSalesTableData }} />
</Divider> </Divider>
<Table {...targetTableProps} key={'GHSales'} dataSource={MeetingDataStore.GHSalesTableData} columns={targetTableProps.salesColumns} loading={MeetingDataStore.GHSalesLoading} /> <Table {...targetTableProps} key={'GHSales'} dataSource={MeetingDataStore.GHSalesTableData} columns={targetTableProps.salesColumns} loading={MeetingDataStore.GHSalesLoading} />
<Divider orientation="right" plain> <Divider orientation="right" plain>
<span>2024-GH: 客服</span> <span>2024-GH: 客服</span>
<TableExportBtn label={formValuesToSub.Date1} {...{ columns: targetTableProps.serviceColumns, dataSource: MeetingDataStore.GHServiceTableData }} /> <TableExportBtn label={`${formValuesToSub.Date1}-2024-GH: 客服`} {...{ columns: targetTableProps.serviceColumns, dataSource: MeetingDataStore.GHServiceTableData }} />
</Divider> </Divider>
<Table {...targetTableProps} key={'GHService'} dataSource={MeetingDataStore.GHServiceTableData} columns={targetTableProps.serviceColumns} loading={MeetingDataStore.GHServiceLoading} /> <Table {...targetTableProps} key={'GHService'} dataSource={MeetingDataStore.GHServiceTableData} columns={targetTableProps.serviceColumns} loading={MeetingDataStore.GHServiceLoading} />

Loading…
Cancel
Save