18 Commits

Author SHA1 Message Date
a5d392c2f6 保存进度! 2023-11-15 00:15:55 +08:00
84b2e906f3 保存进度! 2023-11-14 18:23:53 +08:00
3b4c340b70 修改请求地址! 2023-11-13 18:51:40 +08:00
3001165bd5 修改项目输出目录和springMVC的版本。 2023-11-13 13:18:49 +08:00
39a75c7bf2 保存进度! 2023-11-13 00:25:10 +08:00
237cc350be 保存进度! 2023-11-10 18:09:10 +08:00
d202d976a3 保存进度! 2023-11-10 15:53:23 +08:00
492239f269 启用vite的开发和生产模式 2023-11-09 19:15:41 +08:00
c0406e7000 保存进度! 2023-11-08 10:43:55 +08:00
44357ad3ce 保存进度! 2023-11-08 10:32:19 +08:00
e07039b517 保存进度! 2023-11-08 09:56:40 +08:00
484b8a78e9 保存进度! 2023-11-06 19:16:38 +08:00
4e74bff380 增加可以用坐席名称登录 2023-11-01 20:49:54 +08:00
7311ab5e2a 保存进度! 2023-11-01 18:22:01 +08:00
0650227861 Merge branch 'develop' into feature-ui 2023-11-01 15:42:07 +08:00
75a9c46c2e 保存进度! 2023-11-01 15:41:49 +08:00
02ac5274e0 保存进度! 2023-10-30 23:44:54 +08:00
6f303eec03 保存进度! 2023-10-30 23:44:37 +08:00
39 changed files with 2151 additions and 342 deletions

3
.gitignore vendored
View File

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

View File

@@ -7,7 +7,44 @@
#
# 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_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_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"
### 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

@@ -10,28 +10,28 @@
"dependencies": {
"@element-plus/icons-vue": "^2.1.0",
"echarts": "^5.4.3",
"element-plus": "^2.4.1",
"element-plus": "^2.4.2",
"mitt": "^3.0.1",
"moment": "^2.29.4",
"sass-loader": "^13.3.2",
"vue": "^3.3.6",
"vue": "^3.3.8",
"vue-router": "^4.2.5",
"vuex": "^4.1.0"
},
"devDependencies": {
"@babel/eslint-parser": "^7.22.15",
"@babel/eslint-parser": "^7.23.3",
"@rushstack/eslint-patch": "^1.5.1",
"@typescript-eslint/eslint-plugin": "^6.8.0",
"@vitejs/plugin-vue": "^4.4.0",
"@typescript-eslint/eslint-plugin": "^6.11.0",
"@vitejs/plugin-vue": "^4.4.1",
"@vue/cli-plugin-eslint": "^5.0.8",
"@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.5.1",
"axios": "^1.6.1",
"babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^39.1.1",
"eslint-plugin-vue": "^9.17.0",
"eslint-plugin-vue": "^9.18.1",
"node-sass": "^9.0.0",
"sass": "^1.69.4",
"sass": "^1.69.5",
"style-loader": "^3.3.3",
"ts-node": "^10.9.1",
"vue-eslint-parser": "^9.3.2"
@@ -126,9 +126,9 @@
}
},
"node_modules/@babel/eslint-parser": {
"version": "7.22.15",
"resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz",
"integrity": "sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==",
"version": "7.23.3",
"resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz",
"integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==",
"dev": true,
"dependencies": {
"@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
@@ -1514,9 +1514,9 @@
"peer": true
},
"node_modules/@types/semver": {
"version": "7.5.3",
"resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.3.tgz",
"integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==",
"version": "7.5.5",
"resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.5.tgz",
"integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
"dev": true
},
"node_modules/@types/send": {
@@ -1578,16 +1578,16 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz",
"integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz",
"integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==",
"dev": true,
"dependencies": {
"@eslint-community/regexpp": "^4.5.1",
"@typescript-eslint/scope-manager": "6.8.0",
"@typescript-eslint/type-utils": "6.8.0",
"@typescript-eslint/utils": "6.8.0",
"@typescript-eslint/visitor-keys": "6.8.0",
"@typescript-eslint/scope-manager": "6.11.0",
"@typescript-eslint/type-utils": "6.11.0",
"@typescript-eslint/utils": "6.11.0",
"@typescript-eslint/visitor-keys": "6.11.0",
"debug": "^4.3.4",
"graphemer": "^1.4.0",
"ignore": "^5.2.4",
@@ -1609,34 +1609,34 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz",
"integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz",
"integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.8.0",
"@typescript-eslint/visitor-keys": "6.8.0"
"@typescript-eslint/types": "6.11.0",
"@typescript-eslint/visitor-keys": "6.11.0"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.8.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.11.0.tgz",
"integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz",
"integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.8.0",
"@typescript-eslint/types": "6.11.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
@@ -1723,13 +1723,13 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz",
"integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz",
"integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==",
"dev": true,
"dependencies": {
"@typescript-eslint/typescript-estree": "6.8.0",
"@typescript-eslint/utils": "6.8.0",
"@typescript-eslint/typescript-estree": "6.11.0",
"@typescript-eslint/utils": "6.11.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.0.1"
},
@@ -1746,22 +1746,22 @@
}
},
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.8.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.11.0.tgz",
"integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
}
},
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz",
"integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz",
"integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.8.0",
"@typescript-eslint/visitor-keys": "6.8.0",
"@typescript-eslint/types": "6.11.0",
"@typescript-eslint/visitor-keys": "6.11.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -1778,12 +1778,12 @@
}
},
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz",
"integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.8.0",
"@typescript-eslint/types": "6.11.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
@@ -1898,17 +1898,17 @@
"dev": true
},
"node_modules/@typescript-eslint/utils": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.8.0.tgz",
"integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.11.0.tgz",
"integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.12",
"@types/semver": "^7.5.0",
"@typescript-eslint/scope-manager": "6.8.0",
"@typescript-eslint/types": "6.8.0",
"@typescript-eslint/typescript-estree": "6.8.0",
"@typescript-eslint/scope-manager": "6.11.0",
"@typescript-eslint/types": "6.11.0",
"@typescript-eslint/typescript-estree": "6.11.0",
"semver": "^7.5.4"
},
"engines": {
@@ -1919,35 +1919,35 @@
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz",
"integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz",
"integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.8.0",
"@typescript-eslint/visitor-keys": "6.8.0"
"@typescript-eslint/types": "6.11.0",
"@typescript-eslint/visitor-keys": "6.11.0"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.8.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.11.0.tgz",
"integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz",
"integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz",
"integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.8.0",
"@typescript-eslint/visitor-keys": "6.8.0",
"@typescript-eslint/types": "6.11.0",
"@typescript-eslint/visitor-keys": "6.11.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -1964,12 +1964,12 @@
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==",
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz",
"integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "6.8.0",
"@typescript-eslint/types": "6.11.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
@@ -2041,9 +2041,9 @@
}
},
"node_modules/@vitejs/plugin-vue": {
"version": "4.4.0",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz",
"integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==",
"version": "4.4.1",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.4.1.tgz",
"integrity": "sha512-HCQG8VDFDM7YDAdcj5QI5DvUi+r6xvo9LgvYdk7LSkUNwdpempdB5horkMSZsbdey9Ywsf5aaU8kEPw9M5kREA==",
"dev": true,
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -2318,36 +2318,36 @@
"dev": true
},
"node_modules/@vue/compiler-core": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.6.tgz",
"integrity": "sha512-2JNjemwaNwf+MkkatATVZi7oAH1Hx0B04DdPH3ZoZ8vKC1xZVP7nl4HIsk8XYd3r+/52sqqoz9TWzYc3yE9dqA==",
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.8.tgz",
"integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==",
"dependencies": {
"@babel/parser": "^7.23.0",
"@vue/shared": "3.3.6",
"@vue/shared": "3.3.8",
"estree-walker": "^2.0.2",
"source-map-js": "^1.0.2"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.6.tgz",
"integrity": "sha512-1MxXcJYMHiTPexjLAJUkNs/Tw2eDf2tY3a0rL+LfuWyiKN2s6jvSwywH3PWD8bKICjfebX3GWx2Os8jkRDq3Ng==",
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz",
"integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==",
"dependencies": {
"@vue/compiler-core": "3.3.6",
"@vue/shared": "3.3.6"
"@vue/compiler-core": "3.3.8",
"@vue/shared": "3.3.8"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.6.tgz",
"integrity": "sha512-/Kms6du2h1VrXFreuZmlvQej8B1zenBqIohP0690IUBkJjsFvJxY0crcvVRJ0UhMgSR9dewB+khdR1DfbpArJA==",
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz",
"integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==",
"dependencies": {
"@babel/parser": "^7.23.0",
"@vue/compiler-core": "3.3.6",
"@vue/compiler-dom": "3.3.6",
"@vue/compiler-ssr": "3.3.6",
"@vue/reactivity-transform": "3.3.6",
"@vue/shared": "3.3.6",
"@vue/compiler-core": "3.3.8",
"@vue/compiler-dom": "3.3.8",
"@vue/compiler-ssr": "3.3.8",
"@vue/reactivity-transform": "3.3.8",
"@vue/shared": "3.3.8",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.5",
"postcss": "^8.4.31",
@@ -2355,12 +2355,12 @@
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.6.tgz",
"integrity": "sha512-QTIHAfDCHhjXlYGkUg5KH7YwYtdUM1vcFl/FxFDlD6d0nXAmnjizka3HITp8DGudzHndv2PjKVS44vqqy0vP4w==",
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz",
"integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==",
"dependencies": {
"@vue/compiler-dom": "3.3.6",
"@vue/shared": "3.3.6"
"@vue/compiler-dom": "3.3.8",
"@vue/shared": "3.3.8"
}
},
"node_modules/@vue/component-compiler-utils": {
@@ -2459,60 +2459,60 @@
}
},
"node_modules/@vue/reactivity": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.6.tgz",
"integrity": "sha512-gtChAumfQz5lSy5jZXfyXbKrIYPf9XEOrIr6rxwVyeWVjFhJwmwPLtV6Yis+M9onzX++I5AVE9j+iPH60U+B8Q==",
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.8.tgz",
"integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==",
"dependencies": {
"@vue/shared": "3.3.6"
"@vue/shared": "3.3.8"
}
},
"node_modules/@vue/reactivity-transform": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.6.tgz",
"integrity": "sha512-RlJl4dHfeO7EuzU1iJOsrlqWyJfHTkJbvYz/IOJWqu8dlCNWtxWX377WI0VsbAgBizjwD+3ZjdnvSyyFW1YVng==",
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz",
"integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==",
"dependencies": {
"@babel/parser": "^7.23.0",
"@vue/compiler-core": "3.3.6",
"@vue/shared": "3.3.6",
"@vue/compiler-core": "3.3.8",
"@vue/shared": "3.3.8",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.5"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.6.tgz",
"integrity": "sha512-qp7HTP1iw1UW2ZGJ8L3zpqlngrBKvLsDAcq5lA6JvEXHmpoEmjKju7ahM9W2p/h51h0OT5F2fGlP/gMhHOmbUA==",
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.8.tgz",
"integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==",
"dependencies": {
"@vue/reactivity": "3.3.6",
"@vue/shared": "3.3.6"
"@vue/reactivity": "3.3.8",
"@vue/shared": "3.3.8"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.6.tgz",
"integrity": "sha512-AoX3Cp8NqMXjLbIG9YR6n/pPLWE9TiDdk6wTJHFnl2GpHzDFH1HLBC9wlqqQ7RlnvN3bVLpzPGAAH00SAtOxHg==",
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz",
"integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==",
"dependencies": {
"@vue/runtime-core": "3.3.6",
"@vue/shared": "3.3.6",
"@vue/runtime-core": "3.3.8",
"@vue/shared": "3.3.8",
"csstype": "^3.1.2"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.6.tgz",
"integrity": "sha512-kgLoN43W4ERdZ6dpyy+gnk2ZHtcOaIr5Uc/WUP5DRwutgvluzu2pudsZGoD2b7AEJHByUVMa9k6Sho5lLRCykw==",
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.8.tgz",
"integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==",
"dependencies": {
"@vue/compiler-ssr": "3.3.6",
"@vue/shared": "3.3.6"
"@vue/compiler-ssr": "3.3.8",
"@vue/shared": "3.3.8"
},
"peerDependencies": {
"vue": "3.3.6"
"vue": "3.3.8"
}
},
"node_modules/@vue/shared": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.6.tgz",
"integrity": "sha512-Xno5pEqg8SVhomD0kTSmfh30ZEmV/+jZtyh39q6QflrjdJCXah5lrnOLi9KB6a5k5aAHXMXjoMnxlzUkCNfWLQ=="
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.8.tgz",
"integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw=="
},
"node_modules/@vue/vue-loader-v15": {
"name": "vue-loader",
@@ -3248,9 +3248,9 @@
}
},
"node_modules/axios": {
"version": "1.5.1",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.5.1.tgz",
"integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
"version": "1.6.1",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.6.1.tgz",
"integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==",
"dev": true,
"dependencies": {
"follow-redirects": "^1.15.0",
@@ -4962,9 +4962,9 @@
"integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA=="
},
"node_modules/element-plus": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.1.tgz",
"integrity": "sha512-t7nl+vQlkBKVk1Ag6AufSDyFV8YIXxTFsaya4Nz/0tiRlcz65WPN4WMFeNURuFJleu1HLNtP4YyQKMuS7El8uA==",
"version": "2.4.2",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.2.tgz",
"integrity": "sha512-E/HwXX7JF1LPvQSjs0fZ8WblIoc0quoXsRXQZiL7QDq7xJdNGSUaXtdk7xiEv7axPmLfEFtxE5du9fFspDrmJw==",
"dependencies": {
"@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.0.6",
@@ -7060,9 +7060,9 @@
}
},
"node_modules/eslint-plugin-vue": {
"version": "9.17.0",
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz",
"integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==",
"version": "9.18.1",
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.18.1.tgz",
"integrity": "sha512-7hZFlrEgg9NIzuVik2I9xSnJA5RsmOfueYgsUGUokEDLJ1LHtxO0Pl4duje1BriZ/jDWb+44tcIlC3yi0tdlZg==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
@@ -12813,9 +12813,9 @@
"dev": true
},
"node_modules/sass": {
"version": "1.69.4",
"resolved": "https://registry.npmmirror.com/sass/-/sass-1.69.4.tgz",
"integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==",
"version": "1.69.5",
"resolved": "https://registry.npmmirror.com/sass/-/sass-1.69.5.tgz",
"integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
"devOptional": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -14412,15 +14412,15 @@
}
},
"node_modules/vue": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.6.tgz",
"integrity": "sha512-jJIDETeWJnoY+gfn4ZtMPMS5KtbP4ax+CT4dcQFhTnWEk8xMupFyQ0JxL28nvT/M4+p4a0ptxaV2WY0LiIxvRg==",
"version": "3.3.8",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.8.tgz",
"integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==",
"dependencies": {
"@vue/compiler-dom": "3.3.6",
"@vue/compiler-sfc": "3.3.6",
"@vue/runtime-dom": "3.3.6",
"@vue/server-renderer": "3.3.6",
"@vue/shared": "3.3.6"
"@vue/compiler-dom": "3.3.8",
"@vue/compiler-sfc": "3.3.8",
"@vue/runtime-dom": "3.3.8",
"@vue/server-renderer": "3.3.8",
"@vue/shared": "3.3.8"
},
"peerDependencies": {
"typescript": "*"

View File

@@ -11,28 +11,28 @@
"dependencies": {
"@element-plus/icons-vue": "^2.1.0",
"echarts": "^5.4.3",
"element-plus": "^2.4.1",
"element-plus": "^2.4.2",
"mitt": "^3.0.1",
"moment": "^2.29.4",
"sass-loader": "^13.3.2",
"vue": "^3.3.6",
"vue": "^3.3.8",
"vue-router": "^4.2.5",
"vuex": "^4.1.0"
},
"devDependencies": {
"@babel/eslint-parser": "^7.22.15",
"@babel/eslint-parser": "^7.23.3",
"@rushstack/eslint-patch": "^1.5.1",
"@typescript-eslint/eslint-plugin": "^6.8.0",
"@vitejs/plugin-vue": "^4.4.0",
"@typescript-eslint/eslint-plugin": "^6.11.0",
"@vitejs/plugin-vue": "^4.4.1",
"@vue/cli-plugin-eslint": "^5.0.8",
"@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.5.1",
"axios": "^1.6.1",
"babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^39.1.1",
"eslint-plugin-vue": "^9.17.0",
"eslint-plugin-vue": "^9.18.1",
"node-sass": "^9.0.0",
"sass": "^1.69.4",
"sass": "^1.69.5",
"style-loader": "^3.3.3",
"ts-node": "^10.9.1",
"vue-eslint-parser": "^9.3.2"

View File

@@ -16,6 +16,9 @@ interface BIReportType
reportTypeName: string;
}
/**
* 导入报表的请求对象
*/
interface ImportBIReportRequest
{
filePath: string,
@@ -24,21 +27,127 @@ interface ImportBIReportRequest
sheetIndex: number,
}
/**
* 导入报表的相应对象
*/
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,
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 handler 调用者提供的请求结果处理函数
*/
function importBIReport( request: ImportBIReportRequest, handler: any ): void
function importBIReport( request: ImportBIReportRequest, handler: ImportBIReportResponseHandler ): void
{
const importResponse: ImportBIReportResponse = {
success: false,
@@ -56,7 +165,7 @@ function importBIReport( request: ImportBIReportRequest, handler: any ): void
const data: ImportBIReportResponse = response.data;
importResponse.success = data.success ?? false;
importResponse.message = data.message ?? "";
importResponse.message = data.message ?? "请求完成,但服务器未返回请求结果消息!";
importResponse.importedCount = data.importedCount ?? 0;
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 {
type BIReportType,
type ImportBIReportRequest,
type ImportBIReportResponse,
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
{
telsaler_code: string;
telsaler: string;
}
interface RequestResult

View File

@@ -8,48 +8,39 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
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: "http://10.39.0.41:8081/admin-system/account/p13_account_check",
// 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_LOGIN: import.meta.env.VITE_URL_LOGIN,
URL_LOGIN_CALLER: import.meta.env.VITE_URL_LOGIN_CALLER,
// 机构业绩
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: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_caller_archievement.do",
URL_CALLER_ARCHIEVEMENT: import.meta.env.VITE_URL_CALLER_ARCHIEVEMENT,
// 排行榜
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: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_projects.do",
URL_RWARD_PROJECTS: import.meta.env.VITE_URL_RWARD_PROJECTS,
// 查询获奖人员
URL_REWARD_GAINERS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_gainers.do",
// URL_REWARD_GAINERS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_gainers.do",
URL_REWARD_GAINERS: import.meta.env.VITE_URL_REWARD_GAINERS,
// 添加获奖人员
URL_ADD_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/add_telsaler_reward.do",
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/add_telsaler_reward.do",
URL_ADD_REWARD_TELSALER: import.meta.env.VITE_URL_ADD_REWARD_TELSALER,
// 更新获奖人员
URL_UPDATE_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/update_telsaler_reward.do",
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/update_telsaler_reward.do",
URL_UPDATE_REWARD_TELSALER: import.meta.env.VITE_URL_UPDATE_REWARD_TELSALER,
// 删除获奖人员
URL_DEL_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/delete_telsaler_reward.do",
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/delete_telsaler_reward.do",
URL_DEL_REWARD_TELSALER: import.meta.env.VITE_URL_DEL_REWARD_TELSALER,
// 上传文件
URL_UPLOAD_FILE: "http://10.39.0.41:8081/desktop_archievement_backend/file/file-upload.do",
// URL_UPLOAD_FILE: "http://222.76.244.118:11101/desktop_archievement_backend/file/file-upload.do",
URL_UPLOAD_FILE: import.meta.env.VITE_URL_UPLOAD_FILE,
// 导入报表
URL_IMPORT_REPORT: "http://10.39.0.41:8081/desktop_archievement_backend/import_bi_data/excel.do",
// URL_IMPORT_REPORT: "http://222.76.244.118:11101/desktop_archievement_backend/import_bi_data/excel.do",
URL_IMPORT_REPORT: import.meta.env.VITE_URL_IMPORT_REPORT,
// 请求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 };

View File

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

View File

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

View File

@@ -9,39 +9,18 @@
-->
<template>
<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-tab-pane label="坐席车非渗透率">
<TelsalerAttachingRateView />
</el-tab-pane>
<el-tab-pane label="坐席续保率">
坐席车非渗透率
<TelsalerRenewalRateView />
</el-tab-pane>
<el-tab-pane label="机构">
坐席车非渗透率
<el-tab-pane label="机构渗透率">
<DepartmentAttachingRateView />
</el-tab-pane>
<el-tab-pane label="机构续保率">
<DepartmentRenewalRateView />
</el-tab-pane>
</el-tabs>
</div>
@@ -50,9 +29,13 @@
import { ref, reactive } from "vue";
import { ElMessage, ElMessageBox, type UploadFile, type UploadFiles, type UploadProps, type UploadUserFile } from "element-plus";
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 {
name: "DataManagement",
components: { TelsalerAttachingRateView, },
components: { TelsalerAttachingRateView, TelsalerRenewalRateView, DepartmentRenewalRateView, DepartmentAttachingRateView, },
setup()
{
const ui = reactive({

View File

@@ -62,7 +62,7 @@
</div>
</template>
<script lang="ts">
import { reactive, ref } from "vue";
import { reactive, ref, onBeforeMount } from "vue";
import {
type BIReportType,
type ImportBIReportRequest,
@@ -92,10 +92,10 @@ export default {
reportType: {
type: Number,
require: true,
default: (): number => -9999,
default: (): number => 0,
},
},
setup()
setup( props )
{
const ui: UI = reactive({
showUI: false,
@@ -214,6 +214,11 @@ export default {
}
};
onBeforeMount((): void =>
{
ui.selectedReportType = props.reportType;
});
return {
ui,
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,220 @@
<!--
* @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"
>
上传
</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>
</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";
interface UI
{
showUI: boolean;
showUploadFileDialog: boolean;
tablePageSize: number;
tableCurrentPageIndex: number;
BIDepartmentRenewalRateData: BIDepartmentRenewalRateRecord[];
}
export default {
name: "DepartmentRenewalRateView",
setup()
{
const ui: UI = reactive({
showUI: true,
showUploadFileDialog: 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 );
}
}
};
onBeforeMount((): void =>
{
refresh();
});
const refresh = (): void =>
{
queryDepartmentRenewalRateData( handler );
};
return {
ui,
onCurrentPageIndexChange,
onTablePageSizeChange,
// 计算变量
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
type="primary"
icon="refresh"
@click="refresh"
>
刷新
</el-button>
</el-col>
</el-row>
<el-table
border
stripe
style="width:100%;"
:data="tableData"
>
<el-table-column
type="selection"
align="center"
/>
<el-table-column
label="部门"
align="center"
width="200"
/>
width="300"
>
<template #default="telsaler">
<span>{{ telsaler.row.departmentName }}</span>
</template>
</el-table-column>
<el-table-column
label="名称"
align="center"
width="200"
/>
>
<template #default="telsaler">
<span>{{ telsaler.row.telsalerName }}</span>
</template>
</el-table-column>
<el-table-column
label="车险保费(万)"
label="车险保费"
align="center"
/>
>
<template #default="telsaler">
<span>{{ Math.trunc( telsaler.row.motoPremium * 10000) }}</span>
</template>
</el-table-column>
<el-table-column
label="非车险保费(万)"
label="非车险保费"
align="center"
/>
>
<template #default="telsaler">
<span>{{ Math.trunc( telsaler.row.nomotoPremium * 10000) }}</span>
</template>
</el-table-column>
<el-table-column
label="当月保费渗透率"
align="center"
/>
>
<template #default="telsaler">
<span>{{ telsaler.row.attachingRate.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
<el-table-column
label="渗透率环比上月"
align="center"
/>
>
<template #default="telsaler">
<span>{{ telsaler.row.attachingRateChange.toFixed(2) + "%" }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination_wrapper">
<el-pagination
@@ -65,7 +93,7 @@
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="0"
:total="tableCount"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
@@ -81,25 +109,42 @@
:close-on-press-escape="false"
:show-close="true"
>
<BiDataUploadView />
<BiDataUploadView :report-type="0" />
</el-dialog>
</div>
</div>
</template>
<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 { ElMessageBox, ElMessage } from "element-plus";
interface UI
{
showUI: boolean,
showUploadDialog: boolean,
tableCurrentPageIndex: number,
tablePageSize: number,
BITelsalerAttachingRateData: BITelsalerAttachingRateRecord[],
}
export default {
name: "TelsalerAttachingRateView",
components: { BiDataUploadView, },
setup()
{
const ui = reactive({
const ui: UI = reactive({
showUI: true,
showUploadDialog: false,
tableCurrentPageIndex: 1,
tablePageSize: 10,
BITelsalerAttachingRateData: [],
});
const showUploadFileDialog = (): void =>
@@ -117,18 +162,84 @@ export default {
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 {
ui,
showUploadFileDialog,
onCurrentPageIndexChange,
onTablePageSizeChange,
// 计算变量
tableData,
tableCount,
// 函数
queryBITelsalerAttachingRateDataHandler,
refresh,
};
},
};
</script>
<style lang="scss" scoped>
.wrapper {
margin: 10px;
margin: 0px 10px 10px 10px;
>*+* {
margin-top: 10px;

View File

@@ -1,30 +1,241 @@
src/views/data/bi/TelsalerAttachingRateView.vue<!--
<!--
* @Author: Kane
* @Date: 2023-10-17 14:41:39
* @Date: 2023-10-17 23:31:19
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/data/TelsalerAttachingRateView.vue
* @FilePath: /task_schedule/src/views/data/bi/TelsalerRenewalRateView.vue
* @Description:
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
-->
<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>
<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 {
name: "TelsalerAttachingRateView",
components: { BiDataUploadView, },
setup()
{
const ui = reactive({
const ui: UI = reactive({
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>
<style lang="scss" scoped>
.wrapper {
margin: 10px;
margin: 0px 10px 10px 10px;
>*+* {
margin-top: 10px;
}
}
.pagination_wrapper {
display: flex;
justify-content: flex-end;
}
</style>

View File

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

View File

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

View File

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

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

View File

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

View File

@@ -41,12 +41,12 @@ public final class TeleSalerInfo
/**
* 查询坐席工号的static方法。
* @param telsalerCode 坐席工号
* @param telsaler 坐席工号
* @return TeleSalerInfo对象。
* @throws ClassNotFoundException
* @throws SQLException
*/
public static TeleSalerInfo queryTeleSalerInfo( String telsalerCode )
public static TeleSalerInfo queryTeleSalerInfo( String telsaler )
throws ClassNotFoundException, SQLException
{
TeleSalerInfo info = null;
@@ -72,7 +72,7 @@ public final class TeleSalerInfo
idst0.bm_t bm
WHERE s.team_code = t.team_code
AND t.department_code = bm.department_code
AND s.saler_code = ? """;
AND (s.saler_code = ? or s.saler_name = ?) """;
// String sql = "SELECT DISTINCT s.saler_code, s.saler_name, \n"
// + " t.team_code, t.team, \n"
// + " bm.department_code, bm.department_name \n"
@@ -86,7 +86,8 @@ public final class TeleSalerInfo
connection = DriverManager.getConnection( jdbcURL, userName, password );
statement = connection.prepareStatement( sql );
statement.setString( 1, telsalerCode );
statement.setString( 1, telsaler );
statement.setString( 2, telsaler );
result = statement.executeQuery();

View File

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

View File

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

View File

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

View File

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

View File

@@ -17,19 +17,19 @@ public class TelsalerQueryRequest
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")
private String telSalerCode;
@JsonProperty("telsaler")
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" />
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
</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">
<PatternLayout>
<Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern>
@@ -15,13 +15,25 @@
<DefaultRolloverStrategy max="20" />
</Policies>
</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>
<Loggers>
<!-- <Logger name="mylog" level="info">
<AppenderRef ref="rolling_file" />
</Logger> -->
<Root level="debug">
<AppenderRef ref="rolling_file" />
<AppenderRef ref="rolling_file_linux" />
<AppenderRef ref="rolling_file_win" />
<AppenderRef ref="Console" />
</Root>
</Loggers>

View File

@@ -1,7 +1,7 @@
<?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.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(
#{a_department_code, mode=IN, jdbcType=VARCHAR},
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},
@@ -9,7 +9,7 @@
#{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer},
#{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper})
</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(
#{a_caller_code, mode=IN, jdbcType=VARCHAR},
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},

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"?>
<!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">
<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>
<resultMap id="RewardProjectMap" type="com.cpic.xim.mybatis.pojo.RewardProject">
@@ -9,7 +9,7 @@
<result property="rewardName" column="reward_name" javaType="String"/>
</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,
hjr.telsaler_name telsaler_name,
hjr.telsaler_code telsaler_code,
@@ -28,20 +28,20 @@
<result column="reward_index" property="rewardProjectCode" />
</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(
#{a_reward_index,mode=IN,jdbcType=VARCHAR},
#{a_telsaler_name,mode=IN,jdbcType=VARCHAR})
</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(
#{a_rec_id,mode=IN,jdbcType=INTEGER})
</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(
#{a_rec_id,mode=IN,jdbcType=INTEGER},
#{a_telsaler_name,mode=IN,jdbcType=VARCHAR},

View File

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