Compare commits

...

31 Commits

Author SHA1 Message Date
unknown 4511395d35 升级依赖 2023-12-14 11:47:23 +08:00
Kane Wang 68a314703f typescript更新后unsafe赋值问题未解决。 2023-12-11 13:14:57 +08:00
Kane Wang f33486197e 升级依赖。 2023-12-11 13:03:25 +08:00
Kane Wang 6e8a42086b 查询坐席业绩时清理缓存! 2023-12-04 17:37:14 +08:00
Kane Wang 591a5865f3 升级依赖。 2023-12-04 16:52:38 +08:00
Kane Wang d33572abb8 Merge branch 'feature-ui' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-ui 2023-11-28 15:46:46 +08:00
Kane Wang 041ea37122 升级依赖。 2023-11-28 15:46:34 +08:00
unknown 0f25aa4a72 保存进度! 2023-11-26 23:19:12 +08:00
Kane Wang 33cb13fe29 保存进度! 2023-11-26 13:26:31 +08:00
unknown eb0bd517d5 保存进度! 2023-11-25 23:43:02 +08:00
Kane Wang d1aebdc7f5 增加人员管理模块 2023-11-24 18:48:05 +08:00
Kane Wang c3479d7d8e Merge branch 'feature-ui' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-ui 2023-11-21 19:21:12 +08:00
Kane Wang 0c89df8c34 保存进度! 2023-11-21 19:21:01 +08:00
unknown a5d392c2f6 保存进度! 2023-11-15 00:15:55 +08:00
Kane Wang 84b2e906f3 保存进度! 2023-11-14 18:23:53 +08:00
Kane Wang 3b4c340b70 修改请求地址! 2023-11-13 18:51:40 +08:00
Kane Wang 3001165bd5 修改项目输出目录和springMVC的版本。 2023-11-13 13:18:49 +08:00
unknown 39a75c7bf2 保存进度! 2023-11-13 00:25:10 +08:00
Kane Wang 237cc350be 保存进度! 2023-11-10 18:09:10 +08:00
Kane Wang d202d976a3 保存进度! 2023-11-10 15:53:23 +08:00
Kane Wang 492239f269 启用vite的开发和生产模式 2023-11-09 19:15:41 +08:00
unknown c0406e7000 保存进度! 2023-11-08 10:43:55 +08:00
unknown 44357ad3ce 保存进度! 2023-11-08 10:32:19 +08:00
Kane Wang e07039b517 保存进度! 2023-11-08 09:56:40 +08:00
Kane Wang 484b8a78e9 保存进度! 2023-11-06 19:16:38 +08:00
Kane Wang 4e74bff380 增加可以用坐席名称登录 2023-11-01 20:49:54 +08:00
Kane Wang 7311ab5e2a 保存进度! 2023-11-01 18:22:01 +08:00
Kane Wang 0650227861 Merge branch 'develop' into feature-ui 2023-11-01 15:42:07 +08:00
Kane Wang 75a9c46c2e 保存进度! 2023-11-01 15:41:49 +08:00
unknown 02ac5274e0 保存进度! 2023-10-30 23:44:54 +08:00
unknown 6f303eec03 保存进度! 2023-10-30 23:44:37 +08:00
54 changed files with 3461 additions and 446 deletions

3
.gitignore vendored
View File

@ -729,3 +729,6 @@ target/*
# oracle # oracle
*.~pck *.~pck
*.~sql *.~sql
# 输出目录
输出/*

View File

@ -0,0 +1,23 @@
create or replace package Telsaler_twr_pkg is
-- Author : KANE
-- Created : 2023/11/26 18:19:22
-- Purpose : TWR系统导出报表相关的pkg
procedure 清理TWR电销坐席员工表;
end Telsaler_twr_pkg;
/
create or replace package body Telsaler_twr_pkg is
procedure 清理TWR电销坐席员工表
is
begin
execute immediate 'truncate table twr_telsaler';
end;
begin
-- Initialization
null;
end Telsaler_twr_pkg;
/

View File

@ -154,20 +154,26 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
BEGIN BEGIN
--查询坐席名称,和部门名称,验证代码 --查询坐席名称,和部门名称,验证代码
BEGIN BEGIN
SELECT zx.saler_name, /*SELECT zx.saler_name,
bm.department_name
INTO l_caller_name,
l_department_name
FROM tele_saler zx,
tele_saler_team team,
idst0.bm_t bm
WHERE zx.saler_code = a_caller_code
AND zx.team_code = team.team_code
AND team.department_code = bm.department_code;*/
SELECT ry.人员姓名,
bm.department_name bm.department_name
INTO l_caller_name, INTO l_caller_name,
l_department_name l_department_name
FROM tele_saler zx, FROM twr_telsaler ry,
tele_saler_team team, twr_telsaler_team team,
idst0.bm_t bm idst0.bm_t bm
WHERE zx.saler_code = a_caller_code WHERE ry.团队名称 = team.team_name
AND zx.team_code = team.team_code AND team.department_code = bm.department_code
AND team.department_code = bm.department_code; AND ry.人员工号 = a_caller_code;
/* SELECT saler_name
INTO l_caller_name
FROM tele_saler
WHERE saler_code = a_caller_code;*/
EXCEPTION EXCEPTION
-- 如果没有查询到坐席名称,说明代码有误,抛出异常 -- 如果没有查询到坐席名称,说明代码有误,抛出异常
WHEN no_data_found THEN WHEN no_data_found THEN

17
code/db/twr_常用.sql Normal file
View File

@ -0,0 +1,17 @@
select *
from twr_telsaler_team;
SELECT ry.,
ry.,
team.team_code,
team.team_name,
bm.department_code,
bm.department_name
FROM twr_telsaler ry,
twr_telsaler_team team,
idst0.bm_t bm
WHERE ry. = team.team_name
AND team.department_code = bm.department_code
AND (ry. = '何小红' OR ry. = '何小红');

View File

@ -0,0 +1,39 @@
drop table twr_telsaler;
create table twr_telsaler
(
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(20),
varchar2(20),
varchar2(20),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
integer,
varchar2(20),
varchar2(20),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40),
varchar2(40)
);

View File

@ -0,0 +1,7 @@
drop table twr_telsaler_team;
create table twr_telsaler_team
(
team_name varchar2(40) not null,
team_code varchar2(20),
department_code varchar2(6) not null
);

View File

@ -7,7 +7,44 @@
# #
# Copyright (c) ${2022} by Kane, All Rights Reserved. # Copyright (c) ${2022} by Kane, All Rights Reserved.
### ###
NODE_ENV = 'development' NODE_ENV='development'
VITE_URL_VALIDATE_ACCOUNT="http://222.76.244.118:11101/desktop_archievement_backend/account/query_staff_info.do" VITE_URL_VALIDATE_ACCOUNT="http://222.76.244.118:11101/desktop_archievement_backend/account/query_staff_info.do"
VITE_URL_LOGIN = "http://222.76.244.118:11101/admin-system/account/p13_account_check" VITE_URL_LOGIN="http://222.76.244.118:11101/admin-system/account/p13_account_check"
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do" VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do"
### URL相关 ##########
#登录
VITE_URL_LOGIN="http://222.76.244.118:11101/admin-system/account/p13_account_check"
VITE_URL_LOGIN_CALLER="http://222.76.244.118:11101/desktop_archievement_backend/account/query_telsaler_info.do"
#部门业绩查询
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do"
#坐席业绩查询
VITE_URL_CALLER_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_caller_archievement.do"
#排行榜
VITE_URL_RANKINGLIST="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_ranking_list.do"
## 奖项相关 ##
## 查询奖励项目
VITE_URL_RWARD_PROJECTS="http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_projects.do"
## 查询获奖人员
VITE_URL_REWARD_GAINERS="http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_gainers.do"
## 添加获奖人员
VITE_URL_ADD_REWARD_TELSALER="http://222.76.244.118:11101/desktop_archievement_backend/rewards/add_telsaler_reward.do"
## 更新获奖人员
VITE_URL_UPDATE_REWARD_TELSALER="http://222.76.244.118:11101/desktop_archievement_backend/rewards/update_telsaler_reward.do"
## 删除获奖人员
VITE_URL_DEL_REWARD_TELSALER="http://222.76.244.118:11101/desktop_archievement_backend/rewards/delete_telsaler_reward.do"
## 上传文件
VITE_URL_UPLOAD_FILE="http://222.76.244.118:11101/desktop_archievement_backend/file/file-upload.do"
## 导入报表
VITE_URL_IMPORT_REPORT="http://222.76.244.118:11101/desktop_archievement_backend/import_bi_data/excel.do"
## 请求BI报表数据
VITE_URL_BI_TELSALER_ATTACHINGRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_telsaler_attachingrate.do"
VITE_URL_BI_TELSALER_RENEWALRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_telsaler_renewalrate.do"
VITE_URL_BI_DEPARTMENT_ATTACHINGRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_department_attachingrate.do"
VITE_URL_BI_DEPARTMENT_RENEWALRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_department_renewalrate.do"

View File

@ -0,0 +1,49 @@
###
# @Author: Kane
# @Date: 2023-03-14 23:46:12
# @LastEditors: Kane
# @FilePath: /task_schedule/.env.production
# @Description:
#
# Copyright (c) ${2022} by Kane, All Rights Reserved.
###
VITE_URL_VALIDATE_ACCOUNT="http://10.39.0.61:8081/desktop_archievement_backend/account/query_staff_info.do"
VITE_URL_LOGIN="http://10.39.0.61:8081/admin-system/account/p13_account_check"
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_department_archievement.do"
### URL相关 ##########
#登录
VITE_URL_LOGIN="http://10.39.0.61:8081/admin-system/account/p13_account_check"
VITE_URL_LOGIN_CALLER="http://10.39.0.61:8081/desktop_archievement_backend/account/query_telsaler_info.do"
#部门业绩查询
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_department_archievement.do"
#坐席业绩查询
VITE_URL_CALLER_ARCHIEVEMENT="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_caller_archievement.do"
#排行榜
VITE_URL_RANKINGLIST="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_ranking_list.do"
## 奖项相关 ##
## 查询奖励项目
VITE_URL_RWARD_PROJECTS="http://10.39.0.61:8081/desktop_archievement_backend/rewards/query_reward_projects.do"
## 查询获奖人员
VITE_URL_REWARD_GAINERS="http://10.39.0.61:8081/desktop_archievement_backend/rewards/query_reward_gainers.do"
## 添加获奖人员
VITE_URL_ADD_REWARD_TELSALER="http://10.39.0.61:8081/desktop_archievement_backend/rewards/add_telsaler_reward.do"
## 更新获奖人员
VITE_URL_UPDATE_REWARD_TELSALER="http://10.39.0.61:8081/desktop_archievement_backend/rewards/update_telsaler_reward.do"
## 删除获奖人员
VITE_URL_DEL_REWARD_TELSALER="http://10.39.0.61:8081/desktop_archievement_backend/rewards/delete_telsaler_reward.do"
## 上传文件
VITE_URL_UPLOAD_FILE="http://10.39.0.61:8081/desktop_archievement_backend/file/file-upload.do"
## 导入报表
VITE_URL_IMPORT_REPORT="http://10.39.0.61:8081/desktop_archievement_backend/import_bi_data/excel.do"
## 请求BI报表数据
VITE_URL_BI_TELSALER_ATTACHINGRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_telsaler_attachingrate.do"
VITE_URL_BI_TELSALER_RENEWALRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_telsaler_renewalrate.do"
VITE_URL_BI_DEPARTMENT_ATTACHINGRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_department_attachingrate.do"
VITE_URL_BI_DEPARTMENT_RENEWALRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_department_renewalrate.do"

View File

@ -113,6 +113,7 @@ module.exports = {
// typescript // typescript
"@typescript-eslint/indent": ["warn", 4,], "@typescript-eslint/indent": ["warn", 4,],
"@typescript-eslint/no-explicit-any": "warn", "@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/no-unsafe-argument": "warn",
"@typescript-eslint/no-extra-semi": "off", "@typescript-eslint/no-extra-semi": "off",
"@typescript-eslint/no-inferrable-types": "off", "@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/no-unused-vars": "warn", "@typescript-eslint/no-unused-vars": "warn",
@ -159,6 +160,7 @@ module.exports = {
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off", "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
"@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-unsafe-argument": "warn",
"@typescript-eslint/indent": ["error", 4,], "@typescript-eslint/indent": ["error", 4,],
"@typescript-eslint/no-extra-semi": "off", "@typescript-eslint/no-extra-semi": "off",
"@typescript-eslint/no-inferrable-types": "off", "@typescript-eslint/no-inferrable-types": "off",

View File

@ -8,32 +8,32 @@
"name": "task_schedule", "name": "task_schedule",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.3.1",
"echarts": "^5.4.3", "echarts": "^5.4.3",
"element-plus": "^2.4.1", "element-plus": "^2.4.3",
"mitt": "^3.0.1", "mitt": "^3.0.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"sass-loader": "^13.3.2", "sass-loader": "^13.3.2",
"vue": "^3.3.6", "vue": "^3.3.11",
"vue-router": "^4.2.5", "vue-router": "^4.2.5",
"vuex": "^4.1.0" "vuex": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/eslint-parser": "^7.22.15", "@babel/eslint-parser": "^7.23.3",
"@rushstack/eslint-patch": "^1.5.1", "@rushstack/eslint-patch": "^1.6.0",
"@typescript-eslint/eslint-plugin": "^6.8.0", "@typescript-eslint/eslint-plugin": "^6.14.0",
"@vitejs/plugin-vue": "^4.4.0", "@vitejs/plugin-vue": "^4.5.2",
"@vue/cli-plugin-eslint": "^5.0.8", "@vue/cli-plugin-eslint": "^5.0.8",
"@vue/eslint-config-typescript": "^12.0.0", "@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.5.1", "axios": "^1.6.2",
"babel": "^6.23.0", "babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0", "eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^39.1.1", "eslint-config-standard-with-typescript": "^42.0.0",
"eslint-plugin-vue": "^9.17.0", "eslint-plugin-vue": "^9.19.2",
"node-sass": "^9.0.0", "node-sass": "^9.0.0",
"sass": "^1.69.4", "sass": "^1.69.5",
"style-loader": "^3.3.3", "style-loader": "^3.3.3",
"ts-node": "^10.9.1", "ts-node": "^10.9.2",
"vue-eslint-parser": "^9.3.2" "vue-eslint-parser": "^9.3.2"
} }
}, },
@ -126,9 +126,9 @@
} }
}, },
"node_modules/@babel/eslint-parser": { "node_modules/@babel/eslint-parser": {
"version": "7.22.15", "version": "7.23.3",
"resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz", "resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz",
"integrity": "sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==", "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
@ -325,9 +325,9 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.23.0", "version": "7.23.5",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.0.tgz", "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.5.tgz",
"integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==",
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
}, },
@ -425,9 +425,9 @@
} }
}, },
"node_modules/@element-plus/icons-vue": { "node_modules/@element-plus/icons-vue": {
"version": "2.1.0", "version": "2.3.1",
"resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz", "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
"integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==", "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
"peerDependencies": { "peerDependencies": {
"vue": "^3.2.0" "vue": "^3.2.0"
} }
@ -1157,9 +1157,9 @@
"integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==" "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
}, },
"node_modules/@rushstack/eslint-patch": { "node_modules/@rushstack/eslint-patch": {
"version": "1.5.1", "version": "1.6.0",
"resolved": "https://registry.npmmirror.com/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", "resolved": "https://registry.npmmirror.com/@rushstack/eslint-patch/-/eslint-patch-1.6.0.tgz",
"integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", "integrity": "sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA==",
"dev": true "dev": true
}, },
"node_modules/@sideway/address": { "node_modules/@sideway/address": {
@ -1514,9 +1514,9 @@
"peer": true "peer": true
}, },
"node_modules/@types/semver": { "node_modules/@types/semver": {
"version": "7.5.3", "version": "7.5.6",
"resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.3.tgz", "resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.6.tgz",
"integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
"dev": true "dev": true
}, },
"node_modules/@types/send": { "node_modules/@types/send": {
@ -1578,16 +1578,16 @@
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin": { "node_modules/@typescript-eslint/eslint-plugin": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz",
"integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", "integrity": "sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/regexpp": "^4.5.1", "@eslint-community/regexpp": "^4.5.1",
"@typescript-eslint/scope-manager": "6.8.0", "@typescript-eslint/scope-manager": "6.14.0",
"@typescript-eslint/type-utils": "6.8.0", "@typescript-eslint/type-utils": "6.14.0",
"@typescript-eslint/utils": "6.8.0", "@typescript-eslint/utils": "6.14.0",
"@typescript-eslint/visitor-keys": "6.8.0", "@typescript-eslint/visitor-keys": "6.14.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"graphemer": "^1.4.0", "graphemer": "^1.4.0",
"ignore": "^5.2.4", "ignore": "^5.2.4",
@ -1609,34 +1609,34 @@
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz",
"integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.14.0",
"@typescript-eslint/visitor-keys": "6.8.0" "@typescript-eslint/visitor-keys": "6.14.0"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.14.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.14.0",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
}, },
"engines": { "engines": {
@ -1723,13 +1723,13 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils": { "node_modules/@typescript-eslint/type-utils": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz",
"integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", "integrity": "sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/typescript-estree": "6.8.0", "@typescript-eslint/typescript-estree": "6.14.0",
"@typescript-eslint/utils": "6.8.0", "@typescript-eslint/utils": "6.14.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"ts-api-utils": "^1.0.1" "ts-api-utils": "^1.0.1"
}, },
@ -1746,22 +1746,22 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.14.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
} }
}, },
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz",
"integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.14.0",
"@typescript-eslint/visitor-keys": "6.8.0", "@typescript-eslint/visitor-keys": "6.14.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"globby": "^11.1.0", "globby": "^11.1.0",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
@ -1778,12 +1778,12 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.14.0",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
}, },
"engines": { "engines": {
@ -1898,17 +1898,17 @@
"dev": true "dev": true
}, },
"node_modules/@typescript-eslint/utils": { "node_modules/@typescript-eslint/utils": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.14.0.tgz",
"integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", "integrity": "sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.4.0", "@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.12", "@types/json-schema": "^7.0.12",
"@types/semver": "^7.5.0", "@types/semver": "^7.5.0",
"@typescript-eslint/scope-manager": "6.8.0", "@typescript-eslint/scope-manager": "6.14.0",
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.14.0",
"@typescript-eslint/typescript-estree": "6.8.0", "@typescript-eslint/typescript-estree": "6.14.0",
"semver": "^7.5.4" "semver": "^7.5.4"
}, },
"engines": { "engines": {
@ -1919,35 +1919,35 @@
} }
}, },
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz",
"integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.14.0",
"@typescript-eslint/visitor-keys": "6.8.0" "@typescript-eslint/visitor-keys": "6.14.0"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
} }
}, },
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.14.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
} }
}, },
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz",
"integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.14.0",
"@typescript-eslint/visitor-keys": "6.8.0", "@typescript-eslint/visitor-keys": "6.14.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"globby": "^11.1.0", "globby": "^11.1.0",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
@ -1964,12 +1964,12 @@
} }
}, },
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0", "version": "6.14.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.14.0",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
}, },
"engines": { "engines": {
@ -2041,15 +2041,15 @@
} }
}, },
"node_modules/@vitejs/plugin-vue": { "node_modules/@vitejs/plugin-vue": {
"version": "4.4.0", "version": "4.5.2",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz", "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.5.2.tgz",
"integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==", "integrity": "sha512-UGR3DlzLi/SaVBPX0cnSyE37vqxU3O6chn8l0HJNzQzDia6/Au2A4xKv+iIJW8w2daf80G7TYHhi1pAUjdZ0bQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^14.18.0 || >=16.0.0" "node": "^14.18.0 || >=16.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"vite": "^4.0.0", "vite": "^4.0.0 || ^5.0.0",
"vue": "^3.2.25" "vue": "^3.2.25"
} }
}, },
@ -2318,49 +2318,49 @@
"dev": true "dev": true
}, },
"node_modules/@vue/compiler-core": { "node_modules/@vue/compiler-core": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.11.tgz",
"integrity": "sha512-2JNjemwaNwf+MkkatATVZi7oAH1Hx0B04DdPH3ZoZ8vKC1xZVP7nl4HIsk8XYd3r+/52sqqoz9TWzYc3yE9dqA==", "integrity": "sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.23.0", "@babel/parser": "^7.23.5",
"@vue/shared": "3.3.6", "@vue/shared": "3.3.11",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"source-map-js": "^1.0.2" "source-map-js": "^1.0.2"
} }
}, },
"node_modules/@vue/compiler-dom": { "node_modules/@vue/compiler-dom": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz",
"integrity": "sha512-1MxXcJYMHiTPexjLAJUkNs/Tw2eDf2tY3a0rL+LfuWyiKN2s6jvSwywH3PWD8bKICjfebX3GWx2Os8jkRDq3Ng==", "integrity": "sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==",
"dependencies": { "dependencies": {
"@vue/compiler-core": "3.3.6", "@vue/compiler-core": "3.3.11",
"@vue/shared": "3.3.6" "@vue/shared": "3.3.11"
} }
}, },
"node_modules/@vue/compiler-sfc": { "node_modules/@vue/compiler-sfc": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz",
"integrity": "sha512-/Kms6du2h1VrXFreuZmlvQej8B1zenBqIohP0690IUBkJjsFvJxY0crcvVRJ0UhMgSR9dewB+khdR1DfbpArJA==", "integrity": "sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.23.0", "@babel/parser": "^7.23.5",
"@vue/compiler-core": "3.3.6", "@vue/compiler-core": "3.3.11",
"@vue/compiler-dom": "3.3.6", "@vue/compiler-dom": "3.3.11",
"@vue/compiler-ssr": "3.3.6", "@vue/compiler-ssr": "3.3.11",
"@vue/reactivity-transform": "3.3.6", "@vue/reactivity-transform": "3.3.11",
"@vue/shared": "3.3.6", "@vue/shared": "3.3.11",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.30.5", "magic-string": "^0.30.5",
"postcss": "^8.4.31", "postcss": "^8.4.32",
"source-map-js": "^1.0.2" "source-map-js": "^1.0.2"
} }
}, },
"node_modules/@vue/compiler-ssr": { "node_modules/@vue/compiler-ssr": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz",
"integrity": "sha512-QTIHAfDCHhjXlYGkUg5KH7YwYtdUM1vcFl/FxFDlD6d0nXAmnjizka3HITp8DGudzHndv2PjKVS44vqqy0vP4w==", "integrity": "sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.3.6", "@vue/compiler-dom": "3.3.11",
"@vue/shared": "3.3.6" "@vue/shared": "3.3.11"
} }
}, },
"node_modules/@vue/component-compiler-utils": { "node_modules/@vue/component-compiler-utils": {
@ -2459,60 +2459,60 @@
} }
}, },
"node_modules/@vue/reactivity": { "node_modules/@vue/reactivity": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.11.tgz",
"integrity": "sha512-gtChAumfQz5lSy5jZXfyXbKrIYPf9XEOrIr6rxwVyeWVjFhJwmwPLtV6Yis+M9onzX++I5AVE9j+iPH60U+B8Q==", "integrity": "sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==",
"dependencies": { "dependencies": {
"@vue/shared": "3.3.6" "@vue/shared": "3.3.11"
} }
}, },
"node_modules/@vue/reactivity-transform": { "node_modules/@vue/reactivity-transform": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz",
"integrity": "sha512-RlJl4dHfeO7EuzU1iJOsrlqWyJfHTkJbvYz/IOJWqu8dlCNWtxWX377WI0VsbAgBizjwD+3ZjdnvSyyFW1YVng==", "integrity": "sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.23.0", "@babel/parser": "^7.23.5",
"@vue/compiler-core": "3.3.6", "@vue/compiler-core": "3.3.11",
"@vue/shared": "3.3.6", "@vue/shared": "3.3.11",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.30.5" "magic-string": "^0.30.5"
} }
}, },
"node_modules/@vue/runtime-core": { "node_modules/@vue/runtime-core": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.11.tgz",
"integrity": "sha512-qp7HTP1iw1UW2ZGJ8L3zpqlngrBKvLsDAcq5lA6JvEXHmpoEmjKju7ahM9W2p/h51h0OT5F2fGlP/gMhHOmbUA==", "integrity": "sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw==",
"dependencies": { "dependencies": {
"@vue/reactivity": "3.3.6", "@vue/reactivity": "3.3.11",
"@vue/shared": "3.3.6" "@vue/shared": "3.3.11"
} }
}, },
"node_modules/@vue/runtime-dom": { "node_modules/@vue/runtime-dom": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz",
"integrity": "sha512-AoX3Cp8NqMXjLbIG9YR6n/pPLWE9TiDdk6wTJHFnl2GpHzDFH1HLBC9wlqqQ7RlnvN3bVLpzPGAAH00SAtOxHg==", "integrity": "sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ==",
"dependencies": { "dependencies": {
"@vue/runtime-core": "3.3.6", "@vue/runtime-core": "3.3.11",
"@vue/shared": "3.3.6", "@vue/shared": "3.3.11",
"csstype": "^3.1.2" "csstype": "^3.1.2"
} }
}, },
"node_modules/@vue/server-renderer": { "node_modules/@vue/server-renderer": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.11.tgz",
"integrity": "sha512-kgLoN43W4ERdZ6dpyy+gnk2ZHtcOaIr5Uc/WUP5DRwutgvluzu2pudsZGoD2b7AEJHByUVMa9k6Sho5lLRCykw==", "integrity": "sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A==",
"dependencies": { "dependencies": {
"@vue/compiler-ssr": "3.3.6", "@vue/compiler-ssr": "3.3.11",
"@vue/shared": "3.3.6" "@vue/shared": "3.3.11"
}, },
"peerDependencies": { "peerDependencies": {
"vue": "3.3.6" "vue": "3.3.11"
} }
}, },
"node_modules/@vue/shared": { "node_modules/@vue/shared": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.11.tgz",
"integrity": "sha512-Xno5pEqg8SVhomD0kTSmfh30ZEmV/+jZtyh39q6QflrjdJCXah5lrnOLi9KB6a5k5aAHXMXjoMnxlzUkCNfWLQ==" "integrity": "sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw=="
}, },
"node_modules/@vue/vue-loader-v15": { "node_modules/@vue/vue-loader-v15": {
"name": "vue-loader", "name": "vue-loader",
@ -3248,9 +3248,9 @@
} }
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.5.1", "version": "1.6.2",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.5.1.tgz", "resolved": "https://registry.npmmirror.com/axios/-/axios-1.6.2.tgz",
"integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.0", "follow-redirects": "^1.15.0",
@ -4560,9 +4560,9 @@
} }
}, },
"node_modules/csstype": { "node_modules/csstype": {
"version": "3.1.2", "version": "3.1.3",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
}, },
"node_modules/dayjs": { "node_modules/dayjs": {
"version": "1.11.10", "version": "1.11.10",
@ -4962,12 +4962,12 @@
"integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==" "integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA=="
}, },
"node_modules/element-plus": { "node_modules/element-plus": {
"version": "2.4.1", "version": "2.4.3",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.1.tgz", "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.3.tgz",
"integrity": "sha512-t7nl+vQlkBKVk1Ag6AufSDyFV8YIXxTFsaya4Nz/0tiRlcz65WPN4WMFeNURuFJleu1HLNtP4YyQKMuS7El8uA==", "integrity": "sha512-b3q26j+lM4SBqiyzw8HybybGnP2pk4MWgrnzzzYW5qKQUgV6EG1Zg7nMCfgCVccI8tNvZoTiUHb2mFaiB9qT8w==",
"dependencies": { "dependencies": {
"@ctrl/tinycolor": "^3.4.1", "@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.0.6", "@element-plus/icons-vue": "^2.3.1",
"@floating-ui/dom": "^1.0.1", "@floating-ui/dom": "^1.0.1",
"@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
"@types/lodash": "^4.14.182", "@types/lodash": "^4.14.182",
@ -6777,9 +6777,9 @@
} }
}, },
"node_modules/eslint-config-standard-with-typescript": { "node_modules/eslint-config-standard-with-typescript": {
"version": "39.1.1", "version": "42.0.0",
"resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-39.1.1.tgz", "resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-42.0.0.tgz",
"integrity": "sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==", "integrity": "sha512-m1/2g/Sicun1uFZOFigJVeOqo9fE7OkMsNtilcpHwdCdcGr21qsGqYiyxYSvvHfJwY7w5OTQH0hxk8sM2N5Ohg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/parser": "^6.4.0", "@typescript-eslint/parser": "^6.4.0",
@ -7060,9 +7060,9 @@
} }
}, },
"node_modules/eslint-plugin-vue": { "node_modules/eslint-plugin-vue": {
"version": "9.17.0", "version": "9.19.2",
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz",
"integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", "integrity": "sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.4.0", "@eslint-community/eslint-utils": "^4.4.0",
@ -10492,9 +10492,9 @@
"devOptional": true "devOptional": true
}, },
"node_modules/nanoid": { "node_modules/nanoid": {
"version": "3.3.6", "version": "3.3.7",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"bin": { "bin": {
"nanoid": "bin/nanoid.cjs" "nanoid": "bin/nanoid.cjs"
}, },
@ -11572,11 +11572,11 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.31", "version": "8.4.32",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz", "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.32.tgz",
"integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
"dependencies": { "dependencies": {
"nanoid": "^3.3.6", "nanoid": "^3.3.7",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
"source-map-js": "^1.0.2" "source-map-js": "^1.0.2"
}, },
@ -12813,9 +12813,9 @@
"dev": true "dev": true
}, },
"node_modules/sass": { "node_modules/sass": {
"version": "1.69.4", "version": "1.69.5",
"resolved": "https://registry.npmmirror.com/sass/-/sass-1.69.4.tgz", "resolved": "https://registry.npmmirror.com/sass/-/sass-1.69.5.tgz",
"integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
"devOptional": true, "devOptional": true,
"dependencies": { "dependencies": {
"chokidar": ">=3.0.0 <4.0.0", "chokidar": ">=3.0.0 <4.0.0",
@ -14037,9 +14037,9 @@
} }
}, },
"node_modules/ts-node": { "node_modules/ts-node": {
"version": "10.9.1", "version": "10.9.2",
"resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.1.tgz", "resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@cspotcode/source-map-support": "^0.8.0", "@cspotcode/source-map-support": "^0.8.0",
@ -14412,15 +14412,15 @@
} }
}, },
"node_modules/vue": { "node_modules/vue": {
"version": "3.3.6", "version": "3.3.11",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.6.tgz", "resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.11.tgz",
"integrity": "sha512-jJIDETeWJnoY+gfn4ZtMPMS5KtbP4ax+CT4dcQFhTnWEk8xMupFyQ0JxL28nvT/M4+p4a0ptxaV2WY0LiIxvRg==", "integrity": "sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.3.6", "@vue/compiler-dom": "3.3.11",
"@vue/compiler-sfc": "3.3.6", "@vue/compiler-sfc": "3.3.11",
"@vue/runtime-dom": "3.3.6", "@vue/runtime-dom": "3.3.11",
"@vue/server-renderer": "3.3.6", "@vue/server-renderer": "3.3.11",
"@vue/shared": "3.3.6" "@vue/shared": "3.3.11"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "*" "typescript": "*"

View File

@ -9,32 +9,32 @@
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.3.1",
"echarts": "^5.4.3", "echarts": "^5.4.3",
"element-plus": "^2.4.1", "element-plus": "^2.4.3",
"mitt": "^3.0.1", "mitt": "^3.0.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"sass-loader": "^13.3.2", "sass-loader": "^13.3.2",
"vue": "^3.3.6", "vue": "^3.3.11",
"vue-router": "^4.2.5", "vue-router": "^4.2.5",
"vuex": "^4.1.0" "vuex": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/eslint-parser": "^7.22.15", "@babel/eslint-parser": "^7.23.3",
"@rushstack/eslint-patch": "^1.5.1", "@rushstack/eslint-patch": "^1.6.0",
"@typescript-eslint/eslint-plugin": "^6.8.0", "@typescript-eslint/eslint-plugin": "^6.14.0",
"@vitejs/plugin-vue": "^4.4.0", "@vitejs/plugin-vue": "^4.5.2",
"@vue/cli-plugin-eslint": "^5.0.8", "@vue/cli-plugin-eslint": "^5.0.8",
"@vue/eslint-config-typescript": "^12.0.0", "@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.5.1", "axios": "^1.6.2",
"babel": "^6.23.0", "babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0", "eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^39.1.1", "eslint-config-standard-with-typescript": "^42.0.0",
"eslint-plugin-vue": "^9.17.0", "eslint-plugin-vue": "^9.19.2",
"node-sass": "^9.0.0", "node-sass": "^9.0.0",
"sass": "^1.69.4", "sass": "^1.69.5",
"style-loader": "^3.3.3", "style-loader": "^3.3.3",
"ts-node": "^10.9.1", "ts-node": "^10.9.2",
"vue-eslint-parser": "^9.3.2" "vue-eslint-parser": "^9.3.2"
} }
} }

View File

@ -16,6 +16,9 @@ interface BIReportType
reportTypeName: string; reportTypeName: string;
} }
/**
*
*/
interface ImportBIReportRequest interface ImportBIReportRequest
{ {
filePath: string, filePath: string,
@ -24,21 +27,127 @@ interface ImportBIReportRequest
sheetIndex: number, sheetIndex: number,
} }
/**
*
*/
interface ImportBIReportResponse interface ImportBIReportResponse
{
success: boolean, // 请求成功标志
message: string, // 请求结果说明
importedCount: number, // 导入记录的数量
}
// BI坐席渗透率报表记录
interface BITelsalerAttachingRateRecord
{
departmentName: string; // 部门
telsalerName: string; // 经办人
motoPremium: number; // 车险保费
nomotoPremium: number; // 非车险保费
motoPremiumProportion: number; // 车险保费占比
attachingRate: number; // 保费渗透率
attachingRateChange: number; // 渗透率环比上月
customerHandleRate: number; // 当月客户渗透率
customerHandleRateChange: number; // 客户渗透率环比上月
noMotoPremiumPerCustomer: number; // 当月车非客均保费
noMotoPremiumPerCustomerChange: number; // 客均保费环比上月
}
interface QueryBITelsalerAttachingRateReportResponse
{ {
success: boolean, success: boolean,
message: string, message: string,
importedCount: number, records: BITelsalerAttachingRateRecord[];
} }
type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error?: any ) => void; /**
* BI坐席续保率报表记录
*/
interface BITelsalerRenewalRateRecord
{
责任部门: string;
责任人: string;
机构目标值: number;
到期数全月: number;
序时到期数占比: number;
个车续保率序时: number;
个车续保率全月: number;
环比昨日: number;
环比上月: number;
平均提前签单天数: number;
环比: number;
}
interface QueryBITelsalerRenewalRateReportResponse
{
success: boolean;
message: string;
records: BITelsalerRenewalRateRecord[];
}
/** 机构 ***/
// 机构渗透率
/**
*
*/
interface BIDepartmentAttachingRateRecord
{
departmentName: string;
departmentObject: number;
objectGap: number;
motoPremium: number;
motoPremiumProPortion: number;
nomotoPremium: number;
attachingRate: number;
attachingRateChange: number;
motoInsuranceCustomerCount: number;
customerHandleRate: number;
customerHandleRateChange: number;
premiumPerCustomer: number;
premiumPerCustomerChange: number;
}
interface QueryBIDepartmentAttachingRateResponse
{
success: boolean;
message: string;
records: BIDepartmentAttachingRateRecord[];
}
// 机构续保率
interface BIDepartmentRenewalRateRecord
{
责任部门: string;
机构目标值: number;
到期数全月: number;
序时到期数占比: number;
个车续保率序时: number;
个车续保率全月: number;
环比昨日: number;
环比上月: number;
平均提前签单天数: number;
环比: number;
}
interface QueryBIDepartmentRenewalRateResponse
{
success: boolean;
message: string;
records: BIDepartmentRenewalRateRecord[];
}
type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error: any ) => void;
type QueryBITelsalerAttachingRateDataHandler = ( response: QueryBITelsalerAttachingRateReportResponse, error: any ) => void;
type QueryBITelsalerRenewalRateDataHandler = ( response: QueryBITelsalerRenewalRateReportResponse, error: any ) => void;
type QueryBIDepartmentAttachingRateDataHandler = ( response: QueryBIDepartmentAttachingRateResponse, error: any ) => void;
type QueryBIDepartmentRenewalRateDataHandler = ( response: QueryBIDepartmentRenewalRateResponse, error: any ) => void;
/** /**
* * BI报表
* @param request * @param request
* @param handler * @param handler
*/ */
function importBIReport( request: ImportBIReportRequest, handler: any ): void function importBIReport( request: ImportBIReportRequest, handler: ImportBIReportResponseHandler ): void
{ {
const importResponse: ImportBIReportResponse = { const importResponse: ImportBIReportResponse = {
success: false, success: false,
@ -56,7 +165,7 @@ function importBIReport( request: ImportBIReportRequest, handler: any ): void
const data: ImportBIReportResponse = response.data; const data: ImportBIReportResponse = response.data;
importResponse.success = data.success ?? false; importResponse.success = data.success ?? false;
importResponse.message = data.message ?? ""; importResponse.message = data.message ?? "请求完成,但服务器未返回请求结果消息!";
importResponse.importedCount = data.importedCount ?? 0; importResponse.importedCount = data.importedCount ?? 0;
handler( importResponse, null ); handler( importResponse, null );
@ -70,10 +179,178 @@ function importBIReport( request: ImportBIReportRequest, handler: any ): void
}); });
} }
/**
* BI坐席渗透率数据
* @param handler handler函数
*/
function queryBITelsalerAttachingRateData( handler: QueryBITelsalerAttachingRateDataHandler ): void
{
const queryResponse: QueryBITelsalerAttachingRateReportResponse = {
success: false,
message: "",
records: [],
};
instance.request({
url: API_URL.URL_BI_TELSALER_ATTACHINGRATE,
method: "post",
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
queryResponse.success = data.success ?? false;
queryResponse.message = data.message ?? "";
queryResponse.records = data.records ?? [];
console.log( "请求BI坐席渗透率数据", queryResponse );
handler( queryResponse, null );
})
.catch(( error ): void =>
{
queryResponse.message = "请求BI坐席渗漏率报表数据时出现错误请查看控制台消息";
queryResponse.success = false;
console.log( error );
handler( queryResponse, error );
});
}
/**
* BI坐席续保率数据
* @param handler
*/
function queryBITelsalerRenewalData( handler: QueryBITelsalerRenewalRateDataHandler ): void
{
const queryResponse: QueryBITelsalerRenewalRateReportResponse = {
success: false,
message: "",
records: [],
};
instance.request({
url: API_URL.URL_BI_TELSALER_RENEWALRATE,
method: "post",
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
queryResponse.success = data.success ?? false;
queryResponse.message = data.message ?? "";
queryResponse.records = data.records ?? [];
console.log( "请求BI坐席续保率数据", queryResponse );
handler( queryResponse, null );
})
.catch(( error: any ): void =>
{
queryResponse.success = false;
queryResponse.message = "查询BI坐席续保率数据失败请查看控制台";
console.log( error );
handler( queryResponse, error );
});
}
/**
*
* @param handler
*/
function queryDepartmentAttachingRateData( handler: QueryBIDepartmentAttachingRateDataHandler ): void
{
const queryResponse: QueryBIDepartmentAttachingRateResponse = {
success: false,
message: "",
records: [],
};
instance.request({
url: API_URL.URL_BI_DEPARTMENT_ATTACHINGRATE,
method: "post",
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
queryResponse.success = data.success ?? false;
queryResponse.message = data.message ?? "请求完成,但结果未知!";
queryResponse.records = data.records ?? [];
handler( queryResponse, null );
})
.catch(( error: any ): void =>
{
queryResponse.success = false;
queryResponse.message = "查询BI机构续渗透失败请查看控制台";
queryResponse.records = [];
console.log( "查询BI机构渗透率失败:", error );
handler( queryResponse, error );
});
}
/**
* BI机构续保率数据
* @param handler
*/
function queryDepartmentRenewalRateData( handler: QueryBIDepartmentRenewalRateDataHandler ): void
{
const queryResponse: QueryBIDepartmentRenewalRateResponse = {
success: false,
message: "",
records: [],
};
instance.request({
url: API_URL.URL_BI_DEPARTMENT_RENEWALRATE,
method: "post",
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data = response.data ?? {};
queryResponse.success = data.success ?? false;
queryResponse.message = data.message ?? "请求完成,但结果未知!";
queryResponse.records = data.records ?? [];
handler( queryResponse, null );
})
.catch(( error: any ): void =>
{
queryResponse.success = false;
queryResponse.message = "查询BI机构续保率失败请查看控制台";
queryResponse.records = [];
console.log( "查询BI机构续保率失败:", error );
handler( queryResponse, error );
});
}
export { export {
type BIReportType, type BIReportType,
type ImportBIReportRequest, type ImportBIReportRequest,
type ImportBIReportResponse, type ImportBIReportResponse,
type ImportBIReportResponseHandler, type ImportBIReportResponseHandler,
importBIReport type BITelsalerAttachingRateRecord,
type QueryBITelsalerAttachingRateReportResponse,
type QueryBITelsalerAttachingRateDataHandler,
type QueryBITelsalerRenewalRateDataHandler,
type BITelsalerRenewalRateRecord,
type QueryBITelsalerRenewalRateReportResponse,
type BIDepartmentAttachingRateRecord,
type QueryBIDepartmentAttachingRateResponse,
type QueryBIDepartmentAttachingRateDataHandler,
type BIDepartmentRenewalRateRecord,
type QueryBIDepartmentRenewalRateResponse,
type QueryBIDepartmentRenewalRateDataHandler,
importBIReport,
queryBITelsalerAttachingRateData,
queryBITelsalerRenewalData,
queryDepartmentAttachingRateData,
queryDepartmentRenewalRateData
}; };

View File

@ -25,7 +25,7 @@ interface LoginInfo
interface LoginCallerInfo interface LoginCallerInfo
{ {
telsaler_code: string; telsaler: string;
} }
interface RequestResult interface RequestResult

View File

@ -8,48 +8,39 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
const API_URL = { const API_URL = {
// URL_LOGIN: import.meta.env.VITE_URL_LOGIN, // 登录
// URL_LOGIN: "http://222.76.244.118:11101/admin-system/account/p13_account_check", URL_LOGIN: import.meta.env.VITE_URL_LOGIN,
URL_LOGIN: "http://10.39.0.41:8081/admin-system/account/p13_account_check", URL_LOGIN_CALLER: import.meta.env.VITE_URL_LOGIN_CALLER,
// URL_LOGIN_CALLER: "http://localhost:8080/desktop_archievement_backend/account/query_telsaler_info.do",
// URL_LOGIN_CALLER: "http://222.76.244.118:11101/desktop_archievement_backend/account/query_telsaler_info.do",
URL_LOGIN_CALLER: "http://10.39.0.41:8081/desktop_archievement_backend/account/query_telsaler_info.do",
// URL_DEPARTMENT_ARCHIEVEMENT: import.meta.env.VITE_URL_DEPARTMENT_ARCHIEVEMENT,
// URL_DEPARTMENT_ARCHIEVEMENT: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do",
URL_DEPARTMENT_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_department_archievement.do",
// URL_RANKINGLIST: "http://localhost:8080/desktop_archievement_backend/archievement/query_ranking_list.do",
// URL_RANKINGLIST: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_ranking_list.do",
URL_RANKINGLIST: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_ranking_list.do",
// 机构业绩
URL_DEPARTMENT_ARCHIEVEMENT: import.meta.env.VITE_URL_DEPARTMENT_ARCHIEVEMENT,
// 坐席业绩查询 // 坐席业绩查询
// URL_CALLER_ARCHIEVEMENT: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_caller_archievement.do", URL_CALLER_ARCHIEVEMENT: import.meta.env.VITE_URL_CALLER_ARCHIEVEMENT,
URL_CALLER_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_caller_archievement.do",
// 排行榜
URL_RANKINGLIST: import.meta.env.VITE_URL_RANKINGLIST,
/** 奖项相关 **/ /** 奖项相关 **/
// 查询奖励项目 // 查询奖励项目
// URL_RWARD_PROJECTS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_projects.do", URL_RWARD_PROJECTS: import.meta.env.VITE_URL_RWARD_PROJECTS,
URL_RWARD_PROJECTS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_projects.do",
// 查询获奖人员 // 查询获奖人员
URL_REWARD_GAINERS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_gainers.do", URL_REWARD_GAINERS: import.meta.env.VITE_URL_REWARD_GAINERS,
// URL_REWARD_GAINERS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_gainers.do",
// 添加获奖人员 // 添加获奖人员
URL_ADD_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/add_telsaler_reward.do", URL_ADD_REWARD_TELSALER: import.meta.env.VITE_URL_ADD_REWARD_TELSALER,
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/add_telsaler_reward.do",
// 更新获奖人员 // 更新获奖人员
URL_UPDATE_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/update_telsaler_reward.do", URL_UPDATE_REWARD_TELSALER: import.meta.env.VITE_URL_UPDATE_REWARD_TELSALER,
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/update_telsaler_reward.do",
// 删除获奖人员 // 删除获奖人员
URL_DEL_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/delete_telsaler_reward.do", URL_DEL_REWARD_TELSALER: import.meta.env.VITE_URL_DEL_REWARD_TELSALER,
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/delete_telsaler_reward.do",
// 上传文件 // 上传文件
URL_UPLOAD_FILE: "http://10.39.0.41:8081/desktop_archievement_backend/file/file-upload.do", URL_UPLOAD_FILE: import.meta.env.VITE_URL_UPLOAD_FILE,
// URL_UPLOAD_FILE: "http://222.76.244.118:11101/desktop_archievement_backend/file/file-upload.do",
// 导入报表 // 导入报表
URL_IMPORT_REPORT: "http://10.39.0.41:8081/desktop_archievement_backend/import_bi_data/excel.do", URL_IMPORT_REPORT: import.meta.env.VITE_URL_IMPORT_REPORT,
// URL_IMPORT_REPORT: "http://222.76.244.118:11101/desktop_archievement_backend/import_bi_data/excel.do",
// 请求BI报表数据
URL_BI_TELSALER_ATTACHINGRATE: import.meta.env.VITE_URL_BI_TELSALER_ATTACHINGRATE,
URL_BI_TELSALER_RENEWALRATE: import.meta.env.VITE_URL_BI_TELSALER_RENEWALRATE,
URL_BI_DEPARTMENT_ATTACHINGRATE: import.meta.env.VITE_URL_BI_DEPARTMENT_ATTACHINGRATE,
URL_BI_DEPARTMENT_RENEWALRATE: import.meta.env.VITE_URL_BI_DEPARTMENT_RENEWALRATE,
}; };
export { API_URL }; export { API_URL };

View File

@ -170,6 +170,8 @@ function addRewardTelsaler( data: AddRewardTelsalerRequest, handler: any ): void
message: "", message: "",
}; };
console.log( "URL", API_URL.URL_ADD_REWARD_TELSALER );
instance.request({ instance.request({
method: "post", method: "post",
url: API_URL.URL_ADD_REWARD_TELSALER, url: API_URL.URL_ADD_REWARD_TELSALER,

View File

@ -169,7 +169,7 @@ export default {
{ {
// //
const loginInfo: LoginCallerInfo = { const loginInfo: LoginCallerInfo = {
telsaler_code: ui.account, telsaler: ui.account,
}; };
// //

View File

@ -9,39 +9,18 @@
--> -->
<template> <template>
<div class="data_management_wrapper"> <div class="data_management_wrapper">
<!-- <div class="telsaler-dataupload-wrapper">
<el-upload
v-model="ui.fileList"
drag
action="http://localhost:8080/desktop_archievement_backend/file/file-upload.do"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="handleUploadSuccess"
:before-remove="beforeRemove"
:limit="1"
:on-exceed="handleExceed"
:data="ui.uploadData"
name="files"
>
<el-button type="primary">
上传
</el-button>
<template #tip>
<div class="el-upload__tip">
文件不能大于100MB
</div>
</template>
</el-upload>
</div> -->
<el-tabs> <el-tabs>
<el-tab-pane label="坐席车非渗透率"> <el-tab-pane label="坐席车非渗透率">
<TelsalerAttachingRateView /> <TelsalerAttachingRateView />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="坐席续保率"> <el-tab-pane label="坐席续保率">
坐席车非渗透率 <TelsalerRenewalRateView />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="机构"> <el-tab-pane label="机构渗透率">
坐席车非渗透率 <DepartmentAttachingRateView />
</el-tab-pane>
<el-tab-pane label="机构续保率">
<DepartmentRenewalRateView />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
@ -50,9 +29,13 @@
import { ref, reactive } from "vue"; import { ref, reactive } from "vue";
import { ElMessage, ElMessageBox, type UploadFile, type UploadFiles, type UploadProps, type UploadUserFile } from "element-plus"; import { ElMessage, ElMessageBox, type UploadFile, type UploadFiles, type UploadProps, type UploadUserFile } from "element-plus";
import TelsalerAttachingRateView from "@/views/data/bi/TelsalerAttachingRateView.vue"; import TelsalerAttachingRateView from "@/views/data/bi/TelsalerAttachingRateView.vue";
import TelsalerRenewalRateView from "@/views/data/bi/TelsalerRenewalRateView.vue";
import DepartmentRenewalRateView from "@/views/data/bi/DepartmentRenewalRateView.vue";
import DepartmentAttachingRateView from "@/views/data/bi/DepartmentAttachingRateView.vue";
export default { export default {
name: "DataManagement", name: "DataManagement",
components: { TelsalerAttachingRateView, }, components: { TelsalerAttachingRateView, TelsalerRenewalRateView, DepartmentRenewalRateView, DepartmentAttachingRateView, },
setup() setup()
{ {
const ui = reactive({ const ui = reactive({

View File

@ -46,7 +46,7 @@
</div> </div>
<el-upload <el-upload
drag drag
action="http://222.76.244.118:11101/desktop_archievement_backend/file/file-upload.do" :action="ui.urlFileUpload"
name="files" name="files"
:show-file-list="false" :show-file-list="false"
:data="ui.uploadParameters" :data="ui.uploadParameters"
@ -62,7 +62,7 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { reactive, ref } from "vue"; import { reactive, onBeforeMount } from "vue";
import { import {
type BIReportType, type BIReportType,
type ImportBIReportRequest, type ImportBIReportRequest,
@ -70,6 +70,7 @@ import {
type ImportBIReportResponseHandler, type ImportBIReportResponseHandler,
importBIReport importBIReport
} from "@/utils/BIReport.js"; } from "@/utils/BIReport.js";
import { API_URL } from "@/utils/api/config.js";
import { type FileUploadResponse } from "@/utils/fileUpload.js"; import { type FileUploadResponse } from "@/utils/fileUpload.js";
// import { UploadFilled } from "@element-plus/icons-vue"; // import { UploadFilled } from "@element-plus/icons-vue";
import { type UploadProps, type UploadFile, type UploadFiles, ElMessage, ElMessageBox } from "element-plus"; import { type UploadProps, type UploadFile, type UploadFiles, ElMessage, ElMessageBox } from "element-plus";
@ -84,6 +85,7 @@ interface UI
hasCaption: boolean, hasCaption: boolean,
uploadParameters: any, uploadParameters: any,
showFileList: boolean, showFileList: boolean,
urlFileUpload: string,
} }
export default { export default {
@ -92,10 +94,10 @@ export default {
reportType: { reportType: {
type: Number, type: Number,
require: true, require: true,
default: (): number => -9999, default: (): number => 0,
}, },
}, },
setup() setup( props )
{ {
const ui: UI = reactive({ const ui: UI = reactive({
showUI: false, showUI: false,
@ -118,12 +120,13 @@ export default {
reportTypeName: "当月个车续保率跟踪报表【机构】", reportTypeName: "当月个车续保率跟踪报表【机构】",
},], },],
sheetIndex: 0, sheetIndex: 0,
firstRow: 2, firstRow: 1,
hasCaption: true, hasCaption: true,
uploadParameters: { uploadParameters: {
"task-name": "1234", "task-name": "1234",
}, },
showFileList: false, showFileList: false,
urlFileUpload: API_URL.URL_UPLOAD_FILE,
}); });
/** /**
@ -214,6 +217,11 @@ export default {
} }
}; };
onBeforeMount((): void =>
{
ui.selectedReportType = props.reportType;
});
return { return {
ui, ui,
onUploadSuccess, onUploadSuccess,

View File

@ -1,31 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-10-17 14:53:17
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/bi/DepartmentArchievementView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper" />
</template>
<script lang="ts">
import { reactive } from "vue";
export default {
name: "DepartmentArchievementView",
setup()
{
const ui = reactive({
showUI: true,
});
},
};
</script>
<style lang="scss" scoped>
.wrapper {
margin: 10px;
}
</style>

View File

@ -0,0 +1,227 @@
<!--
* @Author: Kane
* @Date: 2023-10-17 14:53:17
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/bi/DepartmentAttachingRateView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper">
<el-row :gutter="10">
<el-col span="24">
<el-button
type="warning"
icon="upload"
@click="showUploadFileDialog"
>
上传
</el-button>
<el-button
type="primary"
icon="refresh"
@click="refresh"
>
刷新
</el-button>
</el-col>
</el-row>
<el-table
width="100%"
stripe
border
:data="tableData"
>
<el-table-column
label="部门"
align="center"
>
<template #default="department">
<span>{{ department.row.departmentName }}</span>
</template>
</el-table-column>
<el-table-column
label="车险保费(万)"
align="center"
>
<template #default="department">
<span>{{ department.row.motoPremium.toFixed(2) }}</span>
</template>
</el-table-column>
<el-table-column
label="非车险保费(万)"
align="center"
>
<template #default="department">
<span>{{ department.row.nomotoPremium.toFixed(2) }}</span>
</template>
</el-table-column>
<el-table-column
label="渗透率"
align="center"
>
<template #default="department">
<span>{{ department.row.attachingRate.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination_wrapper">
<el-pagination
v-model="ui.tableCurrentPageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="0"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
<div
class="upload-dialog-wrapper"
>
<el-dialog
v-model="ui.showUploadDialog"
title="上传报表"
width="600px"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="true"
>
<BiDataUploadView :report-type="2" />
</el-dialog>
</div>
</div>
</template>
<script lang="ts">
import { reactive, computed, onBeforeMount } from "vue";
import {
type BIDepartmentAttachingRateRecord,
type QueryBIDepartmentAttachingRateResponse,
type QueryBIDepartmentAttachingRateDataHandler,
queryDepartmentAttachingRateData
} from "@/utils/BIReport.js";
import { ElMessage, ElMessageBox } from "element-plus";
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
interface UI
{
showUI: boolean,
showUploadDialog: boolean,
tablePageSize: number,
tableCurrentPageIndex: number,
BIDepartmentAttachingRateData: BIDepartmentAttachingRateRecord[],
}
export default {
name: "DepartmentAttachingRateView",
components: { BiDataUploadView, },
setup()
{
const ui: UI = reactive({
showUI: true,
showUploadDialog: false,
tablePageSize: 10,
tableCurrentPageIndex: 1,
BIDepartmentAttachingRateData: [],
});
const tableData = computed((): BIDepartmentAttachingRateRecord[] =>
{
const tableCount = ui.BIDepartmentAttachingRateData.length;
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) > tableCount ? tableCount - ui.tablePageSize : ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 );
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex;
return ui.BIDepartmentAttachingRateData.slice( startIndex, endIndex );
});
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
{
ui.tableCurrentPageIndex = pageIndex;
};
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
const handler: QueryBIDepartmentAttachingRateDataHandler = ( response: QueryBIDepartmentAttachingRateResponse, error: any ): void =>
{
//
if ( response.success )
{
//
ElMessage({
message: "更新成功",
type: "success",
});
ui.BIDepartmentAttachingRateData = response.records;
}
else
{
//
ElMessageBox.confirm(
response.message,
"请求机构渗透率数据失败",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
if ( error !== null )
{
console.log( "请求机构渗透率数据失败", error );
}
}
};
const refresh = (): void =>
{
queryDepartmentAttachingRateData( handler );
};
const showUploadFileDialog = (): void =>
{
ui.showUploadDialog = true;
};
onBeforeMount((): void =>
{
refresh();
});
return {
ui,
tableData,
onCurrentPageIndexChange,
onTablePageSizeChange,
showUploadFileDialog,
handler,
refresh,
};
},
};
</script>
<style lang="scss" scoped>
.wrapper {
margin: 0px 10px 10px 10px;
>*+* {
margin-top: 10px;
}
}
.pagination_wrapper {
display: flex;
justify-content: flex-end;
}
</style>

View File

@ -0,0 +1,243 @@
<!--
* @Author: Kane
* @Date: 2023-11-10 17:48:01
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/bi/DepartmentRenewalRateView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<template>
<div class="wrapper">
<el-row :gutter="10">
<el-col :span="24">
<el-button
type="warning"
icon="upload"
@click="showUploadFileDialog"
>
上传
</el-button>
<el-button
type="primary"
icon="refresh"
@click="refresh"
>
刷新
</el-button>
</el-col>
</el-row>
<el-table
:data="tableData"
style="width:100%;"
border
stripe
>
<el-table-column
label="部门"
align="center"
width="250px"
>
<template #default="dept">
<span>{{ dept.row.责任部门 }}</span>
</template>
</el-table-column>
<el-table-column
label="机构目标值"
align="center"
>
<template #default="dept">
<span>{{ dept.row.机构目标值.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
<el-table-column
label="到期数全月"
align="center"
>
<template #default="dept">
<span>{{ dept.row.到期数全月 }}</span>
</template>
</el-table-column>
<el-table-column
label="序时到期数占比"
align="center"
>
<template #default="dept">
<span>{{ dept.row.序时到期数占比.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
<el-table-column
label="个车续保率序时"
align="center"
>
<template #default="dept">
<span>{{ dept.row.个车续保率序时.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
<el-table-column
label="个车续保率全月"
align="center"
>
<template #default="dept">
<span>{{ dept.row.个车续保率全月.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination-wrapper">
<el-pagination
v-model="ui.tableCurrentPageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="0"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
<div
class="upload-dialog-wrapper"
>
<el-dialog
v-model="ui.showUploadDialog"
title="上传报表"
width="600px"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="true"
>
<BiDataUploadView :report-type="3" />
</el-dialog>
</div>
</div>
</template>
<script lang="ts">
import { reactive, computed, onBeforeMount } from "vue";
import {
type BIDepartmentRenewalRateRecord,
type QueryBIDepartmentRenewalRateResponse,
type QueryBIDepartmentRenewalRateDataHandler,
queryDepartmentRenewalRateData
} from "@/utils/BIReport.js";
import { ElMessageBox, ElMessage } from "element-plus";
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
interface UI
{
showUI: boolean;
showUploadDialog: boolean;
tablePageSize: number;
tableCurrentPageIndex: number;
BIDepartmentRenewalRateData: BIDepartmentRenewalRateRecord[];
}
export default {
name: "DepartmentRenewalRateView",
components: { BiDataUploadView, },
setup()
{
const ui: UI = reactive({
showUI: true,
showUploadDialog: false,
tablePageSize: 10,
tableCurrentPageIndex: 1,
BIDepartmentRenewalRateData: [],
});
// on
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
{
ui.tableCurrentPageIndex = pageIndex;
};
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
//
const tableData = computed((): BIDepartmentRenewalRateRecord[] =>
{
const tableCount = ui.BIDepartmentRenewalRateData.length;
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) < tableCount ? ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) : ( tableCount - ui.tablePageSize );
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex < tableCount ? ui.tablePageSize * ui.tableCurrentPageIndex : tableCount;
return ui.BIDepartmentRenewalRateData.slice( startIndex, endIndex );
});
// handler
const handler: QueryBIDepartmentRenewalRateDataHandler = ( response: QueryBIDepartmentRenewalRateResponse, error: any ): void =>
{
if ( response.success )
{
ui.BIDepartmentRenewalRateData = response.records;
ElMessage({
message: "更新完成",
type: "success",
});
}
else
{
ElMessageBox.confirm(
response.message,
"请求BI机构续保率数据失败",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
if ( error !== null )
{
console.log( error );
}
}
};
const showUploadFileDialog = (): void =>
{
ui.showUploadDialog = true;
};
onBeforeMount((): void =>
{
refresh();
});
const refresh = (): void =>
{
queryDepartmentRenewalRateData( handler );
};
return {
ui,
onCurrentPageIndexChange,
onTablePageSizeChange,
showUploadFileDialog,
//
tableData,
refresh,
};
},
};
</script>
<style lang="scss" scoped>
.wrapper {
margin: 0px 10px 10px 10px;
>*+* {
margin-top: 10px;
}
}
.pagination-wrapper {
display: flex;
justify-content: flex-end;
}
</style>

View File

@ -18,43 +18,71 @@
> >
上传 上传
</el-button> </el-button>
<el-button
type="primary"
icon="refresh"
@click="refresh"
>
刷新
</el-button>
</el-col> </el-col>
</el-row> </el-row>
<el-table <el-table
border border
stripe stripe
style="width:100%;" style="width:100%;"
:data="tableData"
> >
<el-table-column
type="selection"
align="center"
/>
<el-table-column <el-table-column
label="部门" label="部门"
align="center" align="center"
width="200" width="300"
/> >
<template #default="telsaler">
<span>{{ telsaler.row.departmentName }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="名称" label="名称"
align="center" align="center"
width="200" width="200"
/> >
<template #default="telsaler">
<span>{{ telsaler.row.telsalerName }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="车险保费(万)" label="车险保费"
align="center" align="center"
/> >
<template #default="telsaler">
<span>{{ Math.trunc( telsaler.row.motoPremium * 10000) }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="非车险保费(万)" label="非车险保费"
align="center" align="center"
/> >
<template #default="telsaler">
<span>{{ Math.trunc( telsaler.row.nomotoPremium * 10000) }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="当月保费渗透率" label="当月保费渗透率"
align="center" align="center"
/> >
<template #default="telsaler">
<span>{{ telsaler.row.attachingRate.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="渗透率环比上月" label="渗透率环比上月"
align="center" align="center"
/> >
<template #default="telsaler">
<span>{{ telsaler.row.attachingRateChange.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
</el-table> </el-table>
<div class="pagination_wrapper"> <div class="pagination_wrapper">
<el-pagination <el-pagination
@ -65,7 +93,7 @@
:page-size="ui.tablePageSize" :page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]" :page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="0" :total="tableCount"
@current-change="onCurrentPageIndexChange" @current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange" @size-change="onTablePageSizeChange"
/> />
@ -81,25 +109,42 @@
:close-on-press-escape="false" :close-on-press-escape="false"
:show-close="true" :show-close="true"
> >
<BiDataUploadView /> <BiDataUploadView :report-type="0" />
</el-dialog> </el-dialog>
</div> </div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { reactive } from "vue"; import { reactive, onBeforeMount, computed } from "vue";
import {
type BITelsalerAttachingRateRecord,
type QueryBITelsalerAttachingRateReportResponse,
type QueryBITelsalerAttachingRateDataHandler,
queryBITelsalerAttachingRateData
} from "@/utils/BIReport.js";
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue"; import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
import { ElMessageBox, ElMessage } from "element-plus";
interface UI
{
showUI: boolean,
showUploadDialog: boolean,
tableCurrentPageIndex: number,
tablePageSize: number,
BITelsalerAttachingRateData: BITelsalerAttachingRateRecord[],
}
export default { export default {
name: "TelsalerAttachingRateView", name: "TelsalerAttachingRateView",
components: { BiDataUploadView, }, components: { BiDataUploadView, },
setup() setup()
{ {
const ui = reactive({ const ui: UI = reactive({
showUI: true, showUI: true,
showUploadDialog: false, showUploadDialog: false,
tableCurrentPageIndex: 1, tableCurrentPageIndex: 1,
tablePageSize: 10, tablePageSize: 10,
BITelsalerAttachingRateData: [],
}); });
const showUploadFileDialog = (): void => const showUploadFileDialog = (): void =>
@ -117,18 +162,84 @@ export default {
ui.tablePageSize = pageSize; ui.tablePageSize = pageSize;
}; };
/** 请求处理handler ********/
const queryBITelsalerAttachingRateDataHandler: QueryBITelsalerAttachingRateDataHandler = ( response: QueryBITelsalerAttachingRateReportResponse, error: any ): void =>
{
//
if ( response.success )
{
ui.BITelsalerAttachingRateData = response.records;
ElMessage({
message: "更新成功",
type: "success",
});
}
else
{
//
ElMessageBox.confirm(
response.message,
"请求BI坐席渗透率数据错误",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
if ( error !== null )
{
console.log( error );
}
}
};
const tableCount = computed((): number =>
{
return ui.BITelsalerAttachingRateData.length;
});
const tableData = computed((): BITelsalerAttachingRateRecord[] =>
{
const tableCount = ui.BITelsalerAttachingRateData.length;
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) > tableCount ? tableCount - ui.tablePageSize : ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 );
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex;
return ui.BITelsalerAttachingRateData.slice( startIndex, endIndex );
});
onBeforeMount((): void =>
{
queryBITelsalerAttachingRateData( queryBITelsalerAttachingRateDataHandler );
});
const refresh = (): void =>
{
console.log( import.meta.env.VITE_TEST );
queryBITelsalerAttachingRateData( queryBITelsalerAttachingRateDataHandler );
};
return { return {
ui, ui,
showUploadFileDialog, showUploadFileDialog,
onCurrentPageIndexChange, onCurrentPageIndexChange,
onTablePageSizeChange, onTablePageSizeChange,
//
tableData,
tableCount,
//
queryBITelsalerAttachingRateDataHandler,
refresh,
}; };
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.wrapper { .wrapper {
margin: 10px; margin: 0px 10px 10px 10px;
>*+* { >*+* {
margin-top: 10px; margin-top: 10px;

View File

@ -1,30 +1,241 @@
src/views/data/bi/TelsalerAttachingRateView.vue<!-- <!--
* @Author: Kane * @Author: Kane
* @Date: 2023-10-17 14:41:39 * @Date: 2023-10-17 23:31:19
* @LastEditors: Kane * @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/TelsalerAttachingRateView.vue * @FilePath: /task_schedule/src/views/data/bi/TelsalerRenewalRateView.vue
* @Description: * @Description:
* *
* Copyright (c) ${2023} by Kane, All Rights Reserved. * Copyright (c) ${2023} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div class="wrapper" /> <div class="wrapper">
<el-row :gutter="10">
<el-col :span="24">
<el-button
type="warning"
icon="Upload"
@click="showUploadFileDialog"
>
上传
</el-button>
<el-button
type="primary"
icon="refresh"
@click="refresh"
>
刷新
</el-button>
</el-col>
</el-row>
<el-table
border
stripe
style="width:100%;"
:data="tableData"
>
<el-table-column
label="部门"
align="center"
>
<template #default="telsaler">
<span>{{ telsaler.row.责任部门 }}</span>
</template>
</el-table-column>
<el-table-column
label="责任人"
align="center"
>
<template #default="telsaler">
<span>{{ telsaler.row.责任人 }}</span>
</template>
</el-table-column>
<el-table-column
label="到期数-全月"
align="center"
>
<template #default="telsaler">
<span>{{ telsaler.row.到期数全月 }}</span>
</template>
</el-table-column>
<el-table-column
label="个车续保率(序时)(%)"
align="center"
>
<template #default="telsaler">
<span>{{ telsaler.row.个车续保率序时 }}</span>
</template>
</el-table-column>
<el-table-column
label="个车续保率(全月)(%)"
align="center"
>
<template #default="telsaler">
<span>{{ telsaler.row.个车续保率全月 }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination_wrapper">
<el-pagination
v-model="ui.tableCurrentPageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="0"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
<div
class="upload-dialog-wrapper"
>
<el-dialog
v-model="ui.showUploadDialog"
title="上传报表"
width="600px"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="true"
>
<BiDataUploadView :report-type="1" />
</el-dialog>
</div>
</div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { reactive } from "vue"; import { reactive, computed, onBeforeMount } from "vue";
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
import {
type QueryBITelsalerRenewalRateDataHandler,
type BITelsalerRenewalRateRecord,
type QueryBITelsalerRenewalRateReportResponse,
queryBITelsalerRenewalData
} from "@/utils/BIReport.js";
import { ElMessageBox, ElMessage } from "element-plus";
interface UI
{
showUI: boolean,
showUploadDialog: boolean,
tableCurrentPageIndex: number,
tablePageSize: number,
BITelsalerRenewalRateData: BITelsalerRenewalRateRecord[],
}
export default { export default {
name: "TelsalerAttachingRateView", name: "TelsalerAttachingRateView",
components: { BiDataUploadView, },
setup() setup()
{ {
const ui = reactive({ const ui: UI = reactive({
showUI: true, showUI: true,
showUploadDialog: false,
tableCurrentPageIndex: 1,
tablePageSize: 10,
BITelsalerRenewalRateData: [],
}); });
const showUploadFileDialog = (): void =>
{
ui.showUploadDialog = true;
};
const onCurrentPageIndexChange = ( index: number ): void =>
{
ui.tableCurrentPageIndex = index;
};
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
const tableData = computed((): BITelsalerRenewalRateRecord[] =>
{
const tableCount = ui.BITelsalerRenewalRateData.length;
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) > tableCount ? tableCount - ui.tablePageSize : ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 );
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex;
return ui.BITelsalerRenewalRateData.slice( startIndex, endIndex );
});
const tableCount = computed((): number =>
{
return ui.BITelsalerRenewalRateData.length;
});
// handler
const queryBITelsalerRenewalRateDataHander: QueryBITelsalerRenewalRateDataHandler = ( response: QueryBITelsalerRenewalRateReportResponse, error: any ): void =>
{
//
if ( response.success )
{
ui.BITelsalerRenewalRateData = response.records;
ElMessage({
message: "更新成功",
type: "success",
});
}
else
{
//
ElMessageBox.confirm(
response.message,
"请求BI坐席续保率数据错误",
{
confirmButtonText: "确定",
type: "warning",
center: true,
}
)
.then((): void => {})
.catch((): void => {});
if ( error !== null )
{
console.log( error );
}
}
};
onBeforeMount((): void =>
{
queryBITelsalerRenewalData( queryBITelsalerRenewalRateDataHander );
});
const refresh = (): void =>
{
queryBITelsalerRenewalData( queryBITelsalerRenewalRateDataHander );
};
return {
ui,
showUploadFileDialog,
onCurrentPageIndexChange,
onTablePageSizeChange,
//
tableData,
tableCount,
//
refresh,
};
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.wrapper { .wrapper {
margin: 10px; margin: 0px 10px 10px 10px;
>*+* {
margin-top: 10px;
}
}
.pagination_wrapper {
display: flex;
justify-content: flex-end;
} }
</style> </style>

View File

@ -11,10 +11,11 @@
"compilerOptions": { "compilerOptions": {
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"useDefineForClassFields": true, "useDefineForClassFields": true,
"target": "ES2015", "target": "ESNext",
"module": "ES2015", "module": "ESNext",
"moduleResolution": "node", "moduleResolution": "node",
"strict": true, "strict": true,
"strictNullChecks": true,
"jsx": "preserve", "jsx": "preserve",
"sourceMap": true, "sourceMap": true,
"resolveJsonModule": true, "resolveJsonModule": true,

View File

@ -2,7 +2,7 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-02-15 09:25:52 * @Date: 2023-02-15 09:25:52
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-06-25 09:51:13 * @LastEditTime: 2023-11-13 10:42:29
* @FilePath: /task_schedule/vite.config.js * @FilePath: /task_schedule/vite.config.js
* @Description: * @Description:
* *
@ -19,6 +19,9 @@ export default defineConfig(( command, mode ) =>
return { return {
server:{ host: "localhost", port: 5173, }, server:{ host: "localhost", port: 5173, },
build: {
outDir: "../../../输出/web",
},
plugins: [vue(),], plugins: [vue(),],
base: "./", base: "./",
resolve: { resolve: {

View File

@ -13,7 +13,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source> <maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target> <maven.compiler.target>17</maven.compiler.target>
<spring.version>5.3.24</spring.version> <spring.version>5.3.30</spring.version>
<log4j2.version>2.20.0</log4j2.version> <log4j2.version>2.20.0</log4j2.version>
<!-- <spring.version>6.0.11</spring.version> --> <!-- <spring.version>6.0.11</spring.version> -->
</properties> </properties>
@ -162,7 +162,9 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version> <version>3.3.2</version>
<configuration></configuration> <configuration>
<outputDirectory>${project.build.directory}/../../../../输出/back/</outputDirectory>
</configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -0,0 +1,27 @@
/*
* @Author: Kane
* @Date: 2023-11-01 15:50:40
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/QueryBIArchievementDataMapper.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.mapper;
import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
public interface QueryBIArchievementDataMapper
{
public ArrayList<BITelsalerAttachingRateRecord> queryBITelsalerAttachingRate();
public ArrayList<BITelsalerRenewalRateRecord> queryBITesalerRenewalRate();
public ArrayList<BIDepartmentAttachingRateRecord> queryBIDepartmentAttachingRate();
public ArrayList<BIDepartmentRenewalRateRecord> queryBIDepartmentRenewalRate();
}

View File

@ -0,0 +1,20 @@
/*
* @Author: Kane
* @Date: 2023-11-25 18:48:11
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/TWrTelsalerMapper.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.mapper;
import org.apache.ibatis.annotations.Param;
import com.cpic.xim.mybatis.pojo.TWrTelsalerRecord;
public interface TWrTelsalerMapper
{
public TWrTelsalerRecord queryTWrTelsalerInfo( @Param("telsaler") String telsaler );
public void insertTWrTelsalerRecordToDB( TWrTelsalerRecord record );
}

View File

@ -22,7 +22,8 @@ public class BIDepartmentRenewalRateRecord
private int 平均提前签单天数; private int 平均提前签单天数;
private double 环比; private double 环比;
public BIDepartmentRenewalRateRecord() {} public BIDepartmentRenewalRateRecord()
{}
public BIDepartmentRenewalRateRecord( String 责任部门, double 机构目标值, int 到期数全月, double 序时到期数占比, public BIDepartmentRenewalRateRecord( String 责任部门, double 机构目标值, int 到期数全月, double 序时到期数占比,
double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月, int 平均提前签单天数, double 环比 ) double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月, int 平均提前签单天数, double 环比 )

View File

@ -9,7 +9,6 @@
*/ */
package com.cpic.xim.mybatis.pojo; package com.cpic.xim.mybatis.pojo;
import java.time.LocalDate;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
public class BITelsalerAttachingRateRecord public class BITelsalerAttachingRateRecord
@ -18,10 +17,6 @@ public class BITelsalerAttachingRateRecord
@JsonProperty( "departmentName" ) @JsonProperty( "departmentName" )
private String departmentName; private String departmentName;
// 统计日期
@JsonProperty( "summaryDate" )
private LocalDate summaryDate;
// 坐席名称 // 坐席名称
@JsonProperty( "telsalerName" ) @JsonProperty( "telsalerName" )
private String telsalerName; private String telsalerName;
@ -47,29 +42,28 @@ public class BITelsalerAttachingRateRecord
private double attachingRateChange; private double attachingRateChange;
// 当月客户渗透率 // 当月客户渗透率
@JsonProperty( "customerHandleRateCell" ) @JsonProperty( "customerHandleRate" )
private double customerHandleRate; private double customerHandleRate;
// 客户渗透率环比上月 // 客户渗透率环比上月
@JsonProperty( "customerHandleRateChangeCell" ) @JsonProperty( "customerHandleRateChange" )
private double customerHandleRateChange; private double customerHandleRateChange;
// 当月车非客均保费 // 当月车非客均保费
@JsonProperty( "noMotoPremiumPerCustomerCell" ) @JsonProperty( "noMotoPremiumPerCustomer" )
private double noMotoPremiumPerCustomer; private double noMotoPremiumPerCustomer;
// 客均保费环比上月 // 客均保费环比上月
@JsonProperty( "noMotoPremiumPerCustomerChangeCell" ) @JsonProperty( "noMotoPremiumPerCustomerChange" )
private double noMotoPremiumPerCustomerChange; private double noMotoPremiumPerCustomerChange;
public BITelsalerAttachingRateRecord( String departmentName, LocalDate summaryDate, public BITelsalerAttachingRateRecord( String departmentName,
String telsalerName, double motoPremium, double nomotoPremium, String telsalerName, double motoPremium, double nomotoPremium,
double motoPremiumProportion, double attachingRate, double attachingRateChange, double motoPremiumProportion, double attachingRate, double attachingRateChange,
double customerHandleRate, double customerHandleRateChange, double customerHandleRate, double customerHandleRateChange,
double noMotoPremiumPerCustomer, double noMotoPremiumPerCustomerChange ) double noMotoPremiumPerCustomer, double noMotoPremiumPerCustomerChange )
{ {
this.departmentName = departmentName; this.departmentName = departmentName;
this.summaryDate = summaryDate;
this.telsalerName = telsalerName; this.telsalerName = telsalerName;
this.motoPremium = motoPremium; this.motoPremium = motoPremium;
this.nomotoPremium = nomotoPremium; this.nomotoPremium = nomotoPremium;
@ -129,7 +123,7 @@ public class BITelsalerAttachingRateRecord
public String toString() public String toString()
{ {
return "BITelsalerAttachingRateRecord [departmentName=" + departmentName + ", summaryDate=" return "BITelsalerAttachingRateRecord [departmentName=" + departmentName + ", summaryDate="
+ summaryDate + ", telsalerName=" + telsalerName + ", motoPremium=" + motoPremium + ", telsalerName=" + telsalerName + ", motoPremium=" + motoPremium
+ ", nomotoPremium=" + nomotoPremium + ", motoPremiumProportion=" + ", nomotoPremium=" + nomotoPremium + ", motoPremiumProportion="
+ motoPremiumProportion + ", attachingRate=" + attachingRate + motoPremiumProportion + ", attachingRate=" + attachingRate
+ ", attachingRateChange=" + attachingRateChange + ", customerHandleRate=" + ", attachingRateChange=" + attachingRateChange + ", customerHandleRate="
@ -144,7 +138,6 @@ public class BITelsalerAttachingRateRecord
final int prime = 31; final int prime = 31;
int result = 1; int result = 1;
result = prime * result + ((departmentName == null) ? 0 : departmentName.hashCode()); result = prime * result + ((departmentName == null) ? 0 : departmentName.hashCode());
result = prime * result + ((summaryDate == null) ? 0 : summaryDate.hashCode());
result = prime * result + ((telsalerName == null) ? 0 : telsalerName.hashCode()); result = prime * result + ((telsalerName == null) ? 0 : telsalerName.hashCode());
long temp; long temp;
temp = Double.doubleToLongBits( motoPremium ); temp = Double.doubleToLongBits( motoPremium );
@ -185,13 +178,6 @@ public class BITelsalerAttachingRateRecord
} }
else if ( !departmentName.equals( other.departmentName ) ) else if ( !departmentName.equals( other.departmentName ) )
return false; return false;
if ( summaryDate == null )
{
if ( other.summaryDate != null )
return false;
}
else if ( !summaryDate.equals( other.summaryDate ) )
return false;
if ( telsalerName == null ) if ( telsalerName == null )
{ {
if ( other.telsalerName != null ) if ( other.telsalerName != null )
@ -229,16 +215,6 @@ public class BITelsalerAttachingRateRecord
return true; return true;
} }
public LocalDate getSummaryDate()
{
return summaryDate;
}
public void setSummaryDate( LocalDate summaryDate )
{
this.summaryDate = summaryDate;
}
public String getTelsalerName() public String getTelsalerName()
{ {
return telsalerName; return telsalerName;

View File

@ -0,0 +1,755 @@
/*
* @Author: Kane
* @Date: 2023-11-24 14:34:16
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/TwrTelsalerRecord.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.pojo;
public class TWrTelsalerRecord
{
private String 人员姓名;
private String 人员工号;
private String 籍贯;
private String 参加工作时间;
private String 入职日期;
private String 入司日期;
private String 业务类型;
private String 办公地省;
private String 办公地市;
private String 人员类别;
private String 现任岗位;
private String 现任职级;
private String 机构名称;
private String 职场分类;
private String 片区名称;
private String 团队名称;
private String 对口分公司;
private String 展业地区;
private String 招聘渠道;
private String 渠道明细;
private String 全日制最高学历;
private String 学历类型;
private String 用工性质名称;
private String 合同种类;
private String 合同类型;
private String 合同性质;
private int 合同签订次数;
private String 合同生效日期;
private String 合同到期日期;
private String 人员属性;
private String 保代员工号;
private String 职场属性;
private String 办公性质;
private String 保代人员属性;
private String 人员状态;
public TWrTelsalerRecord( String 人员姓名, String 人员工号, String 籍贯, String 参加工作时间, String 入职日期,
String 入司日期, String 业务类型, String 办公地省, String 办公地市, String 人员类别, String 现任岗位,
String 现任职级, String 机构名称, String 职场分类, String 片区名称, String 团队名称, String 对口分公司,
String 展业地区, String 招聘渠道, String 渠道明细, String 全日制最高学历, String 学历类型, String 用工性质名称,
String 合同种类, String 合同类型, String 合同性质, int 合同签订次数, String 合同生效日期, String 合同到期日期,
String 人员属性, String 保代员工号, String 职场属性, String 办公性质, String 保代人员属性, String 人员状态 )
{
this.人员姓名 = 人员姓名;
this.人员工号 = 人员工号;
this.籍贯 = 籍贯;
this.参加工作时间 = 参加工作时间;
this.入职日期 = 入职日期;
this.入司日期 = 入司日期;
this.业务类型 = 业务类型;
this.办公地省 = 办公地省;
this.办公地市 = 办公地市;
this.人员类别 = 人员类别;
this.现任岗位 = 现任岗位;
this.现任职级 = 现任职级;
this.机构名称 = 机构名称;
this.职场分类 = 职场分类;
this.片区名称 = 片区名称;
this.团队名称 = 团队名称;
this.对口分公司 = 对口分公司;
this.展业地区 = 展业地区;
this.招聘渠道 = 招聘渠道;
this.渠道明细 = 渠道明细;
this.全日制最高学历 = 全日制最高学历;
this.学历类型 = 学历类型;
this.用工性质名称 = 用工性质名称;
this.合同种类 = 合同种类;
this.合同类型 = 合同类型;
this.合同性质 = 合同性质;
this.合同签订次数 = 合同签订次数;
this.合同生效日期 = 合同生效日期;
this.合同到期日期 = 合同到期日期;
this.人员属性 = 人员属性;
this.保代员工号 = 保代员工号;
this.职场属性 = 职场属性;
this.办公性质 = 办公性质;
this.保代人员属性 = 保代人员属性;
this.人员状态 = 人员状态;
}
@Override
public String toString()
{
return "TWrTelsalerRecord [人员姓名=" + 人员姓名 + ", 人员工号=" + 人员工号 + ", 籍贯=" + 籍贯 + ", 参加工作时间="
+ 参加工作时间 + ", 入职日期=" + 入职日期 + ", 入司日期=" + 入司日期 + ", 业务类型=" + 业务类型 + ", 办公地省=" + 办公地省
+ ", 办公地市=" + 办公地市 + ", 人员类别=" + 人员类别 + ", 现任岗位=" + 现任岗位 + ", 现任职级=" + 现任职级
+ ", 机构名称=" + 机构名称 + ", 职场分类=" + 职场分类 + ", 片区名称=" + 片区名称 + ", 团队名称=" + 团队名称
+ ", 对口分公司=" + 对口分公司 + ", 展业地区=" + 展业地区 + ", 招聘渠道=" + 招聘渠道 + ", 渠道明细=" + 渠道明细
+ ", 全日制最高学历=" + 全日制最高学历 + ", 学历类型=" + 学历类型 + ", 用工性质名称=" + 用工性质名称 + ", 合同种类="
+ 合同种类 + ", 合同类型=" + 合同类型 + ", 合同性质=" + 合同性质 + ", 合同签订次数=" + 合同签订次数 + ", 合同生效日期="
+ 合同生效日期 + ", 合同到期日期=" + 合同到期日期 + ", 人员属性=" + 人员属性 + ", 保代员工号=" + 保代员工号 + ", 职场属性="
+ 职场属性 + ", 办公性质=" + 办公性质 + ", 保代人员属性=" + 保代人员属性 + ", 人员状态=" + 人员状态 + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((人员姓名 == null) ? 0 : 人员姓名.hashCode());
result = prime * result + ((人员工号 == null) ? 0 : 人员工号.hashCode());
result = prime * result + ((籍贯 == null) ? 0 : 籍贯.hashCode());
result = prime * result + ((参加工作时间 == null) ? 0 : 参加工作时间.hashCode());
result = prime * result + ((入职日期 == null) ? 0 : 入职日期.hashCode());
result = prime * result + ((入司日期 == null) ? 0 : 入司日期.hashCode());
result = prime * result + ((业务类型 == null) ? 0 : 业务类型.hashCode());
result = prime * result + ((办公地省 == null) ? 0 : 办公地省.hashCode());
result = prime * result + ((办公地市 == null) ? 0 : 办公地市.hashCode());
result = prime * result + ((人员类别 == null) ? 0 : 人员类别.hashCode());
result = prime * result + ((现任岗位 == null) ? 0 : 现任岗位.hashCode());
result = prime * result + ((现任职级 == null) ? 0 : 现任职级.hashCode());
result = prime * result + ((机构名称 == null) ? 0 : 机构名称.hashCode());
result = prime * result + ((职场分类 == null) ? 0 : 职场分类.hashCode());
result = prime * result + ((片区名称 == null) ? 0 : 片区名称.hashCode());
result = prime * result + ((团队名称 == null) ? 0 : 团队名称.hashCode());
result = prime * result + ((对口分公司 == null) ? 0 : 对口分公司.hashCode());
result = prime * result + ((展业地区 == null) ? 0 : 展业地区.hashCode());
result = prime * result + ((招聘渠道 == null) ? 0 : 招聘渠道.hashCode());
result = prime * result + ((渠道明细 == null) ? 0 : 渠道明细.hashCode());
result = prime * result + ((全日制最高学历 == null) ? 0 : 全日制最高学历.hashCode());
result = prime * result + ((学历类型 == null) ? 0 : 学历类型.hashCode());
result = prime * result + ((用工性质名称 == null) ? 0 : 用工性质名称.hashCode());
result = prime * result + ((合同种类 == null) ? 0 : 合同种类.hashCode());
result = prime * result + ((合同类型 == null) ? 0 : 合同类型.hashCode());
result = prime * result + ((合同性质 == null) ? 0 : 合同性质.hashCode());
result = prime * result + 合同签订次数;
result = prime * result + ((合同生效日期 == null) ? 0 : 合同生效日期.hashCode());
result = prime * result + ((合同到期日期 == null) ? 0 : 合同到期日期.hashCode());
result = prime * result + ((人员属性 == null) ? 0 : 人员属性.hashCode());
result = prime * result + ((保代员工号 == null) ? 0 : 保代员工号.hashCode());
result = prime * result + ((职场属性 == null) ? 0 : 职场属性.hashCode());
result = prime * result + ((办公性质 == null) ? 0 : 办公性质.hashCode());
result = prime * result + ((保代人员属性 == null) ? 0 : 保代人员属性.hashCode());
result = prime * result + ((人员状态 == null) ? 0 : 人员状态.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
TWrTelsalerRecord other = (TWrTelsalerRecord) obj;
if ( 人员姓名 == null )
{
if ( other.人员姓名 != null )
return false;
}
else if ( !人员姓名.equals( other.人员姓名 ) )
return false;
if ( 人员工号 == null )
{
if ( other.人员工号 != null )
return false;
}
else if ( !人员工号.equals( other.人员工号 ) )
return false;
if ( 籍贯 == null )
{
if ( other.籍贯 != null )
return false;
}
else if ( !籍贯.equals( other.籍贯 ) )
return false;
if ( 参加工作时间 == null )
{
if ( other.参加工作时间 != null )
return false;
}
else if ( !参加工作时间.equals( other.参加工作时间 ) )
return false;
if ( 入职日期 == null )
{
if ( other.入职日期 != null )
return false;
}
else if ( !入职日期.equals( other.入职日期 ) )
return false;
if ( 入司日期 == null )
{
if ( other.入司日期 != null )
return false;
}
else if ( !入司日期.equals( other.入司日期 ) )
return false;
if ( 业务类型 == null )
{
if ( other.业务类型 != null )
return false;
}
else if ( !业务类型.equals( other.业务类型 ) )
return false;
if ( 办公地省 == null )
{
if ( other.办公地省 != null )
return false;
}
else if ( !办公地省.equals( other.办公地省 ) )
return false;
if ( 办公地市 == null )
{
if ( other.办公地市 != null )
return false;
}
else if ( !办公地市.equals( other.办公地市 ) )
return false;
if ( 人员类别 == null )
{
if ( other.人员类别 != null )
return false;
}
else if ( !人员类别.equals( other.人员类别 ) )
return false;
if ( 现任岗位 == null )
{
if ( other.现任岗位 != null )
return false;
}
else if ( !现任岗位.equals( other.现任岗位 ) )
return false;
if ( 现任职级 == null )
{
if ( other.现任职级 != null )
return false;
}
else if ( !现任职级.equals( other.现任职级 ) )
return false;
if ( 机构名称 == null )
{
if ( other.机构名称 != null )
return false;
}
else if ( !机构名称.equals( other.机构名称 ) )
return false;
if ( 职场分类 == null )
{
if ( other.职场分类 != null )
return false;
}
else if ( !职场分类.equals( other.职场分类 ) )
return false;
if ( 片区名称 == null )
{
if ( other.片区名称 != null )
return false;
}
else if ( !片区名称.equals( other.片区名称 ) )
return false;
if ( 团队名称 == null )
{
if ( other.团队名称 != null )
return false;
}
else if ( !团队名称.equals( other.团队名称 ) )
return false;
if ( 对口分公司 == null )
{
if ( other.对口分公司 != null )
return false;
}
else if ( !对口分公司.equals( other.对口分公司 ) )
return false;
if ( 展业地区 == null )
{
if ( other.展业地区 != null )
return false;
}
else if ( !展业地区.equals( other.展业地区 ) )
return false;
if ( 招聘渠道 == null )
{
if ( other.招聘渠道 != null )
return false;
}
else if ( !招聘渠道.equals( other.招聘渠道 ) )
return false;
if ( 渠道明细 == null )
{
if ( other.渠道明细 != null )
return false;
}
else if ( !渠道明细.equals( other.渠道明细 ) )
return false;
if ( 全日制最高学历 == null )
{
if ( other.全日制最高学历 != null )
return false;
}
else if ( !全日制最高学历.equals( other.全日制最高学历 ) )
return false;
if ( 学历类型 == null )
{
if ( other.学历类型 != null )
return false;
}
else if ( !学历类型.equals( other.学历类型 ) )
return false;
if ( 用工性质名称 == null )
{
if ( other.用工性质名称 != null )
return false;
}
else if ( !用工性质名称.equals( other.用工性质名称 ) )
return false;
if ( 合同种类 == null )
{
if ( other.合同种类 != null )
return false;
}
else if ( !合同种类.equals( other.合同种类 ) )
return false;
if ( 合同类型 == null )
{
if ( other.合同类型 != null )
return false;
}
else if ( !合同类型.equals( other.合同类型 ) )
return false;
if ( 合同性质 == null )
{
if ( other.合同性质 != null )
return false;
}
else if ( !合同性质.equals( other.合同性质 ) )
return false;
if ( 合同签订次数 != other.合同签订次数 )
return false;
if ( 合同生效日期 == null )
{
if ( other.合同生效日期 != null )
return false;
}
else if ( !合同生效日期.equals( other.合同生效日期 ) )
return false;
if ( 合同到期日期 == null )
{
if ( other.合同到期日期 != null )
return false;
}
else if ( !合同到期日期.equals( other.合同到期日期 ) )
return false;
if ( 人员属性 == null )
{
if ( other.人员属性 != null )
return false;
}
else if ( !人员属性.equals( other.人员属性 ) )
return false;
if ( 保代员工号 == null )
{
if ( other.保代员工号 != null )
return false;
}
else if ( !保代员工号.equals( other.保代员工号 ) )
return false;
if ( 职场属性 == null )
{
if ( other.职场属性 != null )
return false;
}
else if ( !职场属性.equals( other.职场属性 ) )
return false;
if ( 办公性质 == null )
{
if ( other.办公性质 != null )
return false;
}
else if ( !办公性质.equals( other.办公性质 ) )
return false;
if ( 保代人员属性 == null )
{
if ( other.保代人员属性 != null )
return false;
}
else if ( !保代人员属性.equals( other.保代人员属性 ) )
return false;
if ( 人员状态 == null )
{
if ( other.人员状态 != null )
return false;
}
else if ( !人员状态.equals( other.人员状态 ) )
return false;
return true;
}
public String get人员姓名()
{
return 人员姓名;
}
public void set人员姓名( String 人员姓名 )
{
this.人员姓名 = 人员姓名;
}
public String get人员工号()
{
return 人员工号;
}
public void set人员工号( String 人员工号 )
{
this.人员工号 = 人员工号;
}
public String get籍贯()
{
return 籍贯;
}
public void set籍贯( String 籍贯 )
{
this.籍贯 = 籍贯;
}
public String get参加工作时间()
{
return 参加工作时间;
}
public void set参加工作时间( String 参加工作时间 )
{
this.参加工作时间 = 参加工作时间;
}
public String get入职日期()
{
return 入职日期;
}
public void set入职日期( String 入职日期 )
{
this.入职日期 = 入职日期;
}
public String get入司日期()
{
return 入司日期;
}
public void set入司日期( String 入司日期 )
{
this.入司日期 = 入司日期;
}
public String get业务类型()
{
return 业务类型;
}
public void set业务类型( String 业务类型 )
{
this.业务类型 = 业务类型;
}
public String get办公地省()
{
return 办公地省;
}
public void set办公地省( String 办公地省 )
{
this.办公地省 = 办公地省;
}
public String get办公地市()
{
return 办公地市;
}
public void set办公地市( String 办公地市 )
{
this.办公地市 = 办公地市;
}
public String get人员类别()
{
return 人员类别;
}
public void set人员类别( String 人员类别 )
{
this.人员类别 = 人员类别;
}
public String get现任岗位()
{
return 现任岗位;
}
public void set现任岗位( String 现任岗位 )
{
this.现任岗位 = 现任岗位;
}
public String get现任职级()
{
return 现任职级;
}
public void set现任职级( String 现任职级 )
{
this.现任职级 = 现任职级;
}
public String get机构名称()
{
return 机构名称;
}
public void set机构名称( String 机构名称 )
{
this.机构名称 = 机构名称;
}
public String get职场分类()
{
return 职场分类;
}
public void set职场分类( String 职场分类 )
{
this.职场分类 = 职场分类;
}
public String get片区名称()
{
return 片区名称;
}
public void set片区名称( String 片区名称 )
{
this.片区名称 = 片区名称;
}
public String get团队名称()
{
return 团队名称;
}
public void set团队名称( String 团队名称 )
{
this.团队名称 = 团队名称;
}
public String get对口分公司()
{
return 对口分公司;
}
public void set对口分公司( String 对口分公司 )
{
this.对口分公司 = 对口分公司;
}
public String get展业地区()
{
return 展业地区;
}
public void set展业地区( String 展业地区 )
{
this.展业地区 = 展业地区;
}
public String get招聘渠道()
{
return 招聘渠道;
}
public void set招聘渠道( String 招聘渠道 )
{
this.招聘渠道 = 招聘渠道;
}
public String get渠道明细()
{
return 渠道明细;
}
public void set渠道明细( String 渠道明细 )
{
this.渠道明细 = 渠道明细;
}
public String get全日制最高学历()
{
return 全日制最高学历;
}
public void set全日制最高学历( String 全日制最高学历 )
{
this.全日制最高学历 = 全日制最高学历;
}
public String get学历类型()
{
return 学历类型;
}
public void set学历类型( String 学历类型 )
{
this.学历类型 = 学历类型;
}
public String get用工性质名称()
{
return 用工性质名称;
}
public void set用工性质名称( String 用工性质名称 )
{
this.用工性质名称 = 用工性质名称;
}
public String get合同种类()
{
return 合同种类;
}
public void set合同种类( String 合同种类 )
{
this.合同种类 = 合同种类;
}
public String get合同类型()
{
return 合同类型;
}
public void set合同类型( String 合同类型 )
{
this.合同类型 = 合同类型;
}
public String get合同性质()
{
return 合同性质;
}
public void set合同性质( String 合同性质 )
{
this.合同性质 = 合同性质;
}
public int get合同签订次数()
{
return 合同签订次数;
}
public void set合同签订次数( int 合同签订次数 )
{
this.合同签订次数 = 合同签订次数;
}
public String get合同生效日期()
{
return 合同生效日期;
}
public void set合同生效日期( String 合同生效日期 )
{
this.合同生效日期 = 合同生效日期;
}
public String get合同到期日期()
{
return 合同到期日期;
}
public void set合同到期日期( String 合同到期日期 )
{
this.合同到期日期 = 合同到期日期;
}
public String get人员属性()
{
return 人员属性;
}
public void set人员属性( String 人员属性 )
{
this.人员属性 = 人员属性;
}
public String get保代员工号()
{
return 保代员工号;
}
public void set保代员工号( String 保代员工号 )
{
this.保代员工号 = 保代员工号;
}
public String get职场属性()
{
return 职场属性;
}
public void set职场属性( String 职场属性 )
{
this.职场属性 = 职场属性;
}
public String get办公性质()
{
return 办公性质;
}
public void set办公性质( String 办公性质 )
{
this.办公性质 = 办公性质;
}
public String get保代人员属性()
{
return 保代人员属性;
}
public void set保代人员属性( String 保代人员属性 )
{
this.保代人员属性 = 保代人员属性;
}
public String get人员状态()
{
return 人员状态;
}
public void set人员状态( String 人员状态 )
{
this.人员状态 = 人员状态;
}
}

View File

@ -20,8 +20,10 @@ import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtils public class MybatisUtils
{ {
private static HashMap<String, SqlSession> SessionMap = new HashMap<>(5); private static HashMap<String, SqlSession> SessionMap = new HashMap<>( 5 );
private static HashMap<String, SqlSession> SessionMapBatch = new HashMap<>(5); private static HashMap<String, SqlSession> SessionMapBatch = new HashMap<>( 5 );
private static HashMap<String, SqlSessionFactory> SessionFactoryMap = new HashMap<>( 5 );
private static HashMap<String, SqlSessionFactory> SessionFactoryMapBatch = new HashMap<>( 5 );
private static String DEFAULT_CONFIGFILE = "mybatis/mybatis-config.xml"; private static String DEFAULT_CONFIGFILE = "mybatis/mybatis-config.xml";
/** /**
@ -33,43 +35,45 @@ public class MybatisUtils
public static SqlSession getSqlSession( String configFile ) throws IOException public static SqlSession getSqlSession( String configFile ) throws IOException
{ {
// 根据配置文件的路径查找是否已经创建了对应的session // 根据配置文件的路径查找是否已经创建了对应的session
SqlSession session = SessionMap.get( configFile ); SqlSessionFactory factory = SessionFactoryMap.get( configFile );
// 找到就直接返回 // 找到就直接返回
if ( session != null ) if ( factory != null )
{ {
return session; return factory.openSession();
} }
// 没找到就创建一个 // 没找到就创建一个
InputStream configIS = Resources.getResourceAsStream( configFile ); InputStream configIS = Resources.getResourceAsStream( configFile );
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS ); factory = new SqlSessionFactoryBuilder().build( configIS );
session = factory.openSession(); SqlSession session = factory.openSession();
// 保存 // 保存
SessionMap.put( configFile, session ); SessionFactoryMap.put( configFile, factory );
return session; return session;
} }
public static SqlSession getSqlSessionBatch( String configFile ) throws IOException public static SqlSession getSqlSessionBatch( String configFile ) throws IOException
{ {
SqlSession sessionBatch = SessionMapBatch.get( configFile ); // 根据配置文件的路径查找是否已经创建了对应的session
SqlSessionFactory factory = SessionFactoryMap.get( configFile );
if ( sessionBatch != null ) // 找到就直接返回
if ( factory != null )
{ {
return sessionBatch; return factory.openSession();
} }
// 有缓存的就创建一个新的 // 找到就创建一个
InputStream configIS = Resources.getResourceAsStream( configFile ); InputStream configIS = Resources.getResourceAsStream( configFile );
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS ); factory = new SqlSessionFactoryBuilder().build( configIS );
sessionBatch = factory.openSession(ExecutorType.BATCH, false ); SqlSession session = factory.openSession( ExecutorType.BATCH, false );
//保存 // 保存
SessionMapBatch.put( configFile, sessionBatch ); SessionFactoryMap.put( configFile, factory );
return sessionBatch; return session;
} }
/** /**
@ -80,21 +84,21 @@ public class MybatisUtils
public static SqlSession getSqlSession() throws IOException public static SqlSession getSqlSession() throws IOException
{ {
// 根据配置文件的路径查找是否已经创建了对应的session // 根据配置文件的路径查找是否已经创建了对应的session
SqlSession session = SessionMap.get( DEFAULT_CONFIGFILE ); SqlSessionFactory factory = SessionFactoryMap.get( DEFAULT_CONFIGFILE );
// 找到就直接返回 // 找到就直接返回
if ( session != null ) if ( factory != null )
{ {
return session; return factory.openSession();
} }
// 没找到就创建一个 // 没找到就创建一个
InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE ); InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE );
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS ); factory = new SqlSessionFactoryBuilder().build( configIS );
session = factory.openSession(); SqlSession session = factory.openSession();
// 保存 // 保存
SessionMap.put( DEFAULT_CONFIGFILE, session ); SessionFactoryMap.put( DEFAULT_CONFIGFILE, factory );
return session; return session;
} }
@ -108,21 +112,23 @@ public class MybatisUtils
*/ */
public static SqlSession getSqlSessionBatch() throws IOException public static SqlSession getSqlSessionBatch() throws IOException
{ {
SqlSession sessionBatch = SessionMapBatch.get( DEFAULT_CONFIGFILE ); // 根据配置文件的路径查找是否已经创建了对应的session
SqlSessionFactory factory = SessionFactoryMap.get( DEFAULT_CONFIGFILE );
if ( sessionBatch != null ) // 找到就直接返回
if ( factory != null )
{ {
return sessionBatch; return factory.openSession();
} }
// 有缓存的就创建一个新的 // 找到就创建一个
InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE ); InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE );
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS ); factory = new SqlSessionFactoryBuilder().build( configIS );
sessionBatch = factory.openSession(ExecutorType.BATCH, false ); SqlSession session = factory.openSession( ExecutorType.BATCH, false );
//保存 // 保存
SessionMapBatch.put( DEFAULT_CONFIGFILE, sessionBatch ); SessionFactoryMap.put( DEFAULT_CONFIGFILE, factory );
return sessionBatch; return session;
} }
} }

View File

@ -41,12 +41,12 @@ public final class TeleSalerInfo
/** /**
* 查询坐席工号的static方法 * 查询坐席工号的static方法
* @param telsalerCode 坐席工号 * @param telsaler 坐席工号
* @return TeleSalerInfo对象 * @return TeleSalerInfo对象
* @throws ClassNotFoundException * @throws ClassNotFoundException
* @throws SQLException * @throws SQLException
*/ */
public static TeleSalerInfo queryTeleSalerInfo( String telsalerCode ) public static TeleSalerInfo queryTeleSalerInfo( String telsaler )
throws ClassNotFoundException, SQLException throws ClassNotFoundException, SQLException
{ {
TeleSalerInfo info = null; TeleSalerInfo info = null;
@ -60,19 +60,32 @@ public final class TeleSalerInfo
PreparedStatement statement = null; PreparedStatement statement = null;
ResultSet result = null; ResultSet result = null;
String sql = """ // String sql = """
SELECT s.saler_code, // SELECT s.saler_code,
s.saler_name, // s.saler_name,
t.team_code, // t.team_code,
t.team, // t.team,
bm.department_code, // bm.department_code,
bm.department_name // bm.department_name
FROM tele_saler s, // FROM tele_saler s,
tele_saler_team t, // tele_saler_team t,
idst0.bm_t bm // idst0.bm_t bm
WHERE s.team_code = t.team_code // WHERE s.team_code = t.team_code
AND t.department_code = bm.department_code // AND t.department_code = bm.department_code
AND s.saler_code = ? """; // AND (s.saler_code = ? or s.saler_name = ?) """;
String sql2 = """
select ry.人员工号 ,
ry.人员姓名,
team.team_code,
team.team_name,
bm.department_code,
bm.department_name
from twr_telsaler ry,
twr_telsaler_team team,
idst0.bm_t bm
where trim(ry.团队名称) = trim(team.team_name)
and team.department_code = bm.department_code
AND (ry.人员工号 = ? or ry.人员姓名 = ?)""";
// String sql = "SELECT DISTINCT s.saler_code, s.saler_name, \n" // String sql = "SELECT DISTINCT s.saler_code, s.saler_name, \n"
// + " t.team_code, t.team, \n" // + " t.team_code, t.team, \n"
// + " bm.department_code, bm.department_name \n" // + " bm.department_code, bm.department_name \n"
@ -84,9 +97,10 @@ public final class TeleSalerInfo
{ {
Class.forName( "oracle.jdbc.driver.OracleDriver" ); Class.forName( "oracle.jdbc.driver.OracleDriver" );
connection = DriverManager.getConnection( jdbcURL, userName, password ); connection = DriverManager.getConnection( jdbcURL, userName, password );
statement = connection.prepareStatement( sql ); statement = connection.prepareStatement( sql2 );
statement.setString( 1, telsalerCode ); statement.setString( 1, telsaler );
statement.setString( 2, telsaler );
result = statement.executeQuery(); result = statement.executeQuery();

View File

@ -61,6 +61,7 @@ public class CallerArchievement
params.put( "a_caller_code", callerCode ); params.put( "a_caller_code", callerCode );
session.clearCache();
mapper.getCallerArchievement( params ); mapper.getCallerArchievement( params );
// 总业绩 // 总业绩

View File

@ -77,6 +77,7 @@ public class DepartmentArchievement
params.put("a_department_code", departmentCode); params.put("a_department_code", departmentCode);
session.clearCache();
mapper.getDepartmentArchievement(params); mapper.getDepartmentArchievement(params);
Integer totalArchievement = (Integer)params.get("a_total"); Integer totalArchievement = (Integer)params.get("a_total");

View File

@ -208,7 +208,7 @@ public final class ImportBIExcelData
MyPOIUtils.getNumbericCellValue( row, 10 ) * 100; MyPOIUtils.getNumbericCellValue( row, 10 ) * 100;
BITelsalerAttachingRateRecord record = new BITelsalerAttachingRateRecord( BITelsalerAttachingRateRecord record = new BITelsalerAttachingRateRecord(
departmentName, LocalDate.now(), name, motoPremium, nomotoPremium, departmentName, name, motoPremium, nomotoPremium,
motoPremiumProPortion, attachingRate, attachingRateChange, motoPremiumProPortion, attachingRate, attachingRateChange,
customerHandleRateCell, customerHandleRateChangeCell, customerHandleRateCell, customerHandleRateChangeCell,
noMotoPremiumPerCustomerCell, noMotoPremiumPerCustomerChangeCell ); noMotoPremiumPerCustomerCell, noMotoPremiumPerCustomerChangeCell );

View File

@ -0,0 +1,190 @@
/*
* @Author: Kane
* @Date: 2023-11-24 11:09:46
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportTWRTelsalerData.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.utils.data;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.cpic.xim.mybatis.pojo.TWrTelsalerRecord;
import com.cpic.xim.utils.poi.MyPOIUtils;
public class ImportTWRTelsalerData
{
private static Logger logger = LoggerFactory.getLogger( ImportTWRTelsalerData.class );
private static String[] TwrTelsalerListExcelTitle = new String[]
{ "人员姓名", "人员工号", "籍 贯", "参加工作时间", "入职日期", "入司日期", "业务类型", "办公地省", "办公地市", "人员类别", "现任岗位",
"现任职级", "机构名称", "职场分类", "片区名称", "团队名称", "对口分公司", "展业地区", "招聘渠道", "渠道明细", "全日制最高学历",
"学历类型", "用工性质名称", "合同种类", "合同类型", "合同性质", "合同签订次数", "合同生效日期", "合同到期日期", "人员属性", "保代员工号",
"职场属性", "办公性质", "保代人员属性", "人员状态",};
public static void importTWrTelsalerDataFromExcel( String filePath, int sheetIndex,
int firstRow ) throws IOException, InvalidFormatException
{
ArrayList<TWrTelsalerRecord> records = new ArrayList<>( 200 );
Workbook wb = null;
Sheet sheet = null;
try
{
wb = WorkbookFactory.create( new File( filePath ) );
sheet = wb.getSheetAt( sheetIndex );
// 先验证格式不对就抛出错误
if ( !checkExcelFormat( sheet, null, 0, TwrTelsalerListExcelTitle, 0 ) )
{
throw new InvalidFormatException( "Excel文件格式错误请检查报表内容" );
}
for ( Row row : sheet )
{
int rowIndex = row.getRowNum();
// 从数据行开始
if ( row.getRowNum() < firstRow )
{
continue;
}
try
{
String 人员姓名 = MyPOIUtils.getStringCellValue( row, 0 );
String 人员工号 = MyPOIUtils.getStringCellValue( row, 1 );
String 籍贯 = MyPOIUtils.getStringCellValue( row, 2 );
String 参加工作时间 = MyPOIUtils.getStringCellValue( row, 3 );
String 入职日期 = MyPOIUtils.getStringCellValue( row, 4 );
String 入司日期 = MyPOIUtils.getStringCellValue( row, 5 );
String 业务类型 = MyPOIUtils.getStringCellValue( row, 6 );
String 办公地省 = MyPOIUtils.getStringCellValue( row, 7 );
String 办公地市 = MyPOIUtils.getStringCellValue( row, 8 );
String 人员类别 = MyPOIUtils.getStringCellValue( row, 9 );
String 现任岗位 = MyPOIUtils.getStringCellValue( row, 10 );
String 现任职级 = MyPOIUtils.getStringCellValue( row, 11 );
String 机构名称 = MyPOIUtils.getStringCellValue( row, 12 );
String 职场分类 = MyPOIUtils.getStringCellValue( row, 13 );
String 片区名称 = MyPOIUtils.getStringCellValue( row, 14 );
String 团队名称 = MyPOIUtils.getStringCellValue( row, 15 );
String 对口分公司 = MyPOIUtils.getStringCellValue( row, 16 );
String 展业地区 = MyPOIUtils.getStringCellValue( row, 17 );
String 招聘渠道 = MyPOIUtils.getStringCellValue( row, 18 );
String 渠道明细 = MyPOIUtils.getStringCellValue( row, 19 );
String 全日制最高学历 = MyPOIUtils.getStringCellValue( row, 20 );
String 学历类型 = MyPOIUtils.getStringCellValue( row, 21 );
String 用工性质名称 = MyPOIUtils.getStringCellValue( row, 22 );
String 合同种类 = MyPOIUtils.getStringCellValue( row, 23 );
String 合同类型 = MyPOIUtils.getStringCellValue( row, 24 );
String 合同性质 = MyPOIUtils.getStringCellValue( row, 25 );
int 合同签订次数 = (int)MyPOIUtils.getNumbericCellValue( row, 26 );
String 合同生效日期 = MyPOIUtils.getStringCellValue( row, 27 );
String 合同到期日期 = MyPOIUtils.getStringCellValue( row, 28 );
String 人员属性 = MyPOIUtils.getStringCellValue( row, 29 );
String 保代员工号 = MyPOIUtils.getStringCellValue( row, 30 );
String 职场属性 = MyPOIUtils.getStringCellValue( row, 31 );
String 办公性质 = MyPOIUtils.getStringCellValue( row, 32 );
String 保代人员属性 = MyPOIUtils.getStringCellValue( row, 33 );
String 人员状态 = MyPOIUtils.getStringCellValue( row, 34 );
TWrTelsalerRecord record = new TWrTelsalerRecord(人员姓名, 人员工号, 籍贯, 参加工作时间, 入职日期, 入司日期, 业务类型, 办公地省, 办公地市, 人员类别, 现任岗位, 现任职级, 机构名称, 职场分类, 片区名称, 团队名称, 对口分公司, 展业地区, 招聘渠道, 渠道明细, 全日制最高学历, 学历类型, 用工性质名称, 合同种类, 合同类型, 合同性质, 合同签订次数, 合同生效日期, 合同到期日期, 人员属性, 保代员工号, 职场属性, 办公性质, 保代人员属性, 人员状态);
records.add(record);
}
catch ( IllegalStateException error )
{
error.printStackTrace();
}
catch ( NumberFormatException error )
{
error.printStackTrace();
}
catch ( NullPointerException error )
{
String message = "" + String.valueOf( rowIndex ) + "行出现NullPointerException异常";
logger.error( message, error );
}
}
}
finally
{
try
{
if ( wb != null )
{
wb.close();
}
}
catch ( IOException error )
{
error.printStackTrace();
}
}
}
private static boolean checkExcelFormat( Sheet sheet, String caption, int captionRowIndex,
String[] title, int titleRowIndex )
{
boolean result = true;
Row captionRow = sheet.getRow( captionRowIndex );
Row titleRow = sheet.getRow( titleRowIndex );
if ( caption != null && !caption.isEmpty() )
{
try
{
int captionCellNum = captionRow.getFirstCellNum();
String captionString = MyPOIUtils.getStringCellValue( captionRow, captionCellNum );
if ( !caption.equals( captionString ) )
{
result = false;
}
}
catch ( NullPointerException error )
{
result = false;
}
}
if ( title.length != 0 )
{
int cellIndex = 0;
try
{
for ( Cell cell : titleRow )
{
String cellString = MyPOIUtils.getStringCellValue( cell );
if ( !cellString.equals( title[cellIndex] ) )
{
result = false;
break;
}
cellIndex++;
}
}
catch ( NullPointerException error )
{
result = false;
}
}
return result;
}
}

View File

@ -10,6 +10,7 @@
package com.cpic.xim.utils.poi; package com.cpic.xim.utils.poi;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy; import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
@ -17,7 +18,7 @@ public class MyPOIUtils
{ {
public static String getStringCellValue( Cell cell ) public static String getStringCellValue( Cell cell )
{ {
switch( cell.getCellType() ) switch ( cell.getCellType())
{ {
case STRING: case STRING:
return cell.getStringCellValue(); return cell.getStringCellValue();
@ -28,9 +29,9 @@ public class MyPOIUtils
public static String getStringCellValue( Row row, int columnIndex ) public static String getStringCellValue( Row row, int columnIndex )
{ {
Cell cell = row.getCell(columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK); Cell cell = row.getCell( columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK );
switch( cell.getCellType() ) switch ( cell.getCellType())
{ {
case STRING: case STRING:
return cell.getStringCellValue(); return cell.getStringCellValue();
@ -43,7 +44,7 @@ public class MyPOIUtils
{ {
double value = 0.0; double value = 0.0;
switch ( cell.getCellType() ) switch ( cell.getCellType())
{ {
case NUMERIC: case NUMERIC:
value = cell.getNumericCellValue(); value = cell.getNumericCellValue();
@ -59,12 +60,29 @@ public class MyPOIUtils
public static double getNumbericCellValue( Row row, int columnIndex ) public static double getNumbericCellValue( Row row, int columnIndex )
{ {
double value = 0.0; double value = 0.0;
String strValue;
Cell cell = row.getCell( columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK ); Cell cell = row.getCell( columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK );
CellType type = cell.getCellType();
switch ( cell.getCellType() ) switch ( type )
{ {
case NUMERIC: case NUMERIC:
value = cell.getNumericCellValue(); value = cell.getNumericCellValue();
break;
case STRING:
// 字符串类型尝试转换成数字
strValue = cell.getStringCellValue();
try
{
value = Double.parseDouble( strValue );
}
// 任何异常都视为转换失败
catch ( Exception error )
{
value = 0.0;
}
break; break;
default: default:
value = 0.0; value = 0.0;
@ -73,4 +91,4 @@ public class MyPOIUtils
return value; return value;
} }
} }

View File

@ -73,7 +73,7 @@ public class StaffInfoQueryController
try try
{ {
saler = TeleSalerInfo.queryTeleSalerInfo( telSaler.getTelSalerCode() ); saler = TeleSalerInfo.queryTeleSalerInfo( telSaler.getTelSaler() );
// 根据返回结果是否为 null判断是否查询到坐席信息 // 根据返回结果是否为 null判断是否查询到坐席信息
if ( saler != null ) if ( saler != null )

View File

@ -17,19 +17,19 @@ public class TelsalerQueryRequest
public TelsalerQueryRequest( String telSalerCode ) public TelsalerQueryRequest( String telSalerCode )
{ {
this.telSalerCode = telSalerCode; this.telSaler = telSalerCode;
} }
public String getTelSalerCode() public String getTelSaler()
{ {
return telSalerCode; return telSaler;
} }
public void setTelSalerCode( String telSalerCode ) public void setTelSaler( String telSalerCode )
{ {
this.telSalerCode = telSalerCode; this.telSaler = telSalerCode;
} }
@JsonProperty("telsaler_code") @JsonProperty("telsaler")
private String telSalerCode; private String telSaler;
} }

View File

@ -0,0 +1,202 @@
/*
* @Author: Kane
* @Date: 2023-11-01 16:48:56
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/BIReportController.java
* @Description: BI报表相关的controller
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.cpic.xim.mybatis.mapper.QueryBIArchievementDataMapper;
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
import com.cpic.xim.mybatis.utils.MybatisUtils;
@Controller
@RequestMapping( method = RequestMethod.POST, path = "/archievement" )
public class BIReportController
{
private static Logger logger = LoggerFactory.getLogger( BIReportController.class );
@PostMapping( path = "/bi_telsaler_attachingrate.do" )
@ResponseBody
public QueryTelsalerAttachingRateReportResponse queryTelsalerAttachingRateRepor()
{
QueryTelsalerAttachingRateReportResponse response =
new QueryTelsalerAttachingRateReportResponse();
SqlSession session = null;
QueryBIArchievementDataMapper mapper = null;
try
{
session = MybatisUtils.getSqlSession();
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
session.clearCache();
List<BITelsalerAttachingRateRecord> records =
mapper.queryBITelsalerAttachingRate();
response.setSuccess( true );
response.setMessage( "查询成功" );
response.setRecords( records );
}
catch ( IOException error )
{
logger.error("查询BI坐席渗透率报表出现IOException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
catch ( PersistenceException error )
{
logger.error("查询BI坐席渗透率报表出现PersistenceException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
return response;
}
@PostMapping( path="/bi_telsaler_renewalrate.do" )
@ResponseBody
public QueryTelsalerRenewalRateReportResponse queryTelsalerRenewalRateReport()
{
QueryTelsalerRenewalRateReportResponse response = new QueryTelsalerRenewalRateReportResponse();
SqlSession session = null;
QueryBIArchievementDataMapper mapper = null;
try
{
session = MybatisUtils.getSqlSession();
mapper = session.getMapper(QueryBIArchievementDataMapper.class);
session.clearCache();
ArrayList<BITelsalerRenewalRateRecord> records = mapper.queryBITesalerRenewalRate();
response.setSuccess( true );
response.setMessage("查询成功");
response.setRecords(records);
}
catch ( IOException error )
{
logger.error("查询BI坐席续保率报表出现IOException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
catch ( PersistenceException error )
{
logger.error("查询BI坐席续保率报表出现PersistenceException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
return response;
}
@PostMapping( path = "/bi_department_attachingrate.do" )
@ResponseBody
public QueryDepartmentAttachingRateReportResponse queryDepartmentAttachingRateRepor()
{
QueryDepartmentAttachingRateReportResponse response =
new QueryDepartmentAttachingRateReportResponse();
SqlSession session = null;
QueryBIArchievementDataMapper mapper = null;
try
{
session = MybatisUtils.getSqlSession();
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
session.clearCache();
ArrayList<BIDepartmentAttachingRateRecord> records =
mapper.queryBIDepartmentAttachingRate();
response.setSuccess( true );
response.setMessage( "查询成功" );
response.setRecords( records );
}
catch ( IOException error )
{
logger.error("查询BI机构渗透率报表出现IOException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
catch ( PersistenceException error )
{
logger.error("查询BI机构渗透率报表出现PersistenceException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
return response;
}
@PostMapping( path = "/bi_department_renewalrate.do" )
@ResponseBody
public QueryDepartmentRenewalRateReportResponse queryDepartmentRenewalRateRepor()
{
QueryDepartmentRenewalRateReportResponse response =
new QueryDepartmentRenewalRateReportResponse();
SqlSession session = null;
QueryBIArchievementDataMapper mapper = null;
try
{
session = MybatisUtils.getSqlSession();
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
session.clearCache();
ArrayList<BIDepartmentRenewalRateRecord> records =
mapper.queryBIDepartmentRenewalRate();
response.setSuccess( true );
response.setMessage( "查询成功" );
response.setRecords( records );
}
catch ( IOException error )
{
logger.error("查询BI机构渗透率报表出现IOException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
catch ( PersistenceException error )
{
logger.error("查询BI机构渗透率报表出现PersistenceException异常异常内容", error);
response.setSuccess( false );
response.setMessage( "查询失败,原因" + error.getMessage() );
response.setRecords( null );
}
return response;
}
}

View File

@ -0,0 +1,91 @@
/*
* @Author: Kane
* @Date: 2023-11-02 11:21:03
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryDepartmentAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
/*
* @Author: Kane
* @Date: 2023-11-01 16:51:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.*;
import com.cpic.xim.web.controllers.QueryResponse;
import com.fasterxml.jackson.annotation.JsonProperty;
public class QueryDepartmentAttachingRateReportResponse extends QueryResponse
{
@JsonProperty("records")
ArrayList<BIDepartmentAttachingRateRecord> records;
public QueryDepartmentAttachingRateReportResponse( boolean success, String message,
ArrayList<BIDepartmentAttachingRateRecord> records )
{
super( success, message );
this.records = records;
}
public QueryDepartmentAttachingRateReportResponse()
{
super( false, "" );
this.records = null;
}
public ArrayList<BIDepartmentAttachingRateRecord> getRecords()
{
return records;
}
public void setRecords( ArrayList<BIDepartmentAttachingRateRecord> records )
{
this.records = records;
}
@Override
public String toString()
{
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((records == null) ? 0 : records.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( !super.equals( obj ) )
return false;
if ( getClass() != obj.getClass() )
return false;
QueryDepartmentAttachingRateReportResponse other =
(QueryDepartmentAttachingRateReportResponse) obj;
if ( records == null )
{
if ( other.records != null )
return false;
}
else if ( !records.equals( other.records ) )
return false;
return true;
}
}

View File

@ -0,0 +1,100 @@
/*
* @Author: Kane
* @Date: 2023-11-02 16:56:50
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryDepartmentRenewalRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
/*
* @Author: Kane
* @Date: 2023-11-02 11:21:03
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryDepartmentAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
/*
* @Author: Kane
* @Date: 2023-11-01 16:51:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.*;
import com.cpic.xim.web.controllers.QueryResponse;
import com.fasterxml.jackson.annotation.JsonProperty;
public class QueryDepartmentRenewalRateReportResponse extends QueryResponse
{
@JsonProperty("records")
ArrayList<BIDepartmentRenewalRateRecord> records;
public QueryDepartmentRenewalRateReportResponse( boolean success, String message,
ArrayList<BIDepartmentRenewalRateRecord> records )
{
super( success, message );
this.records = records;
}
public QueryDepartmentRenewalRateReportResponse()
{
super( false, "" );
this.records = null;
}
public ArrayList<BIDepartmentRenewalRateRecord> getRecords()
{
return records;
}
public void setRecords( ArrayList<BIDepartmentRenewalRateRecord> records )
{
this.records = records;
}
@Override
public String toString()
{
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((records == null) ? 0 : records.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( !super.equals( obj ) )
return false;
if ( getClass() != obj.getClass() )
return false;
QueryDepartmentRenewalRateReportResponse other =
(QueryDepartmentRenewalRateReportResponse) obj;
if ( records == null )
{
if ( other.records != null )
return false;
}
else if ( !records.equals( other.records ) )
return false;
return true;
}
}

View File

@ -0,0 +1,83 @@
/*
* @Author: Kane
* @Date: 2023-11-01 16:51:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.util.ArrayList;
import java.util.List;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.web.controllers.QueryResponse;
import com.fasterxml.jackson.annotation.JsonProperty;
public class QueryTelsalerAttachingRateReportResponse extends QueryResponse
{
@JsonProperty("records")
List<BITelsalerAttachingRateRecord> records;
public QueryTelsalerAttachingRateReportResponse( boolean success, String message,
ArrayList<BITelsalerAttachingRateRecord> records )
{
super( success, message );
this.records = records;
}
public QueryTelsalerAttachingRateReportResponse()
{
super( false, "" );
this.records = null;
}
public List<BITelsalerAttachingRateRecord> getRecords()
{
return records;
}
public void setRecords( List<BITelsalerAttachingRateRecord> records )
{
this.records = records;
}
@Override
public String toString()
{
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((records == null) ? 0 : records.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( !super.equals( obj ) )
return false;
if ( getClass() != obj.getClass() )
return false;
QueryTelsalerAttachingRateReportResponse other =
(QueryTelsalerAttachingRateReportResponse) obj;
if ( records == null )
{
if ( other.records != null )
return false;
}
else if ( !records.equals( other.records ) )
return false;
return true;
}
}

View File

@ -0,0 +1,92 @@
/*
* @Author: Kane
* @Date: 2023-11-02 16:54:42
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerRenewalRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
/*
* @Author: Kane
* @Date: 2023-11-01 16:51:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.bi;
import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
import com.cpic.xim.web.controllers.QueryResponse;
import com.fasterxml.jackson.annotation.JsonProperty;
public class QueryTelsalerRenewalRateReportResponse extends QueryResponse
{
@JsonProperty("records")
ArrayList<BITelsalerRenewalRateRecord> records;
public QueryTelsalerRenewalRateReportResponse( boolean success, String message,
ArrayList<BITelsalerRenewalRateRecord> records )
{
super( success, message );
this.records = records;
}
public QueryTelsalerRenewalRateReportResponse()
{
super( false, "" );
this.records = null;
}
public ArrayList<BITelsalerRenewalRateRecord> getRecords()
{
return records;
}
public void setRecords( ArrayList<BITelsalerRenewalRateRecord> records )
{
this.records = records;
}
@Override
public String toString()
{
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((records == null) ? 0 : records.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( !super.equals( obj ) )
return false;
if ( getClass() != obj.getClass() )
return false;
QueryTelsalerRenewalRateReportResponse other =
(QueryTelsalerRenewalRateReportResponse) obj;
if ( records == null )
{
if ( other.records != null )
return false;
}
else if ( !records.equals( other.records ) )
return false;
return true;
}
}

View File

@ -4,7 +4,7 @@
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} ### %msg%n" /> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} ### %msg%n" />
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" /> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
</Console> </Console>
<RollingFile name="rolling_file" filename="d:/logs/桌面霸屏/app.log" <RollingFile name="rolling_file_win" filename="d:/logs/桌面霸屏/app.log"
filePattern="d:/logs/桌面霸屏/logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> filePattern="d:/logs/桌面霸屏/logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout> <PatternLayout>
<Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern> <Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern>
@ -15,13 +15,25 @@
<DefaultRolloverStrategy max="20" /> <DefaultRolloverStrategy max="20" />
</Policies> </Policies>
</RollingFile> </RollingFile>
<RollingFile name="rolling_file_linux" filename="/logs/桌面霸屏/app.log"
filePattern="/logs/桌面霸屏/logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" />
<SizeBasedTriggeringPolicy size="20MB" />
<DefaultRolloverStrategy max="20" />
</Policies>
</RollingFile>
</Appenders> </Appenders>
<Loggers> <Loggers>
<!-- <Logger name="mylog" level="info"> <!-- <Logger name="mylog" level="info">
<AppenderRef ref="rolling_file" /> <AppenderRef ref="rolling_file" />
</Logger> --> </Logger> -->
<Root level="debug"> <Root level="debug">
<AppenderRef ref="rolling_file" /> <AppenderRef ref="rolling_file_linux" />
<AppenderRef ref="rolling_file_win" />
<AppenderRef ref="Console" /> <AppenderRef ref="Console" />
</Root> </Root>
</Loggers> </Loggers>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.ArchievementMapper"> <mapper namespace="com.cpic.xim.mybatis.mapper.ArchievementMapper">
<select id="getDepartmentArchievement" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="getDepartmentArchievement" useCache="false" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsale_archievement_pkg.department_archievement( call telsale_archievement_pkg.department_archievement(
#{a_department_code, mode=IN, jdbcType=VARCHAR}, #{a_department_code, mode=IN, jdbcType=VARCHAR},
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR}, #{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},
@ -9,7 +9,7 @@
#{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer}, #{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer},
#{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper}) #{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper})
</select> </select>
<select id="getCallerArchievement" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="getCallerArchievement" useCache="false" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsale_archievement_pkg.caller_archievement( call telsale_archievement_pkg.caller_archievement(
#{a_caller_code, mode=IN, jdbcType=VARCHAR}, #{a_caller_code, mode=IN, jdbcType=VARCHAR},
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR}, #{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},

View File

@ -38,7 +38,7 @@
</insert> </insert>
<select id="cleanTelsalerAttachingRateData" statementType="CALLABLE"> <select id="cleanTelsalerAttachingRateData" statementType="CALLABLE">
call telsale_bi_utils.清理BI电销坐席车非渗透跟踪表() call telsale_bi_utils.清理BI电销坐席车非渗透跟踪表()
</select> </select>
<select id="cleanTelsalerRenewalRateData" statementType="CALLABLE"> <select id="cleanTelsalerRenewalRateData" statementType="CALLABLE">
call telsale_bi_utils.清理BI电销坐席续保率跟踪表() call telsale_bi_utils.清理BI电销坐席续保率跟踪表()

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.QueryBIArchievementDataMapper">
<!-- 查询坐席车非渗透率报表 -->
<select id="queryBITelsalerAttachingRate" statementType="STATEMENT" resultMap="BITelsalerAttachingRate" useCache="false" flushCache="true">
SELECT t.部门,
t.经办,
t."车险保费(万)" as 车险保费,
t.车险保费占比,
t."非车保费(万)" as 非车保费,
t.当月保费渗透率,
t.保费渗透率环比上月,
t.当月客户渗透率,
t.客户渗透率环比上月,
t.当月车非客均保费,
t.客均保费环比上月
FROM BI电销坐席车非渗透率跟踪表 t
ORDER BY t.部门
</select>
<!-- 坐席车非渗透率报表记录 -->
<resultMap id="BITelsalerAttachingRate" type="com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord">
<result property="departmentName" column="部门" javaType="String" jdbcType="VARCHAR" />
<result property="telsalerName" column="经办" javaType="String" jdbcType="VARCHAR" />
<result property="motoPremium" column="车险保费" javaType="double" jdbcType="DOUBLE" />
<result property="motoPremiumProportion" column="车险保费占比" javaType="double" jdbcType="DOUBLE" />
<result property="nomotoPremium" column="非车保费" javaType="double" jdbcType="DOUBLE" />
<result property="attachingRate" column="当月保费渗透率" javaType="double" jdbcType="DOUBLE" />
<result property="attachingRateChange" column="保费渗透率环比上月" javaType="double" jdbcType="DOUBLE" />
<result property="customerHandleRate" column="当月客户渗透率" javaType="double" jdbcType="DOUBLE" />
<result property="customerHandleRateChange" column="客户渗透率环比上月" javaType="double" jdbcType="DOUBLE" />
<result property="noMotoPremiumPerCustomer" column="当月车非客均保费" javaType="double" jdbcType="DOUBLE" />
<result property="noMotoPremiumPerCustomerChange" column="客均保费环比上月" javaType="double" jdbcType="DOUBLE" />
</resultMap>
<!-- 坐席续保率 -->
<select id="queryBITesalerRenewalRate" statementType="STATEMENT" resultMap="BITelsalerRenewalRate" useCache="false" flushCache="true">
select t.责任部门,
t.责任人,
t."机构目标值1(%)" as 机构目标值,
t."到期数-全月" as 到期数全月,
t."序时到期数占比(%)" as 序时到期数占比,
t."个车续保率(序时)(%)" as 个车续保率序时,
t."个车续保率(全月)(%)" as 个车续保率全月,
t."环比昨日(%)" as 环比昨日,
t."环比上月(%)" as 环比上月,
t.平均提前签单天数,
t.环比
from BI电销坐席续保率跟踪表 t
</select>
<resultMap id="BITelsalerRenewalRate" type="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord">
<result property="责任部门" column="责任部门" javaType="String" jdbcType="VARCHAR" />
<result property="责任人" column="责任人" javaType="String" jdbcType="VARCHAR" />
<result property="机构目标值" column="机构目标值" javaType="double" jdbcType="DOUBLE" />
<result property="到期数全月" column="到期数全月" javaType="double" jdbcType="DOUBLE" />
<result property="序时到期数占比" column="序时到期数占比" javaType="double" jdbcType="DOUBLE" />
<result property="个车续保率序时" column="个车续保率序时" javaType="double" jdbcType="DOUBLE" />
<result property="个车续保率全月" column="个车续保率全月" javaType="double" jdbcType="DOUBLE" />
<result property="环比昨日" column="环比昨日" javaType="double" jdbcType="DOUBLE" />
<result property="环比上月" column="环比上月" javaType="double" jdbcType="DOUBLE" />
<result property="平均提前签单天数" column="平均提前签单天数" javaType="int" jdbcType="DOUBLE" />
<result property="环比" column="环比" javaType="int" jdbcType="DOUBLE" />
</resultMap>
<!-- 机构渗透率 -->
<select id="queryBIDepartmentAttachingRate" statementType="STATEMENT" resultMap="BIDepartmentAttachingRate" useCache="false" flushCache="true">
select t.部门,
t."目标值-机构" as 目标值机构,
t.目标差距,
t.车险保费,
t.车险保费占比,
t.非车保费,
t.当月保费渗透率,
t.保费渗透率环比上月,
t.当月客户渗透率,
t.客户渗透率环比上月,
t.当月车非客均保费,
t.客均保费环比上月,
t.车险客户数
from BI机构渗透率跟踪表 t
</select>
<resultMap id="BIDepartmentAttachingRate" type="com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord">
<result column="部门" property="departmentName" jdbcType="VARCHAR" javaType="String" />
<result column="目标值机构" property="departmentObject" jdbcType="DOUBLE" javaType="double" />
<result column="目标差距" property="objectGap" jdbcType="DOUBLE" javaType="double" />
<result column="车险保费" property="motoPremium" jdbcType="DOUBLE" javaType="double" />
<result column="车险保费占比" property="motoPremiumProPortion" jdbcType="DOUBLE" javaType="double" />
<result column="非车保费" property="nomotoPremium" jdbcType="DOUBLE" javaType="double" />
<result column="当月保费渗透率" property="attachingRate" jdbcType="DOUBLE" javaType="double" />
<result column="保费渗透率环比上月" property="attachingRateChange" jdbcType="DOUBLE" javaType="double" />
<result column="当月客户渗透率" property="customerHandleRate" jdbcType="DOUBLE" javaType="double" />
<result column="客户渗透率环比上月" property="customerHandleRateChange" jdbcType="DOUBLE" javaType="double" />
<result column="当月车非客均保费" property="premiumPerCustomer" jdbcType="DOUBLE" javaType="double" />
<result column="客均保费环比上月" property="premiumPerCustomerChange" jdbcType="DOUBLE" javaType="double" />
<result column="车险客户数" property="motoInsuranceCustomerCount" jdbcType="INTEGER" javaType="int" />
</resultMap>
<!-- 机构续保率 -->
<select id="queryBIDepartmentRenewalRate" statementType="STATEMENT" resultMap="BIDepartmentRenewalRate" useCache="false" flushCache="true">
select t.责任部门,
t."机构目标值1(%)" as 机构目标值,
t."到期数-全月" as 到期数全月,
t."序时到期数占比(%)" as 序时到期数占比,
t."个车续保率(序时)(%)" as 个车续保率序时,
t."个车续保率(全月)(%)" as 个车续保率全月,
t."环比昨日(%)" as 环比昨日,
t."环比上月(%)" as 环比上月,
t.平均提前签单天数,
t.环比
from BI机构当月个车续保率跟踪表 t
</select>
<resultMap id="BIDepartmentRenewalRate" type="com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord">
<result column="责任部门" property="责任部门" jdbcType="VARCHAR" javaType="String" />
<result column="机构目标值" property="机构目标值" jdbcType="DOUBLE" javaType="double" />
<result column="到期数全月" property="到期数全月" jdbcType="INTEGER" javaType="int" />
<result column="序时到期数占比" property="序时到期数占比" jdbcType="DOUBLE" javaType="double" />
<result column="个车续保率序时" property="个车续保率序时" jdbcType="DOUBLE" javaType="double" />
<result column="个车续保率全月" property="个车续保率全月" jdbcType="DOUBLE" javaType="double" />
<result column="环比昨日" property="环比昨日" jdbcType="DOUBLE" javaType="double" />
<result column="环比上月" property="环比上月" jdbcType="DOUBLE" javaType="double" />
<result column="平均提前签单天数" property="平均提前签单天数" jdbcType="INTEGER" javaType="int" />
<result column="环比" property="环比" jdbcType="DOUBLE" javaType="double" />
</resultMap>
</mapper>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.RewardsMapper"> <mapper namespace="com.cpic.xim.mybatis.mapper.RewardsMapper">
<select id="queryRewardProjects" resultMap="RewardProjectMap"> <select id="queryRewardProjects" statementType="STATEMENT" resultMap="RewardProjectMap" useCache="false" flushCache="true">
select reward_index, reward_name from reward_projects order by reward_index desc select reward_index, reward_name from reward_projects order by reward_index desc
</select> </select>
<resultMap id="RewardProjectMap" type="com.cpic.xim.mybatis.pojo.RewardProject"> <resultMap id="RewardProjectMap" type="com.cpic.xim.mybatis.pojo.RewardProject">
@ -9,7 +9,7 @@
<result property="rewardName" column="reward_name" javaType="String"/> <result property="rewardName" column="reward_name" javaType="String"/>
</resultMap> </resultMap>
<select id="queryRewardTelsaler" flushCache="true" resultMap="RewardGainerMapper"> <select id="queryRewardTelsaler" statementType="STATEMENT" resultMap="RewardGainerMapper" useCache="false" flushCache="true">
SELECT hjr.rec_id rec_id, SELECT hjr.rec_id rec_id,
hjr.telsaler_name telsaler_name, hjr.telsaler_name telsaler_name,
hjr.telsaler_code telsaler_code, hjr.telsaler_code telsaler_code,
@ -28,20 +28,20 @@
<result column="reward_index" property="rewardProjectCode" /> <result column="reward_index" property="rewardProjectCode" />
</resultMap> </resultMap>
<select id="addRewardTelSaler" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="addRewardTelSaler" statementType="CALLABLE" parameterType="java.util.HashMap" useCache="false" flushCache="true" >
call telsaler_reward_pkg.add_telsaler_reward( call telsaler_reward_pkg.add_telsaler_reward(
#{a_reward_index,mode=IN,jdbcType=VARCHAR}, #{a_reward_index,mode=IN,jdbcType=VARCHAR},
#{a_telsaler_name,mode=IN,jdbcType=VARCHAR}) #{a_telsaler_name,mode=IN,jdbcType=VARCHAR})
</select> </select>
<!-- 删除获奖坐席记录 --> <!-- 删除获奖坐席记录 -->
<select id="deleteRewardTelSaler" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="deleteRewardTelSaler" statementType="CALLABLE" parameterType="java.util.HashMap" useCache="false" flushCache="true" >
call telsaler_reward_pkg.delete_telsaler_reward( call telsaler_reward_pkg.delete_telsaler_reward(
#{a_rec_id,mode=IN,jdbcType=INTEGER}) #{a_rec_id,mode=IN,jdbcType=INTEGER})
</select> </select>
<!-- 更新获奖坐席 --> <!-- 更新获奖坐席 -->
<select id="updateRewardTelSaler" statementType="CALLABLE" flushCache="true" parameterType="java.util.HashMap" > <select id="updateRewardTelSaler" statementType="CALLABLE" parameterType="java.util.HashMap" useCache="false" flushCache="true" >
call telsaler_reward_pkg.update_telsaler_reward( call telsaler_reward_pkg.update_telsaler_reward(
#{a_rec_id,mode=IN,jdbcType=INTEGER}, #{a_rec_id,mode=IN,jdbcType=INTEGER},
#{a_telsaler_name,mode=IN,jdbcType=VARCHAR}, #{a_telsaler_name,mode=IN,jdbcType=VARCHAR},

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.TWrTelsalerMapper">
<select id="queryTWrTelsalerInfo" resultMap="TWrTelsaler">
select t.人员姓名,
t.人员工号,
t.籍贯,
t.参加工作时间,
t.入职日期,
t.入司日期,
t.业务类型,
t.办公地省,
t.办公地市,
t.人员类别,
t.现任岗位,
t.现任职级,
t.机构名称,
t.职场分类,
t.片区名称,
t.团队名称,
t.对口分公司,
t.展业地区,
t.招聘渠道,
t.渠道明细,
t.全日制最高学历,
t.学历类型,
t.用工性质名称,
t.合同种类,
t.合同类型,
t.合同性质,
t.合同签订次数,
t.合同生效日期,
t.合同到期日期,
t.人员属性,
t.保代员工号,
t.职场属性,
t.办公性质,
t.保代人员属性,
t.人员状态
from telsaler t
where t.人员姓名 = #{telsaler} or t.人员工号 = #{telsaler}
</select>
<resultMap id="TWrTelsaler" type="TWrTelsalerRecord">
<result column="人员姓名" property="人员姓名" jdbcType="VARCHAR" javaType="String" />
<result column="人员工号" property="人员工号" jdbcType="VARCHAR" javaType="String" />
<result column="籍贯" property="籍贯" jdbcType="VARCHAR" javaType="String" />
<result column="参加工作时间" property="参加工作时间" jdbcType="VARCHAR" javaType="String" />
<result column="入职日期" property="入职日期" jdbcType="VARCHAR" javaType="String" />
<result column="入司日期" property="入司日期" jdbcType="VARCHAR" javaType="String" />
<result column="业务类型" property="业务类型" jdbcType="VARCHAR" javaType="String" />
<result column="办公地省" property="办公地省" jdbcType="VARCHAR" javaType="String"/>
<result column="办公地市" property="办公地市" jdbcType="VARCHAR" javaType="String"/>
<result column="人员类别" property="人员类别" jdbcType="VARCHAR" javaType="String"/>
<result column="现任岗位" property="现任岗位" jdbcType="VARCHAR" javaType="String"/>
<result column="现任职级" property="现任职级" jdbcType="VARCHAR" javaType="String"/>
<result column="机构名称" property="机构名称" jdbcType="VARCHAR" javaType="String"/>
<result column="职场分类" property="职场分类" jdbcType="VARCHAR" javaType="String"/>
<result column="片区名称" property="片区名称" jdbcType="VARCHAR" javaType="String"/>
<result column="团队名称" property="团队名称" jdbcType="VARCHAR" javaType="String"/>
<result column="对口分公司" property="对口分公司" jdbcType="VARCHAR" javaType="String"/>
<result column="展业地区" property="展业地区" jdbcType="VARCHAR" javaType="String"/>
<result column="招聘渠道" property="招聘渠道" jdbcType="VARCHAR" javaType="String"/>
<result column="渠道明细" property="渠道明细" jdbcType="VARCHAR" javaType="String"/>
<result column="全日制最高学历" property="全日制最高学历" jdbcType="VARCHAR" javaType="String"/>
<result column="学历类型" property="学历类型" jdbcType="VARCHAR" javaType="String"/>
<result column="用工性质名称" property="用工性质名称" jdbcType="VARCHAR" javaType="String"/>
<result column="合同种类" property="合同种类" jdbcType="VARCHAR" javaType="String"/>
<result column="合同类型" property="合同类型" jdbcType="VARCHAR" javaType="String"/>
<result column="合同性质" property="合同性质" jdbcType="VARCHAR" javaType="String"/>
<result column="合同签订次数" property="合同签订次数" jdbcType="VARCHAR" javaType="String"/>
<result column="合同生效日期" property="合同生效日期" jdbcType="VARCHAR" javaType="String"/>
<result column="合同到期日期" property="合同到期日期" jdbcType="VARCHAR" javaType="String"/>
<result column="人员属性" property="人员属性" jdbcType="VARCHAR" javaType="String"/>
<result column="保代员工号" property="保代员工号" jdbcType="VARCHAR" javaType="String"/>
<result column="职场属性" property="职场属性" jdbcType="VARCHAR" javaType="String"/>
<result column="办公性质" property="办公性质" jdbcType="VARCHAR" javaType="String"/>
<result column="保代人员属性" property="保代人员属性" jdbcType="VARCHAR" javaType="String"/>
<result column="人员状态" property="人员状态" jdbcType="VARCHAR" javaType="String"/>
</resultMap>
<!-- insertTWrTelsalerRecordToDB -->
<insert id="insertTWrTelsalerRecordToDB">
</insert>
</mapper>

View File

@ -3,6 +3,11 @@
<configuration> <configuration>
<properties resource="mybatis/jdbc.properties" /> <properties resource="mybatis/jdbc.properties" />
<settings>
<!-- 二级缓存开启 -->
<setting name="cacheEnabled" value="false" />
</settings>
<!-- 类型别名 --> <!-- 类型别名 -->
<typeAliases> <typeAliases>
<package name="com.cpic.xim.mybatis.pojo" /> <package name="com.cpic.xim.mybatis.pojo" />
@ -26,6 +31,8 @@
<mapper resource="mybatis/mapper/ArchievementMapper.xml" /> <mapper resource="mybatis/mapper/ArchievementMapper.xml" />
<mapper resource="mybatis/mapper/RankingListMapper.xml" /> <mapper resource="mybatis/mapper/RankingListMapper.xml" />
<mapper resource="mybatis/mapper/RewardsMapper.xml" /> <mapper resource="mybatis/mapper/RewardsMapper.xml" />
<mapper resource="mybatis/mapper/ImportBIArchievementDataMapper.xml" /> <mapper resource="mybatis/mapper/ImportBIArchievementDataMapper.xml" />
<mapper resource="mybatis/mapper/QueryBIArchievementDataMapper.xml" />
</mappers> </mappers>
</configuration> </configuration>

Binary file not shown.

Binary file not shown.