Files
desktop_task_schedule/code/web/task_schedule/src/utils/archievement.ts

217 lines
7.2 KiB
TypeScript
Raw Normal View History

2023-03-17 18:53:13 +08:00
/*
* @Author: Kane
* @Date: 2023-03-17 15:17:44
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/archievement.ts
2023-08-28 17:41:07 +08:00
* @Description:
2023-03-17 18:53:13 +08:00
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { service as instance } from "./api/request.js";
import { API_URL } from "./api/config.js";
2023-08-28 17:41:07 +08:00
import { type Department } from "../types/cpicxim/Department.js";
import { type TelSaler } from "../types/cpicxim/TelSaler.js";
import { type AxiosResponse } from "axios";
2023-03-17 18:53:13 +08:00
2023-08-28 17:41:07 +08:00
interface DepartmentArchievement // 定义业绩对象的结构
2023-03-17 18:53:13 +08:00
{
success: boolean;
message: string;
total_archievement: number;
2023-03-21 18:01:05 +08:00
mensual_archievement_list: number[];
2023-03-17 18:53:13 +08:00
insurance_renewal_rate: string;
attaching_rate: string;
leading_reward_gainers: string[];
advance_reward_gainers: string[];
backward_list: string[];
}
2023-08-29 10:55:30 +08:00
interface CallerArchievement // 坐席业绩对象
2023-08-28 17:41:07 +08:00
{
success: boolean;
message: string;
total_archievement: number;
mensual_archievement_list: number[];
insurance_renewal_rate: string;
attaching_rate: string;
}
2023-08-29 10:55:30 +08:00
interface MenusalArchievementItem // 每月业绩清单的项目
2023-08-28 17:41:07 +08:00
{
2023-08-29 10:55:30 +08:00
month: number;
premium: string;
2023-08-28 17:41:07 +08:00
}
/**
*
2023-08-29 10:55:30 +08:00
* @param departmentInfo
* @param render DepartmentArchievement对象调用
*/
function queryDepartmentArchievement( departmentInfo: Department, render: any ): void
2023-03-17 18:53:13 +08:00
{
2023-03-24 15:11:47 +08:00
instance.request({
2023-03-17 18:53:13 +08:00
method: "post",
url: API_URL.URL_DEPARTMENT_ARCHIEVEMENT,
data: departmentInfo,
2023-03-24 15:11:47 +08:00
})
.then(( response ) =>
2023-03-17 18:53:13 +08:00
{
2023-08-28 17:41:07 +08:00
const archievement: DepartmentArchievement = {
2023-03-17 18:53:13 +08:00
success: false,
message: "",
total_archievement: 0,
mensual_archievement_list: [],
insurance_renewal_rate: "",
attaching_rate: "",
leading_reward_gainers: [],
advance_reward_gainers: [],
backward_list: [],
};
const data = response.data ?? {};
archievement.success = data.success ?? false;
archievement.message = data.message ?? "";
2023-07-31 20:14:49 +08:00
archievement.total_archievement = data.total_archievement;
// archievement.mensual_archievement_list = data.mensual_archievement_list ?? [];
archievement.mensual_archievement_list = [];
2023-03-17 18:53:13 +08:00
archievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0";
archievement.attaching_rate = data.attaching_rate ?? "0.0";
archievement.leading_reward_gainers = data.leading_reward_gainers ?? [];
archievement.advance_reward_gainers = data.advance_reward_gainers ?? [];
archievement.backward_list = data.backward_list ?? [];
2023-08-25 20:47:36 +08:00
2023-07-31 20:14:49 +08:00
// 转换每月业绩数据用month排序以后保留premium。
2023-08-25 20:47:36 +08:00
data.mensual_archievement_list.sort(( a: any, b: any ) => a.month - b.month );
data.mensual_archievement_list.forEach(( item: any ) =>
2023-07-31 20:14:49 +08:00
{
archievement.mensual_archievement_list.push( item.premium );
});
2023-03-17 18:53:13 +08:00
2023-07-31 20:14:49 +08:00
console.log( "每月业绩", archievement );
// 渲染数据
render( archievement );
2023-03-24 15:11:47 +08:00
})
.catch(( error ) =>
2023-03-17 18:53:13 +08:00
{
console.log( error );
2023-03-24 15:11:47 +08:00
});
2023-03-17 18:53:13 +08:00
}
2023-08-29 10:55:30 +08:00
/**
* .
* 1
* 2012
* 3
* @param callerInfo
* @param render CallerArchievement作为参数
*/
2023-08-28 17:41:07 +08:00
function queryCallerArchievement( callerInfo: TelSaler, render: any ): void
{
const caller = {
callerCode: callerInfo.telSalerCode,
callName: callerInfo.telSalerName,
};
2023-08-29 10:55:30 +08:00
// 发送请求
2023-08-28 17:41:07 +08:00
instance.request({
method: "post",
url: API_URL.URL_CALLER_ARCHIEVEMENT,
data: caller,
})
// 请求完成时
.then(( response: AxiosResponse<any, any> ) =>
{
const data = response.data ?? {};
const callArchievement: CallerArchievement = {
success: data.success ?? false,
message: data.message ?? "",
total_archievement: data.total_archievement ?? 0,
mensual_archievement_list: [],
insurance_renewal_rate: data.insurance_renewal_rate ?? "0.0",
attaching_rate: data.attaching_rate ?? "0.0",
};
2023-08-29 10:55:30 +08:00
// 检查业绩清单有没有缺漏缺漏的用0补上
2023-08-28 17:41:07 +08:00
const checkedList = checkMensualArchievement( data.mensual_archievement_list );
2023-08-29 10:55:30 +08:00
// 排序一下
checkedList.sort(( a: MenusalArchievementItem, b: MenusalArchievementItem ): number =>
{
return a.month - b.month;
});
// 将排序后的每月业绩写到业绩对象中
checkedList.forEach(( item: MenusalArchievementItem ): void =>
{
const premium = Number( item.premium );
callArchievement.mensual_archievement_list.push( premium );
});
// 调用渲染函数
if ( render !== undefined )
{
render( callArchievement );
}
2023-08-28 17:41:07 +08:00
console.log( `queryCallerArchievement查询结果${data}` );
})
// 请求失败
.catch(( error: any ) =>
{
console.log( `queryCallerArchievement:查询坐席${callerInfo.telSalerCode}业绩失败,原因${error}` );
});
}
/**
* 0
2023-08-29 10:55:30 +08:00
* 12
* @param mensualArchievementList MenusalArchievementItem类型的数组
* @returns MenusalArchievementItem数组
2023-08-28 17:41:07 +08:00
*/
function checkMensualArchievement( mensualArchievementList: MenusalArchievementItem[]): MenusalArchievementItem[]
{
const checkedList: MenusalArchievementItem[] = [];
const itemMap = new Map();
itemMap.set( 1, "0" );
itemMap.set( 2, "0" );
itemMap.set( 3, "0" );
itemMap.set( 4, "0" );
itemMap.set( 5, "0" );
itemMap.set( 6, "0" );
itemMap.set( 7, "0" );
itemMap.set( 8, "0" );
itemMap.set( 9, "0" );
itemMap.set( 10, "0" );
itemMap.set( 11, "0" );
itemMap.set( 12, "0" );
mensualArchievementList.forEach(( item: MenusalArchievementItem ): void =>
{
itemMap.set( item.month, item.premium );
});
itemMap.forEach(( value, key, map ) =>
{
const item: MenusalArchievementItem = {
month: key,
premium: value,
};
checkedList.push( item );
});
return checkedList;
}
export {
queryDepartmentArchievement,
queryCallerArchievement,
type DepartmentArchievement,
type CallerArchievement
};