123 Commits

Author SHA1 Message Date
8e0505bd49 完成坐席业绩的请求方法。 2023-08-29 10:55:30 +08:00
a74e612546 该死的node 20 2023-08-28 17:41:07 +08:00
42c2e8bdf7 完成坐席业绩查询代码 2023-08-26 19:26:13 +08:00
83be988941 保存进度! 2023-08-26 10:24:03 +08:00
2a92179adf 保存进度! 2023-08-25 23:00:43 +08:00
9976c852ba 保存进度! 2023-08-25 22:47:25 +08:00
fd59698264 保存进度! 2023-08-25 20:47:36 +08:00
f5a53e2f55 保存进度! 2023-08-15 09:51:54 +08:00
5b6285993f 保存进度! 2023-07-31 20:14:49 +08:00
b2a973f7bd 保存进度! 2023-07-30 22:12:14 +08:00
dcc925bb41 完成部门业绩和坐席排行榜的mybatis改造! 2023-07-30 22:11:00 +08:00
8fd60d6b24 parameterType!!! 2023-07-30 20:07:59 +08:00
090a551066 保存进度! 2023-07-30 19:11:56 +08:00
9483b49a20 mybatisUtils加入使用默认参数的工厂函数。 2023-07-30 19:03:53 +08:00
e436fbf89e Merge branch 'mybatis' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into mybatis 2023-07-30 18:59:59 +08:00
0875919b5f 保存进度! 2023-07-30 18:59:48 +08:00
a5b008f056 保存进度! 2023-07-30 18:03:47 +08:00
ada65278a1 保存进度! 2023-07-30 00:27:57 +08:00
38ec1c7d6c 保存进度! 2023-07-29 01:13:43 +08:00
7ab604f3dd 保存进度! 2023-07-28 20:13:31 +08:00
374a87e1ee 保存进度! 2023-07-28 02:10:38 +08:00
7304ccf2e8 保存进度! 2023-07-27 21:43:56 +08:00
ff487c3fb6 保存进度! 2023-07-27 18:07:31 +08:00
a9b6e88733 改用mybatis 2023-07-27 16:34:59 +08:00
9111067e63 修正生成车非数据的bug。 2023-07-26 20:31:10 +08:00
702ab2c4d1 保存进度! 2023-07-25 19:11:27 +08:00
c08b85cbe4 保存进度! 2023-07-24 00:48:14 +08:00
068c56e1c9 升级依赖 2023-07-24 00:36:35 +08:00
73d03bfe9b 保存进度! 2023-07-24 00:17:39 +08:00
6d4ca8cf96 保存进度! 2023-07-24 00:13:19 +08:00
5344f2e0ea Merge branch 'feature-personal' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-personal 2023-07-18 18:48:55 +08:00
78ae920795 保存进度! 2023-07-18 18:48:48 +08:00
d39e731a1e 升级依赖 2023-07-17 00:04:59 +08:00
16574b6a47 保存进度! 2023-07-12 23:21:00 +08:00
c4b1c754a9 保存进度! 2023-07-11 18:35:17 +08:00
dbc5066aed 保存进度! 2023-07-11 10:49:14 +08:00
daa675b079 升级依赖。 2023-07-10 16:42:05 +08:00
47c30a4ea1 保存进度! 2023-06-25 18:29:36 +08:00
157ab0d76e 保存进度! 2023-06-21 18:47:17 +08:00
8c4293f374 保存进度! 2023-06-20 22:29:37 +08:00
f6ec7cbdfe 111 2023-06-19 22:12:49 +08:00
59bc739cac 升级依赖 2023-06-19 00:48:48 +08:00
30ea250264 保存进度! 2023-06-18 00:50:24 +08:00
a14f4b154f Merge branch 'feature-rankinglist' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-rankinglist 2023-06-17 23:37:56 +08:00
dfdde2f8d3 保存进度! 2023-06-16 18:35:19 +08:00
503a5bcdff 保存进度! 2023-06-16 09:54:26 +08:00
05dfb0483c Merge branch 'feature-rankinglist' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-rankinglist 2023-06-14 00:15:17 +08:00
3eeaf68593 保存进度! 2023-06-14 00:15:13 +08:00
20924be00e 升级依赖。 2023-06-13 18:10:57 +08:00
0e1338e54b 保存进度! 2023-06-12 18:29:24 +08:00
24266203ca Merge branch 'feature-rankinglist' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-rankinglist 2023-06-12 09:43:43 +08:00
88880962a9 升级依赖。 2023-06-12 09:43:34 +08:00
e2ccf553aa Merge branch 'feature-rankinglist' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-rankinglist 2023-06-10 00:42:45 +08:00
5856909e92 保存进度! 2023-06-10 00:42:43 +08:00
1b368deb9c 保存进度! 2023-06-09 16:57:13 +08:00
aa39cc4601 保存进度! 2023-06-09 16:37:50 +08:00
80e4b24e4f 保存进度! 2023-06-08 18:08:57 +08:00
664c2335ca 保存进度! 2023-06-07 17:19:47 +08:00
2f3e22fb3e 保存进度! 2023-06-06 18:51:11 +08:00
f9392ea2eb 开发排行榜组件 2023-06-06 17:31:16 +08:00
8b23d4ad4a 保存进度! 2023-06-06 16:16:34 +08:00
eeb01604b2 保存进度! 2023-06-05 18:14:36 +08:00
4eec8a9f18 完成排行榜代码,还没测试 2023-06-05 18:09:40 +08:00
6f65e18672 编写坐席排行榜接口 2023-06-05 11:45:20 +08:00
490e0e0e93 保存进度! 2023-06-05 00:12:21 +08:00
ec18d20461 Merge branch 'feature-data' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-data 2023-06-04 19:51:45 +08:00
d3ca1f9004 保存进度! 2023-06-04 19:11:44 +08:00
425b7be1a7 保存进度! 2023-06-04 16:01:05 +08:00
43ebc2babb 保存进度! 2023-06-03 18:15:07 +08:00
0184cbf2d5 保存进度! 2023-06-02 18:04:26 +08:00
9420e96539 Merge branch 'feature-data' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-data 2023-05-29 00:31:44 +08:00
631ee1170d 保存进度! 2023-05-29 00:30:38 +08:00
3bc20dea6c 保存进度! 2023-05-29 00:15:18 +08:00
5faf939c89 保存进度! 2023-05-29 00:07:59 +08:00
14cd4df5bb 保存进度! 2023-05-26 22:13:39 +08:00
7b7b97b343 保存进度! 2023-05-24 19:17:00 +08:00
01ae8f3486 升级依赖。 2023-05-24 17:43:06 +08:00
d696aeec82 进度 2023-05-18 18:45:18 +08:00
e48e68d680 完成业绩基本代码 2023-05-18 18:22:05 +08:00
fa79a8f8d1 保存进度! 2023-05-18 15:40:04 +08:00
34c60ada3e 修改了CROS的代码,options请求的origin为*。 2023-05-17 20:24:44 +08:00
21732f6bd2 保存进度! 2023-05-15 20:06:17 +08:00
b2ca0d946b 保存进度! 2023-05-15 00:03:42 +08:00
b19bdf77b4 保存进度! 2023-05-13 00:44:28 +08:00
bc6cd47eb2 保存进度! 2023-05-11 18:19:55 +08:00
9a83d7ac9a 保存进度! 2023-05-10 23:47:38 +08:00
dc3da1496d 保存进度! 2023-05-10 20:44:25 +08:00
52667f3d9c 修改了桌面霸屏页面:
1、读取已登录信息的代码;
2、根据已登录信息获取部门业绩的代码;
3、将数据结构代码移到 types 目录下。
2023-05-09 23:45:53 +08:00
d0c9383bf8 更新登录代码
保存坐席的信息,用于获取业绩数据。
2023-05-09 22:42:20 +08:00
8e9e36bb58 保存进度! 2023-05-09 20:24:37 +08:00
ed55dcc682 保存进度! 2023-05-04 00:13:48 +08:00
503e7ba86c 保存进度! 2023-05-02 09:46:28 +08:00
f7d48368c6 进度 2023-04-28 19:42:48 +08:00
0fb93d0ccd 完成登录功能。 2023-04-28 17:46:54 +08:00
6869294c26 保存进度! 2023-04-27 12:24:55 +08:00
c207de7b25 保存进度! 2023-04-26 20:20:43 +08:00
f31d9e9812 完成坐席工号查询接口。 2023-04-26 20:20:19 +08:00
2e72789a4f 完成坐席工号查询接口。 2023-04-26 20:19:49 +08:00
1e33383d22 升级依赖。 2023-04-21 19:32:35 +08:00
bea91eead2 修正一下 2023-04-20 20:00:54 +08:00
2b45c48e04 升级依赖。 2023-04-20 14:36:42 +08:00
faa515f0cc 更新依赖 2023-04-18 11:21:44 +08:00
ca48a48f4e Merge branch 'feature-data' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-data 2023-04-12 18:28:09 +08:00
4ef2c38bdf 保存进度! 2023-04-12 18:27:52 +08:00
d8dd27241f 升级依赖。 2023-04-12 18:27:24 +08:00
ee04d00cad 升级依赖! 2023-04-10 23:56:32 +08:00
08a154440e 保存进度! 2023-04-10 23:55:09 +08:00
8b4b664685 升级组件 2023-04-10 23:54:28 +08:00
c797e4d25c 升级依赖。 2023-04-07 16:52:45 +08:00
6da78396a3 保存进度! 2023-04-06 18:20:16 +08:00
a432c8432b 保存进度! 2023-04-06 09:25:46 +08:00
21356ad6d6 保存进度! 2023-04-06 08:01:27 +08:00
0c2007b4b2 保存进度! 2023-04-05 23:55:33 +08:00
8e2f06bae3 保存进度! 2023-04-05 22:19:07 +08:00
c6d1ae80a9 保存进度! 2023-04-04 17:58:05 +08:00
cb730ded34 保存进度! 2023-04-02 17:23:22 +08:00
bbc608e258 更新插件。 2023-04-02 17:20:22 +08:00
c04c6e8365 保存进度! 2023-03-31 23:58:41 +08:00
88006b2db9 ... 2023-03-31 23:41:03 +08:00
b53090e808 保存进度! 2023-03-31 20:25:01 +08:00
091168236e 保存进度! 2023-03-31 19:56:50 +08:00
b5a68cc884 Merge branch 'feature-data' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-data 2023-03-31 19:55:21 +08:00
6d24626478 保存进度! 2023-03-31 19:53:12 +08:00
84 changed files with 9109 additions and 7744 deletions

1
.gitignore vendored
View File

@@ -78,6 +78,7 @@ build/Release
# Dependency directories
node_modules/
node_modules_bak/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)

View File

@@ -4,354 +4,271 @@ CREATE OR REPLACE PACKAGE telsale_archievement_pkg IS
-- Created : 2023/3/10 15:13:34
-- Purpose : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD>
PROCEDURE <20><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TYPE cur_type IS REF CURSOR;
-- <20>
DEPARTMENTCODE_EXCEPTION_CODE CONSTANT INTEGER := -20000;
DEPARTMENTCODE_EXCEPTION_MSG CONSTANT VARCHAR2(100) := '<27><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>';
CALLERCODE_EXCEPTION_CODE CONSTANT INTEGER := -20001;
CALLERCODE_EXCEPTION_MSG CONSTANT VARCHAR2(100) := '<27><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>';
PROCEDURE department_archievement
(
a_start_date IN DATE,
a_end_date IN DATE
a_department_code IN VARCHAR2,
a_attaching_rate OUT VARCHAR2,
a_renewal_rate OUT VARCHAR2,
a_total OUT INTEGER,
a_mensual_cur OUT cur_type
);
PROCEDURE gen_<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PROCEDURE caller_archievement
(
a_start_date IN DATE,
a_end_date IN DATE
a_caller_code IN VARCHAR2,
a_attaching_rate OUT VARCHAR2,
a_renewal_rate OUT VARCHAR2,
a_total OUT INTEGER,
a_mensual_cur OUT cur_type
);
PROCEDURE caller_arch_ranking_list
(
a_department_code IN VARCHAR2,
a_year IN VARCHAR2,
a_month IN VARCHAR2,
a_attaching_ranking_list OUT cur_type,
a_renewal_ranking_list OUT cur_type
);
END telsale_archievement_pkg;
/
CREATE OR REPLACE PACKAGE BODY telsale_archievement_pkg IS
PROCEDURE <EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
-- <20><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>
PROCEDURE DEPARTMENT_ARCHIEVEMENT
(
a_start_date IN DATE,
a_end_date IN DATE
A_DEPARTMENT_CODE IN VARCHAR2,
A_ATTACHING_RATE OUT VARCHAR2,
A_RENEWAL_RATE OUT VARCHAR2,
A_TOTAL OUT INTEGER,
A_MENSUAL_CUR OUT CUR_TYPE
) IS
--l_count INTEGER; --<2D><><EFBFBD>м<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
L_THIS_MONTH VARCHAR2(4);
L_THIS_YEAR VARCHAR2(4);
L_FIRSTDAY DATE;
L_DEPARTMENT_NAME VARCHAR2(100);
BEGIN
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
gen_<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(a_start_date,
a_end_date);
FOR caller_record IN (SELECT *
FROM desktop_archievement_admin.<2E><><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>_t)
LOOP
BEGIN
DELETE desktop_archievement_admin.<2E><><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf
WHERE cf.ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = caller_record.ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AND cf.<2E><><EFBFBD><EFBFBD> = caller_record.<2E><><EFBFBD><EFBFBD>
AND cf.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n = caller_record.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n
AND cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = caller_record.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>;
EXCEPTION
WHEN no_data_found THEN
NULL;
END;
INSERT INTO desktop_archievement_admin.<2E><><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>
VALUES caller_record;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
NULL;
L_THIS_MONTH := TO_CHAR(SYSDATE,
'mm');
L_THIS_YEAR := TO_CHAR(SYSDATE,
'yyyy');
L_FIRSTDAY := TO_DATE(TO_CHAR(SYSDATE,
'yyyy') || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss');
-- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BEGIN
SELECT DEPARTMENT_NAME
INTO L_DEPARTMENT_NAME
FROM IDST0.BM_T BM
WHERE BM.DEPARTMENT_CODE = A_DEPARTMENT_CODE;
EXCEPTION
-- <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(DEPARTMENTCODE_EXCEPTION_CODE,
DEPARTMENTCODE_EXCEPTION_MSG);
END;
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>
SELECT DECODE(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
0,
0,
ROUND((SUM(CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>) * 100),
2))
INTO A_ATTACHING_RATE
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
WHERE CF.<2E>·<EFBFBD> = L_THIS_MONTH
AND CF.<2E><><EFBFBD><EFBFBD> = L_THIS_YEAR
AND <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = A_DEPARTMENT_CODE;
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT DECODE(SUM(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
0,
0,
ROUND(SUM(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
2))
INTO A_RENEWAL_RATE
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>
WHERE <20><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME;
--<2D><>ҵ<EFBFBD><D2B5>
SELECT ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD> + CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>),
0),
0)
INTO A_TOTAL
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
WHERE <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = A_DEPARTMENT_CODE
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= L_FIRSTDAY
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= SYSDATE;
--ÿ<><C3BF>ҵ<EFBFBD><D2B5>
OPEN A_MENSUAL_CUR FOR
SELECT CF.<2E>·<EFBFBD> MM,
ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD> + CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / 10000,
0),
0) BF
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
WHERE <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = A_DEPARTMENT_CODE
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE,
'yyyy') || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> < TO_DATE(TO_CHAR(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY CF.<2E>·<EFBFBD>
ORDER BY CF.<2E>·<EFBFBD>;
END;
PROCEDURE gen_<6E><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
/*******************************************************/
-- <20><>ϯҵ<CFAF><D2B5>
PROCEDURE caller_archievement
(
a_start_date IN DATE,
a_end_date IN DATE
a_caller_code IN VARCHAR2,
a_attaching_rate OUT VARCHAR2,
a_renewal_rate OUT VARCHAR2,
a_total OUT INTEGER,
a_mensual_cur OUT cur_type
) IS
l_caller_name VARCHAR2(100);
l_this_month VARCHAR2(4);
l_this_year VARCHAR2(4);
l_firstday DATE;
BEGIN
desktop_archievement_admin.clean_temp_data;
--<2D><>ѯ<EFBFBD><D1AF>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
BEGIN
SELECT saler_name
INTO l_caller_name
FROM tele_saler
WHERE saler_code = a_caller_code;
EXCEPTION
-- <20><><EFBFBD><EFBFBD>û<EFBFBD>в<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>
WHEN no_data_found THEN
raise_application_error(CALLERCODE_EXCEPTION_CODE,
CALLERCODE_EXCEPTION_MSG);
END;
INSERT INTO desktop_archievement_admin.<2E><><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>_t
WITH aa AS
(SELECT to_char(t.signature_date,
'yyyy-mm-dd') ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(to_char(T.signature_date,
'mm')) || '<27><>' mm,
t.policy_no bdh,
t.endorsement_no pdh,
qt.t_cre tid,
QT.B_CRE BTID, -----<2D><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
e.inception_date qbsj,
e.planned_end_date zzsj,
pt.premium_amount - nvl(pt.tax_amount,
0) bf,
nt.ecompensation_rate * (pt.premium_amount - nvl(pt.tax_amount,
0)) fxbf,
z.department_name bm,
CASE
WHEN (et.telpartnercode LIKE '%HC%' OR
zx.workerno IN (SELECT code
FROM datacenter.dc_lsj_zx_hc)) THEN
'<27><><EFBFBD>׷ῥ'
ELSE
''
END <20>Ƿ<EFBFBD><C7B7>ῥ,
nvl(zx.workerno,
et.telpartnercode) <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
(CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<27><>ΰ<EFBFBD><CEB0>'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<27><><EFBFBD><EFBFBD>'
ELSE
to_char(ys.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>)
END) <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
YS.<2E>Ŷ<EFBFBD> <20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
nvl(YS.<2E>Ŷ<EFBFBD>,
y.section_office_name) <20><><EFBFBD><EFBFBD>N,
nvl((CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<27><>ΰ<EFBFBD><CEB0>'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<27><><EFBFBD><EFBFBD>'
ELSE
to_char(ys.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>)
END),
xx.staff_name) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no
LEFT JOIN idst0.motorised_vehicle_t v
ON v.policy_no = e.policy_no
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = t.policy_no
AND pt.endorsement_no = t.endorsement_no
LEFT JOIN ywglxt.w_dxbd_i i
ON e.policy_no = i.bdh
LEFT JOIN idst0.rydm_t xx
ON xx.staff_code = nvl(i.zhjywy,
e.operator_code)
LEFT JOIN idst0.ks_t y
ON y.section_office_code = nvl(xx.section_office_code,
e.section_office_code)
LEFT JOIN idst0.bm_t z
ON z.department_code = nvl(xx.department_code,
e.department_code)
--left join datacenter.dc_cx_csteam ct on ct.jbrcode = xx.staff_code
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = t.policy_no
AND nt.endorsement_no = t.endorsement_no
--left join ywglxt.q_auto_agreement_extend_t qe on qe.policy_no = e.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qt
ON qt.policy_no = e.policy_no
LEFT JOIN datacenter.dc_yangg_qdcode qd
ON qd.code = e.selling_channel_type
LEFT JOIN datacenter.dc_tb_jc_c_tag cl
ON cl.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = e.policy_no
LEFT JOIN datacenter.dc_yangg_basecode_teams fg
ON fg.bm = z.department_name
AND fg.ks = y.section_office_name
--left join idst0.t_sell_policy_autobase_t zx on zx.policy_no=e.policy_no
--left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
LEFT JOIN idst0.auto_agreement_extend_t et
ON et.policy_no = e.policy_no
LEFT JOIN idst0.t_sell_policy_autobase_t zx
ON zx.policy_no = e.policy_no
LEFT JOIN datacenter.dc_YZH_ZXYS YS
ON YS.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = nvl(zx.workerno,
et.telpartnercode)
WHERE t.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND t.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
--and t.endorsement_no = '<27><>'
AND e.policy_status = '1' --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
AND qt.tflag = '0' --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
AND qt.usage_xm = '<27><>ͥ<EFBFBD><CDA5><EFBFBD>ó<EFBFBD>'
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B3B5>Ħ<EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AND e.planned_end_date - e.inception_date >= 360
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
)
-----<2D><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
,
dd2 AS
(SELECT ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
mm,
bm,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
<20><><EFBFBD><EFBFBD>N,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N,
CASE
WHEN pdh = '<27><>' THEN
tid
END tid,
to_number('1') <20>ͻ<EFBFBD><CDBB><EFBFBD>,
COUNT(DISTINCT CASE
WHEN pdh = '<27><>' THEN
bdh
END) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
SUM(bf) <20><><EFBFBD><EFBFBD>
FROM (SELECT DISTINCT *
FROM aa) aa
GROUP BY bm,
CASE
WHEN pdh = '<27><>' THEN
tid
END,
mm,
BTID,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<20><><EFBFBD><EFBFBD>N,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N
UNION
SELECT ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
mm,
bm,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
<20><><EFBFBD><EFBFBD>N,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N,
CASE
WHEN btid = tid THEN
''
ELSE
btid
END btid,
to_number('0') <20>ͻ<EFBFBD><CDBB><EFBFBD>,
to_number('0') <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
to_number('0') <20><><EFBFBD><EFBFBD>
FROM (SELECT DISTINCT *
FROM aa) aa),
DD AS
(SELECT *
FROM DD2
WHERE TID IS NOT NULL)
--select * from dd
,
bb AS
(SELECT DISTINCT q.policy_no bdh,
q.endorsement_no pdh,
qna.t_cre tid,
to_number(to_char(q.signature_date,
'yyyy')) || '<27><>' nf,
(to_char(q.signature_date,
'mm')) || '<27><>' mm_f,
to_char(q.signature_date,
'dd') || '<27><>' dd,
q.signature_date sj,
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) bf,
z.department_name bm
FROM idst0.nonauto_agreement_request_t q
LEFT JOIN idst0.nonauto_agreement_t e
ON e.policy_no = q.policy_no
LEFT JOIN idst0.nonauto_premium_t pt
ON pt.endorsement_no = q.endorsement_no
AND pt.policy_no = q.policy_no
LEFT JOIN idst0.reinsurance_t r
ON r.reinsurance_policy_no = e.policy_no
LEFT JOIN idst0.exrate_month_t c
ON pt.currency_code = c.bzh
AND to_char(q.signature_date,
'YYYY') = c.theyear
AND to_char(q.signature_date,
'fmmm') = c.themonth
LEFT JOIN idst0.rydm_t x
ON x.staff_code = e.operator_code
LEFT JOIN idst0.ks_t y
ON y.section_office_code = x.section_office_code
LEFT JOIN idst0.bm_t z
ON z.department_code = x.department_code
LEFT JOIN ywglxt.q_nonauto_agreement_t qna
ON qna.policy_no = q.policy_no
LEFT JOIN datacenter.dc_yangg_gkxzh gk
ON gk.product_code = e.product_code --<2D><>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LEFT JOIN dd
ON dd.tid = qna.t_cre
WHERE qna.tflag = '0'
AND (CASE
WHEN q.endorsement_no != '<27><>' AND
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) != 0 THEN
'<27><>'
END) IS NULL
AND e.policy_status = '1'
AND gk.product_code IS NOT NULL
AND (e.product_code LIKE '2%' OR e.product_code LIKE '1106%' --<2D>⽡ --<2D><><EFBFBD><EFBFBD>
OR e.product_code LIKE '1107%' OR e.product_code LIKE '1108%' OR e.product_code LIKE '1307%' OR e.product_code LIKE '1304A400%' --<2D>Ҳ<EFBFBD>
)
AND q.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND q.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND e.planned_end_date - e.inception_date >= 90
AND dd.tid IS NOT NULL
--<2D><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF>)
)
--SELECT * FROM BB
,
cc AS
(SELECT mm_f,
tid <20>ں<EFBFBD>֤<EFBFBD><D6A4>,
COUNT(DISTINCT bdh) <20>ںϱ<DABA><CFB1><EFBFBD>,
SUM(bf) <20>ںϱ<DABA><CFB1><EFBFBD>
FROM bb
GROUP BY tid,
mm_f),
ff AS
(SELECT dd.*,
cc.*
FROM dd
LEFT JOIN cc
ON cc.<2E>ں<EFBFBD>֤<EFBFBD><D6A4> = dd.tid
AND cc.mm_f = dd.mm)
SELECT to_date(ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
'yyyy-mm-dd'),
mm <20>·<EFBFBD>,
bm <20><><EFBFBD><EFBFBD>,
<20><><EFBFBD><EFBFBD>N,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
nvl(SUM(<28><><EFBFBD><EFBFBD>),
0) <20><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>,
nvl(SUM(<28>ںϱ<DABA><CFB1><EFBFBD>),
0) <20><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>
FROM ff
WHERE ff.ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= to_char(a_start_date,
'yyyy-mm-dd')
AND ff.ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= to_char(a_end_date,
'yyyy-mm-dd')
AND bm IN ('<27><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>',
'<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾')
GROUP BY ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
mm,
bm,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
<20><><EFBFBD><EFBFBD>N,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N
ORDER BY <20><><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>;
l_this_month := to_char(SYSDATE,
'mm');
l_this_year := to_char(SYSDATE,
'yyyy');
l_firstday := to_date(l_this_year || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss');
--<2D>ܳ<EFBFBD><DCB3>ձ<EFBFBD><D5B1><EFBFBD>
SELECT round(nvl(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
0),
2) bf
INTO a_total
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code
AND cf.<2E><><EFBFBD><EFBFBD> = l_this_year;
--<2D><>͸<EFBFBD><CDB8>
SELECT decode(nvl(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
0),
0,
0,
round(SUM(cf.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>) * 100,
2))
INTO a_attaching_rate
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code
AND cf.<2E><><EFBFBD><EFBFBD> = l_this_year
AND cf.<2E>·<EFBFBD> = l_this_month;
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT decode(nvl(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
0),
0,
0,
round(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
2)) xbl
INTO a_renewal_rate
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3> xb
WHERE xb.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code;
--ÿ<><C3BF>ҵ<EFBFBD><D2B5>
OPEN A_MENSUAL_CUR FOR
SELECT CF.<2E>·<EFBFBD> MM,
ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD> + CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>),
0),
0) BF
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE,
'yyyy') || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> < TO_DATE(TO_CHAR(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY CF.<2E>·<EFBFBD>
ORDER BY CF.<2E>·<EFBFBD>;
END;
/*******************************************************/
-- <20><>ϯ<EFBFBD><CFAF><EFBFBD>а<EFBFBD>
PROCEDURE CALLER_ARCH_RANKING_LIST
(
A_DEPARTMENT_CODE IN VARCHAR2,
A_YEAR IN VARCHAR2,
A_MONTH IN VARCHAR2,
A_ATTACHING_RANKING_LIST OUT CUR_TYPE,
A_RENEWAL_RANKING_LIST OUT CUR_TYPE
) IS
L_DEPARTMENT_NAME VARCHAR2(100);
BEGIN
-- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BEGIN
SELECT DEPARTMENT_NAME
INTO L_DEPARTMENT_NAME
FROM IDST0.BM_T BM
WHERE BM.DEPARTMENT_CODE = A_DEPARTMENT_CODE;
EXCEPTION
-- <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(DEPARTMENTCODE_EXCEPTION_CODE,
DEPARTMENTCODE_EXCEPTION_MSG);
END;
-- <20><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
OPEN A_ATTACHING_RANKING_LIST FOR
SELECT ROWNUM,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> AS CALLER_NAME,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8> AS ATTACHING_RATE
FROM (SELECT <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
ROUND(DECODE(nvl(SUM(<28><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
0),
0,
0,
(SUM(<28><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(<28><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>)) * 100),
2) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>
WHERE <20>·<EFBFBD> = A_MONTH
AND <20><><EFBFBD><EFBFBD> = A_YEAR
AND <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = A_DEPARTMENT_CODE
GROUP BY <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>
ORDER BY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8> DESC);
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
OPEN A_RENEWAL_RANKING_LIST FOR
SELECT ROWNUM,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> AS CALLER_NAME,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS RENEWAL_RATE
FROM (SELECT <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
decode(nvl(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
0),
0,
0,
round(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
2)) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3> XB
WHERE XB.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME
GROUP BY <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>
ORDER BY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC);
END;
BEGIN
NULL;
END telsale_archievement_pkg;
END TELSALE_ARCHIEVEMENT_PKG;
/

918
code/db/pkg/telsale_pkg.pck Normal file
View File

@@ -0,0 +1,918 @@
CREATE OR REPLACE PACKAGE telsale_pkg IS
-- Author : WANGWEI-202
-- Created : 2023/3/10 15:13:34
-- Purpose : 桌面霸屏项目基础数据生成包
PROCEDURE 车非基础数据
(
a_start_date IN DATE,
a_end_date IN DATE
);
PROCEDURE gen_车非临时数据
(
a_start_date IN DATE,
a_end_date IN DATE
);
PROCEDURE 续保基本数据;
PROCEDURE chefei_daily_job;
PROCEDURE xubao_daily_job;
END telsale_pkg;
/
CREATE OR REPLACE PACKAGE BODY telsale_pkg IS
PROCEDURE 车非基础数据
(
a_start_date IN DATE,
a_end_date IN DATE
) IS
--l_count INTEGER; --已有记录的数量
BEGIN
--产生临时数据
gen_车非临时数据(a_start_date,
a_end_date);
FOR caller_record IN (SELECT *
FROM desktop_archievement_admin.坐席车非每日保费_t)
LOOP
BEGIN
DELETE desktop_archievement_admin.坐席车非每日保费 cf
WHERE cf.签单日期 = caller_record.签单日期
AND cf.部门 = caller_record.部门
AND cf.经办人n = caller_record.经办人n
AND cf.坐席工号 = caller_record.坐席工号;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line(caller_record.签单日期 || '无重复数据');
END;
INSERT INTO desktop_archievement_admin.坐席车非每日保费
VALUES caller_record;
END LOOP;
COMMIT;
/*EXCEPTION
WHEN OTHERS THEN
NULL;*/
END;
/**********************************************************************/
PROCEDURE gen_车非临时数据
(
a_start_date IN DATE,
a_end_date IN DATE
) IS
BEGIN
desktop_archievement_admin.clean_temp_data;
INSERT INTO desktop_archievement_admin.坐席车非每日保费_t
WITH aa AS
(SELECT to_char(t.signature_date,
'yyyy-mm-dd') 签单日期,
(to_char(T.signature_date,
'yyyy')) the_year,
(to_char(T.signature_date,
'mm')) the_month,
t.policy_no bdh,
t.endorsement_no pdh,
qt.t_cre tid,
QT.B_CRE BTID, -----添加字段
e.inception_date qbsj,
e.planned_end_date zzsj,
pt.premium_amount - nvl(pt.tax_amount,
0) bf
--,qt.qdbf - nvl(qt.qdbf_tax_amount,0) bf
,
nt.ecompensation_rate * (pt.premium_amount - nvl(pt.tax_amount,
0)) fxbf,
z.department_name bm,
z.department_code bmdm,
CASE
WHEN (et.telpartnercode LIKE '%HC%' OR
zx.workerno IN (SELECT code
FROM datacenter.dc_lsj_zx_hc)) THEN
'海沧丰骏'
ELSE
''
END 是否丰骏,
nvl(zx.workerno,
et.telpartnercode) 坐席工号,
(CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%建发凯迪%' THEN
'林伟华'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%建发凯迪%' THEN
'其他'
ELSE
to_char(ys.坐席姓名)
END) 坐席名称,
YS.团队 坐席团队,
nvl(YS.团队,
y.section_office_name) 科室N,
nvl((CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%建发凯迪%' THEN
'林伟华'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%建发凯迪%' THEN
'其他'
ELSE
to_char(ys.坐席姓名)
END),
xx.staff_name) 经办人N
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no
LEFT JOIN idst0.motorised_vehicle_t v
ON v.policy_no = e.policy_no
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = t.policy_no
AND pt.endorsement_no = t.endorsement_no
LEFT JOIN ywglxt.w_dxbd_i i
ON e.policy_no = i.bdh
LEFT JOIN idst0.rydm_t xx
ON xx.staff_code = nvl(i.zhjywy,
e.operator_code)
LEFT JOIN idst0.ks_t y
ON y.section_office_code = nvl(xx.section_office_code,
e.section_office_code)
LEFT JOIN idst0.bm_t z
ON z.department_code = nvl(xx.department_code,
e.department_code)
--left join datacenter.dc_cx_csteam ct on ct.jbrcode = xx.staff_code
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = t.policy_no
AND nt.endorsement_no = t.endorsement_no
--left join ywglxt.q_auto_agreement_extend_t qe on qe.policy_no = e.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qt
ON qt.policy_no = e.policy_no
LEFT JOIN datacenter.dc_yangg_qdcode qd
ON qd.code = e.selling_channel_type
LEFT JOIN datacenter.dc_tb_jc_c_tag cl
ON cl.保单号 = e.policy_no
LEFT JOIN datacenter.dc_yangg_basecode_teams fg
ON fg.bm = z.department_name
AND fg.ks = y.section_office_name
--left join idst0.t_sell_policy_autobase_t zx on zx.policy_no=e.policy_no
--left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
LEFT JOIN idst0.auto_agreement_extend_t et
ON et.policy_no = e.policy_no
LEFT JOIN idst0.t_sell_policy_autobase_t zx
ON zx.policy_no = e.policy_no
LEFT JOIN datacenter.dc_YZH_ZXYS YS
ON YS.坐席工号 = nvl(zx.workerno,
et.telpartnercode)
--left join v_lsj_dimian dm on dm.vin=v.vin and e.selling_channel_type='25' and dm.MEMO like'%地面续保%'
--left join datacenter.dc_lsj_zx_team zt on zt.name=coalesce(zc.name,zc1.name,bc.name,dm.JBRMC)
WHERE t.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND t.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
--and t.endorsement_no = '无'
AND e.policy_status = '1' --条件:保单有效
AND qt.tflag = '0' --条件:类型为个人
AND qt.usage_xm = '家庭自用车'
--条件:单程提车、摩托车、拖拉机
--and e.policy_no in ('AXIMC90Y1419B038594J','AXIMC90CTP19B039593R','AXIMC04CTP19B013473X')
AND e.planned_end_date - e.inception_date >= 360
--条件:保单周期
)
-----添加字段
,
dd2 AS
(SELECT 签单日期,
the_year,
the_month,
bm,
bmdm,
坐席工号,
坐席名称,
坐席团队,
科室N,
经办人N,
CASE
WHEN pdh = '无' THEN
tid
END tid,
to_number('1') 客户数,
COUNT(DISTINCT CASE
WHEN pdh = '无' THEN
bdh
END) 保单数,
SUM(bf) 保费
FROM (SELECT DISTINCT *
FROM aa) aa
GROUP BY bm,
bmdm,
CASE
WHEN pdh = '无' THEN
tid
END,
the_year,
the_month,
BTID,
坐席工号,
坐席名称,
坐席团队,
签单日期,
科室N,
经办人N
UNION
SELECT 签单日期,
the_year,
the_month,
bm,
bmdm,
坐席工号,
坐席名称,
坐席团队,
科室N,
经办人N,
CASE
WHEN btid = tid THEN
''
ELSE
btid
END btid,
to_number('0') 客户数,
to_number('0') 保单数,
to_number('0') 保费
FROM (SELECT DISTINCT *
FROM aa) aa),
DD AS
(SELECT *
FROM DD2
WHERE TID IS NOT NULL)
--select * from dd
,
bb AS
(SELECT DISTINCT q.policy_no bdh,
q.endorsement_no pdh,
qna.t_cre tid,
to_number(to_char(q.signature_date,
'yyyy')) || '年' nf,
(to_char(q.signature_date,
'mm')) mm_f,
to_char(q.signature_date,
'dd') || '日' dd,
q.signature_date sj,
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) bf,
z.department_name bm
FROM idst0.nonauto_agreement_request_t q
LEFT JOIN idst0.nonauto_agreement_t e
ON e.policy_no = q.policy_no
LEFT JOIN idst0.nonauto_premium_t pt
ON pt.endorsement_no = q.endorsement_no
AND pt.policy_no = q.policy_no
LEFT JOIN idst0.reinsurance_t r
ON r.reinsurance_policy_no = e.policy_no
LEFT JOIN idst0.exrate_month_t c
ON pt.currency_code = c.bzh
AND to_char(q.signature_date,
'YYYY') = c.theyear
AND to_char(q.signature_date,
'fmmm') = c.themonth
LEFT JOIN idst0.rydm_t x
ON x.staff_code = e.operator_code
LEFT JOIN idst0.ks_t y
ON y.section_office_code = x.section_office_code
LEFT JOIN idst0.bm_t z
ON z.department_code = x.department_code
LEFT JOIN ywglxt.q_nonauto_agreement_t qna
ON qna.policy_no = q.policy_no
LEFT JOIN datacenter.dc_yangg_gkxzh gk
ON gk.product_code = e.product_code --分散型险种
--left join datacenter.dc_yangg_zbxzh zb on zb.product_code = e.product_code --政保险种
LEFT JOIN dd
ON dd.tid = qna.t_cre
WHERE qna.tflag = '0'
AND (CASE
WHEN q.endorsement_no != '无' AND
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) != 0 THEN
'是'
END) IS NULL
--and q.endorsement_no = '无'
AND e.policy_status = '1'
AND gk.product_code IS NOT NULL
AND (e.product_code LIKE '2%' OR e.product_code LIKE '1106%' --意健 --责任
OR e.product_code LIKE '1107%' OR e.product_code LIKE '1108%' OR e.product_code LIKE '1307%' OR e.product_code LIKE '1304A400%' --家财
)
--and e.product_code not in ('22KC9800')
AND q.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND q.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND e.planned_end_date - e.inception_date >= 90
AND dd.tid IS NOT NULL
--车险个人客户)
)
--SELECT * FROM BB
,
cc AS
(SELECT mm_f,
tid 融合证件,
COUNT(DISTINCT bdh) 融合保数,
SUM(bf) 融合保费
FROM bb
GROUP BY tid,
mm_f),
ff AS
(SELECT dd.*,
cc.*
FROM dd
LEFT JOIN cc
ON cc.融合证件 = dd.tid
AND cc.mm_f = dd.the_month) --OR cc.融合证件 = dd.btid
--select * from ff
SELECT to_date(签单日期,
'yyyy-mm-dd') 签单日期,
the_year 年份,
the_month 月份,
bm 部门,
bmdm 部门代码,
科室N,
经办人N,
坐席工号,
坐席名称,
坐席团队,
nvl(SUM(保费),
0) 车险个人客户保费,
nvl(SUM(融合保费),
0) 车非融合保费
FROM ff
WHERE to_date(ff.签单日期,
'yyyy-mm-dd') >= a_start_date
AND to_date(ff.签单日期,
'yyyy-mm-dd') < a_end_date
AND bm IN ('续保业务部',
'湖里支公司')
GROUP BY 签单日期,
the_year,
the_month,
bm,
bmdm,
坐席工号,
坐席名称,
坐席团队,
科室N,
经办人N
ORDER BY 部门,
坐席名称;
COMMIT;
END;
/**********************************************************************/
PROCEDURE 续保基本数据 IS
BEGIN
--清理旧数据
desktop_archievement_admin.clean_mensual_renewal;
--生成新数据
INSERT INTO desktop_archievement_admin.坐席续保统计
WITH cc AS
(SELECT pt.policy_no policy_no,
SUM(pt.premium_amount) premium_amount,
SUM(pt.tax_amount) tax_amount
FROM idst0.auto_premium_t pt
GROUP BY pt.policy_no)
,
bb AS
(SELECT t.policy_no 保单号,
(CASE
WHEN e.product_code LIKE '1102%' AND
e.product_code NOT LIKE '110224%' AND
e.product_code != '11026000' THEN
'机动车险保险'
WHEN e.product_code LIKE '1101%' OR
e.product_code LIKE '1301%' OR
e.product_code LIKE '11110000%' THEN
'财产险'
WHEN e.product_code LIKE '1107%' OR
e.product_code LIKE '1307%' OR
e.product_code LIKE '1304A400%' THEN
'责任险'
WHEN e.product_code LIKE '1106%' OR
e.product_code LIKE '51015700' THEN
'家财险'
WHEN (e.product_code LIKE '1104%' OR e.product_code LIKE '1204%' OR e.product_code LIKE '13040000%') AND
e.product_code NOT LIKE '120404%' THEN
'货运险'
WHEN e.product_code LIKE '1203%' OR
e.product_code LIKE '1103%' OR
e.product_code LIKE '120404%' THEN
'船舶险'
WHEN e.product_code LIKE '1305%' THEN
'工程险'
WHEN e.product_code LIKE '111%' AND
e.product_code NOT LIKE '11110000%' THEN
'农业险'
WHEN e.product_code LIKE '1109%' OR
e.product_code LIKE '1309%' THEN
'保证保险'
WHEN e.product_code LIKE '1312%' THEN
'特殊风险'
WHEN e.product_code LIKE '1308%' THEN
'信用险'
WHEN e.product_code LIKE '23%' THEN
'意外险'
WHEN e.product_code LIKE '22%' THEN
'健康险'
WHEN e.product_code LIKE '110224%' OR
e.product_code = '11026000' THEN
'交强险'
ELSE
'未分配'
END) AS 险种大类
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no)
,
aa1 AS
(SELECT a.policy_no 旧保单,
a.selling_shop_code 车商代码,
a.planned_end_date 到期时间,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'个车专业化销售一科'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'个车专业化销售一科'
ELSE
nvl(dt.科室名称,
z.section_office_name)
END 科室,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.部门,
y.department_name) NOT LIKE '湖里支公司' andcd.memo LIKE '%深圳%' OR
cd.memo LIKE '%地面%' and v.vehicle_brand IN ('特斯拉',
'蔚来',
'理想',
'小鹏',
'极氪',
'极狐',
'AITO',
'ARCFOX极狐',
'特斯拉(中国)',
'特斯拉(中国)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'新能源车事业发展中心厦门分中心'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END) = '湖里支公司' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
WHEN cd.memo LIKE '%地面%' OR
cd.memo LIKE '%深圳%' THEN
'续保业务部'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'同安支公司'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
END) 责任部门,
qa.USAGE_XM 使用性质,
decode(qa.bd_type,
'1',
'单交强',
'2',
'单商业',
'3',
'交商共保',
'其它') 保单类型,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
'是'
END) 高预赔,
x.staff_name AS 经办,
bb.险种大类,
cc.signature_date 新保单签发时间,
(SELECT hmd.管控类型
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin) 管控类型
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb.保单号 = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = '无'
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.险种大类
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb.保单号 = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = '无'
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = '无'
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc.险种大类 = bb.险种大类)
AND cc.inception_date > a.planned_end_date - 30 --时间限制放宽为30天
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt.保单号 = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')),
aa2 AS
(SELECT a.policy_no 旧保单,
a.selling_shop_code 车商代码,
a.planned_end_date 到期时间,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'个车专业化销售一科'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'个车专业化销售一科'
ELSE
nvl(dt.科室名称,
z.section_office_name)
END 科室,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.部门,
y.department_name) NOT LIKE '湖里支公司' andcd.memo LIKE '%深圳%' OR
cd.memo LIKE '%地面%' and v.vehicle_brand IN ('特斯拉',
'蔚来',
'理想',
'小鹏',
'极氪',
'极狐',
'AITO',
'ARCFOX极狐',
'特斯拉(中国)',
'特斯拉(中国)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'新能源车事业发展中心厦门分中心'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END) = '湖里支公司' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
WHEN cd.memo LIKE '%地面%' OR
cd.memo LIKE '%深圳%' THEN
'续保业务部'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'同安支公司'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'集美支公司'
ELSE
nvl(dt.部门,
y.department_name)
END)
END) 责任部门,
qa.USAGE_XM 使用性质,
decode(qa.bd_type,
'1',
'单交强',
'2',
'单商业',
'3',
'交商共保',
'其它') 保单类型,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
'是'
END) 高预赔,
x.staff_name AS 经办,
bb.险种大类,
cc.signature_date 新保单签发时间,
(SELECT hmd.管控类型
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin) 管控类型
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb.保单号 = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = '无'
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.险种大类
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb.保单号 = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = '无'
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = '无'
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc.险种大类 = bb.险种大类)
AND cc.inception_date > a.planned_end_date - 30 --时间限制放宽为30天
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt.保单号 = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2024-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss'))
,
aa3 AS
(SELECT DISTINCT *
FROM aa1
UNION ALL (SELECT DISTINCT *
FROM aa2))
,
AA AS
(SELECT AA3.*,
nvlzx.workerno,
et.telpartnercode) 坐席工号,
(CASE WHEN nvlzx.workerno,
et.telpartnercode) =
'DX001' AND aa3.经办 LIKE
'%建发凯迪%' THEN
'林伟华' WHEN nvlzx.workerno,
et.telpartnercode) =
'DX001' AND aa3.经办 NOT LIKE
'%建发凯迪%' THEN
'其他' ELSE to_char
(ys.坐席姓名) END) 坐席名称,
YS.团队 坐席团队 FROM AA3 LEFT JOIN idst0.auto_agreement_extend_t et ON et.policy_no = AA3.旧保单 LEFT JOIN idst0.t_sell_policy_autobase_t zx ON zx.policy_no = AA3.旧保单 LEFT JOIN dc_YZH_ZXYS YS ON YS.坐席工号 = nvlzx.workerno,
et.telpartnercode))
,
yxb AS
(
---已续保
SELECT aa.责任部门 部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号,
--(case when a.标识='非首续'and A.责任部门='续保业务部' then '续保业务部' else A.部门 end) 部门,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END) 已续保累计
FROM aa
WHERE aa.使用性质 IN ('家庭自用车',
'企业客车')
AND aa.高预赔 IS NULL
AND aa.管控类型 IS NULL
AND aa.保单类型 IN '交商共保', '单交强'
AND aa.到期时间 >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.到期时间 < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND aa.新保单签发时间 <= to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.责任部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号)
--个车续保率=已续数-累计/到期数-累计
,
dqs AS
(
---到期数
SELECT aa.责任部门 部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END) 到期数
FROM aa
WHERE aa.使用性质 IN ('家庭自用车',
'企业客车')
AND aa.高预赔 IS NULL
AND aa.管控类型 IS NULL
AND aa.保单类型 IN '交商共保', '单交强'
AND aa.到期时间 >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.到期时间 < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.责任部门,
aa.科室,
aa.经办,
aa.坐席团队,
aa.坐席名称,
aa.坐席工号)
SELECT dqs.部门,
dqs.科室,
dqs.经办,
dqs.坐席团队,
dqs.坐席名称,
dqs.坐席工号,
yxb.已续保累计,
dqs.到期数
FROM yxb,
dqs --,sdqs,syxs,cyxs,cdqs
WHERE dqs.部门 = yxb.部门
AND dqs.经办 = yxb.经办
AND dqs.科室 = yxb.科室
AND dqs.坐席名称 = yxb.坐席名称
AND dqs.坐席工号 = yxb.坐席工号;
COMMIT;
END;
PROCEDURE chefei_daily_job IS
BEGIN
车非基础数据(SYSDATE - 3,
SYSDATE);
END;
PROCEDURE xubao_daily_job IS
BEGIN
续保基本数据;
END;
BEGIN
NULL;
END telsale_pkg;
/

View File

@@ -0,0 +1,918 @@
CREATE OR REPLACE PACKAGE telsale_pkg IS
-- Author : WANGWEI-202
-- Created : 2023/3/10 15:13:34
-- Purpose : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD>
PROCEDURE <20><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(
a_start_date IN DATE,
a_end_date IN DATE
);
PROCEDURE gen_<6E><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
(
a_start_date IN DATE,
a_end_date IN DATE
);
PROCEDURE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
PROCEDURE chefei_daily_job;
PROCEDURE xubao_daily_job;
END telsale_pkg;
/
CREATE OR REPLACE PACKAGE BODY telsale_pkg IS
PROCEDURE <20><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(
a_start_date IN DATE,
a_end_date IN DATE
) IS
--l_count INTEGER; --<2D><><EFBFBD>м<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BEGIN
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
gen_<6E><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>(a_start_date,
a_end_date);
FOR caller_record IN (SELECT *
FROM desktop_archievement_admin.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>_t)
LOOP
BEGIN
DELETE desktop_archievement_admin.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf
WHERE cf.ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = caller_record.ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AND cf.<2E><><EFBFBD><EFBFBD> = caller_record.<2E><><EFBFBD><EFBFBD>
AND cf.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n = caller_record.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n
AND cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = caller_record.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line(caller_record.ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> || '<27><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>');
END;
INSERT INTO desktop_archievement_admin.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>
VALUES caller_record;
END LOOP;
COMMIT;
/*EXCEPTION
WHEN OTHERS THEN
NULL;*/
END;
/**********************************************************************/
PROCEDURE gen_<6E><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
(
a_start_date IN DATE,
a_end_date IN DATE
) IS
BEGIN
desktop_archievement_admin.clean_temp_data;
INSERT INTO desktop_archievement_admin.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>_t
WITH aa AS
(SELECT to_char(t.signature_date,
'yyyy-mm-dd') ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(to_char(T.signature_date,
'yyyy')) the_year,
(to_char(T.signature_date,
'mm')) the_month,
t.policy_no bdh,
t.endorsement_no pdh,
qt.t_cre tid,
QT.B_CRE BTID, -----<2D><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
e.inception_date qbsj,
e.planned_end_date zzsj,
pt.premium_amount - nvl(pt.tax_amount,
0) bf
--,qt.qdbf - nvl(qt.qdbf_tax_amount,0) bf
,
nt.ecompensation_rate * (pt.premium_amount - nvl(pt.tax_amount,
0)) fxbf,
z.department_name bm,
z.department_code bmdm,
CASE
WHEN (et.telpartnercode LIKE '%HC%' OR
zx.workerno IN (SELECT code
FROM datacenter.dc_lsj_zx_hc)) THEN
'<27><><EFBFBD>׷ῥ'
ELSE
''
END <20>Ƿ<EFBFBD><C7B7>ῥ,
nvl(zx.workerno,
et.telpartnercode) <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
(CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<27><>ΰ<EFBFBD><CEB0>'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<27><><EFBFBD><EFBFBD>'
ELSE
to_char(ys.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>)
END) <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
YS.<2E>Ŷ<EFBFBD> <20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
nvl(YS.<2E>Ŷ<EFBFBD>,
y.section_office_name) <20><><EFBFBD><EFBFBD>N,
nvl((CASE
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name LIKE '%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<27><>ΰ<EFBFBD><CEB0>'
WHEN nvl(zx.workerno,
et.telpartnercode) = 'DX001' AND
xx.staff_name NOT LIKE '%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<27><><EFBFBD><EFBFBD>'
ELSE
to_char(ys.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>)
END),
xx.staff_name) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no
LEFT JOIN idst0.motorised_vehicle_t v
ON v.policy_no = e.policy_no
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = t.policy_no
AND pt.endorsement_no = t.endorsement_no
LEFT JOIN ywglxt.w_dxbd_i i
ON e.policy_no = i.bdh
LEFT JOIN idst0.rydm_t xx
ON xx.staff_code = nvl(i.zhjywy,
e.operator_code)
LEFT JOIN idst0.ks_t y
ON y.section_office_code = nvl(xx.section_office_code,
e.section_office_code)
LEFT JOIN idst0.bm_t z
ON z.department_code = nvl(xx.department_code,
e.department_code)
--left join datacenter.dc_cx_csteam ct on ct.jbrcode = xx.staff_code
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = t.policy_no
AND nt.endorsement_no = t.endorsement_no
--left join ywglxt.q_auto_agreement_extend_t qe on qe.policy_no = e.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qt
ON qt.policy_no = e.policy_no
LEFT JOIN datacenter.dc_yangg_qdcode qd
ON qd.code = e.selling_channel_type
LEFT JOIN datacenter.dc_tb_jc_c_tag cl
ON cl.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = e.policy_no
LEFT JOIN datacenter.dc_yangg_basecode_teams fg
ON fg.bm = z.department_name
AND fg.ks = y.section_office_name
--left join idst0.t_sell_policy_autobase_t zx on zx.policy_no=e.policy_no
--left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
LEFT JOIN idst0.auto_agreement_extend_t et
ON et.policy_no = e.policy_no
LEFT JOIN idst0.t_sell_policy_autobase_t zx
ON zx.policy_no = e.policy_no
LEFT JOIN datacenter.dc_YZH_ZXYS YS
ON YS.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = nvl(zx.workerno,
et.telpartnercode)
--left join v_lsj_dimian dm on dm.vin=v.vin and e.selling_channel_type='25' and dm.MEMO like'%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%'
--left join datacenter.dc_lsj_zx_team zt on zt.name=coalesce(zc.name,zc1.name,bc.name,dm.JBRMC)
WHERE t.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND t.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
--and t.endorsement_no = '<27><>'
AND e.policy_status = '1' --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
AND qt.tflag = '0' --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
AND qt.usage_xm = '<27><>ͥ<EFBFBD><CDA5><EFBFBD>ó<EFBFBD>'
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B3B5>Ħ<EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
--and e.policy_no in ('AXIMC90Y1419B038594J','AXIMC90CTP19B039593R','AXIMC04CTP19B013473X')
AND e.planned_end_date - e.inception_date >= 360
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
)
-----<2D><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
,
dd2 AS
(SELECT ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
the_year,
the_month,
bm,
bmdm,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
<20><><EFBFBD><EFBFBD>N,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N,
CASE
WHEN pdh = '<27><>' THEN
tid
END tid,
to_number('1') <20>ͻ<EFBFBD><CDBB><EFBFBD>,
COUNT(DISTINCT CASE
WHEN pdh = '<27><>' THEN
bdh
END) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
SUM(bf) <20><><EFBFBD><EFBFBD>
FROM (SELECT DISTINCT *
FROM aa) aa
GROUP BY bm,
bmdm,
CASE
WHEN pdh = '<27><>' THEN
tid
END,
the_year,
the_month,
BTID,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<20><><EFBFBD><EFBFBD>N,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N
UNION
SELECT ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
the_year,
the_month,
bm,
bmdm,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
<20><><EFBFBD><EFBFBD>N,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N,
CASE
WHEN btid = tid THEN
''
ELSE
btid
END btid,
to_number('0') <20>ͻ<EFBFBD><CDBB><EFBFBD>,
to_number('0') <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
to_number('0') <20><><EFBFBD><EFBFBD>
FROM (SELECT DISTINCT *
FROM aa) aa),
DD AS
(SELECT *
FROM DD2
WHERE TID IS NOT NULL)
--select * from dd
,
bb AS
(SELECT DISTINCT q.policy_no bdh,
q.endorsement_no pdh,
qna.t_cre tid,
to_number(to_char(q.signature_date,
'yyyy')) || '<27><>' nf,
(to_char(q.signature_date,
'mm')) mm_f,
to_char(q.signature_date,
'dd') || '<27><>' dd,
q.signature_date sj,
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) bf,
z.department_name bm
FROM idst0.nonauto_agreement_request_t q
LEFT JOIN idst0.nonauto_agreement_t e
ON e.policy_no = q.policy_no
LEFT JOIN idst0.nonauto_premium_t pt
ON pt.endorsement_no = q.endorsement_no
AND pt.policy_no = q.policy_no
LEFT JOIN idst0.reinsurance_t r
ON r.reinsurance_policy_no = e.policy_no
LEFT JOIN idst0.exrate_month_t c
ON pt.currency_code = c.bzh
AND to_char(q.signature_date,
'YYYY') = c.theyear
AND to_char(q.signature_date,
'fmmm') = c.themonth
LEFT JOIN idst0.rydm_t x
ON x.staff_code = e.operator_code
LEFT JOIN idst0.ks_t y
ON y.section_office_code = x.section_office_code
LEFT JOIN idst0.bm_t z
ON z.department_code = x.department_code
LEFT JOIN ywglxt.q_nonauto_agreement_t qna
ON qna.policy_no = q.policy_no
LEFT JOIN datacenter.dc_yangg_gkxzh gk
ON gk.product_code = e.product_code --<2D><>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
--left join datacenter.dc_yangg_zbxzh zb on zb.product_code = e.product_code --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LEFT JOIN dd
ON dd.tid = qna.t_cre
WHERE qna.tflag = '0'
AND (CASE
WHEN q.endorsement_no != '<27><>' AND
round((pt.premium_amount - nvl(pt.taxamount,
0)) * c.rate / 100,
2) != 0 THEN
'<27><>'
END) IS NULL
--and q.endorsement_no = '<27><>'
AND e.policy_status = '1'
AND gk.product_code IS NOT NULL
AND (e.product_code LIKE '2%' OR e.product_code LIKE '1106%' --<2D>⽡ --<2D><><EFBFBD><EFBFBD>
OR e.product_code LIKE '1107%' OR e.product_code LIKE '1108%' OR e.product_code LIKE '1307%' OR e.product_code LIKE '1304A400%' --<2D>Ҳ<EFBFBD>
)
--and e.product_code not in ('22KC9800')
AND q.signature_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND q.signature_date < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND e.planned_end_date - e.inception_date >= 90
AND dd.tid IS NOT NULL
--<2D><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF>)
)
--SELECT * FROM BB
,
cc AS
(SELECT mm_f,
tid <20>ں<EFBFBD>֤<EFBFBD><D6A4>,
COUNT(DISTINCT bdh) <20>ںϱ<DABA><CFB1><EFBFBD>,
SUM(bf) <20>ںϱ<DABA><CFB1><EFBFBD>
FROM bb
GROUP BY tid,
mm_f),
ff AS
(SELECT dd.*,
cc.*
FROM dd
LEFT JOIN cc
ON cc.<2E>ں<EFBFBD>֤<EFBFBD><D6A4> = dd.tid
AND cc.mm_f = dd.the_month) --OR cc.<2E>ں<EFBFBD>֤<EFBFBD><D6A4> = dd.btid
--select * from ff
SELECT to_date(ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
'yyyy-mm-dd') ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
the_year <20><><EFBFBD><EFBFBD>,
the_month <20>·<EFBFBD>,
bm <20><><EFBFBD><EFBFBD>,
bmdm <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD>,
<20><><EFBFBD><EFBFBD>N,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
nvl(SUM(<28><><EFBFBD><EFBFBD>),
0) <20><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>,
nvl(SUM(<28>ںϱ<DABA><CFB1><EFBFBD>),
0) <20><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>
FROM ff
WHERE to_date(ff.ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
'yyyy-mm-dd') >= a_start_date
AND to_date(ff.ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
'yyyy-mm-dd') < a_end_date
AND bm IN ('<27><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>',
'<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾')
GROUP BY ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
the_year,
the_month,
bm,
bmdm,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD>Ŷ<EFBFBD>,
<20><><EFBFBD><EFBFBD>N,
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N
ORDER BY <20><><EFBFBD><EFBFBD>,
<20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>;
COMMIT;
END;
/**********************************************************************/
PROCEDURE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IS
BEGIN
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
desktop_archievement_admin.clean_mensual_renewal;
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INSERT INTO desktop_archievement_admin.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>
WITH cc AS
(SELECT pt.policy_no policy_no,
SUM(pt.premium_amount) premium_amount,
SUM(pt.tax_amount) tax_amount
FROM idst0.auto_premium_t pt
GROUP BY pt.policy_no)
,
bb AS
(SELECT t.policy_no <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE
WHEN e.product_code LIKE '1102%' AND
e.product_code NOT LIKE '110224%' AND
e.product_code != '11026000' THEN
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>'
WHEN e.product_code LIKE '1101%' OR
e.product_code LIKE '1301%' OR
e.product_code LIKE '11110000%' THEN
'<27>Ʋ<EFBFBD><C6B2><EFBFBD>'
WHEN e.product_code LIKE '1107%' OR
e.product_code LIKE '1307%' OR
e.product_code LIKE '1304A400%' THEN
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1106%' OR
e.product_code LIKE '51015700' THEN
'<27>Ҳ<EFBFBD><D2B2><EFBFBD>'
WHEN (e.product_code LIKE '1104%' OR e.product_code LIKE '1204%' OR e.product_code LIKE '13040000%') AND
e.product_code NOT LIKE '120404%' THEN
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1203%' OR
e.product_code LIKE '1103%' OR
e.product_code LIKE '120404%' THEN
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1305%' THEN
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '111%' AND
e.product_code NOT LIKE '11110000%' THEN
'ũҵ<C5A9><D2B5>'
WHEN e.product_code LIKE '1109%' OR
e.product_code LIKE '1309%' THEN
'<27><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1312%' THEN
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1308%' THEN
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '23%' THEN
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '22%' THEN
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '110224%' OR
e.product_code = '11026000' THEN
'<27><>ǿ<EFBFBD><C7BF>'
ELSE
<><CEB4><EFBFBD><EFBFBD>'
END) AS <20><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no)
,
aa1 AS
(SELECT a.policy_no <20>ɱ<EFBFBD><C9B1><EFBFBD>,
a.selling_shop_code <20><><EFBFBD>̴<EFBFBD><CCB4><EFBFBD>,
a.planned_end_date <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<27><><EFBFBD><EFBFBD>רҵ<D7A8><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'<27><><EFBFBD><EFBFBD>רҵ<D7A8><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>'
ELSE
nvl(dt.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
z.section_office_name)
END <20><><EFBFBD><EFBFBD>,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.<2E><><EFBFBD><EFBFBD>,
y.department_name) NOT LIKE '<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾' and<6E><64>cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' OR
cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' <20><>and v.vehicle_brand IN ('<27><>˹<EFBFBD><CBB9>',
<><CEB5>',
'<27><><EFBFBD><EFBFBD>',
'С<><D0A1>',
'<27><><EFBFBD><EFBFBD>',
'<27><><EFBFBD><EFBFBD>',
'AITO',
'ARCFOX<4F><58><EFBFBD><EFBFBD>',
'<27><>˹<EFBFBD><CBB9><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>',
'<27><>˹<EFBFBD><CBB9>(<28>й<EFBFBD>)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'<27><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD>'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾'
ELSE
nvl(dt.<2E><><EFBFBD><EFBFBD>,
y.department_name)
END) = '<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾'
ELSE
nvl(dt.<2E><><EFBFBD><EFBFBD>,
y.department_name)
END)
WHEN <20><>cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' OR
cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' <20><> THEN
'<27><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
<><CDAC>֧<EFBFBD><D6A7>˾'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾'
ELSE
nvl(dt.<2E><><EFBFBD><EFBFBD>,
y.department_name)
END)
END) <20><><EFBFBD>β<EFBFBD><CEB2><EFBFBD>,
qa.USAGE_XM ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
decode(qa.bd_type,
'1',
'<27><><EFBFBD><EFBFBD>ǿ',
'2',
'<27><><EFBFBD><EFBFBD>ҵ',
'3',
'<27><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>',
'<27><><EFBFBD><EFBFBD>') <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
'<27><>'
END) <20><>Ԥ<EFBFBD><D4A4>,
x.staff_name AS <20><><EFBFBD><EFBFBD>,
bb.<2E><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>,
cc.signature_date <20>±<EFBFBD><C2B1><EFBFBD>ǩ<EFBFBD><C7A9>ʱ<EFBFBD><CAB1>,
(SELECT hmd.<2E>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD>
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin) <20>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD>
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = '<27><>'
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.<2E><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = '<27><>'
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = '<27><>'
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc.<2E><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD> = bb.<2E><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>)
AND cc.inception_date > a.planned_end_date - 30 --ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD>Ʒſ<C6B7>Ϊ30<33><30>
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')),
aa2 AS
(SELECT a.policy_no <20>ɱ<EFBFBD><C9B1><EFBFBD>,
a.selling_shop_code <20><><EFBFBD>̴<EFBFBD><CCB4><EFBFBD>,
a.planned_end_date <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<27><><EFBFBD><EFBFBD>רҵ<D7A8><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'<27><><EFBFBD><EFBFBD>רҵ<D7A8><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>'
ELSE
nvl(dt.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
z.section_office_name)
END <20><><EFBFBD><EFBFBD>,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.<2E><><EFBFBD><EFBFBD>,
y.department_name) NOT LIKE '<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾' and<6E><64>cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' OR
cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' <20><>and v.vehicle_brand IN ('<27><>˹<EFBFBD><CBB9>',
<><CEB5>',
'<27><><EFBFBD><EFBFBD>',
'С<><D0A1>',
'<27><><EFBFBD><EFBFBD>',
'<27><><EFBFBD><EFBFBD>',
'AITO',
'ARCFOX<4F><58><EFBFBD><EFBFBD>',
'<27><>˹<EFBFBD><CBB9><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>',
'<27><>˹<EFBFBD><CBB9>(<28>й<EFBFBD>)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'<27><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD>'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾'
ELSE
nvl(dt.<2E><><EFBFBD><EFBFBD>,
y.department_name)
END) = '<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾'
ELSE
nvl(dt.<2E><><EFBFBD><EFBFBD>,
y.department_name)
END)
WHEN <20><>cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' OR
cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' <20><> THEN
'<27><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
<><CDAC>֧<EFBFBD><D6A7>˾'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<27><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>˾'
ELSE
nvl(dt.<2E><><EFBFBD><EFBFBD>,
y.department_name)
END)
END) <20><><EFBFBD>β<EFBFBD><CEB2><EFBFBD>,
qa.USAGE_XM ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
decode(qa.bd_type,
'1',
'<27><><EFBFBD><EFBFBD>ǿ',
'2',
'<27><><EFBFBD><EFBFBD>ҵ',
'3',
'<27><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>',
'<27><><EFBFBD><EFBFBD>') <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
'<27><>'
END) <20><>Ԥ<EFBFBD><D4A4>,
x.staff_name AS <20><><EFBFBD><EFBFBD>,
bb.<2E><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>,
cc.signature_date <20>±<EFBFBD><C2B1><EFBFBD>ǩ<EFBFBD><C7A9>ʱ<EFBFBD><CAB1>,
(SELECT hmd.<2E>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD>
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin) <20>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD>
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = '<27><>'
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.<2E><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = '<27><>'
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = '<27><>'
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc.<2E><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD> = bb.<2E><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>)
AND cc.inception_date > a.planned_end_date - 30 --ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD>Ʒſ<C6B7>Ϊ30<33><30>
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2024-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss'))
,
aa3 AS
(SELECT DISTINCT *
FROM aa1
UNION ALL (SELECT DISTINCT *
FROM aa2))
,
AA AS
(SELECT AA3.*,
nvl<76><6C>zx.workerno,
et.telpartnercode) <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
(CASE WHEN nvl<76><6C>zx.workerno,
et.telpartnercode) =
'DX001' AND aa3.<2E><><EFBFBD><EFBFBD> LIKE
'%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<27><>ΰ<EFBFBD><CEB0>' WHEN nvl<76><6C>zx.workerno,
et.telpartnercode) =
'DX001' AND aa3.<2E><><EFBFBD><EFBFBD> NOT LIKE
'%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<27><><EFBFBD><EFBFBD>' ELSE to_char
(ys.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>) END) <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
YS.<2E>Ŷ<EFBFBD> <20><>ϯ<EFBFBD>Ŷ<EFBFBD> FROM AA3 LEFT JOIN idst0.auto_agreement_extend_t et ON et.policy_no = AA3.<2E>ɱ<EFBFBD><C9B1><EFBFBD> LEFT JOIN idst0.t_sell_policy_autobase_t zx ON zx.policy_no = AA3.<2E>ɱ<EFBFBD><C9B1><EFBFBD> LEFT JOIN dc_YZH_ZXYS YS ON YS.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = nvl<76><6C>zx.workerno,
et.telpartnercode))
,
yxb AS
(
---<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT aa.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD> <20><><EFBFBD><EFBFBD>,
aa.<2E><><EFBFBD><EFBFBD>,
aa.<2E><><EFBFBD><EFBFBD>,
aa.<2E><>ϯ<EFBFBD>Ŷ<EFBFBD>,
aa.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
aa.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
--(case when a.<2E><>ʶ='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'and A.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD>='<27><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>' then '<27><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>' else A.<2E><><EFBFBD><EFBFBD> end) <20><><EFBFBD><EFBFBD>,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>
FROM aa
WHERE aa.ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IN ('<27><>ͥ<EFBFBD><CDA5><EFBFBD>ó<EFBFBD>',
'<27><>ҵ<EFBFBD>ͳ<EFBFBD>')
AND aa.<2E><>Ԥ<EFBFBD><D4A4> IS NULL
AND aa.<2E>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD> IS NULL
AND aa.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IN <20><> '<27><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>', '<27><><EFBFBD><EFBFBD>ǿ' <20><>
AND aa.<2E><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.<2E><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND aa.<2E>±<EFBFBD><C2B1><EFBFBD>ǩ<EFBFBD><C7A9>ʱ<EFBFBD><CAB1> <= to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD>,
aa.<2E><><EFBFBD><EFBFBD>,
aa.<2E><><EFBFBD><EFBFBD>,
aa.<2E><>ϯ<EFBFBD>Ŷ<EFBFBD>,
aa.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
aa.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>)
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D>ۼ<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D>ۼ<EFBFBD>
,
dqs AS
(
---<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT aa.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD> <20><><EFBFBD><EFBFBD>,
aa.<2E><><EFBFBD><EFBFBD>,
aa.<2E><><EFBFBD><EFBFBD>,
aa.<2E><>ϯ<EFBFBD>Ŷ<EFBFBD>,
aa.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
aa.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM aa
WHERE aa.ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IN ('<27><>ͥ<EFBFBD><CDA5><EFBFBD>ó<EFBFBD>',
'<27><>ҵ<EFBFBD>ͳ<EFBFBD>')
AND aa.<2E><>Ԥ<EFBFBD><D4A4> IS NULL
AND aa.<2E>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD> IS NULL
AND aa.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IN <20><> '<27><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>', '<27><><EFBFBD><EFBFBD>ǿ' <20><>
AND aa.<2E><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.<2E><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD>,
aa.<2E><><EFBFBD><EFBFBD>,
aa.<2E><><EFBFBD><EFBFBD>,
aa.<2E><>ϯ<EFBFBD>Ŷ<EFBFBD>,
aa.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
aa.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>)
SELECT dqs.<2E><><EFBFBD><EFBFBD>,
dqs.<2E><><EFBFBD><EFBFBD>,
dqs.<2E><><EFBFBD><EFBFBD>,
dqs.<2E><>ϯ<EFBFBD>Ŷ<EFBFBD>,
dqs.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
dqs.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>,
yxb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>,
dqs.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM yxb,
dqs --,sdqs,syxs,cyxs,cdqs
WHERE dqs.<2E><><EFBFBD><EFBFBD> = yxb.<2E><><EFBFBD><EFBFBD>
AND dqs.<2E><><EFBFBD><EFBFBD> = yxb.<2E><><EFBFBD><EFBFBD>
AND dqs.<2E><><EFBFBD><EFBFBD> = yxb.<2E><><EFBFBD><EFBFBD>
AND dqs.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = yxb.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>
AND dqs.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = yxb.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>;
COMMIT;
END;
PROCEDURE chefei_daily_job IS
BEGIN
<20><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(SYSDATE - 3,
SYSDATE);
END;
PROCEDURE xubao_daily_job IS
BEGIN
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
END;
BEGIN
NULL;
END telsale_pkg;
/

View File

@@ -8,9 +8,70 @@ SELECT b.reward_name,
reward_projects b
WHERE a.reward_index = b.reward_index;
--<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT DISTINCT s.saler_code,
s.saler_name,
t.team_code,
t.team,
bm.department_code,
bm.department_name
FROM tele_saler s,
tele_saler_team t,
idst0.bm_t bm
WHERE s.team_code = t.team_code
AND t.department_code = bm.department_code
AND s.saler_code = '61136';
SELECT *
FROM <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
ORDER BY <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>N,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
FROM tele_saler_team t
WHERE t.team_code = '107077'
SELECT *
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
ORDER BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
SELECT <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD>,
round((SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)) * 100,
0) || '%' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD>
GROUP BY <EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
--<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>
SELECT <EFBFBD>·<EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
SUM(<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>),
round(SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
GROUP BY <EFBFBD>·<EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HAVING <EFBFBD>·<EFBFBD> = '06<EFBFBD><EFBFBD>'
ORDER BY <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD> DESC;
SELECT <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
round(SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
WHERE <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD> = 'QDI'
AND <EFBFBD>·<EFBFBD> = '05'
AND <EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '2023'
GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ORDER BY <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD> DESC;
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
round(nvl(SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
0),
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD> xb
WHERE xb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ORDER BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC;

View File

@@ -0,0 +1,28 @@
drop table <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>;
create table <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
(
ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DATE not null,
<EFBFBD>·<EFBFBD> VARCHAR2(10) not null,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> VARCHAR2(100) not null,
<EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD> varchar2(10) not null,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>n VARCHAR2(100) not null,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n VARCHAR2(100),
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> VARCHAR2(20),
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> VARCHAR2(30),
<EFBFBD><EFBFBD>ϯ<EFBFBD>Ŷ<EFBFBD> VARCHAR2(100),
<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NUMBER(16,2),
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD> NUMBER(16,2)
)
tablespace DESKTOP_ARCHIEVEMENT
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select, insert, delete on <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD> to DATACENTER;

View File

@@ -0,0 +1,18 @@
drop table _T;
create global temporary table _T
(
DATE not null,
VARCHAR2(10) not null,
VARCHAR2(100) not null,
varchar2(100) not null,
n VARCHAR2(100) not null,
n VARCHAR2(100),
VARCHAR2(20),
VARCHAR2(30),
VARCHAR2(100),
NUMBER(16,2),
NUMBER(16,2)
)
on commit preserve rows;
-- Grant/Revoke object privileges
grant select, insert, delete, alter on _T to DATACENTER;

View File

@@ -0,0 +1,512 @@
--execute clean_mensual_renewal;
INSERT INTO desktop_archievement_admin.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD>
WITH cc AS
(SELECT pt.policy_no policy_no,
SUM(pt.premium_amount) premium_amount,
SUM(pt.tax_amount) tax_amount
FROM idst0.auto_premium_t pt
GROUP BY pt.policy_no)
,
bb AS
(SELECT t.policy_no <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE
WHEN e.product_code LIKE '1102%' AND
e.product_code NOT LIKE '110224%' AND
e.product_code != '11026000' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1101%' OR
e.product_code LIKE '1301%' OR
e.product_code LIKE '11110000%' THEN
'<EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1107%' OR
e.product_code LIKE '1307%' OR
e.product_code LIKE '1304A400%' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1106%' OR
e.product_code LIKE '51015700' THEN
'<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>'
WHEN (e.product_code LIKE '1104%' OR e.product_code LIKE '1204%' OR e.product_code LIKE '13040000%') AND
e.product_code NOT LIKE '120404%' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1203%' OR
e.product_code LIKE '1103%' OR
e.product_code LIKE '120404%' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1305%' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '111%' AND
e.product_code NOT LIKE '11110000%' THEN
'ũҵ<EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1109%' OR
e.product_code LIKE '1309%' THEN
'<EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1312%' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '1308%' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '23%' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '22%' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN e.product_code LIKE '110224%' OR
e.product_code = '11026000' THEN
'<EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD>'
ELSE
'δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
END) AS <EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>
FROM idst0.auto_agreement_request_t t
LEFT JOIN idst0.auto_agreement_t e
ON e.policy_no = t.policy_no)
,
aa1 AS
(SELECT a.policy_no <EFBFBD>ɱ<EFBFBD><EFBFBD><EFBFBD>,
a.selling_shop_code <EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD><EFBFBD><EFBFBD>,
a.planned_end_date <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>רҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>רҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>'
ELSE
nvl(dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
z.section_office_name)
END <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
y.department_name) NOT LIKE '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾' and<EFBFBD><EFBFBD>cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' OR
cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' <EFBFBD><EFBFBD>and v.vehicle_brand IN ('<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD>',
'ε<EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'С<EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'AITO',
'ARCFOX<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD>(<28>й<EFBFBD>)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾'
ELSE
nvl(dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
y.department_name)
END) = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾'
ELSE
nvl(dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
y.department_name)
END)
WHEN <EFBFBD><EFBFBD>cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' OR
cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' <EFBFBD><EFBFBD> THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'ͬ<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾'
ELSE
nvl(dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
y.department_name)
END)
END) <EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD>,
qa.USAGE_XM ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
decode(qa.bd_type,
'1',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ',
'2',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ',
'3',
'<EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>') <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
'<EFBFBD><EFBFBD>'
END) <EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>,
x.staff_name AS <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
bb.<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>,
cc.signature_date <EFBFBD>±<EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>,
(SELECT hmd.<EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin) <EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = '<EFBFBD><EFBFBD>'
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = '<EFBFBD><EFBFBD>'
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = '<EFBFBD><EFBFBD>'
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc.<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD> = bb.<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>)
AND cc.inception_date > a.planned_end_date - 30 --ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒſ<EFBFBD>Ϊ30<EFBFBD><EFBFBD>
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')),
aa2 AS
(SELECT a.policy_no <EFBFBD>ɱ<EFBFBD><EFBFBD><EFBFBD>,
a.selling_shop_code <EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD><EFBFBD><EFBFBD>,
a.planned_end_date <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>,
CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>רҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>רҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>'
ELSE
nvl(dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
z.section_office_name)
END <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2023' AND
nvl(dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
y.department_name) NOT LIKE '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾' and<EFBFBD><EFBFBD>cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' OR
cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' <EFBFBD><EFBFBD>and v.vehicle_brand IN ('<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD>',
'ε<EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'С<EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'AITO',
'ARCFOX<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD>(<28>й<EFBFBD>)') AND
v.vin NOT IN ('LJ1E6A2UXL7744108',
'LW433B10XL1001411',
'LJ1E6A3U2L7742089',
'L1NSPGHB0MA002652') THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN (CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾'
ELSE
nvl(dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
y.department_name)
END) = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾' THEN
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾'
ELSE
nvl(dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
y.department_name)
END)
WHEN <EFBFBD><EFBFBD>cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' OR
cd.memo LIKE '%<25><><EFBFBD><EFBFBD>%' <EFBFBD><EFBFBD> THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WHEN a.planned_end_date > to_date('2023-04-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') AND
(a.selling_shop_code || a.tel_sale_4s_code IN ('00EA',
'00F1',
'00G9')) THEN
'ͬ<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾'
ELSE
(CASE
WHEN to_number(to_char(a.planned_end_date,
'yyyy')) = '2022' AND
a.selling_shop_code || a.tel_sale_4s_code = '00GK' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾'
ELSE
nvl(dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
y.department_name)
END)
END) <EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD>,
qa.USAGE_XM ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
decode(qa.bd_type,
'1',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ',
'2',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ',
'3',
'<EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>') <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE
WHEN (qa.bd_type = '1' AND nt.ecompensation_rate > 1) THEN
'<EFBFBD><EFBFBD>'
END) <EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>,
x.staff_name AS <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
bb.<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>,
cc.signature_date <EFBFBD>±<EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>,
(SELECT hmd.<EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM (SELECT DISTINCT *
FROM dc_lsj_xb_hmd) hmd
WHERE hmd.vin = v.vin) <EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM idst0.auto_agreement_t a
LEFT JOIN bb
ON bb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = a.policy_no
LEFT JOIN ywglxt.w_dxbd_i i
ON a.policy_no = i.bdh
LEFT JOIN idst0.motorised_vehicle_t v
ON a.policy_no = v.policy_no
LEFT JOIN ywglxt.q_auto_agreement_t qa
ON qa.policy_no = a.policy_no
LEFT JOIN idst0.auto_new_product_info_t nt
ON nt.policy_no = a.policy_no
AND nt.endorsement_no = '<EFBFBD><EFBFBD>'
LEFT JOIN idst0.rydm_t x
ON x.staff_code = nvl(upper(i.zhjywy),
a.operator_code)
LEFT JOIN idst0.bm_t y
ON x.department_code = y.department_code
LEFT JOIN idst0.ks_t z
ON x.section_office_code = z.section_office_code
LEFT JOIN cc pt
ON pt.policy_no = a.policy_no
LEFT JOIN (SELECT DISTINCT aa.policy_no,
vv.vin,
aa.inception_date,
t.signature_date,
(pt.premium_amount - nvl(pt.tax_amount,
0)) qdbf,
(CASE
WHEN aa.inception_date - aa.issue_date >= '30' THEN
vv.vin
END) if30,
bb.<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>
FROM idst0.auto_agreement_t aa
LEFT JOIN bb
ON bb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = aa.policy_no
LEFT JOIN idst0.motorised_vehicle_t vv
ON vv.policy_no = aa.policy_no
LEFT JOIN idst0.auto_agreement_request_t t
ON t.policy_no = aa.policy_no
AND t.endorsement_no = '<EFBFBD><EFBFBD>'
LEFT JOIN idst0.auto_premium_t pt
ON pt.policy_no = aa.policy_no
AND pt.endorsement_no = '<EFBFBD><EFBFBD>'
WHERE aa.policy_no = vv.policy_no
AND aa.policy_status = '1' --and aa.product_code not in ('11022400','11023900','11024000','11024600','11026000')
AND aa.branch_company_code = '3080100'
AND (pt.premium_amount - nvl(pt.tax_amount,
0)) > 100
AND aa.inception_date >= to_date('2022-12-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.inception_date < to_date('2023-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.branch_company_code = vv.branch_company_code) cc
ON (cc.vin = v.vin AND cc.<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD> = bb.<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>)
AND cc.inception_date > a.planned_end_date - 30 --ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒſ<EFBFBD>Ϊ30<EFBFBD><EFBFBD>
LEFT JOIN dc_yangg_cx_dianxiaodoudi cd
ON cd.policy_no = a.policy_no
LEFT JOIN dc_tb_jc_c_tag dt
ON dt.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = a.policy_no
LEFT JOIN idst0.auto_agreement_t aa
ON aa.policy_no = cc.policy_no
LEFT JOIN cc pt1
ON pt1.policy_no = aa.policy_no
WHERE a.policy_status = '1'
AND a.planned_end_date - a.inception_date > 270
AND a.planned_end_date >= to_date('2023-10-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND a.planned_end_date < to_date('2024-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss'))
,
aa3 AS
(SELECT DISTINCT *
FROM aa1
UNION ALL (SELECT DISTINCT *
FROM aa2))
,
AA AS
(SELECT AA3.*,
nvl<EFBFBD><EFBFBD>zx.workerno,
et.telpartnercode) <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE WHEN nvl<EFBFBD><EFBFBD>zx.workerno,
et.telpartnercode) =
'DX001' AND aa3.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> LIKE
'%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<EFBFBD><EFBFBD>ΰ<EFBFBD><EFBFBD>' WHEN nvl<EFBFBD><EFBFBD>zx.workerno,
et.telpartnercode) =
'DX001' AND aa3.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> NOT LIKE
'%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%' THEN
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>' ELSE to_char
(ys.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>) END) <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
YS.<EFBFBD>Ŷ<EFBFBD> <EFBFBD><EFBFBD>ϯ<EFBFBD>Ŷ<EFBFBD> FROM AA3 LEFT JOIN idst0.auto_agreement_extend_t et ON et.policy_no = AA3.<EFBFBD>ɱ<EFBFBD><EFBFBD><EFBFBD> LEFT JOIN idst0.t_sell_policy_autobase_t zx ON zx.policy_no = AA3.<EFBFBD>ɱ<EFBFBD><EFBFBD><EFBFBD> LEFT JOIN dc_YZH_ZXYS YS ON YS.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = nvl<EFBFBD><EFBFBD>zx.workerno,
et.telpartnercode))
,
yxb AS
(
---<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT aa.<EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD>Ŷ<EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
--(case when a.<EFBFBD><EFBFBD>ʶ='<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'and A.<EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD>='<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>' then '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>' else A.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> end) <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>
FROM aa
WHERE aa.ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IN ('<EFBFBD><EFBFBD>ͥ<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>',
'<EFBFBD><EFBFBD>ҵ<EFBFBD>ͳ<EFBFBD>')
AND aa.<EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD> IS NULL
AND aa.<EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IS NULL
AND aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IN <EFBFBD><EFBFBD> '<EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><EFBFBD><EFBFBD>', '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ' <EFBFBD><EFBFBD>
AND aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
AND aa.<EFBFBD>±<EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> <= to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.<EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD>Ŷ<EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD>ۼ<EFBFBD>/<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD>ۼ<EFBFBD>
,
dqs AS
(
---<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT aa.<EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD>Ŷ<EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(CASE
WHEN COUNT(1) IS NULL THEN
0
ELSE
COUNT(1)
END) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM aa
WHERE aa.ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IN ('<EFBFBD><EFBFBD>ͥ<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>',
'<EFBFBD><EFBFBD>ҵ<EFBFBD>ͳ<EFBFBD>')
AND aa.<EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD> IS NULL
AND aa.<EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IS NULL
AND aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IN <EFBFBD><EFBFBD> '<EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><EFBFBD><EFBFBD>', '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ' <EFBFBD><EFBFBD>
AND aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> >= to_date(to_char(SYSDATE,
'yyyy-mm') || '-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss')
AND aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> < to_date(to_char(SYSDATE - 1,
'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss')
GROUP BY aa.<EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD>Ŷ<EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
aa.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
SELECT dqs.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
dqs.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
dqs.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
dqs.<EFBFBD><EFBFBD>ϯ<EFBFBD>Ŷ<EFBFBD>,
dqs.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
dqs.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
yxb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>,
dqs.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM yxb,
dqs --,sdqs,syxs,cyxs,cdqs
WHERE dqs.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = yxb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AND dqs.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = yxb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AND dqs.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = yxb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AND dqs.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = yxb.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AND dqs.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = yxb.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
COMMIT;

View File

@@ -1,9 +1,11 @@
--INSERT INTO desktop_archievement_admin.<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
WITH aa AS
(SELECT to_char(t.signature_date,
'yyyy-mm-dd') ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
(to_char(T.signature_date,
'mm')) || '<EFBFBD><EFBFBD>' mm,
'yyyy')) the_year,
(to_char(T.signature_date,
'mm')) the_month,
t.policy_no bdh,
t.endorsement_no pdh,
qt.t_cre tid,
@@ -17,6 +19,7 @@ WITH aa AS
nt.ecompensation_rate * (pt.premium_amount - nvl(pt.tax_amount,
0)) fxbf,
z.department_name bm,
z.department_code bmdm,
CASE
WHEN (et.telpartnercode LIKE '%HC%' OR zx.workerno IN (SELECT code
FROM datacenter.dc_lsj_zx_hc)) THEN
@@ -116,8 +119,10 @@ WITH aa AS
,
dd2 AS
(SELECT ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
mm,
the_year,
the_month,
bm,
bmdm,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD>Ŷ<EFBFBD>,
@@ -136,11 +141,13 @@ dd2 AS
FROM (SELECT DISTINCT *
FROM aa) aa
GROUP BY bm,
bmdm,
CASE
WHEN pdh = '<EFBFBD><EFBFBD>' THEN
tid
END,
mm,
the_year,
the_month,
BTID,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
@@ -150,8 +157,10 @@ dd2 AS
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N
UNION
SELECT ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
mm,
the_year,
the_month,
bm,
bmdm,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD>Ŷ<EFBFBD>,
@@ -181,7 +190,7 @@ bb AS
to_number(to_char(q.signature_date,
'yyyy')) || '<EFBFBD><EFBFBD>' nf,
(to_char(q.signature_date,
'mm')) || '<EFBFBD><EFBFBD>' mm_f,
'mm')) mm_f,
to_char(q.signature_date,
'dd') || '<EFBFBD><EFBFBD>' dd,
q.signature_date sj,
@@ -258,11 +267,14 @@ ff AS
FROM dd
LEFT JOIN cc
ON cc.<EFBFBD>ں<EFBFBD>֤<EFBFBD><EFBFBD> = dd.tid
AND cc.mm_f = dd.mm) --OR cc.<EFBFBD>ں<EFBFBD>֤<EFBFBD><EFBFBD> = dd.btid
AND cc.mm_f = dd.the_month) --OR cc.<EFBFBD>ں<EFBFBD>֤<EFBFBD><EFBFBD> = dd.btid
--select * from ff
SELECT ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
--mm,
SELECT to_date(ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
'yyyy-mm-dd') ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
the_year <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
the_month <EFBFBD>·<EFBFBD>,
bm <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
bmdm <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>N,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
@@ -273,16 +285,26 @@ SELECT ǩ
nvl(SUM(<EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>),
0) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>
FROM ff
WHERE ff.ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '2023-03-09'
WHERE to_date(ff.ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
'yyyy-mm-dd') >= DATE '2023-06-01'
AND to_date(ff.ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
'yyyy-mm-dd') < DATE '2023-07-01'
AND bm IN ('<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>˾')
GROUP BY ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
mm,
the_year,
the_month,
bm,
bmdm,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD>Ŷ<EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>N,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N
ORDER BY <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
/*
SELECT *
FROM desktop_archievement_admin.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>;
*/

View File

@@ -22,6 +22,7 @@ module.exports = {
extends:["eslint:recommended",],
rules:{
indent: ["warn", 4,],
// 圆括号中的空格,为空不加空格,紧跟花括号、方括号、圆括号时也不加入空格
"space-in-parens": ["error", "always", { exceptions: ["{}", "[]", "()", "empty",], },],
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
@@ -36,12 +37,16 @@ module.exports = {
functions: "never",
},], // 数组和对象键值对最后一个逗号
"comma-style": ["error", "last",], // 逗号在行位
"array-bracket-spacing": ["error", "never",],
"no-undef-init": "error",
"no-invalid-this": "error",
"no-use-before-define": "error",
"no-shadow-restricted-names": "error", // 禁止对一些关键字或者保留字进行赋值操作比如NaN、Infinity、undefined、eval、arguments等
"comma-spacing": ["error", { before: false, after: true, },],
"array-bracket-spacing": ["error", "never", {
singleValue: false,
objectsInArrays: false,
arraysInArrays: false,
},],
"brace-style": ["error", "allman", { allowSingleLine: true, },],
"prefer-const": "warn",
"space-before-function-paren": ["error", {
@@ -62,24 +67,28 @@ module.exports = {
js: "espree",
"<template>": "espree",
},
// project: "./tsconfig.json",
extraFileExtensions: [".vue",],
},
plugins: ["eslint-plugin-vue",],
extends: [
"plugin:vue/vue3-essential",
"plugin:vue/recommended",
"eslint:recommended",
"standard-with-typescript",
// "standard-with-typescript",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
],
rules: {
indent: ["warn", 4,],
"no-trailing-spaces": ["error", {"ignoreComments": true,},],
// 圆括号中的空格,为空不加空格,紧跟花括号、方括号、圆括号时也不加入空格
"space-in-parens": ["error", "always", { exceptions: ["{}", "[]", "()", "empty",], },],
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-unused-vars": "warn",
semi: ["error", "always",], // 控制行尾部分号
quotes: ["error", "double",],
"semi-spacing": ["error", {"before": false, "after": true,},], // 控制行尾部分号
"quotes": ["error", "double",],
"comma-dangle": ["error", {
arrays: "always",
objects: "always",
@@ -88,12 +97,10 @@ module.exports = {
functions: "never",
},], // 数组和对象键值对最后一个逗号
"comma-style": ["error", "last",], // 逗号在行位
"array-bracket-spacing": ["error", "never",],
"no-undef-init": "error",
"no-invalid-this": "error",
"no-use-before-define": "error",
"no-shadow-restricted-names": "error", // 禁止对一些关键字或者保留字进行赋值操作比如NaN、Infinity、undefined、eval、arguments等
"comma-spacing": ["error", { before: false, after: true, },],
"brace-style": ["error", "allman", { allowSingleLine: true, },],
"prefer-const": "warn",
"space-before-function-paren": ["error", {
@@ -121,6 +128,14 @@ module.exports = {
},], // 数组和对象键值对最后一个逗号
"@typescript-eslint/quotes": ["error", "double",],
"@typescript-eslint/space-before-function-paren": "off",
// 方括号的空格问题
"comma-spacing": ["error", { before: false, after: true, },],
"@typescript-eslint/comma-spacing": ["off", { before: false, after: true, },], // 使用eslint的不用ts的
"array-bracket-spacing": ["error", "never", {
singleValue: false,
objectsInArrays: false,
arraysInArrays: false,
},],
},
},
{
@@ -131,15 +146,18 @@ module.exports = {
},
plugins: ["@typescript-eslint",],
extends: [
"standard-with-typescript",
"eslint:recommended",
"standard-with-typescript",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
],
rules: {
"no-trailing-spaces": ["error", {"ignoreComments": true,},],
// 圆括号中的空格,为空不加空格,紧跟花括号、方括号、圆括号时也不加入空格
"space-in-parens": ["error", "always", { exceptions: ["{}", "[]", "()", "empty",], },],
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/indent": ["error", 4,],
"@typescript-eslint/no-extra-semi": "off",
"@typescript-eslint/no-inferrable-types": "off",
@@ -161,7 +179,13 @@ module.exports = {
allowString: false,
},],
"comma-style": ["error", "last",], // 逗号在行位
"array-bracket-spacing": ["error", "never",],
"comma-spacing": ["error", { before: false, after: true, },],
"@typescript-eslint/comma-spacing": ["off", { before: false, after: true, },], // 使用eslint的不用ts的
"array-bracket-spacing": ["error", "never", {
singleValue: false,
objectsInArrays: false,
arraysInArrays: false,
},],
"no-undef-init": "error",
"no-invalid-this": "error",
"no-use-before-define": "error",
@@ -169,6 +193,7 @@ module.exports = {
"prefer-const": "warn",
"spaced-comment": "error",
"space-before-function-paren": "off",
"semi-spacing": ["error", {"before": false, "after": true,},],
},
},
],

File diff suppressed because it is too large Load Diff

View File

@@ -9,30 +9,32 @@
"preview": "vite preview"
},
"dependencies": {
"@babel/eslint-parser": "^7.21.3",
"@babel/eslint-parser": "^7.22.11",
"@element-plus/icons-vue": "^2.1.0",
"@typescript-eslint/eslint-plugin": "^5.57.0",
"@typescript-eslint/parser": "^5.57.0",
"axios": "^1.3.4",
"@rushstack/eslint-patch": "^1.3.3",
"@vue/eslint-config-typescript": "^11.0.3",
"babel": "^6.23.0",
"echarts": "^5.4.2",
"element-plus": "^2.3.1",
"echarts": "^5.4.3",
"element-plus": "^2.3.12",
"moment": "^2.29.4",
"vue": "^3.2.47",
"vue-router": "^4.1.6",
"sass-loader": "^13.3.2",
"ts-node": "^10.9.1",
"vue": "^3.3.4",
"vue-router": "^4.2.4",
"vuex": "^4.1.0"
},
"devDependencies": {
"@babel/eslint-parser": "^7.21.3",
"@vitejs/plugin-vue": "^4.1.0",
"@babel/eslint-parser": "^7.22.11",
"@typescript-eslint/eslint-plugin": "^6.5.0",
"@vitejs/plugin-vue": "^4.3.3",
"@vue/cli-plugin-eslint": "^5.0.8",
"eslint": "^8.37.0",
"axios": "~1.5.0",
"eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^34.0.1",
"eslint-plugin-vue": "^9.10.0",
"sass": "^1.60.0",
"typescript": "^5.0.3",
"vite": "^4.2.1",
"vue-eslint-parser": "^9.1.1"
"eslint-config-standard-with-typescript": "^39.0.0",
"eslint-plugin-vue": "^9.17.0",
"node-sass": "^9.0.0",
"sass": "^1.66.1",
"style-loader": "^3.3.3",
"vue-eslint-parser": "^9.3.1"
}
}

View File

@@ -2,7 +2,7 @@
* @Author: Kane
* @Date: 2023-02-15 09:25:52
* @LastEditors: Kane
* @LastEditTime: 2023-03-17 14:31:14
* @LastEditTime: 2023-08-25 10:53:30
* @FilePath: /task_schedule/src/App.vue
* @Description:
* 应用的框架
@@ -17,7 +17,7 @@
</template>
<script lang="ts">
import zhCn from "element-plus/lib/locale/lang/zh-cn"; // element-plus语言组件
import zhCn from "element-plus/es/locale/lang/zh-cn"; // element-plus语言组件
export default {
name: "App",

View File

@@ -0,0 +1,56 @@
/*
* @Author: Kane
* @Date: 2023-02-24 09:36:08
* @LastEditors: Kane
* @LastEditTime: 2023-06-15 15:50:00
* @FilePath: /task_schedule/src/assets/css/public/_public.scss
* @Description: 公共变量
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
//背景色
$wrap-bg-color:#fff;
$span-font-color:#5f5f5f;
//阴影
$box-shadow:0px 0px 20px -10px rgb(14 18 22 / 25%);
$box-shadow-hover:0px 0px 20px -10px rgb(14 18 22 / 50%);
//文字大小
$font-size-normal:14px;
//查询框
@mixin query-box-wrap {
padding: 0px 10px;
span {
font-weight: normal;
display: block;
text-align: right;
font-size: $font-size-normal;
color: $span-font-color;
}
:deep(.el-row) {
display: flex;
align-items: center;
justify-content: left;
}
.el-row+.el-row {
margin-top: 10px;
}
.button-wrapper-right {
display: flex;
justify-content: right;
align-items: center;
}
.button-wrapper-left {
display: flex;
justify-content: left;
align-items: center;
}
}

View File

@@ -29,11 +29,13 @@ export default {
setup( props )
{
const ui = reactive({
mensualList:[],
});
// 设置图表
const initCharts = () =>
{
console.log( "每月业绩", props.chartData );
const chartDom = document.getElementById( "chartWrapper" );
const myChart = echarts.init( chartDom as HTMLDivElement );
const option = {
@@ -43,7 +45,7 @@ export default {
},
yAxis: {
type: "value",
data: [200, 400, 600, 800, 1000,],
data: [400, 600, 800, 1000, 1200,],
},
series: [
{

View File

@@ -16,7 +16,7 @@
>
<div class="title-wrapper">
<span>"消7灭6"突围战</span>
<span>月入营坐席</span>
<span>{{ props.month }}月入营坐席</span>
</div>
</div>
</div>
@@ -37,9 +37,9 @@ export default {
default: () => [],
},
},
setup()
setup( props )
{
return {};
return { props, };
},
};
</script>

View File

@@ -131,6 +131,8 @@ export default {
span {
display: block;
margin-top: 5px;
text-align: center;
color: #fff;

View File

@@ -0,0 +1,132 @@
<!--
* @Author: Kane
* @Date: 2023-06-06 11:01:01
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/RankingListComponent.vue
* @Description: 排行榜组件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="rankinglist-wrapper">
<el-table
:data="topFive"
stripe
style="width:100%;"
:header-cell-style="{background:'#fecb96'}"
>
<el-table-column
label="名次"
width="60"
align="center"
>
<template #default="ranking">
<span class="rankinglist-index">{{ ranking.row.index }}</span>
</template>
</el-table-column>
<el-table-column
label="名次"
width="160"
align="center"
>
<template #default="ranking">
<span class="rankinglist-index">{{ ranking.row.callerName }}</span>
</template>
</el-table-column>
<el-table-column
label="指标"
width="80"
align="center"
>
<template #default="ranking">
<span class="rankinglist-index">{{ ranking.row.appraiseValue }}</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script lang="ts">
/* eslint-disable */
import { computed } from "vue";
interface RankingListItem
{
index: number;
callerName: string;
appraiseValue: string;
}
export default {
name: "RankingListComponent",
props: {
title: {
type: String,
require: true,
default: () => "",
},
rankingList: {
type: Array,
require: true,
default: () => [],
},
},
/**
* setup函数
* @param props 组件的props属性。
*/
setup(props)
{
/**
* 计算对象用于获取top5.
*/
const topFive = computed(() =>
{
const rankingList = props.rankingList; // eslint-disable-line
rankingList.sort((a, b) =>
{
// @ts-ignore
return a.index - b.index;
});
return rankingList.slice(0, 5);
});
return { props, topFive, };
},
};
</script>
<style lang="scss" scoped>
.rankinglist-wrapper {
// border: 1px solid red;
border-radius: 5px;
width: 300px;
height: 250px;
}
.rankinglist-index {
display: block;
text-align: center;
}
:deep(.el-table)
{
border-radius: 5px;
}
:deep(.el-table__header-wrapper) {
thead {
th{
div{
// font-family: "FZ-ZHUOHEI";
font-weight: 500;
font-size: 15px;
color: #da3703;
}
}
}
}
</style>

View File

@@ -42,42 +42,44 @@ export default {
};
</script>
<style lang="scss" scoped>
.layout-container {
height: 100vh;
width: 100vw;
max-height: 100vh;
max-width: 100vw;
.layout-header {
height: 50px;
@media screen {
.layout-container {
height: 100vh;
width: 100vw;
max-height: 50px;
max-height: 100vh;
max-width: 100vw;
padding: 0px;
}
.layout-header {
height: 50px;
width: 100vw;
max-height: 50px;
max-width: 100vw;
.layout-container-down {
height: calc(100vh - 50px);
max-height: calc(100vh - 50px);
width: 100vw;
max-width: 100vw;
.layout-aside {
height: calc(100vh - 50px);
max-height: calc(100vh - 50px);
min-height: calc(100vh - 50px);
width: 200px;
overflow-x: hidden;
background-color: #2f4156;
padding: 0px;
}
.layout-main {
padding: 0px;
.layout-container-down {
height: calc(100vh - 50px);
width: calc( 100vw - 200px );
max-height: calc(100vh - 50px);
width: 100vw;
max-width: 100vw;
.layout-aside {
height: calc(100vh - 50px);
max-height: calc(100vh - 50px);
min-height: calc(100vh - 50px);
width: 200px;
overflow-x: hidden;
background-color: #2f4156;
}
.layout-main {
padding: 0px;
height: calc(100vh - 50px);
width: calc(100vw - 200px);
}
}
}
}

View File

@@ -116,7 +116,7 @@ export default {
width: 100%;
}
.el-menu {
:deep(.el-menu) {
border-right: none;
/* border-left: 5px solid #1d74b2; */
overflow: auto;

View File

@@ -11,7 +11,7 @@
<div class="header-wrapper">
<span class="company-name">CPIC</span>
<div class="version-wrapper">
<span>测试版</span>
<span>桌面霸屏后台管理</span>
<span>Build-202303251257</span>
</div>
<div class="buttons-wrapper">
@@ -93,6 +93,10 @@ export default {
font: {
size: 0.5rem;
}
> *+* {
margin-top: 1px;
}
}
.company-name {

View File

@@ -2,7 +2,7 @@
* @Author: Kane
* @Date: 2023-02-15 09:25:52
* @LastEditors: Kane
* @LastEditTime: 2023-03-24 14:34:52
* @LastEditTime: 2023-04-04 08:57:51
* @FilePath: /task_schedule/src/main.js
* @Description:
*
@@ -15,7 +15,7 @@ import store from "@/store/index";
import App from "./App.vue";
// css
import "./style.css";
import "./style.scss";
import "./assets/css/index.scss";
// element-plus

View File

@@ -10,4 +10,6 @@ body {
padding: 0px;
margin: 0px;
overflow: hidden;
}
@include no-select;
}

View File

@@ -1,6 +1,6 @@
/*
* @Author: Kane
* @Date: 2023-03-02 15:48:44
* @Date: 2023-04-27 15:29:10
* @LastEditors: Kane
* @FilePath: /task_schedule/src/test/test.ts
* @Description:
@@ -8,27 +8,8 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { queryDepartmentArchievement } from "../utils/archievement.js";
// import { testRankingListRequest } from "./testRankingListRequest.js";
interface Cat
{
name: string;
purrs: boolean;
};
// testRankingListRequest();
interface Dog
{
// name: string;
barks: true;
wags: true;
}
type CatOrDog = Cat | Dog;
const animal: CatOrDog =
{
name: "kaka",
purrs: true,
barks: true,
wags: true,
};
console.log( "test" );

View File

@@ -14,13 +14,12 @@
"target": "ESNext",
"module": "ESNext",
// "module": "CommonJS",
// "moduleResolution": "node",
"moduleResolution": "nodenext",
"moduleResolution": "node",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": false,
"esModuleInterop": true,
"baseUrl": "./", // paths 路径解析起点
"paths": { // 别名路径设置
"@/*": [
@@ -46,5 +45,8 @@
],
"exclude": [
"./node_modules",
]
],
"ts-node": {
"esm": true
},
}

View File

@@ -0,0 +1,17 @@
/*
* @Author: Kane
* @Date: 2023-05-09 22:03:26
* @LastEditors: Kane
* @FilePath: /task_schedule/src/data/cpicxim/Department.ts
* @Description: 部门数据结构
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
interface Department
{
departmentName: string;
departmentCode: string;
}
export { type Department };

View File

@@ -0,0 +1,18 @@
/*
* @Author: Kane
* @Date: 2023-06-06 17:44:48
* @LastEditors: Kane
* @FilePath: /task_schedule/src/types/cpicxim/RankingListItem.ts
* @Description: 排行榜元素
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
interface RankingListItem
{
index: number;
callerName: string;
appraiseValue: string;
}
export { type RankingListItem };

View File

@@ -0,0 +1,21 @@
/*
* @Author: Kane
* @Date: 2023-05-09 22:18:04
* @LastEditors: Kane
* @FilePath: /task_schedule/src/types/cpicxim/TelSaler.ts
* @Description: 坐席类型
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
interface TelSaler
{
telSalerCode: string;
telSalerName: string;
teamCode: string;
teamName: string;
departmentCode: string;
departmentName: string;
}
export { type TelSaler };

View File

@@ -23,6 +23,32 @@ interface LoginInfo
password: string;
}
interface LoginCallerInfo
{
telsaler_code: string;
}
interface RequestResult
{
success: boolean;
message: string;
}
interface LoginCallerResult extends RequestResult
{
tel_saler_code: string;
tel_saler_name: string;
team_code: string;
team_name: string;
department_code: string;
department_name: string;
}
/**
* 内勤员工登录
* @param data 内勤员工登录信息
* @returns 返回一个Promise对象用于给调用者添加链式处理。
*/
async function login( data: LoginInfo ): Promise<AxiosResponse<any, any>>
{
return await instance.request(
@@ -30,10 +56,27 @@ async function login( data: LoginInfo ): Promise<AxiosResponse<any, any>>
method: "post",
url: API_URL.URL_LOGIN,
data,
}
);
});
}
/**
* 坐席登录函数
* @param data 坐席登录信息
* @returns 返回一个Promise对象用于给调用者添加链式处理。
*/
async function loginCaller( data: LoginCallerInfo ): Promise<AxiosResponse<any, any>>
{
return await instance.request(
{
method: "post",
url: API_URL.URL_LOGIN_CALLER,
data,
});
}
/**
* 退出登录
*/
function logout(): void
{
cleanStaffInfo();
@@ -42,4 +85,11 @@ function logout(): void
void router.push( "/login" );
}
export { type LoginInfo, login, logout };
export {
type LoginInfo,
type LoginCallerInfo,
type LoginCallerResult,
login,
loginCaller,
logout
};

View File

@@ -9,8 +9,21 @@
*/
export 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://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://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_CALLER_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_caller_archievement.do",
};

View File

@@ -7,7 +7,8 @@
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { StaffInfo } from "@/data/cpicxim/StaffInfo.js";
import { StaffInfo } from "../../types/cpicxim/StaffInfo.js";
import { type TelSaler } from "@/types/cpicxim/TelSaler.js";
const STUFF_ITEM = "stuff_info";
const CALLER_ITEM = "call_info";
@@ -43,7 +44,7 @@ function saveStaffInfo( stuff: StaffInfo ): void
const json = JSON.stringify( stuff );
window.localStorage.setItem( STUFF_ITEM, json );
};
}
function cleanStaffInfo(): void
{
@@ -62,14 +63,38 @@ function getUserType(): string
return userType;
}
function saveCallerInfo( callerCode: string ): void
function saveCallerInfo( callerInfo: TelSaler ): void
{
window.localStorage.setItem( CALLER_ITEM, callerCode );
const json = JSON.stringify( callerInfo );
window.localStorage.setItem( CALLER_ITEM, json );
}
function getCallerInfo(): string
function getCallerInfo(): TelSaler
{
return window.localStorage.getItem( CALLER_ITEM ) ?? "";
const json = window.localStorage.getItem( CALLER_ITEM ) ?? "";
let storeCallerInfo = null;
try
{
storeCallerInfo = JSON.parse( json );
}
catch ( error )
{
storeCallerInfo = {};
}
const callInfo: TelSaler = {
telSalerCode: storeCallerInfo.telSalerCode ?? "",
telSalerName: storeCallerInfo.telSalerName ?? "",
teamCode: storeCallerInfo.teamCode ?? "",
teamName: storeCallerInfo.teamName ?? "",
departmentCode: storeCallerInfo.departmentCode ?? "",
departmentName: storeCallerInfo.departmentName ?? "",
};
return callInfo;
}
function clearCallerInfo(): void
@@ -77,7 +102,8 @@ function clearCallerInfo(): void
window.localStorage.removeItem( CALLER_ITEM );
}
export {
export
{
loadStaffInfo,
saveStaffInfo,
cleanStaffInfo,

View File

@@ -0,0 +1,64 @@
/*
* @Author: Kane
* @Date: 2023-06-12 14:48:55
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/api/loginRequest.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import axios, { type AxiosInstance } from "axios";
const loginInstance: AxiosInstance = axios.create(
{
baseURL: "",
timeout: 10000,
}
);
// 拦截器
// 登录用的请求不需要加上token。
loginInstance.interceptors.request.use(
/**
* 请求拦截方法,用于对请求参数和内容进行预处理。
* 因为是登录请求所以不需要加入token。
* @param config axios传递的配置对象
* @returns 返回给axios的配置对象
*/
( config ) =>
{
return config;
},
/**
* 请求拦截,当请求发送失败时调用。
* @param reason axios 传递的对象
* @returns 返回一个Promise对象提供给调用者。
*/
async ( reason ) =>
{
return await Promise.reject( reason );
});
// 响应拦截器
loginInstance.interceptors.response.use(
/**
* 响应成功后调用,用于对响应结果进行预处理
* @param response axios传递的响应结果
* @returns 返回预处理后的响应结果,这里返回的结果,会传递给用户用户提供的响应处理结果方法。
*/
( response ) =>
{
return response;
},
/**
* 请求调用结果不为2xx时被调用。用于对错误进行预处理。
* @param error axios传递的错误内容。
* @returns 返回预处理后的错误信息对象,会传递给用户提供的相应处理方法。
*/
async ( error ) =>
{
return await Promise.reject( error );
});
export { loginInstance as instance };

View File

@@ -19,8 +19,15 @@ const service: AxiosInstance = axios.create(
// 请求拦截
service.interceptors.request.use(
/**
* 请求拦截器在此加入token
* @param config 配置对象,在此加入token。
* @returns 返回修改完的配置对象
*/
( config ) =>
{
config.headers.token = "123";
return config;
},
async ( error ) =>

View File

@@ -3,15 +3,17 @@
* @Date: 2023-03-17 15:17:44
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/archievement.ts
* @Description: 请求业绩数据
* @Description: 请求业绩数据相关的方法。
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { service as instance } from "./api/request.js";
import { API_URL } from "./api/config.js";
// import { type AxiosResponse } from "axios";
import { type Department } from "../types/cpicxim/Department.js";
import { type TelSaler } from "../types/cpicxim/TelSaler.js";
import { type AxiosResponse } from "axios";
interface Archievement
interface DepartmentArchievement // 定义业绩对象的结构
{
success: boolean;
message: string;
@@ -24,19 +26,37 @@ interface Archievement
backward_list: string[];
}
interface CallerArchievement // 坐席业绩对象
{
success: boolean;
message: string;
total_archievement: number;
mensual_archievement_list: number[];
insurance_renewal_rate: string;
attaching_rate: string;
}
interface MenusalArchievementItem // 每月业绩清单的项目
{
month: number;
premium: string;
}
/**
* 获取部门业绩数据,并调用回调函数进行渲染。
* @param render 用于给组件更新数据的回调函数
* @param departmentInfo 作为请求参数的部门参数对象
* @param render 用于给组件更新数据的回调函数用DepartmentArchievement对象调用
*/
function queryDepartmentArchievement( render: any ): void
function queryDepartmentArchievement( departmentInfo: Department, render: any ): void
{
instance.request({
method: "post",
url: API_URL.URL_DEPARTMENT_ARCHIEVEMENT,
data: departmentInfo,
})
.then(( response ) =>
{
const archievement: Archievement = {
const archievement: DepartmentArchievement = {
success: false,
message: "",
total_archievement: 0,
@@ -52,14 +72,26 @@ function queryDepartmentArchievement( render: any ): void
archievement.success = data.success ?? false;
archievement.message = data.message ?? "";
archievement.mensual_archievement_list = data.mensual_archievement_list ?? [];
archievement.total_archievement = data.total_archievement;
// archievement.mensual_archievement_list = data.mensual_archievement_list ?? [];
archievement.mensual_archievement_list = [];
archievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0";
archievement.attaching_rate = data.attaching_rate ?? "0.0";
archievement.leading_reward_gainers = data.leading_reward_gainers ?? [];
archievement.advance_reward_gainers = data.advance_reward_gainers ?? [];
archievement.backward_list = data.backward_list ?? [];
render( data );
// 转换每月业绩数据用month排序以后保留premium。
data.mensual_archievement_list.sort(( a: any, b: any ) => a.month - b.month );
data.mensual_archievement_list.forEach(( item: any ) =>
{
archievement.mensual_archievement_list.push( item.premium );
});
console.log( "每月业绩", archievement );
// 渲染数据
render( archievement );
})
.catch(( error ) =>
{
@@ -67,4 +99,118 @@ function queryDepartmentArchievement( render: any ): void
});
}
export { queryDepartmentArchievement, type Archievement };
/**
* 查询坐席的业绩,并调用渲染函数.
* 1、请求坐席业绩的数据
* 2、对每月业绩清单进行检查如果有缺少则用0代替检查的结果是12个月的清单让调用者自己截断
* 3、将检查后的清单写入到业绩对象中只写金额
* @param callerInfo 坐席的信息参数,用于请求业绩;
* @param render 渲染函数用业绩对象CallerArchievement作为参数
*/
function queryCallerArchievement( callerInfo: TelSaler, render: any ): void
{
const caller = {
callerCode: callerInfo.telSalerCode,
callName: callerInfo.telSalerName,
};
// 发送请求
instance.request({
method: "post",
url: API_URL.URL_CALLER_ARCHIEVEMENT,
data: caller,
})
// 请求完成时
.then(( response: AxiosResponse<any, any> ) =>
{
const data = response.data ?? {};
const callArchievement: CallerArchievement = {
success: data.success ?? false,
message: data.message ?? "",
total_archievement: data.total_archievement ?? 0,
mensual_archievement_list: [],
insurance_renewal_rate: data.insurance_renewal_rate ?? "0.0",
attaching_rate: data.attaching_rate ?? "0.0",
};
// 检查业绩清单有没有缺漏缺漏的用0补上
const checkedList = checkMensualArchievement( data.mensual_archievement_list );
// 排序一下
checkedList.sort(( a: MenusalArchievementItem, b: MenusalArchievementItem ): number =>
{
return a.month - b.month;
});
// 将排序后的每月业绩写到业绩对象中
checkedList.forEach(( item: MenusalArchievementItem ): void =>
{
const premium = Number( item.premium );
callArchievement.mensual_archievement_list.push( premium );
});
// 调用渲染函数
if ( render !== undefined )
{
render( callArchievement );
}
console.log( `queryCallerArchievement查询结果${data}` );
})
// 请求失败
.catch(( error: any ) =>
{
console.log( `queryCallerArchievement:查询坐席${callerInfo.telSalerCode}业绩失败,原因${error}` );
});
}
/**
* 检查服务器返回的每月业绩数组检查是否有缺漏缺少的月份业绩用0代替。
* 检查的结果是12个月的清单由调用者自己进行截断。
* @param mensualArchievementList MenusalArchievementItem类型的数组为业绩清单
* @returns 返回MenusalArchievementItem数组为检查过的清单
*/
function checkMensualArchievement( mensualArchievementList: MenusalArchievementItem[]): MenusalArchievementItem[]
{
const checkedList: MenusalArchievementItem[] = [];
const itemMap = new Map();
itemMap.set( 1, "0" );
itemMap.set( 2, "0" );
itemMap.set( 3, "0" );
itemMap.set( 4, "0" );
itemMap.set( 5, "0" );
itemMap.set( 6, "0" );
itemMap.set( 7, "0" );
itemMap.set( 8, "0" );
itemMap.set( 9, "0" );
itemMap.set( 10, "0" );
itemMap.set( 11, "0" );
itemMap.set( 12, "0" );
mensualArchievementList.forEach(( item: MenusalArchievementItem ): void =>
{
itemMap.set( item.month, item.premium );
});
itemMap.forEach(( value, key, map ) =>
{
const item: MenusalArchievementItem = {
month: key,
premium: value,
};
checkedList.push( item );
});
return checkedList;
}
export {
queryDepartmentArchievement,
queryCallerArchievement,
type DepartmentArchievement,
type CallerArchievement
};

View File

@@ -0,0 +1,110 @@
/*
* @Author: Kane
* @Date: 2023-06-06 17:40:31
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/ranking.ts
* @Description: 排行榜相关的代码
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { service as instance } from "./api/request.js";
import { API_URL } from "./api/config.js";
import { type RankingListItem } from "../types/cpicxim/RankingListItem.js";
/**
* 用于请求排行榜数据请求参数
*/
interface RankingListRequest
{
departmentCode: string;
year: string;
month: string;
}
interface RankingListResponse
{
success: boolean;
message: string;
departmentCode: string;
year: string;
month: string;
attachingRateRankingList: RankingListItem[];
renewalRateRankingList: RankingListItem[];
}
/**
* 请求坐席排行榜。
* @param reqParam 请求参数
* @param rander 保存请求结果的回调函数
* @returns 返回RankingListResponse对象里面包含请求状态和数据。
*/
function requestRankingList( reqParam: RankingListRequest, rander: any ): void // eslint-disable-line
{
// let attachingRankingList: RankingListItem[];
// let renewalRankintList: RankingListItem[];
const rankingListResponse: RankingListResponse = {
success: false,
message: "",
departmentCode: reqParam.departmentCode,
year: reqParam.year,
month: reqParam.month,
attachingRateRankingList: [],
renewalRateRankingList: [],
};
instance.request(
{
method: "post",
url: API_URL.URL_RANKINGLIST,
data: reqParam,
})
.then(( response ) =>
{
const data: RankingListResponse = response.data as RankingListResponse;
rankingListResponse.success = data.success ?? false;
rankingListResponse.message = data.message ?? "";
rankingListResponse.departmentCode = data.departmentCode ?? "";
rankingListResponse.year = data.year ?? "";
rankingListResponse.month = data.month ?? "";
// 遍历排行榜元素
for ( const item of ( data.attachingRateRankingList ?? [] )) // eslint-disable-line
{
const index: number = item.index ?? -1;
if ( index === -1 )
{
continue;
}
rankingListResponse.attachingRateRankingList.push( item );
}
for ( const item of ( data.renewalRateRankingList ?? [] )) // eslint-disable-line
{
const index: number = item.index ?? -1;
if ( index === -1 )
{
continue;
}
rankingListResponse.renewalRateRankingList.push( item );
}
// 调用回调函数保存数据
rander( rankingListResponse );
})
.catch(( error ) =>
{
console.log( error );
});
}
export {
type RankingListRequest,
type RankingListResponse,
requestRankingList
};

View File

@@ -17,7 +17,7 @@
<div class="center-wrapper">
<span class="slogan">对标先进&nbsp;比学赶超</span>
<div class="total-archievement-wrapper">
<span>业绩</span>
<span>我的车险业绩</span>
<span>{{ getTotalArchievement }}</span>
</div>
<div class="archievement-wrapper">
@@ -31,41 +31,97 @@
:percentage="ui.attaching_rate"
/>
</div>
<div
class="total-archievement-charts-wrapper"
>
<ArchievementChart
:chart-data="ui.chartData"
/>
<div class="total-archievement-charts-wrapper">
<ArchievementChart :chart-data="ui.chartData" />
</div>
</div>
<div class="reward-wrapper">
<HonorListComponent
month=""
:month="ui.currentMonth"
:leading-reward="ui.leading_reward_gainers"
:advance-reward="ui.advance_reward_gainers"
/>
<DishonorListComponent
month=""
:month="ui.currentMonth"
:dishonor-persons="ui.dishonorPersons"
/>
</div>
</div>
<div class="right-wrapper" />
<div class="right-wrapper">
<h1>本大爷</h1>
<div class="carousel-item">
<el-carousel
arrow="never"
indicator-position="none"
:interval="4000"
>
<el-carousel-item :key="1">
<RankingListComponent :ranking-list="ui.attachingRankingList" />
</el-carousel-item>
<el-carousel-item :key="2">
<RankingListComponent :ranking-list="ui.renewalRankingList" />
</el-carousel-item>
</el-carousel>
</div>
<div class="carousel-item">
<el-carousel
arrow="never"
indicator-position="none"
:interval="4000"
>
<el-carousel-item :key="1">
<RankingListComponent :ranking-list="ui.attachingRankingList" />
</el-carousel-item>
<el-carousel-item :key="2">
<RankingListComponent :ranking-list="ui.renewalRankingList" />
</el-carousel-item>
</el-carousel>
</div>
</div>
</div>
</template>
<script lang="ts">
import { computed, reactive, onBeforeMount } from "vue";
import { computed, reactive, onBeforeMount, onUnmounted } from "vue";
import { useRouter } from "vue-router";
import { getCallerInfo } from "@/utils/api/localStorage.js";
import { ElMessage } from "element-plus";
import { type Archievement, queryDepartmentArchievement } from "@/utils/archievement.js";
import
{
type DepartmentArchievement,
queryDepartmentArchievement,
queryCallerArchievement
} from "@/utils/archievement.js";
import { RankingListItem } from "@/types/cpicxim/RankingListItem.js";
import
{
type RankingListRequest,
type RankingListResponse,
requestRankingList
} from "@/utils/ranking.js";
import { type Department } from "@/types/cpicxim/Department";
import ArchievementChart from "@/components/ArchievementChartComponent.vue";
import ArchievementCompleteRateComponent from "@/components/ArchievementCompleteRateComponent.vue";
import HonorListComponent from "@/components/HonorListComponent.vue";
import DishonorListComponent from "@/components/DishonorListComponent.vue";
import RankingListComponent from "@/components/RankingListComponent.vue";
import { logout } from "@/utils/account.js";
import { type TelSaler } from "@/types/cpicxim/TelSaler";
interface ui
{
currentMonth: string;
chartData: number[];
totalArchievement: number;
attaching_rate: string;
insurance_renewal_rate: string; // 续保率
leading_reward_gainers: string[]; // 领跑奖
advance_reward_gainers: string[]; // 飞跃奖
dishonorPersons: string[];
showUI: boolean; // 用来刷新页面的开关
attachingRankingList: RankingListItem[]; // 坐席车非渗透率榜单
renewalRankingList: RankingListItem[];
}
export default {
name: "DesktopArchievement",
@@ -74,12 +130,29 @@ export default {
ArchievementCompleteRateComponent,
HonorListComponent,
DishonorListComponent,
RankingListComponent,
},
setup()
{
const monthIndex = new Date();
const numInChinese = [
"一",
"二",
"三",
"四",
"五",
"六",
"七",
"八",
"九",
"十",
"十一",
"十二",
];
const router = useRouter();
const callerInfo = getCallerInfo();
const ui = reactive({
const callerInfo: TelSaler = getCallerInfo();
const ui: ui = reactive({
currentMonth: numInChinese[monthIndex.getMonth() - 1],
chartData: [0,], // 业绩表
totalArchievement: 0, // 总业绩
attaching_rate: "", // 车非渗透率
@@ -88,23 +161,25 @@ export default {
advance_reward_gainers: ["",], // 飞跃奖
dishonorPersons: ["",],
showUI: true, // 用来刷新页面的开关
attachingRankingList: [], // 坐席车非渗透率榜单
renewalRankingList: [], // 坐席续保率榜单
});
let timerHandler = 0;
const getTotalArchievement = computed(() =>
{
const cnyFormat = new Intl.NumberFormat( "zh-cn",
{
style: "currency",
currency: "CNY",
minimumFractionDigits: 0,
});
const cnyFormat = new Intl.NumberFormat( "zh-cn", {
style: "currency",
currency: "CNY",
minimumFractionDigits: 0,
});
const archievement = cnyFormat.format( ui.totalArchievement );
return archievement;
});
// 绘制数据
const renderData = ( data:Archievement ) =>
// 保存业绩数据
const applyDepartmentArchievementData = ( data: DepartmentArchievement ) =>
{
console.log( "部门业绩数据", data );
@@ -120,7 +195,27 @@ export default {
// 先不显示界面往队列中加入显示队列的回调让vue刷新组件。
ui.showUI = false;
setTimeout(() => { ui.showUI = true; }, 0 );
setTimeout(() =>
{
ui.showUI = true;
}, 0 );
};
const applyRankingListData = ( data: RankingListResponse ): void =>
{
ui.attachingRankingList = data.attachingRateRankingList;
ui.renewalRankingList = data.renewalRateRankingList;
// 更新UI
// 先不显示界面往队列中加入显示队列的回调让vue刷新组件。
ui.showUI = false;
console.log( "获取排行榜后的ui:", data );
setTimeout(() =>
{
ui.showUI = true;
}, 0 );
};
// 退出桌面霸屏
@@ -133,7 +228,7 @@ export default {
};
// 检查存储的登录信息,不存在则返回登录页面
if ( callerInfo === "" )
if ( callerInfo.telSalerCode === "" )
{
ElMessage({
message: "登录信息失效,请重新登录!",
@@ -144,12 +239,55 @@ export default {
router.push( "/login" );
}
/**
* 刷新页面
*/
const refresh = () =>
{
const deparmentInfo: Department = {
departmentCode: callerInfo.departmentCode,
departmentName: callerInfo.departmentName,
};
const rankinglistRequest: RankingListRequest = {
departmentCode: callerInfo.departmentCode,
year: "2023",
month: "06",
};
queryDepartmentArchievement( deparmentInfo, applyDepartmentArchievementData );
requestRankingList( rankinglistRequest, applyRankingListData );
};
/**
* 加载前
*/
onBeforeMount(() =>
{
queryDepartmentArchievement( renderData );
// 设置每10分钟刷新一次
timerHandler = setInterval( refresh, 600 * 1000 );
refresh();
});
return { ui, getTotalArchievement, renderData, logoutDesktopArchievement, };
/**
* 页面卸载前
*/
onUnmounted((): void =>
{
// 退出页面前关掉定时器
clearInterval( timerHandler );
});
return {
ui,
callerInfo,
timerHandler,
getTotalArchievement,
renderData: applyDepartmentArchievementData,
refresh,
logoutDesktopArchievement,
};
},
};
</script>
@@ -163,7 +301,7 @@ export default {
width: 100vw;
padding: 5mm;
display: flex;
justify-content: end;
justify-content: flex-end;
align-items: stretch;
}
@@ -271,8 +409,36 @@ export default {
}
.right-wrapper {
min-width: 400px;
min-width: 300px;
width: 25%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
// >*+* {
// margin-top: 15px;
// }
>h1 {
font: {
family: "FZ-ZHUOHEI";
weight: 100;
size: 30px;
}
color: $color-bg-04;
text-align: center;
width: 300px;
}
>div {
display: block;
height: 260px;
width: 300px;
}
}
</style>
<style lang="scss">
@@ -283,7 +449,7 @@ body {
$color-bg-03,
$color-bg-04,
$color-bg-05,
$color-bg-05);
$color-bg-05 );
}
div {

View File

@@ -68,9 +68,10 @@
import { reactive, onBeforeMount } from "vue";
import { useRouter } from "vue-router";
import { saveStaffInfo, getUserType, saveUserType, getCallerInfo, saveCallerInfo } from "@/utils/api/localStorage";
import { login } from "@/utils/account";
import { login, loginCaller, type LoginCallerInfo, type LoginCallerResult } from "@/utils/account";
import { ElMessage } from "element-plus";
import { StaffInfo } from "@/data/cpicxim/StaffInfo";
import { StaffInfo } from "@/types/cpicxim/StaffInfo";
import { TelSaler } from "@/types/cpicxim/TelSaler";
export default {
name: "LoginPage",
@@ -91,13 +92,16 @@ export default {
currentMenu: "",
});
/**
* 保存p13账号
*/
const savedP13uid = () =>
{
window.localStorage.setItem( "stuff_account", ui.account );
};
/**
*
* 登录函数根据ui.currentMenu判断登录的是坐席还是员工。
*/
const onLogin = () =>
{
@@ -114,13 +118,14 @@ export default {
};
login( info )
// 调用成功
.then(( response ) =>
{
const data = response.data ?? { success: false, };
if ( data.success === true )
{
// 提示登录成功并保存到localStorage然后路由跳转
// 提示登录成功并保存到localStorage然后路由跳转
ElMessage({
message: data.message,
type: "success",
@@ -153,19 +158,72 @@ export default {
console.log( data );
})
// 调用失败
.catch(( error ) =>
{
debugger;
// debugger;
console.log( `登录失败,返回信息:${error}` );
});
}
else if ( ui.currentMenu === "tele_saler" )
{
// 是坐席,将坐席工号保存到本地,然后跳转
saveCallerInfo( ui.account );
// 是坐席
const loginInfo: LoginCallerInfo = {
telsaler_code: ui.account,
};
// 跳转路由
router.push( "/desktop_archievement" );
// 登录
loginCaller( loginInfo )
// 调用接口成功
.then(( response ) =>
{
const data:LoginCallerResult = response.data ?? { success: false, };
// debugger;
// 查看標志位
if ( data.success === true )
{
// 查询成功,显示一个提示,保存工号,并跳转路由
ElMessage({
message: `验证成功,登录用户 ${data.tel_saler_name}`,
type: "success",
});
const telsaler:TelSaler = {
telSalerCode: data.tel_saler_code,
telSalerName: data.tel_saler_name,
teamCode: data.team_code,
teamName: data.team_name,
departmentCode: data.department_code,
departmentName: data.department_name,
};
saveCallerInfo( telsaler );
router.push( "/desktop_archievement" );
}
else
{
// 查詢失敗
ElMessage({
message: "验证失败,请检查输入的工号。",
type: "error",
});
}
})
// 调用接口失败
.catch(( error ) =>
{
const message = `登录失败,返回信息:${error}`;
console.log( message );
ElMessage({
message,
type: "error",
});
});
}
};
@@ -182,10 +240,10 @@ export default {
const callInfo = getCallerInfo();
// 判断是否已经记录了坐席工号,有则提示已登录,然后跳转路由
if ( callInfo !== "" )
if ( callInfo.telSalerCode.length !== 0 )
{
ElMessage({
message: `已登录账号:${callInfo}`,
message: `已登录账号:${callInfo.telSalerName}`,
type: "success",
center: true,
});
@@ -268,25 +326,25 @@ export default {
}
.menu-tab {
text-align: center;
margin-bottom: 15px;
margin-top: 25px;
text-align: center;
margin-bottom: 15px;
margin-top: 25px;
li {
display: inline-block;
padding: 10px 24px;
margin: 0 10px;
// background-color: #fff;
color: #1d6ddc;
font-size: 16px;
border-radius: 5px;
cursor: pointer;
li {
display: inline-block;
padding: 10px 24px;
margin: 0 10px;
// background-color: #fff;
color: #1d6ddc;
font-size: 16px;
border-radius: 5px;
cursor: pointer;
&.current {
background-color: #1d6ddc;
color: #fff;
&.current {
background-color: #1d6ddc;
color: #fff;
}
}
}
}
.form-label {

View File

@@ -2,25 +2,190 @@
* @Author: Kane
* @Date: 2023-03-23 16:05:08
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/DataManagemant.vue
* @FilePath: /task_schedule/src/views/StaffManagement.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div>
人员管理
<div class="wrapper">
<div class="query_wrapper">
<el-row :gutter="10">
<el-col :span="2">
<span>工号</span>
</el-col>
<el-col :span="4">
<el-input v-model.trim.lazy="ui.caller_code" />
</el-col>
<el-col :span="2">
<span>姓名</span>
</el-col>
<el-col :span="4">
<el-input />
</el-col>
<el-col :span="2">
<span>部门代码</span>
</el-col>
<el-col :span="4">
<el-input />
</el-col>
<el-col :span="2">
<span>部门名称</span>
</el-col>
<el-col :span="4">
<el-input />
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="2">
<span>团队</span>
</el-col>
<el-col :span="10">
<el-input />
</el-col>
<el-col :span="12">
<div class="query-button">
<el-button
type="primary"
icon="search"
>
查询
</el-button>
<el-button icon="refresh">
重置
</el-button>
</div>
</el-col>
</el-row>
</div>
<el-table
border
stripe
style="width:100%;"
:height="tableHeight"
>
<el-table-column
type="selection"
align="center"
/>
<el-table-column
label="工号"
align="center"
width="120"
/>
<el-table-column
label="名称"
align="center"
width="200"
/>
<el-table-column
label="团队名称"
align="center"
/>
<el-table-column
label="部门"
align="center"
width="300"
/>
</el-table>
<div class="pagination_wrapper">
<el-pagination
v-model="ui.table_current_page_index"
class="pull_left"
size="small"
background
:page-size="ui.table_page_size"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="ui.callers.length"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
</div>
</template>
<script lang="ts">
import { reactive, computed } from "vue";
export default {
name: "StaffManagement",
setup()
{
return {};
const ui = reactive({
caller_code: "",
caller_name: "",
section_office_code: "",
section_office_name: "",
table_current_page_index: 1,
table_page_size: 50,
callers: [],
});
const onCurrentPageIndexChange = ( pageIndex: number ) =>
{
ui.table_current_page_index = pageIndex;
};
/**
* 设置表格每页显示记录的数量
* @param pageSize 表格页记录数量
*/
const onTablePageSizeChange = ( pageSize: number ) =>
{
ui.table_page_size = pageSize;
};
/**
* 表格高度
*/
const tableHeight = computed(() =>
{
return 10 * 50 + 40;
});
return { ui, onCurrentPageIndexChange, onTablePageSizeChange, tableHeight, };
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/public/_public.scss";
.wrapper {
margin: 10px;
padding: 10px;
background-color: #fff;
border-radius: 5px;
box-shadow: $box-shadow;
&:hover {
box-shadow: $box-shadow-hover;
}
min-width: 800px;
> *+* {
margin-top: 10px;
}
}
.query_wrapper {
// display: flex;
border-radius: 5px;
padding: 15px;
@include query-box-wrap;
.query-button {
display: flex;
justify-content: flex-end;
align-items: center;
}
}
.pagination_wrapper
{
display: flex;
justify-content: flex-end;
}
</style>

View File

@@ -11,14 +11,15 @@
"compilerOptions": {
"forceConsistentCasingInFileNames": true,
"useDefineForClassFields": true,
"target": "ESNext",
"module": "ESNext",
"target": "ES2015",
"module": "ES2015",
"moduleResolution": "node",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": false,
"isolatedModules": true,
"baseUrl": "./", // paths 路径解析起点
"paths": { // 别名路径设置
"@/*": [
@@ -26,7 +27,7 @@
],
},
"lib": [
"ESNext",
"ES2015",
"DOM"
],
"types": [

View File

@@ -2,7 +2,7 @@
* @Author: Kane
* @Date: 2023-02-15 09:25:52
* @LastEditors: Kane
* @LastEditTime: 2023-03-24 15:47:31
* @LastEditTime: 2023-06-25 09:51:13
* @FilePath: /task_schedule/vite.config.js
* @Description:
*
@@ -18,6 +18,7 @@ export default defineConfig(( command, mode ) =>
const env = loadEnv( mode, process.cwd(), "" );
return {
server:{ host: "localhost", port: 5173, },
plugins: [vue(),],
base: "./",
resolve: {
@@ -39,7 +40,7 @@ export default defineConfig(( command, mode ) =>
css: {
preprocessorOptions: {
scss: {
additionalData: "@import \"./src/assets/css/public/color.scss\",\"./src/assets/css/public/mixin.scss\";",
additionalData: "@import \"./src/assets/css/public/variables.scss\",\"./src/assets/css/public/mixin.scss\";",
},
},
},

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,14 @@
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Current File",
"request": "launch",
"mainClass": "${file}"
}
]
}

View File

@@ -1,4 +1,6 @@
{
"java.configuration.updateBuildConfiguration": "automatic",
"java.compile.nullAnalysis.mode": "automatic"
"java.compile.nullAnalysis.mode": "automatic",
"vue.codeActions.enabled": false,
"java.debug.settings.onBuildFailureProceed": true
}

View File

@@ -11,16 +11,18 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.9</maven.compiler.source>
<maven.compiler.target>1.9</maven.compiler.target>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<spring.version>5.3.24</spring.version>
<!-- <spring.version>6.0.11</spring.version> -->
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -28,7 +30,12 @@
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
@@ -80,11 +87,42 @@
<version>2.13.4</version>
</dependency>
<dependency>
<!-- <dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0.0</version>
</dependency> -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc10</artifactId>
<version>19.19.0.0</version>
</dependency>
<dependency>
<groupId>com.oracle.database.nls</groupId>
<artifactId>orai18n</artifactId>
<version>23.2.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j2-impl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
</dependencies>
<build>
<finalName>desktop_archievement_backend</finalName>
@@ -92,7 +130,8 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<version>3.3.2</version>
<configuration></configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -102,6 +141,16 @@
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,19 @@
/*
* @Author: Kane
* @Date: 2023-07-27 11:05:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/ArchievementMapper.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.mapper;
import java.util.HashMap;
public interface ArchievementMapper
{
public void getDepartmentArchievement( HashMap<String, Object> params );
public void getCallerArchievement( HashMap<String, Object> params );
}

View File

@@ -0,0 +1,17 @@
/*
* @Author: Kane
* @Date: 2023-07-29 22:59:09
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/RankingListMapper.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.mapper;
import java.util.HashMap;
public interface RankingListMapper
{
public void getRankingList( HashMap<String, Object> params );
}

View File

@@ -0,0 +1,95 @@
/*
* @Author: Kane
* @Date: 2023-07-27 11:12:19
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/MensualArchievementItem.java
* @Description: 每月业绩对象。
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.pojo;
import com.fasterxml.jackson.annotation.JsonProperty;
public class MensualArchievementItem
{
public MensualArchievementItem()
{}
public MensualArchievementItem( int month, String premium)
{
this.month = month;
this.premium = premium;
}
public int getMonth()
{
return month;
}
public void setMonth( int month )
{
this.month = month;
}
public String getPremium()
{
return premium;
}
public void setPremium( String premium )
{
this.premium = premium;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + month;
result = prime * result + ((premium == null) ? 0 : premium.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
MensualArchievementItem other = (MensualArchievementItem) obj;
if ( month != other.month )
return false;
if ( premium == null )
{
if ( other.premium != null )
return false;
} else if ( !premium.equals( other.premium ) )
return false;
return true;
}
@Override
public String toString()
{
return "MensualArchievementItem [month=" + month + ", premium=" + premium + "]";
}
// 月份
@JsonProperty( "month" )
private int month;
// 月总保费
@JsonProperty( "premium" )
private String premium;
}

View File

@@ -0,0 +1,76 @@
/*
* @Author: Kane
* @Date: 2023-07-27 17:22:55
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/utils/MybatisUtils.java
* @Description: mybatis的工具集合
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.mybatis.utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtils
{
private static HashMap<String, SqlSession> SessionMap = new HashMap<>();
private static String DEFAULT_CONFIGFILE = "mybatis/mybatis-config.xml";
/**
*
* @param configFile
* @return
* @throws IOException
*/
public static SqlSession getSqlSession(String configFile )
throws IOException
{
// 根据配置文件的路径查找是否已经创建了对应的session
SqlSession session = SessionMap.get(configFile);
// 找到就直接返回
if ( session != null )
{
return session;
}
// 没找到就创建一个
InputStream configIS = Resources.getResourceAsStream(configFile);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(configIS);
session = factory.openSession();
// 保存
SessionMap.put(configFile, session);
return session;
}
public static SqlSession getSqlSession()
throws IOException
{
// 根据配置文件的路径查找是否已经创建了对应的session
SqlSession session = SessionMap.get(DEFAULT_CONFIGFILE);
// 找到就直接返回
if ( session != null )
{
return session;
}
// 没找到就创建一个
InputStream configIS = Resources.getResourceAsStream(DEFAULT_CONFIGFILE);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(configIS);
session = factory.openSession();
// 保存
SessionMap.put(DEFAULT_CONFIGFILE, session);
return session;
}
}

View File

@@ -0,0 +1,285 @@
/*
* @Author: Kane
* @Date: 2023-04-06 14:14:23
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/account/TeleSalerInfo.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.utils.account;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@SuppressWarnings( "unused" )
public final class TeleSalerInfo
{
/**
* @description: 构造函数
* @param code: 坐席工号
* @param name: 坐席名称
* @param teamCode: 团队代码
* @param teamName: 团队名称
* @param departmentCode: 部门代码
* @param departmentName: 部门名称
*/
private TeleSalerInfo( String code, String name, String teamCode, String teamName,
String departmentCode, String departmentName)
{
this.code = code;
this.name = name;
this.teamCode = teamCode;
this.teamName = teamName;
this.departmentCode = departmentCode;
this.departmentName = departmentName;
}
/**
* 查询坐席工号的static方法。
* @param telsalerCode 坐席工号
* @return TeleSalerInfo对象。
* @throws ClassNotFoundException
* @throws SQLException
*/
public static TeleSalerInfo queryTeleSalerInfo( String telsalerCode )
throws ClassNotFoundException, SQLException
{
TeleSalerInfo info = null;
// 到时要改
String userName = "desktop_archievement_admin";
String password = "Cpic123456";
String jdbcURL = "jdbc:oracle:thin:@10.39.0.86:1521:xmcx1";
Connection connection = null;
PreparedStatement statement = null;
ResultSet result = null;
String sql = """
SELECT s.saler_code,
s.saler_name,
t.team_code,
t.team,
bm.department_code,
bm.department_name
FROM tele_saler s,
tele_saler_team t,
idst0.bm_t bm
WHERE s.team_code = t.team_code
AND t.department_code = bm.department_code
AND s.saler_code = ? """;
// String sql = "SELECT DISTINCT s.saler_code, s.saler_name, \n"
// + " t.team_code, t.team, \n"
// + " bm.department_code, bm.department_name \n"
// + " FROM tele_saler s, tele_saler_team t, \n"
// + " i dst0.bm_t bm \n" + " WHERE s.team_code = t.team_code \n"
// + " AND t.department_code = bm.department_code \n" + " AND s.saler_code = ? ";
try
{
Class.forName( "oracle.jdbc.driver.OracleDriver" );
connection = DriverManager.getConnection( jdbcURL, userName, password );
statement = connection.prepareStatement( sql );
statement.setString( 1, telsalerCode );
result = statement.executeQuery();
if ( result.next() )
{
String code = result.getString( 1 );
String name = result.getString( 2 );
String teamCode = result.getString( 3 );
String teamName = result.getString( 4 );
String departmentCode = result.getString( 5 );
String departmentName = result.getString( 6 );
info = new TeleSalerInfo( code, name, teamCode, teamName, departmentCode,
departmentName );
}
}
finally
{
try
{
if ( result != null )
{
result.close();
}
}
catch ( Exception exception )
{
exception.printStackTrace();
}
try
{
if ( statement != null )
{
statement.close();
}
}
catch ( Exception exception )
{
exception.printStackTrace();
}
try
{
if ( connection != null )
{
connection.close();
}
}
catch ( Exception exception )
{
exception.printStackTrace();
}
}
return info;
}
public String getCode()
{
return code;
}
public void setCode( String code )
{
this.code = code;
}
public String getName()
{
return name;
}
public void setName( String name )
{
this.name = name;
}
public String getTeamCode()
{
return teamCode;
}
public void setTeamCode( String teamCode )
{
this.teamCode = teamCode;
}
public String getTeamName()
{
return teamName;
}
public void setTeamName( String teamName )
{
this.teamName = teamName;
}
public String getDepartmentCode()
{
return departmentCode;
}
public void setDepartmentCode( String departmentCode )
{
this.departmentCode = departmentCode;
}
public String getDepartmentName()
{
return departmentName;
}
public void setDepartmentName( String departmentName )
{
this.departmentName = departmentName;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((code == null) ? 0 : code.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((teamCode == null) ? 0 : teamCode.hashCode());
result = prime * result + ((teamName == null) ? 0 : teamName.hashCode());
result = prime * result + ((departmentCode == null) ? 0 : departmentCode.hashCode());
result = prime * result + ((departmentName == null) ? 0 : departmentName.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
TeleSalerInfo other = (TeleSalerInfo) obj;
if ( code == null )
{
if ( other.code != null )
return false;
} else if ( !code.equals( other.code ) )
return false;
if ( name == null )
{
if ( other.name != null )
return false;
} else if ( !name.equals( other.name ) )
return false;
if ( teamCode == null )
{
if ( other.teamCode != null )
return false;
} else if ( !teamCode.equals( other.teamCode ) )
return false;
if ( teamName == null )
{
if ( other.teamName != null )
return false;
} else if ( !teamName.equals( other.teamName ) )
return false;
if ( departmentCode == null )
{
if ( other.departmentCode != null )
return false;
} else if ( !departmentCode.equals( other.departmentCode ) )
return false;
if ( departmentName == null )
{
if ( other.departmentName != null )
return false;
} else if ( !departmentName.equals( other.departmentName ) )
return false;
return true;
}
@Override
public String toString()
{
return "TeleSalerInfo [code=" + code + ", name=" + name + ", teamCode=" + teamCode
+ ", teamName=" + teamName + ", departmentCode=" + departmentCode
+ ", departmentName=" + departmentName + "]";
}
private String code;
private String name;
private String teamCode;
private String teamName;
private String departmentCode;
private String departmentName;
}

View File

@@ -0,0 +1,207 @@
/*
* @Author: Kane
* @Date: 2023-05-02 09:52:15
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/archievement/CallerArchievement.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.utils.archievement;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.cpic.xim.mybatis.mapper.ArchievementMapper;
import com.cpic.xim.mybatis.pojo.MensualArchievementItem;
import com.cpic.xim.mybatis.utils.MybatisUtils;
import com.fasterxml.jackson.annotation.JsonProperty;
public class CallerArchievement
{
private static Logger logger = LoggerFactory.getLogger( CallerArchievement.class );
private static ArrayList<MensualArchievementItem> monthArray = null;
/**
* 构造函数
* @param callerCode
* @param totalArchievement
* @param mensualArchievementList
* @param insuranceRenewalRate
* @param attachingRate
*/
public CallerArchievement( String callerCode, long totalArchievement,
ArrayList<MensualArchievementItem> mensualArchievementList, String insuranceRenewalRate,
String attachingRate)
{
this.callerCode = callerCode;
this.totalArchievement = totalArchievement;
this.mensualArchievementList = mensualArchievementList;
this.insuranceRenewalRate = insuranceRenewalRate;
this.attachingRate = attachingRate;
}
// 静态代码块
static
{
// 初始化月份
monthArray = new ArrayList<MensualArchievementItem>(12);
monthArray.add(new MensualArchievementItem(1, "0"));
monthArray.add(new MensualArchievementItem(2, "0"));
monthArray.add(new MensualArchievementItem(3, "0"));
monthArray.add(new MensualArchievementItem(4, "0"));
monthArray.add(new MensualArchievementItem(5, "0"));
monthArray.add(new MensualArchievementItem(6, "0"));
monthArray.add(new MensualArchievementItem(7, "0"));
monthArray.add(new MensualArchievementItem(8, "0"));
monthArray.add(new MensualArchievementItem(9, "0"));
monthArray.add(new MensualArchievementItem(10, "0"));
monthArray.add(new MensualArchievementItem(11, "0"));
monthArray.add(new MensualArchievementItem(12, "0"));
}
public CallerArchievement()
{
this.totalArchievement = 0;
this.mensualArchievementList = null;
this.insuranceRenewalRate = "";
this.attachingRate = "";
this.callerCode = "";
}
public static CallerArchievement getCallerArchievement( String callerCode ) throws IOException
{
CallerArchievement archievement = null;
SqlSession session = MybatisUtils.getSqlSession();
ArchievementMapper mapper = session.getMapper( ArchievementMapper.class );
HashMap<String, Object> params = new HashMap<String, Object>();
Integer totalArchievement = null;
String attachingRate = null;
String renewalRate = null;
ArrayList<MensualArchievementItem> mensual = null;
params.put( "a_caller_code", callerCode );
mapper.getCallerArchievement( params );
// 总业绩
if ( params.get( "a_total" ) instanceof Integer )
{
totalArchievement = (Integer) params.get( "a_total" );
} else
{
totalArchievement = Integer.valueOf( 0 );
}
// 车非融合
if ( params.get( "a_attaching_rate" ) instanceof String )
{
attachingRate = (String) params.get( "a_attaching_rate" );
} else
{
attachingRate = "0.0";
}
// 续保率
if ( params.get( "a_renewal_rate" ) instanceof String )
{
renewalRate = (String) params.get( "a_renewal_rate" );
} else
{
renewalRate = "0.0";
}
// 处理每月业绩
ArrayList<MensualArchievementItem> mensualList = new ArrayList<>(CallerArchievement.monthArray);
// 数据库接收的每月业绩,要检查是否有缺漏
mensual = (ArrayList<MensualArchievementItem>) params.get( "a_mensual_cur" );
archievement = new CallerArchievement( callerCode, totalArchievement, mensual, renewalRate,
attachingRate );
return archievement;
}
public static Logger getLogger()
{
return logger;
}
public static void setLogger( Logger logger )
{
CallerArchievement.logger = logger;
}
public String getCallerCode()
{
return callerCode;
}
public void setCallerCode( String callerCode )
{
this.callerCode = callerCode;
}
public long getTotalArchievement()
{
return totalArchievement;
}
public void setTotalArchievement( long totalArchievement )
{
this.totalArchievement = totalArchievement;
}
public ArrayList<MensualArchievementItem> getMensualArchievementList()
{
return mensualArchievementList;
}
public void setMensualArchievementList(
ArrayList<MensualArchievementItem> mensualArchievementList )
{
this.mensualArchievementList = mensualArchievementList;
}
public String getInsuranceRenewalRate()
{
return insuranceRenewalRate;
}
public void setInsuranceRenewalRate( String insuranceRenewalRate )
{
this.insuranceRenewalRate = insuranceRenewalRate;
}
public String getAttachingRate()
{
return attachingRate;
}
public void setAttachingRate( String attachingRate )
{
this.attachingRate = attachingRate;
}
@JsonProperty( "caller_code" )
private String callerCode;
@JsonProperty( "total_archievement" )
private long totalArchievement; // 总业绩
// 每月业绩列表
// 要保证数据是按照月份排序。
@JsonProperty( "mensual_archievement_list" )
private ArrayList<MensualArchievementItem> mensualArchievementList;
@JsonProperty( "insurance_renewal_rate" )
private String insuranceRenewalRate; // 续保率
@JsonProperty( "attaching_rate" )
private String attachingRate; // 车非渗透率
}

View File

@@ -0,0 +1,172 @@
/*
* @Author: Kane
* @Date: 2023-05-02 10:11:27
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/archievement/DepartmentArchievement.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.utils.archievement;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.cpic.xim.mybatis.mapper.ArchievementMapper;
import com.cpic.xim.mybatis.pojo.MensualArchievementItem;
import com.cpic.xim.mybatis.utils.MybatisUtils;
import com.fasterxml.jackson.annotation.JsonProperty;
public class DepartmentArchievement
{
// log4j2
private static Logger logger = LoggerFactory.getLogger(DepartmentArchievement.class);
/**
* 默认的构造函数提供给json使用。
*/
public DepartmentArchievement()
{
this.totalArchievement = 0;
this.mensualArchievementList = null;
this.insuranceRenewalRate = "";
this.attachingRate = "";
this.departmentCode = "";
}
/**
* @brief 构造函数,提供所有成员对象的值。
* @param departmentCode 部门代码
* @param totalArchievement 总业绩
* @param mensualArchievementList 每月业绩表
* @param insuranceRenewalRate 续保率
* @param attachingRate 车非渗透率
*/
public DepartmentArchievement( String departmentCode, long totalArchievement,
ArrayList<MensualArchievementItem> mensualArchievementList, String insuranceRenewalRate, String attachingRate)
{
this.departmentCode = departmentCode;
this.totalArchievement = totalArchievement;
this.mensualArchievementList = mensualArchievementList;
this.insuranceRenewalRate = insuranceRenewalRate;
this.attachingRate = attachingRate;
}
/**
* 静态方法,用于根据部门代码,查询部门业绩,生成一个 DepartmentArchievement 对象。
* @param departmentCode 部门代码
* @return
* @throws IOException
*/
@SuppressWarnings("unchecked")
public static DepartmentArchievement getDepartmentArchievement( String departmentCode )
throws IOException
{
DepartmentArchievement archievement = null;
try
{
SqlSession session = MybatisUtils.getSqlSession();
ArchievementMapper mapper = session.getMapper(ArchievementMapper.class);
// 参数集合
HashMap<String, Object> params = new HashMap<>(5);
params.put("a_department_code", departmentCode);
mapper.getDepartmentArchievement(params);
Integer totalArchievement = (Integer)params.get("a_total");
String attachingRate = (String)params.get("a_attaching_rate");
String renewalRate = (String)params.get("a_renewal_rate");
ArrayList<MensualArchievementItem> mensual = (ArrayList<MensualArchievementItem>)params.get("a_mensual_cur");
archievement = new DepartmentArchievement(
departmentCode,
totalArchievement.intValue(),
mensual,
renewalRate,
attachingRate);
}
catch ( IOException error )
{
String errorMessage = "查询" + departmentCode + "业绩时出现错误。";
logger.error(errorMessage, error);
throw error;
}
return archievement;
}
public long getTotalArchievement()
{
return totalArchievement;
}
public void setTotalArchievement( long totalArchievement )
{
this.totalArchievement = totalArchievement;
}
public ArrayList<MensualArchievementItem> getMensualArchievementList()
{
return mensualArchievementList;
}
public void setMensualArchievementList( ArrayList<MensualArchievementItem> mensualArchievementList )
{
this.mensualArchievementList = mensualArchievementList;
}
public String getInsuranceRenewalRate()
{
return insuranceRenewalRate;
}
public void setInsuranceRenewalRate( String insuranceRenewalRate )
{
this.insuranceRenewalRate = insuranceRenewalRate;
}
public String getAttachingRate()
{
return attachingRate;
}
public void setAttachingRate( String attachingRate )
{
this.attachingRate = attachingRate;
}
public String getDepartmentCode()
{
return departmentCode;
}
public void setDepartmentCode( String departmentCode )
{
this.departmentCode = departmentCode;
}
@JsonProperty( "department_code" )
private String departmentCode;
@JsonProperty( "total_archievement" )
private long totalArchievement; // 总业绩
// 每月业绩列表
// 要保证数据是按照月份排序。
@JsonProperty( "mensual_archievement_list" )
private ArrayList<MensualArchievementItem> mensualArchievementList;
@JsonProperty( "insurance_renewal_rate" )
private String insuranceRenewalRate; // 续保率
@JsonProperty( "attaching_rate" )
private String attachingRate; // 车非渗透率
}

View File

@@ -0,0 +1,25 @@
/*
* @Author: Kane
* @Date: 2023-07-28 18:39:50
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/exception/ConfigFileExecption.java
* @Description: 配置文件异常
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.utils.exception;
public class ConfigFileExecption extends Exception
{
public ConfigFileExecption()
{
super("配置文件错误!");
}
public ConfigFileExecption( String message )
{
super( message );
}
}

View File

@@ -0,0 +1,23 @@
/*
* @Author: Kane
* @Date: 2023-06-05 10:36:30
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/exception/DepartmentCodeNotFoundException.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.utils.exception;
public class DepartmentCodeNotFoundException extends Exception
{
public DepartmentCodeNotFoundException()
{
super("部门代码无效!");
}
public DepartmentCodeNotFoundException( String message )
{
super( message );
}
}

View File

@@ -0,0 +1,23 @@
/*
* @Author: Kane
* @Date: 2023-06-05 10:56:33
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/exception/ParameterExecption.java
* @Description: 用于表示参数错误的异常对象。
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.utils.exception;
public class ParameterExecption extends Exception
{
public ParameterExecption()
{
super("参数错误!");
}
public ParameterExecption(String message )
{
super( message );
}
}

View File

@@ -0,0 +1,64 @@
/*
* @Author: Kane
* @Date: 2023-06-03 20:02:28
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRanking.java
* @Description: 坐席排行榜项目
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.utils.ranking;
import com.fasterxml.jackson.annotation.JsonProperty;
public class CallerRankingItem
{
public CallerRankingItem() {}
public CallerRankingItem( int index, String callName, String appraiseValue )
{
this.index = index;
this.callerName = callName;
this.appraiseValue = appraiseValue;
}
public int getIndex()
{
return index;
}
public void setIndex( int index )
{
this.index = index;
}
public String getCallerName()
{
return callerName;
}
public void setCallerName( String callerName )
{
this.callerName = callerName;
}
public String getAppraiseValue()
{
return appraiseValue;
}
public void setAppraiseValue( String appraiseValue )
{
this.appraiseValue = appraiseValue;
}
@JsonProperty("index")
private int index;
@JsonProperty("callerName")
private String callerName;
@JsonProperty("appraiseValue")
private String appraiseValue;
}

View File

@@ -0,0 +1,256 @@
/*
* @Author: Kane
* @Date: 2023-06-05 08:55:06
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRankingList.java
* @Description: 坐席排行榜对象
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.utils.ranking;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import org.apache.ibatis.session.SqlSession;
import com.cpic.xim.mybatis.mapper.RankingListMapper;
import com.cpic.xim.mybatis.utils.MybatisUtils;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;
public class CallerRankingList
{
// 以后要改
private static String jdbcURL = "jdbc:oracle:thin:@10.39.0.86:1521:xmcx1";
private static String userName = "desktop_archievement_admin";
private static String password = "Cpic123456";
private CallerRankingList( String departmentCode, String year, String month,
ArrayList<CallerRankingItem> attachingRateRankingList,
ArrayList<CallerRankingItem> renewalRateRankingList)
{
this.departmentCode = departmentCode;
this.year = year;
this.month = month;
this.attachingRateRankingList = attachingRateRankingList;
this.renewalRateRankingList = renewalRateRankingList;
}
@SuppressWarnings("unchecked")
public static CallerRankingList getCallerRankingList( String departmentCode, String year,
String month ) throws IOException
{
CallerRankingList rankingList = null;
// String monthRegx = "(0[1-9])|(1[0-2])";
// String yearRegx = "202[0-9]";
SqlSession session = MybatisUtils.getSqlSession();
RankingListMapper mapper = session.getMapper(RankingListMapper.class);
HashMap<String,Object> params = new HashMap<>();
params.put("a_department_code", departmentCode);
params.put("a_year", year);
params.put("a_month", month);
mapper.getRankingList(params);
ArrayList<CallerRankingItem> attachingRateRankingList = (ArrayList<CallerRankingItem>)params.get("a_attaching_ranking_list");
ArrayList<CallerRankingItem> renewalRateList = (ArrayList<CallerRankingItem>)params.get("a_renewal_ranking_list");
rankingList = new CallerRankingList(departmentCode, year, month, attachingRateRankingList, renewalRateList);
return rankingList;
}
/**
* @brief static方法用于查询部门坐席排行榜
* @param departmentCode 部门代码
* @param year 排行榜年份
* @param month 排行榜月份
* @return CallerRankingList的实例对象
*/
public static CallerRankingList getCallerRankingList2( String departmentCode, String year,
String month ) throws ClassNotFoundException, SQLException
{
CallerRankingList rankingList = null;
Connection connection = null;
CallableStatement statement = null;
ResultSet cur_attaching = null;
ResultSet cur_renewal = null;
String sql = """
{call telsale_archievement_pkg.caller_arch_ranking_list(?,?,?,?,?)}
""";
// String monthRegx = "(0[1-9])|(1[0-2])";
// String yearRegx = "20[0-2][0-0]";
ArrayList<CallerRankingItem> attachingRateRankingList = new ArrayList<>();
ArrayList<CallerRankingItem> renewalRateRankingList = new ArrayList<>();
int index = 1;
try
{
Class.forName( "oracle.jdbc.driver.OracleDriver" );
connection = DriverManager.getConnection( jdbcURL, userName, password );
statement = connection.prepareCall( sql );
statement.setString( 1, departmentCode );
statement.setString( 2, year );
statement.setString( 3, month );
statement.registerOutParameter( 4, OracleTypes.CURSOR );
statement.registerOutParameter( 5, OracleTypes.CURSOR );
statement.execute();
// 车非渗透率
cur_attaching = ((OracleCallableStatement) statement).getCursor( 4 );
index = 1;
while (cur_attaching.next())
{
String callerName = cur_attaching.getString( 1 );
String appraiseValue = cur_attaching.getString( 2 );
CallerRankingItem caller =
new CallerRankingItem( index, callerName, appraiseValue );
attachingRateRankingList.add( caller );
index++;
}
// 续保率
cur_renewal = ((OracleCallableStatement) statement).getCursor( 5 );
index = 1;
while (cur_renewal.next())
{
String callerName = cur_renewal.getString( 1 );
String appraiseValue = cur_renewal.getString( 2 );
CallerRankingItem caller =
new CallerRankingItem( index, callerName, appraiseValue );
renewalRateRankingList.add( caller );
index++;
}
rankingList = new CallerRankingList( departmentCode, year, month,
attachingRateRankingList, renewalRateRankingList );
}
finally
{
try
{
if ( cur_attaching != null )
{
cur_attaching.close();
}
}
catch ( Exception exception )
{
exception.printStackTrace();
}
try
{
if ( statement != null )
{
statement.close();
}
}
catch ( Exception exception )
{
exception.printStackTrace();
}
try
{
if ( connection != null )
{
connection.close();
}
}
catch ( Exception exception )
{
exception.printStackTrace();
}
}
return rankingList;
}
public String getDepartmentCode()
{
return departmentCode;
}
public void setDepartmentCode( String departmentCode )
{
this.departmentCode = departmentCode;
}
public String getYear()
{
return year;
}
public void setYear( String year )
{
this.year = year;
}
public String getMonth()
{
return month;
}
public void setMonth( String month )
{
this.month = month;
}
public ArrayList<CallerRankingItem> getAttachingRateRankingList()
{
return attachingRateRankingList;
}
public void setAttachingRateRankingList( ArrayList<CallerRankingItem> attachingRateRankingList )
{
this.attachingRateRankingList = attachingRateRankingList;
}
public ArrayList<CallerRankingItem> getRenewalRateRankingList()
{
return renewalRateRankingList;
}
public void setRenewalRateRankingList( ArrayList<CallerRankingItem> renewalRateRankingList )
{
this.renewalRateRankingList = renewalRateRankingList;
}
// 部门代码
private String departmentCode;
// 排行榜年份
private String year;
// 排行榜统计月份
private String month;
// 车非融合率排行
private ArrayList<CallerRankingItem> attachingRateRankingList;
// 续保率排行
private ArrayList<CallerRankingItem> renewalRateRankingList;
}

View File

@@ -0,0 +1,74 @@
/*
* @Author: Kane
* @Date: 2023-04-05 22:34:36
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/QueryResult.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers;
import com.fasterxml.jackson.annotation.JsonProperty;
public class QueryResult {
public QueryResult(boolean success, String message) {
this.success = success;
this.message = message;
}
public QueryResult() {
this.success = false;
this.message = "";
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (success ? 1231 : 1237);
result = prime * result + ((message == null) ? 0 : message.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
QueryResult other = (QueryResult) obj;
if (success != other.success) return false;
if (message == null) {
if (other.message != null) return false;
} else if (!message.equals(other.message)) return false;
return true;
}
@Override
public String toString() {
return "QueryResult [success=" + success + ", message=" + message + "]";
}
@JsonProperty("success")
private boolean success;
@JsonProperty("message")
private String message;
}

View File

@@ -11,15 +11,24 @@ package com.cpic.xim.web.controllers.account;
import java.sql.SQLException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.cpic.xim.utils.account.CpicXIMStaffInfo;
import com.cpic.xim.utils.account.TeleSalerInfo;
@Controller
//@CrossOrigin
@RequestMapping( "/account" )
public class StaffInfoQueryController
{
/**
* @description:
* @param account: 前端发送的请求内容员工的P13账号或P09工号。
* @return {*}
*/
@RequestMapping( "/query_staff_info.do" )
@ResponseBody
public StaffInfoQueryResult queryStaffInfo( @RequestParam( "account" ) String account )
@@ -48,5 +57,55 @@ public class StaffInfoQueryController
return result;
}
/**
* 查询坐席工号的接口方法。
* @param telSaler
* @return 返回表示查询结果的 TeleSalerQueryResult 对象转换成JSON。
*/
@RequestMapping( "/query_telsaler_info.do" )
@ResponseBody
public TeleSalerQueryResult queryTeleSalerInfo(
@RequestBody TelsalerQueryRequest telSaler )
{
TeleSalerQueryResult result = new TeleSalerQueryResult();
TeleSalerInfo saler = null;
try
{
saler = TeleSalerInfo.queryTeleSalerInfo( telSaler.getTelSalerCode() );
// 根据返回结果是否为 null判断是否查询到坐席信息
if ( saler != null )
{
// 不为 null有查询到
result.setTelSalerCode( saler.getCode() );
result.setTelSalerName( saler.getName() );
result.setTeamCode( saler.getTeamCode() );
result.setTeamName( saler.getTeamName() );
result.setDepartmentCode( saler.getDepartmentCode() );
result.setDepartmentName( saler.getDepartmentName() );
result.setSuccess( true );
} else
{
// 为 null 则没查询到
result.setSuccess( false );
result.setMessage( "未查询到坐席信息!" );
}
}
catch ( SQLException error )
{
result.setSuccess( false );
result.setMessage( "查询工号失败,失败原因:" + error.getMessage() );
}
catch ( ClassNotFoundException error )
{
result.setSuccess( false );
result.setMessage( error.getMessage() );
}
return result;
}
}

View File

@@ -86,8 +86,7 @@ public class StaffInfoQueryResult
{
if ( other.message != null )
return false;
}
else if ( !message.equals( other.message ) )
} else if ( !message.equals( other.message ) )
return false;
return true;
}

View File

@@ -0,0 +1,130 @@
/*
* @Author: Kane
* @Date: 2023-04-06 09:25:25
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/account/TeleSalerQueryResult.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.account;
import com.cpic.xim.web.controllers.QueryResult;
import com.fasterxml.jackson.annotation.JsonProperty;
public class TeleSalerQueryResult extends QueryResult
{
public TeleSalerQueryResult()
{
super();
}
/**
* @description: 构造函数
* @param success: 请求成功标志位
* @param message: 请求结果提示信息
* @param teleSalerCode: 坐席工号
* @param teleSalerName: 坐席名称
* @param teamCode: 团队代码
* @param teamName: 团队名称
* @param departmentCode: 部门代码
* @param departmentName: 部门名称
*/
public TeleSalerQueryResult( boolean success, String message, String telSalerCode,
String telSalerName, String teamCode, String teamName, String departmentCode,
String departmentName)
{
super( success, message );
this.telSalerCode = telSalerCode;
this.telSalerName = telSalerName;
this.teamCode = teamCode;
this.teamName = teamName;
this.departmentCode = departmentCode;
this.departmentName = departmentName;
}
public String getTelSalerCode()
{
return telSalerCode;
}
/**
* @description:
* @param {String} teleSalerCode
* @return {*}
*/
public void setTelSalerCode( String telSalerCode )
{
this.telSalerCode = telSalerCode;
}
public String getTelSalerName()
{
return telSalerName;
}
public void setTelSalerName( String telSalerName )
{
this.telSalerName = telSalerName;
}
public String getTeamCode()
{
return teamCode;
}
public void setTeamCode( String teamCode )
{
this.teamCode = teamCode;
}
public String getTeamName()
{
return teamName;
}
public void setTeamName( String teamName )
{
this.teamName = teamName;
}
public String getDepartmentCode()
{
return departmentCode;
}
public void setDepartmentCode( String departmentCode )
{
this.departmentCode = departmentCode;
}
public String getDepartmentName()
{
return departmentName;
}
public void setDepartmentName( String departmentName )
{
this.departmentName = departmentName;
}
@JsonProperty( "tel_saler_code" )
private String telSalerCode;
@JsonProperty( "tel_saler_name" )
private String telSalerName;
@JsonProperty( "team_code" )
private String teamCode;
@JsonProperty( "team_name" )
private String teamName;
@JsonProperty( "department_code" )
private String departmentCode;
@JsonProperty( "department_name" )
private String departmentName;
}

View File

@@ -0,0 +1,35 @@
/*
* @Author: Kane
* @Date: 2023-04-28 14:40:49
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/account/TelsalerQueryRequest.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.account;
import com.fasterxml.jackson.annotation.JsonProperty;
public class TelsalerQueryRequest
{
public TelsalerQueryRequest() {}
public TelsalerQueryRequest( String telSalerCode )
{
this.telSalerCode = telSalerCode;
}
public String getTelSalerCode()
{
return telSalerCode;
}
public void setTelSalerCode( String telSalerCode )
{
this.telSalerCode = telSalerCode;
}
@JsonProperty("telsaler_code")
private String telSalerCode;
}

View File

@@ -4,60 +4,153 @@
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/ArchievementQueryController.java
* @Description:
* 业绩查询控制器:
* 1、queryDepartmentArchievement响应部门业绩查询
* 2、
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement;
import java.util.Vector;
import java.io.IOException;
import java.util.ArrayList;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.cpic.xim.utils.archievement.CallerArchievement;
import com.cpic.xim.utils.archievement.DepartmentArchievement;
import com.cpic.xim.utils.ranking.CallerRankingItem;
import com.cpic.xim.utils.ranking.CallerRankingList;
import com.cpic.xim.web.controllers.archievement.RankingList.RankingListRequest;
import com.cpic.xim.web.controllers.archievement.RankingList.RankingListResponse;
import com.cpic.xim.web.controllers.archievement.caller.CallerArchievementQueryRequest;
import com.cpic.xim.web.controllers.archievement.caller.CallerArchievementQueryResult;
import com.cpic.xim.web.controllers.archievement.department.DepartmentArchievementQueryRequest;
import com.cpic.xim.web.controllers.archievement.department.DepartmentArchievementQueryResult;
@Controller
@RequestMapping( "/archievement" )
public class ArchievementQueryController
{
@PostMapping( "/query_caller_archievement.do" )
public void queryCallerArchievement()
{
// 日志
private static Logger logger = LoggerFactory.getLogger( ArchievementQueryController.class );
}
/**
* 查询坐席业绩
*/
// @PostMapping( "/query_caller_archievement.do" )
// public void queryCallerArchievement()
// {
// }
/**
* 查询部门业绩
* @param request DepartmentArchievementQueryRequest 类型的部门参数。
* @return 返回 DepartmentArchievementQueryResult 对象。
*/
@PostMapping( "/query_department_archievement.do" )
@ResponseBody
public DepartmentArchievementQueryResult queryDepartmentArchievement()
public DepartmentArchievementQueryResult queryDepartmentArchievement(
@RequestBody DepartmentArchievementQueryRequest request )
{
DepartmentArchievementQueryResult result = new DepartmentArchievementQueryResult();
DepartmentArchievement departmentArch = null;
genTestDepartmentData( result );
try
{
// 查询业绩
departmentArch =
DepartmentArchievement.getDepartmentArchievement( request.getDepartmentCode() );
result.setTotalArchievement( departmentArch.getTotalArchievement() );
result.setInsuranceRenewalRate( departmentArch.getInsuranceRenewalRate() );
result.setAttachingRate( departmentArch.getAttachingRate() );
result.addAdvanceRewardGainer( "沈群" );
result.addLeadingRewardGainer( "王鸿津" );
result.addLeadingRewardGainer( "林宗泽" );
result.addBackwardStaff( "王炜" );
result.setMensualArchievementList( departmentArch.getMensualArchievementList() );
}
catch ( IOException error )
{
}
result.setSuccess( true );
result.setMessage( "成功" );
return result;
}
void genTestDepartmentData( DepartmentArchievementQueryResult data )
@ResponseBody
@PostMapping( "/query_caller_archievement.do" )
public CallerArchievementQueryResult queryCallerArchievement(
@RequestBody CallerArchievementQueryRequest request )
{
Vector<Integer> mensual_archievement = new Vector<Integer>();
CallerArchievementQueryResult result = null;
mensual_archievement.add( 200 );
mensual_archievement.add( 213 );
mensual_archievement.add( 333 );
mensual_archievement.add( 444 );
mensual_archievement.add( 555 );
mensual_archievement.add( 666 );
try
{
CallerArchievement archievement =
CallerArchievement.getCallerArchievement( request.getCallerCode() );
data.setSuccess( true );
data.setMessage( "成功" );
data.setTotalArchievement( 1234567890 );
data.setInsuranceRenewalRate( "65" );
data.setAttachingRate( "75" );
data.addAdvanceRewardGainer( "沈群" );
data.addLeadingRewardGainer( "王鸿津" );
data.addLeadingRewardGainer( "林宗泽" );
data.addBackwardStaff( "王炜" );
data.setMensualArchievementList( null );
data.setMensualArchievementList( mensual_archievement );
result = new CallerArchievementQueryResult( true, "查询成功", archievement.getCallerCode(),
request.getCallName(), archievement.getTotalArchievement(),
archievement.getMensualArchievementList(),
archievement.getInsuranceRenewalRate(), archievement.getAttachingRate() );
}
catch ( IOException error )
{
result = new CallerArchievementQueryResult(false, error.getMessage(), null, null, 0, null, null, null);
}
return result;
}
@RequestMapping( "/query_ranking_list.do" )
@ResponseBody
public RankingListResponse queryCallerArchievementRankingList(
@RequestBody RankingListRequest request )
{
String departmentCode = request.getDepartmentCode();
String year = request.getYear();
String month = request.getMonth();
boolean success = false;
String message = "";
ArrayList<CallerRankingItem> attachingRateRankingList = null;
ArrayList<CallerRankingItem> renewalRateRankingList = null;
try
{
CallerRankingList rankingList =
CallerRankingList.getCallerRankingList( departmentCode, year, month );
attachingRateRankingList = rankingList.getAttachingRateRankingList();
renewalRateRankingList = rankingList.getRenewalRateRankingList();
success = true;
message = "调用成功!";
}
catch ( IOException error )
{
success = false;
message = "获取排行榜失败,原因:" + error.getMessage();
logger.error( message, error );
}
RankingListResponse response = new RankingListResponse( success, message, departmentCode,
year, month, attachingRateRankingList, renewalRateRankingList );
return response;
}
}

View File

@@ -1,8 +0,0 @@
package com.cpic.xim.web.controllers.archievement;
public class CallerArchievementQueryResult
{
}

View File

@@ -0,0 +1,56 @@
/*
* @Author: Kane
* @Date: 2023-06-03 19:56:03
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/RankingList/RankingListRequest.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.RankingList;
import com.fasterxml.jackson.annotation.JsonProperty;
public class RankingListRequest
{
public RankingListRequest() {}
public String getDepartmentCode()
{
return departmentCode;
}
public void setDepartmentCode( String departmentCode )
{
this.departmentCode = departmentCode;
}
public String getYear()
{
return year;
}
public void setYear( String year )
{
this.year = year;
}
public String getMonth()
{
return month;
}
public void setMonth( String month )
{
this.month = month;
}
@JsonProperty("departmentCode")
private String departmentCode;
@JsonProperty("year")
private String year;
@JsonProperty("month")
private String month;
}

View File

@@ -0,0 +1,106 @@
/*
* @Author: Kane
* @Date: 2023-06-03 20:18:46
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/RankingList/RankingListResponse.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.RankingList;
import java.util.ArrayList;
import com.cpic.xim.utils.ranking.CallerRankingItem;
import com.cpic.xim.web.controllers.QueryResult;
import com.fasterxml.jackson.annotation.JsonProperty;
public class RankingListResponse extends QueryResult
{
public RankingListResponse()
{
super();
}
public RankingListResponse( boolean success, String message, String departmentCode, String year,
String month, ArrayList<CallerRankingItem> attachingRateRankingList,
ArrayList<CallerRankingItem> renewalRateRankingList)
{
super( success, message );
this.departmentCode = departmentCode;
this.year = year;
this.month = month;
this.attachingRateRankingList = attachingRateRankingList;
this.renewalRateRankingList = renewalRateRankingList;
}
public String getDepartmentCode()
{
return departmentCode;
}
public void setDepartmentCode( String departmentCode )
{
this.departmentCode = departmentCode;
}
public String getYear()
{
return year;
}
public void setYear( String year )
{
this.year = year;
}
public String getMonth()
{
return month;
}
public void setMonth( String month )
{
this.month = month;
}
public ArrayList<CallerRankingItem> getAttachingRateRankingList()
{
return attachingRateRankingList;
}
public void setAttachingRateRankingList( ArrayList<CallerRankingItem> attachingRateRankingList )
{
this.attachingRateRankingList = attachingRateRankingList;
}
public ArrayList<CallerRankingItem> getRenewalRateRankingList()
{
return renewalRateRankingList;
}
public void setRenewalRateRankingList( ArrayList<CallerRankingItem> renewalRateRankingList )
{
this.renewalRateRankingList = renewalRateRankingList;
}
// 部门代码
@JsonProperty( "departmentCode" )
private String departmentCode;
// 统计年份
@JsonProperty( "year" )
private String year;
// 统计月份
@JsonProperty( "month" )
private String month;
// 车非融合率排行
@JsonProperty( "attachingRateRankingList" )
private ArrayList<CallerRankingItem> attachingRateRankingList;
// 续保率排行
@JsonProperty( "renewalRateRankingList" )
private ArrayList<CallerRankingItem> renewalRateRankingList;
}

View File

@@ -0,0 +1,43 @@
/*
* @Author: Kane
* @Date: 2023-08-26 13:20:32
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/caller/CallerArchievementQueryRequest.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.caller;
import com.fasterxml.jackson.annotation.JsonProperty;
public class CallerArchievementQueryRequest
{
public CallerArchievementQueryRequest() {}
public String getCallerCode()
{
return callerCode;
}
public void setCallerCode( String callerCode )
{
this.callerCode = callerCode;
}
public String getCallName()
{
return callName;
}
public void setCallName( String callName )
{
this.callName = callName;
}
@JsonProperty("callerCode")
private String callerCode;
@JsonProperty("callerName")
private String callName;
}

View File

@@ -0,0 +1,123 @@
/*
* @Author: Kane
* @Date: 2023-06-06 17:35:54
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/caller/CallerArchievementQueryResult.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.caller;
import com.cpic.xim.mybatis.pojo.MensualArchievementItem;
import com.cpic.xim.web.controllers.QueryResult;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
public class CallerArchievementQueryResult extends QueryResult
{
/**
*
* @param success
* @param message
* @param callerCode
* @param callerName
* @param totalArchievement
* @param mensualArchievementList
* @param insuranceRenewalRate
* @param attachingRate
*/
public CallerArchievementQueryResult( boolean success, String message, String callerCode,
String callerName, long totalArchievement,
ArrayList<MensualArchievementItem> mensualArchievementList, String insuranceRenewalRate,
String attachingRate)
{
super( success, message );
this.callerCode = callerCode;
this.callerName = callerName;
this.totalArchievement = totalArchievement;
this.mensualArchievementList = mensualArchievementList;
this.insuranceRenewalRate = insuranceRenewalRate;
this.attachingRate = attachingRate;
}
@JsonProperty("callerCode")
String callerCode;
public String getCallerCode()
{
return callerCode;
}
public void setCallerCode( String callerCode )
{
this.callerCode = callerCode;
}
public String getCallerName()
{
return callerName;
}
public void setCallerName( String callerName )
{
this.callerName = callerName;
}
public long getTotalArchievement()
{
return totalArchievement;
}
public void setTotalArchievement( long totalArchievement )
{
this.totalArchievement = totalArchievement;
}
public ArrayList<MensualArchievementItem> getMensualArchievementList()
{
return mensualArchievementList;
}
public void setMensualArchievementList( ArrayList<MensualArchievementItem> mensualArchievementList )
{
this.mensualArchievementList = mensualArchievementList;
}
public String getInsuranceRenewalRate()
{
return insuranceRenewalRate;
}
public void setInsuranceRenewalRate( String insuranceRenewalRate )
{
this.insuranceRenewalRate = insuranceRenewalRate;
}
public String getAttachingRate()
{
return attachingRate;
}
public void setAttachingRate( String attachingRate )
{
this.attachingRate = attachingRate;
}
@JsonProperty("callerName")
String callerName;
@JsonProperty( "total_archievement" )
private long totalArchievement; // 总业绩
// 每月业绩列表
// 要保证数据是按照月份排序。
@JsonProperty( "mensual_archievement_list" )
private ArrayList<MensualArchievementItem> mensualArchievementList;
@JsonProperty( "insurance_renewal_rate" )
private String insuranceRenewalRate; // 续保率
@JsonProperty( "attaching_rate" )
private String attachingRate; // 车非渗透率
}

View File

@@ -0,0 +1,56 @@
/*
* @Author: Kane
* @Date: 2023-04-30 11:11:34
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/DepartmentArchievementQueryRequest.java
* @Description: 部门业绩请求参数类
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement.department;
import com.fasterxml.jackson.annotation.JsonProperty;
public class DepartmentArchievementQueryRequest
{
public DepartmentArchievementQueryRequest()
{}
/**
* 构造函数
* @param departmentCode 部门代码
* @param departmentName 部门名称
*/
public DepartmentArchievementQueryRequest( String departmentCode, String departmentName)
{
this.departmentCode = departmentCode;
this.departmentName = departmentName;
}
public String getDepartmentCode()
{
return departmentCode;
}
public void setDepartmentCode( String departmentCode )
{
this.departmentCode = departmentCode;
}
public String getDepartmentName()
{
return departmentName;
}
public void setDepartmentName( String departmentName )
{
this.departmentName = departmentName;
}
@JsonProperty( "departmentCode" )
private String departmentCode;
@JsonProperty( "departmentName" )
private String departmentName;
}

View File

@@ -2,47 +2,51 @@
* @Author: Kane
* @Date: 2023-03-16 09:32:53
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/DepartmentArchievementQueryResult.java
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/department/DepartmentArchievementQueryResult.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.archievement;
package com.cpic.xim.web.controllers.archievement.department;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import com.cpic.xim.mybatis.pojo.MensualArchievementItem;
import com.cpic.xim.web.controllers.QueryResult;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* 查询部门业绩返回结果
* MensualArchievementList 每月业绩要保证数据是按照月份排序
*/
public class DepartmentArchievementQueryResult
public class DepartmentArchievementQueryResult extends QueryResult
{
DepartmentArchievementQueryResult()
public DepartmentArchievementQueryResult()
{
mensualArchievementList = new Vector<Integer>();
mensualArchievementList = new ArrayList<MensualArchievementItem>();
advanceRewardGainers = new Vector<String>();
leadingRewardGainers = new Vector<String>();
backwardList = new Vector<String>();
}
public int getTotalArchievement()
public long getTotalArchievement()
{
return totalArchievement;
}
public void setTotalArchievement( int totalArchievement )
public void setTotalArchievement( long totalArchievement )
{
this.totalArchievement = totalArchievement;
}
public Vector<Integer> getMensualArchievementList()
public List<MensualArchievementItem> getMensualArchievementList()
{
return mensualArchievementList;
}
public void setMensualArchievementList( Vector<Integer> mensualArchievementList )
public void setMensualArchievementList( ArrayList<MensualArchievementItem> mensualArchievementList )
{
this.mensualArchievementList = mensualArchievementList;
}
@@ -112,39 +116,13 @@ public class DepartmentArchievementQueryResult
this.backwardList = backwardList;
}
public boolean isSuccess()
{
return success;
}
public void setSuccess( boolean success )
{
this.success = success;
}
public String getMessage()
{
return message;
}
public void setMessage( String message )
{
this.message = message;
}
@JsonProperty( "success" )
private boolean success;
@JsonProperty( "message" )
private String message;
@JsonProperty( "total_archievement" )
private int totalArchievement; // 总业绩
private long totalArchievement; // 总业绩
// 每月业绩列表
// 要保证数据是按照月份排序
@JsonProperty( "mensual_archievement_list" )
private Vector<Integer> mensualArchievementList;
private ArrayList<MensualArchievementItem> mensualArchievementList;
@JsonProperty( "insurance_renewal_rate" )
private String insuranceRenewalRate; // 续保率
@@ -160,6 +138,4 @@ public class DepartmentArchievementQueryResult
@JsonProperty( "backward_list" )
private Vector<String> backwardList; // 消七灭六坐席
}

View File

@@ -0,0 +1,26 @@
/*
* @Author: Kane
* @Date: 2023-06-19 10:01:43
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/caller/CallerController.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.caller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/caller")
public class CallerController
{
public CallerController() {}
@RequestMapping("/quer_caller.do")
public static void queryCaller()
{
}
}

View File

@@ -0,0 +1,25 @@
/*
* @Author: Kane
* @Date: 2023-06-19 15:33:23
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/caller/QueryCallerRequest.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.caller;
import com.fasterxml.jackson.annotation.JsonProperty;
@SuppressWarnings("all")
public class QueryCallerRequest
{
public QueryCallerRequest() {}
private String callerCode;
private String callerName;
private String teamCode;
private String teamName;
private String departmentCode;
private String departmentName;
}

View File

@@ -17,19 +17,33 @@ import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpMethod;
public class CrosFilter implements Filter
{
private static Logger logger = LoggerFactory.getLogger(CrosFilter.class);
@Override
public void doFilter( ServletRequest req, ServletResponse resp, FilterChain chain )
throws ServletException, IOException
{
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String method = request.getMethod();
String originHeader = request.getHeader( "Origin" );
logger.info( "收到" + method + "请求,来自" + originHeader);
// 如果是Options请求
if ( method.equals(HttpMethod.OPTIONS.toString()) )
{
originHeader = "*";
}
response.setHeader( "Access-Control-Allow-Origin", originHeader );
response.setHeader( "Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE" );
response.setHeader( "Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT" );
response.setHeader( "Access-Control-Max-Age", "0" );
response.setHeader( "Access-Control-Allow-Headers",
"Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token" );

View File

@@ -0,0 +1,28 @@
<Configuration status="WARN" monitorInterval="300">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<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"
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>
</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="Console" />
</Root>
</Loggers>
</Configuration>

View File

@@ -0,0 +1,4 @@
jdbc.oracle.driver=oracle.jdbc.driver.OracleDriver
jdbc.oracle.xmcx1.url=jdbc:oracle:thin:@10.39.0.86:1521:xmcx1
jdbc.oracle.xmcx1.username=desktop_archievement_admin
jdbc.oracle.xmcx1.password=Cpic123456

View File

@@ -0,0 +1,25 @@
<?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" 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},
#{a_renewal_rate, mode=OUT, jdbcType=VARCHAR},
#{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer},
#{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper})
</select>
<select id="getCallerArchievement" 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},
#{a_renewal_rate, mode=OUT, jdbcType=VARCHAR},
#{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer},
#{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper})
</select>
<resultMap id="MensualArchievementMapper" type="MensualArchievementItem">
<id property="month" column="mm" javaType="INT"/>
<result property="premium" column="bf" />
</resultMap>
</mapper>

View File

@@ -0,0 +1,22 @@
<?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.RankingListMapper">
<select id="getRankingList" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsale_archievement_pkg.caller_arch_ranking_list(
#{a_department_code,mode=IN,jdbcType=VARCHAR},
#{a_year,mode=IN,jdbcType=VARCHAR},
#{a_month,mode=IN,jdbcType=VARCHAR},
#{a_attaching_ranking_list,mode=OUT,jdbcType=CURSOR, resultMap=AttachingRateRankingMap},
#{a_renewal_ranking_list,mode=OUT,jdbcType=CURSOR, resultMap=RenewalRateRankingMap})
</select>
<resultMap id="AttachingRateRankingMap" type="CallerRankingItem">
<id property="index" column="rownum" jdbcType="INTEGER" javaType="int"/>
<result property="callerName" column="caller_name" jdbcType="VARCHAR" javaType="String"/>
<result property="appraiseValue" column="attaching_rate" jdbcType="VARCHAR" javaType="String"/>
</resultMap>
<resultMap id="RenewalRateRankingMap" type="CallerRankingItem">
<id property="index" column="rownum" jdbcType="INTEGER" javaType="int"/>
<result property="callerName" column="caller_name" jdbcType="VARCHAR" javaType="String"/>
<result property="appraiseValue" column="renewal_rate" jdbcType="VARCHAR" javaType="String"/>
</resultMap>
</mapper>

View File

@@ -0,0 +1,37 @@
<?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.StaffMapper">
<select id="queryCpicStaff" resultMap="CpicXIMStaff" >
SELECT ry.p13uid,
ry.staff_code,
ry.staff_name,
bm.department_code,
bm.department_name,
ksh.section_office_code,
ksh.section_office_name
FROM idst0.rydm_t ry,
idst0.ks_t ksh,
idst0.bm_t bm
WHERE ry.staff_code = #{staffCode,mode=IN}
AND ry.department_code = bm.department_code
AND ry.section_office_code = ksh.section_office_code
</select>
<resultMap id="CpicXIMStaff" type="com.cpic.xim.mybatis.pojo.CpicStaff">
<!-- <constructor>
<arg column="p13uid" name="p13uid"/>
<arg column="staff_code" name="staffCode"/>
<arg column="staff_name" name="staffName"/>
<arg column="department_code" name="departmentCode"/>
<arg column="department_name" name="departmentName"/>
<arg column="section_office_code" name="sectionOfficeCode"/>
<arg column="section_office_name" name="sectionOfficeName"/>
</constructor> -->
<id property="staffCode" column="staff_code"/>
<result property="staffName" column="staff_name"/>
<result property="p13UID" column="p13uid"/>
<result property="departmentCode" column="department_code"/>
<result property="departmentName" column="department_name"/>
<result property="sectionOfficeCode" column="section_office_code"/>
<result property="sectionOfficeName" column="section_office_name"/>
</resultMap>
</mapper>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="mybatis/jdbc.properties" />
<!-- 类型别名 -->
<typeAliases>
<package name="com.cpic.xim.mybatis.pojo" />
<package name="com.cpic.xim.utils.ranking" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.oracle.driver}" />
<property name="url" value="${jdbc.oracle.xmcx1.url}" />
<property name="username" value="${jdbc.oracle.xmcx1.username}" />
<property name="password" value="${jdbc.oracle.xmcx1.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- <mapper resource="mybatis/mapper/StaffMapper.xml" /> -->
<mapper resource="mybatis/mapper/ArchievementMapper.xml" />
<mapper resource="mybatis/mapper/RankingListMapper.xml" />
</mappers>
</configuration>

View File

@@ -0,0 +1,117 @@
/*
* @Author: Kane
* @Date: 2023-05-15 14:59:26
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/test/java/com/cpic/xim/DesktopArchievement/test/DesktopArchievementTest.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.DesktopArchievement.test;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.cpic.xim.mybatis.mapper.ArchievementMapper;
import com.cpic.xim.mybatis.pojo.MensualArchievementItem;
import com.cpic.xim.utils.archievement.DepartmentArchievement;
import com.cpic.xim.utils.ranking.CallerRankingList;
import com.cpic.xim.mybatis.utils.MybatisUtils;
@SuppressWarnings( "all" )
public class DesktopArchievementTest
{
private static String configFilePath = "mybatis/mybatis-config.xml";
private static Logger logger = LoggerFactory.getLogger( DesktopArchievementTest.class );
@Test
public void testCallerRankingList()
{
CallerRankingList rankingList = null;
try
{
rankingList = CallerRankingList.getCallerRankingList( "QDI", "2023", "06" );
}
catch ( IOException error )
{
String message = "获取排行榜失败,原因:" + error.getMessage();
logger.error( message, error );
}
assertNotNull( rankingList );
}
@Test
public void testDepartmentArchievement()
{
try
{
InputStream configFile = Resources.getResourceAsStream( configFilePath );
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build( configFile );
SqlSession session = factory.openSession();
ArchievementMapper mapper = session.getMapper( ArchievementMapper.class );
ArrayList<MensualArchievementItem> mensual = null;
HashMap<String, Object> params = new HashMap<>();
params.put( "a_department_code", "QDI" );
mapper.getDepartmentArchievement( params );
mensual = (ArrayList<MensualArchievementItem>) params.get( "a_mensual_cur" );
Integer total = (Integer) params.get( "a_total" );
System.out.println( params.toString() );
System.out.println( mensual.toString() );
assertTrue( params.size() > 1 );
}
catch ( IOException error )
{
assert (false);
}
}
@Test
public void testCallerArchievement()
{
try
{
SqlSession session = MybatisUtils.getSqlSession();
ArchievementMapper mapper = session.getMapper( ArchievementMapper.class );
ArrayList<MensualArchievementItem> mensual = null;
HashMap<String, Object> params = new HashMap<>();
params.put( "a_caller_code", "5500065875" );
mapper.getCallerArchievement( params );
Object obj = params.get( "a_mensual_cur" );
mensual = (ArrayList<MensualArchievementItem>)params.get( "a_mensual_cur" );
System.out.println( params.toString() );
System.out.println( mensual.toString() );
System.out.println( obj.getClass());
assertTrue( params.size() > 1 );
}
catch ( IOException error )
{
assert (false);
}
}
}

Binary file not shown.

Binary file not shown.

BIN
文档/坐席清单.xlsx Normal file

Binary file not shown.