24 Commits

Author SHA1 Message Date
c6ea898505 保存进度! 2025-09-03 15:32:36 +08:00
711697e6a1 升级ts代码。 2025-09-03 15:29:46 +08:00
89866c8513 更新一些设置。 2025-03-16 23:04:40 +08:00
f90114e204 保存进度! 2024-02-29 01:18:04 +08:00
0458da2fae 保存进度! 2024-02-29 01:16:27 +08:00
46d0ff64ef 升级依赖。 2024-02-28 18:24:06 +08:00
57b5edd9c0 整理依赖 2024-01-29 19:31:29 +08:00
73cfe24460 修复依赖问题! 2024-01-25 11:01:27 +08:00
9e0d07a9f7 升级依赖。 2024-01-21 19:03:17 +08:00
ab957962fc 升级依赖。 2024-01-21 19:01:40 +08:00
da9da6e906 升级依赖 2024-01-21 19:01:14 +08:00
7ba9d249ee 修改bug。 2024-01-11 18:46:08 +08:00
afccb2a88c 续保率报表格式修改,还未完成。 2024-01-10 18:24:10 +08:00
962c22400e 升级依赖。 2024-01-09 17:52:41 +08:00
c7bf9f6c0d 升级依赖。 2024-01-03 18:46:55 +08:00
daa1d2aaaf 升级依赖。 2023-12-29 19:28:29 +08:00
6a93fc2738 保存进度! 2023-12-29 19:24:25 +08:00
e3858d23d9 Merge branch 'feature-telsaler' of http://222.76.244.118:3000/CPICXIM/desktop_task_schedule into feature-telsaler 2023-12-26 18:00:22 +08:00
0cf8e16129 修改请求超时时间为30秒。 2023-12-26 18:00:14 +08:00
fe6707ca3f 保存进度! 2023-12-20 23:36:28 +08:00
c6705d326d 保存进度! 2023-12-20 22:40:27 +08:00
3e071cedd7 升级依赖。 2023-12-19 18:33:27 +08:00
c7ae33222d 保存进度! 2023-12-19 18:30:32 +08:00
a9c6e0476b 保存进度! 2023-12-18 18:43:58 +08:00
55 changed files with 2372 additions and 10606 deletions

View File

@@ -0,0 +1,28 @@
CREATE OR REPLACE PACKAGE TELSALER_TWR_UTILS IS
-- Author : KANE
-- Created : 2023/12/19 16:27:20
-- Purpose : twr<77><72><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĹ<D8B5><C4B9>ߺ<EFBFBD><DFBA><EFBFBD>
PROCEDURE <20><><EFBFBD><EFBFBD>TWR<57><52>ϯ<EFBFBD>嵥;
PROCEDURE <20><><EFBFBD><EFBFBD>TWR<57>Ŷ<EFBFBD><C5B6>嵥;
END TELSALER_TWR_UTILS;
/
CREATE OR REPLACE PACKAGE BODY TELSALER_TWR_UTILS IS
PROCEDURE <20><><EFBFBD><EFBFBD>TWR<57><52>ϯ<EFBFBD>嵥 IS
BEGIN
EXECUTE IMMEDIATE 'truncate table twr_telsaler_dev';
END;
PROCEDURE <20><><EFBFBD><EFBFBD>TWR<57>Ŷ<EFBFBD><C5B6>嵥 IS
BEGIN
EXECUTE IMMEDIATE 'truncate table twr_telsaler_team_dev';
END;
BEGIN
NULL;
END TELSALER_TWR_UTILS;
/

View File

@@ -112,7 +112,7 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_DEV_PKG IS
2) 2)
INTO A_RENEWAL_RATE, INTO A_RENEWAL_RATE,
A_RENEWAL_RATE_TARGET A_RENEWAL_RATE_TARGET
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD> T FROM "BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>-24<32><34>" T
WHERE T.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD> = L_DEPARTMENT_NAME; WHERE T.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD> = L_DEPARTMENT_NAME;
--<2D><><EFBFBD><EFBFBD>round<6E><64><EFBFBD><EFBFBD>С<EFBFBD><D0A1>ȱ0<C8B1><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --<2D><><EFBFBD><EFBFBD>round<6E><64><EFBFBD><EFBFBD>С<EFBFBD><D0A1>ȱ0<C8B1><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -229,7 +229,7 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_DEV_PKG IS
2) 2)
INTO L_ROWNUM, INTO L_ROWNUM,
A_RENEWAL_RATE A_RENEWAL_RATE
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> T FROM "BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>-24<32><34>" T
WHERE T.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = L_CALLER_NAME WHERE T.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = L_CALLER_NAME
AND ROWNUM = 1; AND ROWNUM = 1;
EXCEPTION EXCEPTION

View File

@@ -1,10 +1,10 @@
CREATE OR REPLACE PACKAGE telsale_archievement_dev_pkg IS CREATE OR REPLACE PACKAGE TELSALE_ARCHIEVEMENT_PKG IS
-- Author : WANGWEI-202 -- Author : WANGWEI-202
-- Created : 2023/3/10 15:13:34 -- 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> -- Purpose : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD>
TYPE cur_type IS REF CURSOR; TYPE CUR_TYPE IS REF CURSOR;
-- <20> -- <20>
DEPARTMENTCODE_EXCEPTION_CODE CONSTANT INTEGER := -20000; DEPARTMENTCODE_EXCEPTION_CODE CONSTANT INTEGER := -20000;
@@ -13,103 +13,126 @@ CREATE OR REPLACE PACKAGE telsale_archievement_dev_pkg IS
CALLERCODE_EXCEPTION_CODE CONSTANT INTEGER := -20001; CALLERCODE_EXCEPTION_CODE CONSTANT INTEGER := -20001;
CALLERCODE_EXCEPTION_MSG CONSTANT VARCHAR2(100) := '<27><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>'; CALLERCODE_EXCEPTION_MSG CONSTANT VARCHAR2(100) := '<27><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>';
PROCEDURE department_archievement PROCEDURE DEPARTMENT_ARCHIEVEMENT
( (
a_department_code IN VARCHAR2, A_DEPARTMENT_CODE IN VARCHAR2,
a_attaching_rate OUT VARCHAR2, A_ATTACHING_RATE OUT VARCHAR2,
a_renewal_rate OUT VARCHAR2, A_ATTACHING_RATE_TARGET OUT VARCHAR2,
a_total OUT INTEGER, A_RENEWAL_RATE OUT VARCHAR2,
a_mensual_cur OUT cur_type A_RENEWAL_RATE_TARGET OUT VARCHAR2,
A_TOTAL OUT INTEGER,
A_MENSUAL_CUR OUT CUR_TYPE
); );
PROCEDURE caller_archievement PROCEDURE CALLER_ARCHIEVEMENT
( (
a_caller_code IN VARCHAR2, A_CALLER_CODE IN VARCHAR2,
a_attaching_rate OUT VARCHAR2, A_ATTACHING_RATE OUT VARCHAR2,
a_renewal_rate OUT VARCHAR2, A_RENEWAL_RATE OUT VARCHAR2,
a_total OUT INTEGER, A_TOTAL OUT INTEGER,
a_present_month OUT NUMBER, A_PRESENT_MONTH OUT NUMBER,
a_mensual_cur OUT cur_type A_MENSUAL_CUR OUT CUR_TYPE
); );
PROCEDURE caller_arch_ranking_list PROCEDURE CALLER_ARCH_RANKING_LIST
( (
a_department_code IN VARCHAR2, A_DEPARTMENT_CODE IN VARCHAR2,
a_year IN VARCHAR2, A_YEAR IN VARCHAR2,
a_month IN VARCHAR2, A_MONTH IN VARCHAR2,
a_attaching_ranking_list OUT cur_type, A_ATTACHING_RANKING_LIST OUT CUR_TYPE,
a_renewal_ranking_list OUT cur_type A_RENEWAL_RANKING_LIST OUT CUR_TYPE
); );
END telsale_archievement_pkg; END TELSALE_ARCHIEVEMENT_PKG;
/ /
CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_dev_PKG IS CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
-- <20><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5> -- <20><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>
PROCEDURE DEPARTMENT_ARCHIEVEMENT PROCEDURE DEPARTMENT_ARCHIEVEMENT
( (
A_DEPARTMENT_CODE IN VARCHAR2, A_DEPARTMENT_CODE IN VARCHAR2,
A_ATTACHING_RATE OUT VARCHAR2, A_ATTACHING_RATE OUT VARCHAR2,
A_RENEWAL_RATE OUT VARCHAR2, A_ATTACHING_RATE_TARGET OUT VARCHAR2,
A_TOTAL OUT INTEGER, A_RENEWAL_RATE OUT VARCHAR2,
A_MENSUAL_CUR OUT CUR_TYPE A_RENEWAL_RATE_TARGET OUT VARCHAR2,
A_TOTAL OUT INTEGER,
A_MENSUAL_CUR OUT CUR_TYPE
) IS ) IS
--L_THIS_MONTH VARCHAR2(4); L_FIRSTDAY DATE;
--L_THIS_YEAR VARCHAR2(4); L_DEPARTMENT_NAME VARCHAR2(100);
L_FIRSTDAY DATE; L_RENEWAL_RATE_TARGET NUMBER;
L_DEPARTMENT_NAME VARCHAR2(100);
BEGIN BEGIN
/*L_THIS_MONTH := TO_CHAR(SYSDATE,
'mm');
L_THIS_YEAR := TO_CHAR(SYSDATE,
'yyyy');*/
L_FIRSTDAY := TO_DATE(TO_CHAR(SYSDATE, L_FIRSTDAY := TO_DATE(TO_CHAR(SYSDATE,
'yyyy') || '-01-01 00:00:00', 'yyyy') || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss'); 'yyyy-mm-dd hh24:mi:ss');
-- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BEGIN BEGIN
SELECT DEPARTMENT_NAME INTO L_DEPARTMENT_NAME FROM IDST0.BM_T BM WHERE BM.DEPARTMENT_CODE = A_DEPARTMENT_CODE; SELECT DEPARTMENT_NAME
INTO L_DEPARTMENT_NAME
FROM IDST0.BM_T BM
WHERE BM.DEPARTMENT_CODE = A_DEPARTMENT_CODE;
EXCEPTION 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> -- <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 WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(DEPARTMENTCODE_EXCEPTION_CODE, RAISE_APPLICATION_ERROR(DEPARTMENTCODE_EXCEPTION_CODE,
DEPARTMENTCODE_EXCEPTION_MSG); DEPARTMENTCODE_EXCEPTION_MSG);
END; END;
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>&Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BEGIN BEGIN
SELECT round(dept.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>, SELECT ROUND(DEPT.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>,
2),
ROUND(DEPT.Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
2) 2)
INTO A_ATTACHING_RATE INTO A_ATTACHING_RATE,
FROM desktop_archievement_admin.BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> dept A_ATTACHING_RATE_TARGET
WHERE dept.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME; FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> DEPT
WHERE DEPT.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME;
--<2D><><EFBFBD><EFBFBD>round<6E><64><EFBFBD><EFBFBD>С<EFBFBD><D0A1>ȱ0<C8B1><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT DECODE(SUBSTR(A_ATTACHING_RATE_TARGET,
1,
1),
'.',
'0' || A_ATTACHING_RATE_TARGET,
A_ATTACHING_RATE_TARGET)
INTO A_ATTACHING_RATE_TARGET
FROM DUAL;
EXCEPTION EXCEPTION
WHEN no_data_found THEN WHEN NO_DATA_FOUND THEN
A_ATTACHING_RATE := 0; A_ATTACHING_RATE := '0.0';
A_ATTACHING_RATE_TARGET := '0.0';
END; END;
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BEGIN BEGIN
SELECT round(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)", SELECT ROUND(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>(%)",
2),
ROUND(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ʱ<EFBFBD><CAB1>(%)" - t."<22><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ1(%)",
2) 2)
INTO A_RENEWAL_RATE INTO A_RENEWAL_RATE,
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> t A_RENEWAL_RATE_TARGET
WHERE t.<EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME; FROM "BI<42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>-24<32><34>" T
WHERE T.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD> = L_DEPARTMENT_NAME;
--<2D><><EFBFBD><EFBFBD>round<6E><64><EFBFBD><EFBFBD>С<EFBFBD><D0A1>ȱ0<C8B1><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT DECODE(SUBSTR(A_RENEWAL_RATE_TARGET,
1,
1),
'.',
'0' || A_RENEWAL_RATE_TARGET,
A_RENEWAL_RATE_TARGET)
INTO A_RENEWAL_RATE_TARGET
FROM DUAL;
EXCEPTION EXCEPTION
WHEN no_data_found THEN WHEN NO_DATA_FOUND THEN
A_RENEWAL_RATE := 0; A_RENEWAL_RATE := '0.0';
A_RENEWAL_RATE_TARGET := '0.0';
END; END;
--<2D><>ҵ<EFBFBD><D2B5> --<2D><>ҵ<EFBFBD><D2B5>
BEGIN A_TOTAL := 0;
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;
EXCEPTION
WHEN no_data_found THEN
A_TOTAL := 0;
END;
--ÿ<><C3BF>ҵ<EFBFBD><D2B5> --ÿ<><C3BF>ҵ<EFBFBD><D2B5>
OPEN A_MENSUAL_CUR FOR OPEN A_MENSUAL_CUR FOR
SELECT CF.<2E>·<EFBFBD> MM, SELECT CF.<2E>·<EFBFBD> MM,
@@ -130,105 +153,89 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_dev_PKG IS
/*******************************************************/ /*******************************************************/
-- <20><>ϯҵ<CFAF><D2B5> -- <20><>ϯҵ<CFAF><D2B5>
PROCEDURE caller_archievement PROCEDURE CALLER_ARCHIEVEMENT
( (
a_caller_code IN VARCHAR2, A_CALLER_CODE IN VARCHAR2,
a_attaching_rate OUT VARCHAR2, A_ATTACHING_RATE OUT VARCHAR2,
a_renewal_rate OUT VARCHAR2, A_RENEWAL_RATE OUT VARCHAR2,
a_total OUT INTEGER, A_TOTAL OUT INTEGER,
a_present_month OUT NUMBER, A_PRESENT_MONTH OUT NUMBER,
a_mensual_cur OUT cur_type A_MENSUAL_CUR OUT CUR_TYPE
) IS ) IS
l_caller_name VARCHAR2(100); L_CALLER_NAME VARCHAR2(100);
l_department_name VARCHAR2(100); L_DEPARTMENT_NAME VARCHAR2(100);
--l_this_month VARCHAR2(4); L_THIS_YEAR VARCHAR2(4);
l_this_year VARCHAR2(4); L_ROWNUM INTEGER;
--l_firstday DATE;
l_rownum INTEGER;
BEGIN BEGIN
--<2D><>ѯ<EFBFBD><D1AF>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD><C6A3>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD> --<2D><>ѯ<EFBFBD><D1AF>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD><C6A3>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
BEGIN BEGIN
/*SELECT zx.saler_name, bm.department_name SELECT ZX.<2E><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>,
INTO l_caller_name, l_department_name BM.DEPARTMENT_NAME
FROM tele_saler zx, tele_saler_team team, idst0.bm_t bm INTO L_CALLER_NAME,
WHERE zx.saler_code = a_caller_code L_DEPARTMENT_NAME
AND zx.team_code = team.team_code FROM TWR_TELSALER ZX,
AND team.department_code = bm.department_code; TWR_TELSALER_TEAM T,
SELECT saler_name IDST0.BM_T BM
INTO l_caller_name WHERE ZX.<2E><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD> = A_CALLER_CODE
FROM tele_saler AND ZX.<2E>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD> = T.TEAM_NAME
WHERE saler_code = a_caller_code;*/ AND T.DEPARTMENT_CODE = BM.DEPARTMENT_CODE;
SELECT zx.<2E><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>,
bm.department_name
INTO l_caller_name,
l_department_name
FROM twr_telsaler zx,
twr_telsaler_team t,
idst0.bm_t bm
WHERE zx.<2E><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD> = a_caller_code
AND zx.<2E>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD> = t.team_name
AND t.department_code = bm.department_code;
EXCEPTION 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> -- <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 WHEN NO_DATA_FOUND THEN
raise_application_error(CALLERCODE_EXCEPTION_CODE, RAISE_APPLICATION_ERROR(CALLERCODE_EXCEPTION_CODE,
CALLERCODE_EXCEPTION_MSG); CALLERCODE_EXCEPTION_MSG);
END; END;
--l_this_month := to_char(SYSDATE, L_THIS_YEAR := TO_CHAR(SYSDATE,
-- 'mm');
l_this_year := to_char(SYSDATE,
'yyyy'); '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> --<2D>ܳ<EFBFBD><DCB3>ձ<EFBFBD><D5B1><EFBFBD>
SELECT round(nvl(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>), SELECT ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
0), 0),
2) bf 2) BF
INTO a_total INTO A_TOTAL
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = l_caller_name WHERE CF.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = L_CALLER_NAME
AND cf.<2E><><EFBFBD><EFBFBD> = l_department_name AND CF.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME
AND cf.<2E><><EFBFBD><EFBFBD> = l_this_year; AND CF.<2E><><EFBFBD><EFBFBD> = L_THIS_YEAR;
--<2D><>͸<EFBFBD><CDB8> --<2D><>͸<EFBFBD><CDB8>
BEGIN BEGIN
SELECT rownum, SELECT ROWNUM,
round(nvl(t.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>, ROUND(NVL(T.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>,
0), 0),
2), 2),
round(nvl(t."<22><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>(<28><>)" * 10000, ROUND(NVL(t."<22><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>(<28><>)" * 10000,
0), 0),
2) 2)
INTO l_rownum, INTO L_ROWNUM,
a_attaching_rate, A_ATTACHING_RATE,
a_present_month A_PRESENT_MONTH
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> t FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> T
WHERE t.<2E><><EFBFBD><EFBFBD> = l_caller_name WHERE T.<2E><><EFBFBD><EFBFBD> = L_CALLER_NAME
AND rownum = 1; AND ROWNUM = 1;
EXCEPTION EXCEPTION
WHEN no_data_found THEN WHEN NO_DATA_FOUND THEN
l_rownum := 1; L_ROWNUM := 1;
a_attaching_rate := 0.0; A_ATTACHING_RATE := 0.0;
a_present_month := 0.0; A_PRESENT_MONTH := 0.0;
END; END;
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BEGIN BEGIN
SELECT rownum, SELECT ROWNUM,
round(nvl(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)", ROUND(NVL(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)",
0), 0),
2) 2)
INTO l_rownum, INTO L_ROWNUM,
a_renewal_rate A_RENEWAL_RATE
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> t FROM "BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>-24<32><34>" T
WHERE t.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = l_caller_name WHERE T.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = L_CALLER_NAME
AND rownum = 1; AND ROWNUM = 1;
EXCEPTION EXCEPTION
WHEN no_data_found THEN WHEN NO_DATA_FOUND THEN
l_rownum := 1; L_ROWNUM := 1;
a_renewal_rate := 0.0; A_RENEWAL_RATE := 0.0;
END; END;
--ÿ<><C3BF>ҵ<EFBFBD><D2B5> --ÿ<><C3BF>ҵ<EFBFBD><D2B5>
@@ -238,8 +245,8 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_dev_PKG IS
0), 0),
0) BF 0) BF
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = l_caller_name WHERE CF.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = L_CALLER_NAME
AND cf.<2E><><EFBFBD><EFBFBD> = l_department_name AND CF.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE, AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE,
'yyyy') || '-01-01 00:00:00', 'yyyy') || '-01-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss') 'yyyy-mm-dd hh24:mi:ss')
@@ -262,7 +269,10 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_dev_PKG IS
BEGIN BEGIN
-- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BEGIN BEGIN
SELECT DEPARTMENT_NAME INTO L_DEPARTMENT_NAME FROM IDST0.BM_T BM WHERE BM.DEPARTMENT_CODE = A_DEPARTMENT_CODE; SELECT DEPARTMENT_NAME
INTO L_DEPARTMENT_NAME
FROM IDST0.BM_T BM
WHERE BM.DEPARTMENT_CODE = A_DEPARTMENT_CODE;
EXCEPTION 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> -- <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 WHEN NO_DATA_FOUND THEN
@@ -271,49 +281,27 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_dev_PKG IS
END; END;
-- <20><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD> -- <20><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
OPEN A_ATTACHING_RANKING_LIST FOR OPEN A_ATTACHING_RANKING_LIST FOR
SELECT rownum, SELECT ROWNUM,
paihang.<2E><><EFBFBD><EFBFBD> AS caller_name, PAIHANG.<2E><><EFBFBD><EFBFBD> AS CALLER_NAME,
paihang.xbl AS attaching_rate PAIHANG.XBL AS ATTACHING_RATE
FROM (SELECT t.<2E><><EFBFBD><EFBFBD>, FROM (SELECT T.<2E><><EFBFBD><EFBFBD>,
round(t.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>, ROUND(T.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>,
2) xbl 2) XBL
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> t FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> T
WHERE t.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME WHERE T.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME
ORDER BY t.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8> DESC) paihang; ORDER BY T.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8> DESC) PAIHANG;
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD> -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
OPEN A_RENEWAL_RANKING_LIST FOR OPEN A_RENEWAL_RANKING_LIST FOR
SELECT rownum, SELECT ROWNUM,
paihang.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS CALLER_NAME, PAIHANG.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS CALLER_NAME,
paihang.xbl AS RENEWAL_RATE PAIHANG.XBL AS RENEWAL_RATE
FROM (SELECT t.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, FROM (SELECT T.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
round(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)", ROUND(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)",
2) xbl 2) XBL
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> t FROM "BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>-24<32><34>" T
WHERE t.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD> = L_DEPARTMENT_NAME WHERE T.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD> = L_DEPARTMENT_NAME
ORDER BY xbl DESC) paihang; ORDER BY XBL DESC) PAIHANG;
/*OPEN A_RENEWAL_RANKING_LIST FOR
SELECT rownum,
paihang.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS CALLER_NAME,
paihang.xbl AS RENEWAL_RATE
FROM (SELECT DISTINCT *
FROM (SELECT t.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
round(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)", 2) xbl,
zuoxi.department_name
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> t,
(SELECT DISTINCT t.saler_code,
t.saler_name,
t.team_code,
team.team,
bm.department_name
FROM tele_saler t,
tele_saler_team team,
idst0.bm_t bm
WHERE t.team_code = team.team_code
AND team.department_code = bm.department_code
AND bm.department_name = L_DEPARTMENT_NAME) zuoxi
WHERE t.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = zuoxi.saler_name) xb
ORDER BY xb.department_name, xb.xbl DESC) paihang;*/
END; END;
BEGIN BEGIN
NULL; NULL;

View File

@@ -1,4 +1,4 @@
CREATE OR REPLACE PACKAGE telsale_bi_utils IS CREATE OR REPLACE PACKAGE TELSALE_BI_UTILS IS
-- Author : WANGWEI-202 -- Author : WANGWEI-202
-- Created : 2023/10/12 15:31:13 -- Created : 2023/10/12 15:31:13
@@ -12,9 +12,9 @@ CREATE OR REPLACE PACKAGE telsale_bi_utils IS
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>; PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>;
END telsale_bi_utils; END TELSALE_BI_UTILS;
/ /
CREATE OR REPLACE PACKAGE BODY telsale_bi_utils IS CREATE OR REPLACE PACKAGE BODY TELSALE_BI_UTILS IS
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS
BEGIN BEGIN
@@ -23,7 +23,8 @@ CREATE OR REPLACE PACKAGE BODY telsale_bi_utils IS
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS
BEGIN BEGIN
EXECUTE IMMEDIATE 'truncate table BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>'; --EXECUTE IMMEDIATE 'truncate table BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>';
EXECUTE IMMEDIATE 'truncate table "BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>-24<32><34>"';
END; END;
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS
@@ -33,11 +34,12 @@ CREATE OR REPLACE PACKAGE BODY telsale_bi_utils IS
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS
BEGIN BEGIN
EXECUTE IMMEDIATE 'truncate table BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>'; --EXECUTE IMMEDIATE 'truncate table BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>';
EXECUTE IMMEDIATE 'truncate table "BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>-24<32><34>"';
END; END;
BEGIN BEGIN
-- Initialization -- Initialization
NULL; NULL;
END telsale_bi_utils; END TELSALE_BI_UTILS;
/ /

View File

@@ -0,0 +1,45 @@
CREATE OR REPLACE PACKAGE TELSALE_BI_UTILS_DEV IS
-- Author : WANGWEI-202
-- Created : 2023/10/12 15:31:13
-- Purpose : bi<62><69><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĹ<D8B5><C4B9><EFBFBD>
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>;
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>;
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>;
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>;
END TELSALE_BI_UTILS_DEV;
/
CREATE OR REPLACE PACKAGE BODY TELSALE_BI_UTILS_DEV IS
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS
BEGIN
EXECUTE IMMEDIATE 'truncate table BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>';
END;
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS
BEGIN
--EXECUTE IMMEDIATE 'truncate table BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>';
EXECUTE IMMEDIATE 'truncate table "BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>-24<32><34>"';
END;
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS
BEGIN
EXECUTE IMMEDIATE 'truncate table BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>';
END;
PROCEDURE <20><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> IS
BEGIN
--EXECUTE IMMEDIATE 'truncate table BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>';
EXECUTE IMMEDIATE 'truncate table "BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>-24<32><34>"';
END;
BEGIN
-- Initialization
NULL;
END TELSALE_BI_UTILS_DEV;
/

View File

@@ -1,30 +1,30 @@
SELECT * SELECT *
FROM reward_gainers FROM REWARD_GAINERS
FOR UPDATE; FOR UPDATE;
SELECT b.reward_name, SELECT B.REWARD_NAME,
a.* A.*
FROM reward_gainers a, FROM REWARD_GAINERS A,
reward_projects b REWARD_PROJECTS B
WHERE a.reward_index = b.reward_index; WHERE A.REWARD_INDEX = B.REWARD_INDEX;
--<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> --<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT DISTINCT s.saler_code, SELECT DISTINCT S.SALER_CODE,
s.saler_name, S.SALER_NAME,
t.team_code, T.TEAM_CODE,
t.team, T.TEAM,
bm.department_code, BM.DEPARTMENT_CODE,
bm.department_name BM.DEPARTMENT_NAME
FROM tele_saler s, FROM TELE_SALER S,
tele_saler_team t, TELE_SALER_TEAM T,
idst0.bm_t bm IDST0.BM_T BM
WHERE s.team_code = t.team_code WHERE S.TEAM_CODE = T.TEAM_CODE
AND t.department_code = bm.department_code AND T.DEPARTMENT_CODE = BM.DEPARTMENT_CODE
AND s.saler_code = '61136'; AND S.SALER_CODE = '61136';
SELECT * SELECT *
FROM tele_saler_team t FROM TELE_SALER_TEAM T
WHERE t.team_code = '107077' WHERE T.TEAM_CODE = '107077'
SELECT * SELECT *
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD> FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
@@ -35,7 +35,7 @@ SELECT *
SELECT <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><EFBFBD><EFBFBD>,
SUM(<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, 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> 0) || '%' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD> FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD>
GROUP BY <EFBFBD><EFBFBD><EFBFBD><EFBFBD>; GROUP BY <EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
@@ -46,7 +46,7 @@ SELECT
<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><EFBFBD><EFBFBD>),
SUM(<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, 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> 2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD> FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
GROUP BY <EFBFBD>·<EFBFBD>, GROUP BY <EFBFBD>·<EFBFBD>,
@@ -57,7 +57,7 @@ HAVING
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD> DESC; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD> DESC;
SELECT <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 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, 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> 2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>
FROM <EFBFBD><EFBFBD>ϯ<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' WHERE <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD> = 'QDI'
@@ -68,37 +68,37 @@ SELECT
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT <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, ROUND(NVL(SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
0), 0),
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD> xb FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD> XB
WHERE xb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>' WHERE XB.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ORDER BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC; ORDER BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC;
------------------------------------- -------------------------------------
SELECT zx.saler_name, SELECT ZX.SALER_NAME,
bm.department_name BM.DEPARTMENT_NAME
FROM tele_saler zx, FROM TELE_SALER ZX,
tele_saler_team team, TELE_SALER_TEAM TEAM,
idst0.bm_t bm IDST0.BM_T BM
WHERE zx.saler_name = '<EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD>' WHERE ZX.SALER_NAME = '<EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD>'
AND zx.team_code = team.team_code AND ZX.TEAM_CODE = TEAM.TEAM_CODE
AND team.department_code = bm.department_code; AND TEAM.DEPARTMENT_CODE = BM.DEPARTMENT_CODE;
---------------------------------------- ----------------------------------------
/* /*
truncate table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>; truncate table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>;
*/ */
SELECT * SELECT *
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD> t FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD> T
WHERE t.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'; WHERE T.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>';
SELECT * SELECT *
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD> FROM "BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>-24<32><34>"
WHERE <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'; WHERE <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>';
SELECT * SELECT *
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>; FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>;
SELECT * SELECT *
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>; FROM "BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>-24<32><34>";

View File

@@ -0,0 +1,17 @@
npm uninstall `
@babel/eslint-parser `
@rushstack/eslint-patch `
@typescript-eslint/eslint-plugin `
@vitejs/plugin-vue `
@vue/cli-plugin-eslint `
@vue/eslint-config-typescript `
babel `
eslint-config-recommended `
eslint-config-standard-with-typescript `
eslint-plugin-vue `
node-sass `
sass `
sass-loader `
style-loader `
ts-node `
vue-eslint-parser

View File

@@ -0,0 +1,40 @@
{
"name": "task_schedule",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"echarts": "^5.4.3",
"element-plus": "^2.5.3",
"mitt": "^3.0.1",
"moment": "^2.30.1",
"vue": "^3.4.15",
"vue-router": "^4.2.5",
"vuex": "^4.1.0"
},
"devDependencies": {
"@babel/eslint-parser": "^7.23.3",
"@rushstack/eslint-patch": "^1.7.1",
"@typescript-eslint/eslint-plugin": "^6.19.1",
"@vitejs/plugin-vue": "^5.0.3",
"@vue/cli-plugin-eslint": "^5.0.8",
"@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.6.6",
"babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^43.0.1",
"eslint-plugin-vue": "^9.20.1",
"node-sass": "^9.0.0",
"sass": "^1.70.0",
"sass-loader": "^14.0.0",
"style-loader": "^3.3.4",
"ts-node": "^10.9.2",
"vue-eslint-parser": "^9.4.2"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -9,32 +9,22 @@
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.3.1", "@element-plus/icons-vue": "^2.3.2",
"echarts": "^5.4.3", "axios": "^1.11.0",
"element-plus": "^2.4.4", "echarts": "^6.0.0",
"element-plus": "^2.11.1",
"mitt": "^3.0.1", "mitt": "^3.0.1",
"moment": "^2.29.4", "moment": "^2.30.1",
"sass-loader": "^13.3.2", "task_schedule": "file:",
"vue": "^3.3.12", "vue": "^3.5.21",
"vue-router": "^4.2.5", "vue-router": "^4.5.1",
"vuex": "^4.1.0" "vuex": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/eslint-parser": "^7.23.3", "@vitejs/plugin-vue": "^6.0.1",
"@rushstack/eslint-patch": "^1.6.1",
"@typescript-eslint/eslint-plugin": "^6.14.0",
"@vitejs/plugin-vue": "^4.5.2",
"@vue/cli-plugin-eslint": "^5.0.8",
"@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.6.2",
"babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0", "eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^43.0.0", "eslint-config-standard-with-typescript": "^43.0.1",
"eslint-plugin-vue": "^9.19.2", "eslint-plugin-vue": "^10.4.0",
"node-sass": "^9.0.0", "ts-node": "^10.9.2"
"sass": "^1.69.5",
"style-loader": "^3.3.3",
"ts-node": "^10.9.2",
"vue-eslint-parser": "^9.3.2"
} }
} }

View File

@@ -103,7 +103,7 @@ export default {
display: block; display: block;
margin-top: 10px; margin-top: 10px;
font-size: 28px; font-size: 28px;
color: orange; color: #e59f46;
} }
.percentage-value-exception { .percentage-value-exception {
@@ -111,6 +111,7 @@ export default {
margin-top: 10px; margin-top: 10px;
font-size: 28px; font-size: 28px;
color: red; color: red;
// color: #f3666b;
} }
.percentage-label { .percentage-label {

View File

@@ -78,32 +78,22 @@
// @ts-expect-error 之后再补充类型文件 // @ts-expect-error 之后再补充类型文件
import { hasOnlyChild } from "@/router/index.js"; import { hasOnlyChild } from "@/router/index.js";
import { useRoute, useRouter } from "vue-router"; import { useRoute, useRouter } from "vue-router";
// import { useRoute, useRouter, type RouteRecordNormalized, type _RouteRecordBase } from "vue-router";
import { computed } from "vue"; import { computed } from "vue";
// declare interface SideBarRouteRecordNormalized extends RouteRecordNormalized
// {
// hidden?: boolean;
// }
// declare interface SideBarRouteRecordSingleView extends _RouteRecordBase
// {
// }
export default { export default {
name: "LayoutAside", name: "LayoutAside",
setup() setup()
{ {
const userRout = useRoute();
const router = useRouter(); const router = useRouter();
const routes = router.getRoutes();// as SideBarRouteRecordNormalized[]; const routes = router.getRoutes();// as SideBarRouteRecordNormalized[];
const currentPath = computed(() => const currentPath = computed(() =>
{ {
return useRoute().path; return userRout.path;
}); });
return { routes, currentPath, hasOnlyChild, }; return { userRout, routes, currentPath, hasOnlyChild, };
}, },
}; };
</script> </script>

View File

@@ -12,7 +12,7 @@
<span class="company-name">CPIC</span> <span class="company-name">CPIC</span>
<div class="version-wrapper"> <div class="version-wrapper">
<span>桌面霸屏后台管理</span> <span>桌面霸屏后台管理</span>
<span>Build-20230915</span> <span>Build-20240111</span>
</div> </div>
<div class="buttons-wrapper"> <div class="buttons-wrapper">
<component <component

View File

@@ -0,0 +1,89 @@
/*
* @Author: Kane
* @Date: 2023-05-25 21:55:14
* @LastEditors: Kane
* @FilePath: /task_schedule/src/test/identify.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { type AxiosResponse } from "axios";
import { service as instance } from "../utils/api/request.js";
import { API_URL } from "../utils/api/config.js";
// import { login, loginCaller, type LoginCallerInfo } from "../utils/account.js";
interface LoginInfo
{
p13account: string;
password: string;
}
interface LoginCallerInfo
{
telsaler_code: string;
}
async function loginCaller( data: LoginCallerInfo ): Promise<AxiosResponse<any, any>>
{
return await instance.request(
{
method: "post",
url: API_URL.URL_LOGIN_CALLER,
data,
});
}
function loginTestCaller(): void
{
const info: LoginCallerInfo =
{
telsaler_code: "61136",
};
loginCaller( info )
.then(( response ) =>
{
console.log( response.data );
})
.catch(( error ) =>
{
console.log( error );
});
}
async function newCitizen( data: any ): Promise<AxiosResponse<any, any>>
{
return await instance.request(
{
method: "post",
url: "http://10.39.0.41:8081/NewCitizen/identify.do",
data,
}
);
}
function testNewCitizen(): void
{
const data = {
idcard_no: "350402198106130016",
name: "王炜",
};
newCitizen( data )
.then(( response ) =>
{
console.log( response.data );
})
.catch(( error ) =>
{
console.log( error );
});
}
export {
loginTestCaller,
testNewCitizen,
type LoginInfo,
type LoginCallerInfo
};

View File

@@ -0,0 +1,50 @@
import { type AxiosResponse } from "axios";
import { service as instance } from "../utils/api/request.js";
import { API_URL } from "../utils/api/config.js";
// import { login, loginCaller, type LoginCallerInfo } from "../utils/account.js";
interface LoginInfo
{
p13account: string;
password: string;
}
interface LoginCallerInfo
{
telsaler_code: string;
}
async function loginCaller( data: LoginCallerInfo ): Promise<AxiosResponse<any, any>>
{
return await instance.request(
{
method: "post",
url: API_URL.URL_LOGIN_CALLER,
data,
});
}
function loginTestCaller(): void
{
const info: LoginCallerInfo =
{
telsaler_code: "61136",
};
loginCaller( info )
.then(( response ) =>
{
console.log( response.data );
})
.catch(( error ) =>
{
console.log( error );
});
}
export {
loginTestCaller,
type LoginInfo,
type LoginCallerInfo
};

View File

@@ -0,0 +1,35 @@
/*
* @Author: Kane
* @Date: 2023-11-06 14:50:08
* @LastEditors: Kane
* @FilePath: /task_schedule/src/test/testBI.ts
* @Description: 测试bi相关的代码
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
import {
type BIReportType,
type ImportBIReportRequest,
type ImportBIReportResponse,
type ImportBIReportResponseHandler,
type BITelsalerAttachingRateRecord,
type QueryBITelsalerAttachingRateReportResponse,
type QueryBITelsalerAttachingRateDataHandler,
type BITelsalerRenewalRateRecord,
importBIReport,
queryBITelsalerAttachingRateData
} from "../utils/BIReport.ts";
function handler( response: QueryBITelsalerAttachingRateReportResponse, error: any ): void
{
if ( response.success )
{
console.log( response );
}
else
{
console.log( error );
}
}
queryBITelsalerAttachingRateData( handler );

View File

@@ -0,0 +1,28 @@
/*
* @Author: Kane
* @Date: 2023-08-28 16:02:11
* @LastEditors: Kane
* @FilePath: /task_schedule/src/test/testCallerArchievement.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { queryCallerArchievement, type CallerArchievement } from "../utils/archievement.js";
import { type TelSaler } from "../types/cpicxim/TelSaler.js";
const callInfo: TelSaler =
{
telSalerCode: "61136",
telSalerName: "陈榕榕",
teamCode: "",
teamName: "",
departmentCode: "",
departmentName: "",
};
function render(): void
{
}
queryCallerArchievement( callInfo, render );

View File

@@ -0,0 +1,31 @@
/*
* @Author: Kane
* @Date: 2023-06-07 10:16:00
* @LastEditors: Kane
* @FilePath: /task_schedule/src/test/testRankingListRequest.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import { type AxiosResponse } from "axios";
// import { service as instance } from "../utils/api/request.js";
// import { API_URL } from "../utils/api/config.js";
// import { type RankingListItem } from "../types/cpicxim/RankingListItem.js";
import {
type RankingListRequest,
type RankingListResponse,
requestRankingList
} from "../utils/ranking.js";
function testRankingListRequest(): void
{
const req: RankingListRequest = {
departmentCode: "QDI",
year: "2023",
month: "06",
};
requestRankingList( req );
}
export { testRankingListRequest };

View File

@@ -0,0 +1,30 @@
/*
* @Author: Kane
* @Date: 2023-09-11 14:16:30
* @LastEditors: Kane
* @FilePath: /task_schedule/src/test/testRewardRequest.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import {
type RewardProject,
type RewardGainer,
type RewardProjectResponse,
requestRewardPorjectsList,
requestRewardGainers
} from "../utils/reward.js";
function render( data: any, error?: any ): void
{
console.log( data );
if ( error !== null )
{
console.log( "请求失败,", error );
}
}
requestRewardPorjectsList( render );
requestRewardGainers( render );

View File

@@ -11,10 +11,12 @@
"compilerOptions": { "compilerOptions": {
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"useDefineForClassFields": true, "useDefineForClassFields": true,
"allowImportingTsExtensions": true,
"noEmit": true,
"target": "ESNext", "target": "ESNext",
"module": "ESNext", "module": "NodeNext",
// "module": "CommonJS", // "module": "CommonJS",
"moduleResolution": "node", "moduleResolution": "NodeNext",
"strict": true, "strict": true,
"jsx": "preserve", "jsx": "preserve",
"sourceMap": true, "sourceMap": true,
@@ -47,6 +49,7 @@
"./node_modules", "./node_modules",
], ],
"ts-node": { "ts-node": {
"esm": true "esm": true,
"require": ["tsconfig-paths/register"],
}, },
} }

View File

@@ -7,8 +7,8 @@
* *
* Copyright (c) ${2023} by Kane, All Rights Reserved. * Copyright (c) ${2023} by Kane, All Rights Reserved.
*/ */
import { service as instance } from "./api/request.js"; import { service as instance } from "./api/request.ts";
import { API_URL } from "./api/config.js"; import { API_URL } from "./api/config.ts";
import { type AxiosResponse } from "axios"; import { type AxiosResponse } from "axios";
interface BIReportType interface BIReportType
{ {

View File

@@ -7,6 +7,7 @@
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
// 请求的url
const API_URL = { const API_URL = {
// 登录 // 登录
URL_LOGIN: import.meta.env.VITE_URL_LOGIN, URL_LOGIN: import.meta.env.VITE_URL_LOGIN,

View File

@@ -27,6 +27,7 @@ function loadStaffInfo(): StaffInfo
obj = {}; obj = {};
} }
/* eslint-disable */
const stuff = new StaffInfo( const stuff = new StaffInfo(
obj._p13uid ?? "", obj._p13uid ?? "",
obj._stuffCode ?? "", obj._stuffCode ?? "",
@@ -35,7 +36,7 @@ function loadStaffInfo(): StaffInfo
obj._department_name ?? "", obj._department_name ?? "",
obj._section_office_code ?? "", obj._section_office_code ?? "",
obj._section_office_name ?? "" ); obj._section_office_name ?? "" );
/* eslint-enable */
return stuff; return stuff;
} }

View File

@@ -13,7 +13,7 @@ import axios, { type AxiosInstance } from "axios";
const service: AxiosInstance = axios.create( const service: AxiosInstance = axios.create(
{ {
baseURL: "", baseURL: "",
timeout: 10000, timeout: 30000,
} }
); );

View File

@@ -0,0 +1,18 @@
/*
* @Author: Kane
* @Date: 2023-12-20 23:02:53
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/api/systemParameters.ts
* @Description: 应用参数相关的代码
*
* Copyright (c) ${2023} by Kane, All Rights Reserved.
*/
// import { service as instance } from "@/utils/api/request.ts";
interface SystemParameter
{
paramterName: string;
parameterValue: string;
}
export { type SystemParameter };

View File

@@ -7,10 +7,10 @@
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
import { service as instance } from "./api/request.js"; import { service as instance } from "./api/request.ts";
import { API_URL } from "./api/config.js"; import { API_URL } from "./api/config.ts";
import { type Department } from "../types/cpicxim/Department.js"; import { type Department } from "../types/cpicxim/Department.ts";
import { type TelSaler } from "../types/cpicxim/TelSaler.js"; import { type TelSaler } from "../types/cpicxim/TelSaler.ts";
import { type AxiosResponse } from "axios"; import { type AxiosResponse } from "axios";
interface DepartmentArchievement // 定义业绩对象的结构 interface DepartmentArchievement // 定义业绩对象的结构
@@ -93,7 +93,7 @@ function queryDepartmentArchievement( departmentInfo: Department, render: any ):
data.mensual_archievement_list.sort(( a: any, b: any ) => a.month - b.month ); data.mensual_archievement_list.sort(( a: any, b: any ) => a.month - b.month );
data.mensual_archievement_list.forEach(( item: any ) => data.mensual_archievement_list.forEach(( item: any ) =>
{ {
archievement.mensual_archievement_list.push( item.premium ); archievement.mensual_archievement_list.push( item.premium ); // eslint-disable-line
}); });
console.log( "每月业绩", archievement ); console.log( "每月业绩", archievement );
@@ -169,7 +169,7 @@ function queryCallerArchievement( callerInfo: TelSaler, render: any ): void
callArchievement.attaching_rate = data.attaching_rate ?? "0.0"; callArchievement.attaching_rate = data.attaching_rate ?? "0.0";
// 检查业绩清单有没有缺漏缺漏的用0补上 // 检查业绩清单有没有缺漏缺漏的用0补上
const checkedList = checkMensualArchievement( data.mensual_archievement_list ); const checkedList = checkMensualArchievement( data.mensual_archievement_list ); // eslint-disable-line
// 排序一下 // 排序一下
checkedList.sort(( a: MenusalArchievementItem, b: MenusalArchievementItem ): number => checkedList.sort(( a: MenusalArchievementItem, b: MenusalArchievementItem ): number =>

View File

@@ -7,9 +7,9 @@
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
import { service as instance } from "./api/request.js"; import { service as instance } from "./api/request.ts";
import { API_URL } from "./api/config.js"; import { API_URL } from "./api/config.ts";
import { type RankingListItem } from "../types/cpicxim/RankingListItem.js"; import { type RankingListItem } from "../types/cpicxim/RankingListItem.ts";
/** /**
* 用于请求排行榜数据请求参数 * 用于请求排行榜数据请求参数
@@ -33,7 +33,7 @@ interface RankingListResponse
} }
// 判断用的正则表达式 // 判断用的正则表达式
const regexMonth = "(0[1-9])|(1[0-2])"; const regexMonth = "(0[1-9])|(1[0-2])"; // eslint-disable-line
/** /**
* 请求坐席排行榜。 * 请求坐席排行榜。

View File

@@ -8,8 +8,8 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
import { type AxiosResponse } from "axios"; import { type AxiosResponse } from "axios";
import { service as instance } from "./api/request.js"; import { service as instance } from "./api/request.ts";
import { API_URL } from "./api/config.js"; import { API_URL } from "./api/config.ts";
interface RewardProject interface RewardProject
{ {
@@ -103,7 +103,7 @@ function requestRewardPorjectsList( handler: any ): void
const data = response.data ?? {}; const data = response.data ?? {};
rewardResponse.success = data.success ?? false; rewardResponse.success = data.success ?? false;
rewardResponse.message = data.message ?? ""; rewardResponse.message = data.message ?? "";
rewardResponse.rewardList = checkRewardProjects( data.rewardList ?? []); rewardResponse.rewardList = checkRewardProjects( data.rewardList ?? []); // eslint-disable-line
handler( rewardResponse, null ); handler( rewardResponse, null );
}) })
@@ -144,7 +144,7 @@ function requestRewardGainers( handler: any ): void
rewardResponse.success = data.success; rewardResponse.success = data.success;
rewardResponse.message = data.message; rewardResponse.message = data.message;
rewardResponse.gainerList = checkRewardGainers( data.gainerList ); rewardResponse.gainerList = checkRewardGainers( data.gainerList ); // eslint-disable-line
handler( rewardResponse, null ); handler( rewardResponse, null );
}) })

View File

@@ -104,19 +104,19 @@ export default {
selectedReportType: 0, selectedReportType: 0,
reportType: [ reportType: [
{ {
reportTypeCode: 0, reportTypeCode: 1,
reportTypeName: "坐席车非渗透率", reportTypeName: "坐席车非渗透率",
}, },
{ {
reportTypeCode: 1, reportTypeCode: 2,
reportTypeName: "坐席续保率", reportTypeName: "坐席续保率",
}, },
{ {
reportTypeCode: 2, reportTypeCode: 3,
reportTypeName: "部门车非渗透率", reportTypeName: "部门车非渗透率",
}, },
{ {
reportTypeCode: 3, reportTypeCode: 4,
reportTypeName: "当月个车续保率跟踪报表【机构】", reportTypeName: "当月个车续保率跟踪报表【机构】",
}, },
{ {

View File

@@ -7,7 +7,6 @@
* *
* Copyright (c) ${2023} by Kane, All Rights Reserved. * Copyright (c) ${2023} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div class="wrapper"> <div class="wrapper">
<el-row :gutter="10"> <el-row :gutter="10">
@@ -92,7 +91,7 @@
:close-on-press-escape="false" :close-on-press-escape="false"
:show-close="true" :show-close="true"
> >
<DataUploadView :report-type="2" /> <DataUploadView :report-type="3" />
</el-dialog> </el-dialog>
</div> </div>
</div> </div>

View File

@@ -108,7 +108,7 @@
:close-on-press-escape="false" :close-on-press-escape="false"
:show-close="true" :show-close="true"
> >
<DataUploadView :report-type="3" /> <DataUploadView :report-type="4" />
</el-dialog> </el-dialog>
</div> </div>
</div> </div>

View File

@@ -109,7 +109,7 @@
:close-on-press-escape="false" :close-on-press-escape="false"
:show-close="true" :show-close="true"
> >
<DataUploadView :report-type="0" /> <DataUploadView :report-type="1" />
</el-dialog> </el-dialog>
</div> </div>
</div> </div>

View File

@@ -99,7 +99,7 @@
:close-on-press-escape="false" :close-on-press-escape="false"
:show-close="true" :show-close="true"
> >
<DataUploadView :report-type="1" /> <DataUploadView :report-type="2" />
</el-dialog> </el-dialog>
</div> </div>
</div> </div>

View File

@@ -11,6 +11,8 @@
"compilerOptions": { "compilerOptions": {
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"useDefineForClassFields": true, "useDefineForClassFields": true,
"allowImportingTsExtensions": true,
"noEmit": true,
"target": "ESNext", "target": "ESNext",
"module": "ESNext", "module": "ESNext",
"moduleResolution": "node", "moduleResolution": "node",

View File

@@ -1,6 +0,0 @@
{
"name": "desktop_archievement_backend",
"lockfileVersion": 3,
"requires": true,
"packages": {}
}

View File

@@ -1,3 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
@@ -13,9 +14,9 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source> <maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target> <maven.compiler.target>17</maven.compiler.target>
<spring.version>5.3.30</spring.version> <!-- <spring.version>5.3.30</spring.version> -->
<log4j2.version>2.20.0</log4j2.version> <log4j2.version>2.20.0</log4j2.version>
<!-- <spring.version>6.0.11</spring.version> --> <spring.version>6.2.4</spring.version>
</properties> </properties>
<dependencies> <dependencies>
@@ -66,7 +67,7 @@
<dependency> <dependency>
<groupId>commons-io</groupId> <groupId>commons-io</groupId>
<artifactId>commons-io</artifactId> <artifactId>commons-io</artifactId>
<version>2.11.0</version> <version>2.18.0</version>
</dependency> </dependency>
<!--jackson--> <!--jackson-->
@@ -145,6 +146,7 @@
<version>3.5.13</version> <version>3.5.13</version>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>desktop_archievement_backend</finalName> <finalName>desktop_archievement_backend</finalName>
<resources> <resources>

View File

@@ -17,4 +17,8 @@ public interface TWrTelsalerMapper
public TWrTelsalerRecord queryTWrTelsalerInfo( @Param("telsaler") String telsaler ); public TWrTelsalerRecord queryTWrTelsalerInfo( @Param("telsaler") String telsaler );
public void insertTWrTelsalerRecordToDB( TWrTelsalerRecord record ); public void insertTWrTelsalerRecordToDB( TWrTelsalerRecord record );
public void cleanTWrTelsalerRecord();
public void cleanTWrTelsalerTeamRecord();
} }

View File

@@ -19,14 +19,14 @@ public class BIDepartmentRenewalRateRecord
private double 个车续保率全月; private double 个车续保率全月;
private double 环比昨日; private double 环比昨日;
private double 环比上月; private double 环比上月;
private int 平均提前签单天数; // private int 平均提前签单天数;
private double 环比; // private double 环比;
public BIDepartmentRenewalRateRecord() public BIDepartmentRenewalRateRecord()
{} {}
public BIDepartmentRenewalRateRecord( String 责任部门, double 机构目标值, int 到期数全月, double 序时到期数占比, public BIDepartmentRenewalRateRecord( String 责任部门, double 机构目标值, int 到期数全月, double 序时到期数占比,
double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月, int 平均提前签单天数, double 环比 ) double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月 )
{ {
this.责任部门 = 责任部门; this.责任部门 = 责任部门;
this.机构目标值 = 机构目标值; this.机构目标值 = 机构目标值;
@@ -36,8 +36,8 @@ public class BIDepartmentRenewalRateRecord
this.个车续保率全月 = 个车续保率全月; this.个车续保率全月 = 个车续保率全月;
this.环比昨日 = 环比昨日; this.环比昨日 = 环比昨日;
this.环比上月 = 环比上月; this.环比上月 = 环比上月;
this.平均提前签单天数 = 平均提前签单天数; // this.平均提前签单天数 = 平均提前签单天数;
this.环比 = 环比; // this.环比 = 环比;
} }
public String get责任部门() public String get责任部门()
@@ -120,25 +120,6 @@ public class BIDepartmentRenewalRateRecord
this.环比上月 = 环比上月; this.环比上月 = 环比上月;
} }
public int get平均提前签单天数()
{
return 平均提前签单天数;
}
public void set平均提前签单天数( int 平均提前签单天数 )
{
this.平均提前签单天数 = 平均提前签单天数;
}
public double get环比()
{
return 环比;
}
public void set环比( double 环比 )
{
this.环比 = 环比;
}
@Override @Override
public int hashCode() public int hashCode()
@@ -160,9 +141,6 @@ public class BIDepartmentRenewalRateRecord
result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 环比上月 ); temp = Double.doubleToLongBits( 环比上月 );
result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + 平均提前签单天数;
temp = Double.doubleToLongBits( 环比 );
result = prime * result + (int) (temp ^ (temp >>> 32));
return result; return result;
} }
@@ -197,10 +175,6 @@ public class BIDepartmentRenewalRateRecord
return false; return false;
if ( Double.doubleToLongBits( 环比上月 ) != Double.doubleToLongBits( other.环比上月 ) ) if ( Double.doubleToLongBits( 环比上月 ) != Double.doubleToLongBits( other.环比上月 ) )
return false; return false;
if ( 平均提前签单天数 != other.平均提前签单天数 )
return false;
if ( Double.doubleToLongBits( 环比 ) != Double.doubleToLongBits( other.环比 ) )
return false;
return true; return true;
} }
@@ -209,7 +183,6 @@ public class BIDepartmentRenewalRateRecord
{ {
return "BIDepartmentRenewalRateRecord [责任部门=" + 责任部门 + ", 机构目标值=" + 机构目标值 + ", 到期数全月=" return "BIDepartmentRenewalRateRecord [责任部门=" + 责任部门 + ", 机构目标值=" + 机构目标值 + ", 到期数全月="
+ 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时 + ", 个车续保率全月=" + 个车续保率全月 + 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时 + ", 个车续保率全月=" + 个车续保率全月
+ ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + ", 平均提前签单天数=" + 平均提前签单天数 + ", 环比=" + 环比 + ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + "]";
+ "]";
} }
} }

View File

@@ -3,7 +3,7 @@
* @Date: 2023-10-09 21:45:39 * @Date: 2023-10-09 21:45:39
* @LastEditors: Kane * @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BITelsalerRenewalRateRecord.java * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BITelsalerRenewalRateRecord.java
* @Description: BI导出的续保率Excel文件行记录。 * @Description: BI导出的坐席续保率 Excel文件行记录。
* *
* Copyright (c) ${2023} by Kane, All Rights Reserved. * Copyright (c) ${2023} by Kane, All Rights Reserved.
*/ */
@@ -20,12 +20,11 @@ public class BITelsalerRenewalRateRecord
private double 个车续保率全月; private double 个车续保率全月;
private double 环比昨日; private double 环比昨日;
private double 环比上月; private double 环比上月;
private double 平均提前签单天数; // private double 平均提前签单天数;
private double 环比; // private double 环比;
public BITelsalerRenewalRateRecord( String 责任部门, String 责任人, double 机构目标值, double 到期数全月, public BITelsalerRenewalRateRecord( String 责任部门, String 责任人, double 机构目标值, double 到期数全月,
double 序时到期数占比, double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月, double 序时到期数占比, double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月 )
double 平均提前签单天数, double 环比 )
{ {
this.责任部门 = 责任部门; this.责任部门 = 责任部门;
this.责任人 = 责任人; this.责任人 = 责任人;
@@ -36,32 +35,8 @@ public class BITelsalerRenewalRateRecord
this.个车续保率全月 = 个车续保率全月; this.个车续保率全月 = 个车续保率全月;
this.环比昨日 = 环比昨日; this.环比昨日 = 环比昨日;
this.环比上月 = 环比上月; this.环比上月 = 环比上月;
this.平均提前签单天数 = 平均提前签单天数;
this.环比 = 环比;
} }
public double get平均提前签单天数()
{
return 平均提前签单天数;
}
public void set平均提前签单天数( double 平均提前签单天数 )
{
this.平均提前签单天数 = 平均提前签单天数;
}
public double get环比()
{
return 环比;
}
public void set环比( double 环比 )
{
this.环比 = 环比;
}
public String get责任部门() public String get责任部门()
{ {
return 责任部门; return 责任部门;
@@ -94,10 +69,6 @@ public class BITelsalerRenewalRateRecord
result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 环比上月 ); temp = Double.doubleToLongBits( 环比上月 );
result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 平均提前签单天数 );
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits( 环比 );
result = prime * result + (int) (temp ^ (temp >>> 32));
return result; return result;
} }
@@ -139,10 +110,6 @@ public class BITelsalerRenewalRateRecord
return false; return false;
if ( Double.doubleToLongBits( 环比上月 ) != Double.doubleToLongBits( other.环比上月 ) ) if ( Double.doubleToLongBits( 环比上月 ) != Double.doubleToLongBits( other.环比上月 ) )
return false; return false;
if ( Double.doubleToLongBits( 平均提前签单天数 ) != Double.doubleToLongBits( other.平均提前签单天数 ) )
return false;
if ( Double.doubleToLongBits( 环比 ) != Double.doubleToLongBits( other.环比 ) )
return false;
return true; return true;
} }
@@ -151,8 +118,7 @@ public class BITelsalerRenewalRateRecord
{ {
return "BITelsalerRenewalRateRecord [责任部门=" + 责任部门 + ", 责任人=" + 责任人 + ", 机构目标值=" + 机构目标值 return "BITelsalerRenewalRateRecord [责任部门=" + 责任部门 + ", 责任人=" + 责任人 + ", 机构目标值=" + 机构目标值
+ ", 到期数全月=" + 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时 + ", 到期数全月=" + 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时
+ ", 个车续保率全月=" + 个车续保率全月 + ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + ", 平均提前签单天数=" + ", 个车续保率全月=" + 个车续保率全月 + ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + "]";
+ 平均提前签单天数 + ", 环比=" + 环比 + "]";
} }
public String get责任人() public String get责任人()

View File

@@ -34,21 +34,24 @@ public final class ImportBIExcelData
{ {
private static Logger logger = LoggerFactory.getLogger( ImportBIExcelData.class ); private static Logger logger = LoggerFactory.getLogger( ImportBIExcelData.class );
// 坐席 渗透率
private static String[] TelsalerAttachingRateExcelTitle = new String[] private static String[] TelsalerAttachingRateExcelTitle = new String[]
{ "部门", "经办", "车险保费(万)", "车险保费占比", "非车保费(万)", "当月保费渗透率", "保费渗透率环比上月", "当月客户渗透率", "客户渗透率环比上月", { "部门", "经办", "车险保费(万)", "车险保费占比", "非车保费(万)", "当月保费渗透率", "保费渗透率环比上月", "当月客户渗透率", "客户渗透率环比上月",
"当月车非客均保费", "客均保费环比上月"}; "当月车非客均保费", "客均保费环比上月"};
// 坐席 续保率
private static String[] TelSalerRenewalRateExcelTitle = new String[] private static String[] TelSalerRenewalRateExcelTitle = new String[]
{ "责任部门", "责任人", "机构目标值1(%)", "到期数-全月", "序时到期数占比(%)", "个车续保率(序时)(%)", "个车续保率(全月)(%)", "环比昨日(%)", { "责任部门", "责任人", "机构目标值1(%)", "到期数-全月", "序时到期数占比(%)", "个车续保率(序时)(%)", "个车续保率(全月)(%)", "环比昨日(%)",
"环比上月(%)", "平均提前签单天数", "环比"}; "环比上月(%)", "序时-部门内", "全月-部门内"};
// 机构 渗透率
private static String[] DepartmentAttachingRateExcelTitle = new String[] private static String[] DepartmentAttachingRateExcelTitle = new String[]
{ "部门", "目标值-机构", "目标差距", "车险保费(万)", "车险保费占比", "非车保费(万)", "当月保费渗透率", "保费渗透率环比上月", "车险客户数", "当月客户渗透率", { "部门", "目标值-机构", "目标差距", "车险保费(万)", "车险保费占比", "非车保费(万)", "当月保费渗透率", "保费渗透率环比上月", "车险客户数", "当月客户渗透率",
"客户渗透率环比上月", "当月车非客均保费", "客均保费环比上月"}; "客户渗透率环比上月", "当月车非客均保费", "客均保费环比上月"};
// 机构 续保率
private static String[] DepartmentRenewalRateExcelTitle = new String[] private static String[] DepartmentRenewalRateExcelTitle = new String[]
{ "责任部门", "机构目标值1(%)", "到期数-全月", "序时到期数占比(%)", "个车续保率(序时)(%)", "个车续保率(全月)(%)", "环比昨日(%)", { "责任部门", "机构目标值1(%)", "到期数-全月", "序时到期数占比(%)", "个车续保率(序时)(%)", "个车续保率(全月)(%)", "环比昨日(%)",
"环比上月(%)", "平均提前签单天数", "环比",}; "环比上月(%)", "序时-部门内", "全月-部门内",};
/** /**
* 用于通过对比标题行判断excel文件格式的函数。 * 用于通过对比标题行判断excel文件格式的函数。
@@ -94,6 +97,8 @@ public final class ImportBIExcelData
for ( Cell cell : titleRow ) for ( Cell cell : titleRow )
{ {
String cellString = MyPOIUtils.getStringCellValue( cell ); String cellString = MyPOIUtils.getStringCellValue( cell );
logger.info( "比较报表标题行,待导入报表标题:" + cellString + ";验证标题:" + title[cellIndex] );
if ( !cellString.equals( title[cellIndex] ) ) if ( !cellString.equals( title[cellIndex] ) )
{ {
@@ -320,11 +325,11 @@ public final class ImportBIExcelData
double 个车续保率全月 = MyPOIUtils.getNumbericCellValue( row, 6 ) * 100; double 个车续保率全月 = MyPOIUtils.getNumbericCellValue( row, 6 ) * 100;
double 环比昨日 = MyPOIUtils.getNumbericCellValue( row, 7 ) * 100; double 环比昨日 = MyPOIUtils.getNumbericCellValue( row, 7 ) * 100;
double 环比上月 = MyPOIUtils.getNumbericCellValue( row, 8 ) * 100; double 环比上月 = MyPOIUtils.getNumbericCellValue( row, 8 ) * 100;
double 平均提前签单天数 = MyPOIUtils.getNumbericCellValue( row, 9 ); // double 平均提前签单天数 = MyPOIUtils.getNumbericCellValue( row, 9 );
double 环比 = MyPOIUtils.getNumbericCellValue( row, 10 ); // double 环比 = MyPOIUtils.getNumbericCellValue( row, 10 );
BITelsalerRenewalRateRecord record = new BITelsalerRenewalRateRecord( 责任部门, 责任人, BITelsalerRenewalRateRecord record = new BITelsalerRenewalRateRecord( 责任部门, 责任人,
机构目标值, 到期数全月, 序时到期数占比, 个车续保率序时, 个车续保率全月, 环比昨日, 环比上月, 平均提前签单天数, 环比 ); 机构目标值, 到期数全月, 序时到期数占比, 个车续保率序时, 个车续保率全月, 环比昨日, 环比上月 );
records.add( record ); records.add( record );
} }
@@ -499,11 +504,11 @@ public final class ImportBIExcelData
double 个车续保率全月 = MyPOIUtils.getNumbericCellValue( row, 5 ) * 100; double 个车续保率全月 = MyPOIUtils.getNumbericCellValue( row, 5 ) * 100;
double 环比昨日 = MyPOIUtils.getNumbericCellValue( row, 6 ) * 100; double 环比昨日 = MyPOIUtils.getNumbericCellValue( row, 6 ) * 100;
double 环比上月 = MyPOIUtils.getNumbericCellValue( row, 7 ) * 100; double 环比上月 = MyPOIUtils.getNumbericCellValue( row, 7 ) * 100;
int 平均提前签单天数 = (int) MyPOIUtils.getNumbericCellValue( row, 8 ); // int 平均提前签单天数 = (int) MyPOIUtils.getNumbericCellValue( row, 8 );
double 环比 = MyPOIUtils.getNumbericCellValue( row, 9 ) * 100; // double 环比 = MyPOIUtils.getNumbericCellValue( row, 9 ) * 100;
BIDepartmentRenewalRateRecord record = new BIDepartmentRenewalRateRecord( 责任部门, BIDepartmentRenewalRateRecord record = new BIDepartmentRenewalRateRecord( 责任部门,
机构目标值, 到期数全月, 序时到期数占比, 个车续保率序时, 个车续保率全月, 环比昨日, 环比上月, 平均提前签单天数, 环比 ); 机构目标值, 到期数全月, 序时到期数占比, 个车续保率序时, 个车续保率全月, 环比昨日, 环比上月 );
records.add( record ); records.add( record );
} }

View File

@@ -32,7 +32,7 @@ public class ImportTWRTelsalerData
"学历类型", "用工性质名称", "合同种类", "合同类型", "合同性质", "合同签订次数", "合同生效日期", "合同到期日期", "人员属性", "保代员工号", "学历类型", "用工性质名称", "合同种类", "合同类型", "合同性质", "合同签订次数", "合同生效日期", "合同到期日期", "人员属性", "保代员工号",
"职场属性", "办公性质", "保代人员属性", "人员状态",}; "职场属性", "办公性质", "保代人员属性", "人员状态",};
public static void importTWrTelsalerDataFromExcel( String filePath, int sheetIndex, public static ArrayList<TWrTelsalerRecord> importTWrTelsalerDataFromExcel( String filePath, int sheetIndex,
int firstRow ) throws IOException, InvalidFormatException int firstRow ) throws IOException, InvalidFormatException
{ {
ArrayList<TWrTelsalerRecord> records = new ArrayList<>( 200 ); ArrayList<TWrTelsalerRecord> records = new ArrayList<>( 200 );
@@ -132,6 +132,8 @@ public class ImportTWRTelsalerData
error.printStackTrace(); error.printStackTrace();
} }
} }
return records;
} }
private static boolean checkExcelFormat( Sheet sheet, String caption, int captionRowIndex, private static boolean checkExcelFormat( Sheet sheet, String caption, int captionRowIndex,

View File

@@ -0,0 +1,35 @@
package com.cpic.xim.web.controllers.dataimport;
public enum ReportType {
BiTelsalerAttachingRateReport(1,"坐席车非渗透率"),
BiTelsalerRenewalRateReport(2,"坐席续保率"),
BiDepartmentAttachingRateReport(3,"部门车非渗透率"),
BiDepartmentRenewalRateReport(4,"当月个车续保率跟踪报表【机构】"),
TWrTelsalerList(10,"TWr坐席清单"); // Twr坐席清单
private int reportTypeCode;
private String reportTypeName;
private ReportType( final int code, final String name )
{
this.reportTypeCode = code;
this.reportTypeName = name;
}
public int getReportTypeCode()
{
return reportTypeCode;
}
public void setReportTypeCode( int reportTypeCode )
{
this.reportTypeCode = reportTypeCode;
}
public String getReportTypeName()
{
return reportTypeName;
}
public void setReportTypeName( String reportTypeName )
{
this.reportTypeName = reportTypeName;
}
}

View File

@@ -10,7 +10,6 @@
package com.cpic.xim.web.controllers.dataimport.bi; package com.cpic.xim.web.controllers.dataimport.bi;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import org.apache.ibatis.exceptions.PersistenceException; import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSession;
@@ -23,13 +22,16 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import com.cpic.xim.mybatis.mapper.ImportBIArchievementDataMapper; import com.cpic.xim.mybatis.mapper.ImportBIArchievementDataMapper;
import com.cpic.xim.mybatis.mapper.TWrTelsalerMapper;
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord; import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord; import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord; import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord; import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
import com.cpic.xim.mybatis.pojo.TWrTelsalerRecord;
import com.cpic.xim.mybatis.utils.MybatisUtils; import com.cpic.xim.mybatis.utils.MybatisUtils;
import com.cpic.xim.utils.data.ImportBIExcelData; import com.cpic.xim.utils.data.ImportBIExcelData;
import com.cpic.xim.web.controllers.dataimport.bi.ImportBIDataRequest.ReportType; import com.cpic.xim.utils.data.ImportTWRTelsalerData;
import com.cpic.xim.web.controllers.dataimport.ReportType;;
@Controller @Controller
@RequestMapping( method = RequestMethod.POST, path = "/import_bi_data" ) @RequestMapping( method = RequestMethod.POST, path = "/import_bi_data" )
@@ -43,29 +45,35 @@ public class ImportBIDataController
{ {
ImportBIDataResponse response = new ImportBIDataResponse(); ImportBIDataResponse response = new ImportBIDataResponse();
String filePath = request.getFilePath(); String filePath = request.getFilePath();
ReportType type = request.getReportType(); int type = request.getReportType();
int firstRow = request.getFirstRow(); int firstRow = request.getFirstRow();
int sheetIndex = request.getSheetIndex(); int sheetIndex = request.getSheetIndex();
int importedCount = 0; int importedCount = 0;
try try
{ {
if ( type == ReportType.TelsalerAttachingRateReport ) if ( type == ReportType.BiTelsalerAttachingRateReport.getReportTypeCode() )
{ {
importedCount = importBITelsalerAttachingRate( filePath, sheetIndex, firstRow ); importedCount = importBITelsalerAttachingRate( filePath, sheetIndex, firstRow );
} }
else if ( type == ReportType.TelsalerRenewalRateReport ) else if ( type == ReportType.BiTelsalerRenewalRateReport.getReportTypeCode() )
{ {
importedCount = importBITeslsalerRenewalRate( filePath, sheetIndex, firstRow ); importedCount = importBITeslsalerRenewalRate( filePath, sheetIndex, firstRow );
} }
else if ( type == ReportType.DepartmentAttachingRateReport ) else if ( type == ReportType.BiDepartmentAttachingRateReport.getReportTypeCode() )
{ {
importedCount = importBIDepartmentAttachingRate( filePath, sheetIndex, firstRow ); importedCount = importBIDepartmentAttachingRate( filePath, sheetIndex, firstRow );
} }
else if ( type == ReportType.DepartmentRenewalRateReport ) else if ( type == ReportType.BiDepartmentRenewalRateReport.getReportTypeCode() )
{ {
importedCount = importBIDepartmentRenewalRate( filePath, sheetIndex, firstRow ); importedCount = importBIDepartmentRenewalRate( filePath, sheetIndex, firstRow );
} }
else if ( type == ReportType.TWrTelsalerList.getReportTypeCode() )
{
logger.info( "导入机构续保率报表。");
importedCount = importTWrTelsalerList( filePath, sheetIndex, firstRow );
}
response.setImportedCount( importedCount ); response.setImportedCount( importedCount );
response.setSuccess( true ); response.setSuccess( true );
@@ -254,4 +262,43 @@ public class ImportBIDataController
return importedCount; return importedCount;
} }
private static int importTWrTelsalerList( String filePath, int sheetIndex, int firstRow )
throws PersistenceException, IOException, InvalidFormatException
{
ArrayList<TWrTelsalerRecord> records = null;
SqlSession session = null;
TWrTelsalerMapper mapper = null;
int importedCount = 0;
try
{
records = ImportTWRTelsalerData.importTWrTelsalerDataFromExcel(filePath, sheetIndex, firstRow);
session = MybatisUtils.getSqlSessionBatch();
mapper = session.getMapper(TWrTelsalerMapper.class);
mapper.cleanTWrTelsalerTeamRecord();
for ( TWrTelsalerRecord record : records )
{
mapper.insertTWrTelsalerRecordToDB(record);
importedCount++;
}
session.commit();
}
catch ( Exception error)
{
if ( session != null )
{
session.rollback();
}
throw error;
}
return importedCount;
}
} }

View File

@@ -3,78 +3,65 @@
* @Date: 2023-10-13 14:39:06 * @Date: 2023-10-13 14:39:06
* @LastEditors: Kane * @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataRequest.java * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataRequest.java
* @Description: * @Description:
* *
* Copyright (c) ${2023} by Kane, All Rights Reserved. * Copyright (c) ${2023} by Kane, All Rights Reserved.
*/ */
package com.cpic.xim.web.controllers.dataimport.bi; package com.cpic.xim.web.controllers.dataimport.bi;
import org.springframework.stereotype.Controller;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.stereotype.Controller;
@Controller @Controller
public class ImportBIDataRequest public class ImportBIDataRequest {
{
public enum ReportType {
TelsalerAttachingRateReport, TelsalerRenewalRateReport, DepartmentAttachingRateReport, DepartmentRenewalRateReport
};
// 导入文件的路径 // 导入文件的路径
@JsonProperty( "filePath" ) @JsonProperty("filePath")
private String filePath; private String filePath;
// 报表名称 // 报表名称
@JsonProperty( "reportType" ) @JsonProperty("reportType")
private ReportType reportType; private int reportType;
// 是否有标题行 // 是否有标题行
@JsonProperty( "firstRow" ) @JsonProperty("firstRow")
private int firstRow; private int firstRow;
// sheet索引 // sheet索引
@JsonProperty( "sheetIndex" ) @JsonProperty("sheetIndex")
private int sheetIndex; private int sheetIndex;
public ImportBIDataRequest() public ImportBIDataRequest() {}
{}
public int getFirstRow() public int getFirstRow() {
{
return firstRow; return firstRow;
} }
public void setFirstRow( int firstRow ) public void setFirstRow(int firstRow) {
{
this.firstRow = firstRow; this.firstRow = firstRow;
} }
public int getSheetIndex() public int getSheetIndex() {
{
return sheetIndex; return sheetIndex;
} }
public void setSheetIndex( int sheetIndex ) public void setSheetIndex(int sheetIndex) {
{
this.sheetIndex = sheetIndex; this.sheetIndex = sheetIndex;
} }
public String getFilePath() public String getFilePath() {
{
return filePath; return filePath;
} }
public void setFilePath( String filePath ) public void setFilePath(String filePath) {
{
this.filePath = filePath; this.filePath = filePath;
} }
public ReportType getReportType() public int getReportType() {
{
return reportType; return reportType;
} }
public void setReportType( ReportType reportType ) public void setReportType(int reportType) {
{
this.reportType = reportType; this.reportType = reportType;
} }
@@ -84,7 +71,7 @@ public class ImportBIDataRequest
final int prime = 31; final int prime = 31;
int result = 1; int result = 1;
result = prime * result + ((filePath == null) ? 0 : filePath.hashCode()); result = prime * result + ((filePath == null) ? 0 : filePath.hashCode());
result = prime * result + ((reportType == null) ? 0 : reportType.hashCode()); result = prime * result + reportType;
result = prime * result + firstRow; result = prime * result + firstRow;
result = prime * result + sheetIndex; result = prime * result + sheetIndex;
return result; return result;
@@ -117,11 +104,17 @@ public class ImportBIDataRequest
} }
@Override @Override
public String toString() public String toString() {
{ return (
return "ImportBIDataRequest [filePath=" + filePath + ", reportType=" + reportType "ImportBIDataRequest [filePath=" +
+ ", firstRow=" + firstRow + ", sheetIndex=" + sheetIndex + "]"; filePath +
", reportType=" +
reportType +
", firstRow=" +
firstRow +
", sheetIndex=" +
sheetIndex +
"]"
);
} }
} }

View File

@@ -1,11 +1,15 @@
/* /*
* @Author: Kane * @Author: Kane
* @Date: 2023-02-28 22:52:32
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/filters/cros/CrosFilter.java
* @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * @Date: 2023-02-28 22:52:32
*
* @LastEditors: Kane
*
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/filters/cros/CrosFilter.java
*
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
package com.cpic.xim.web.filters.cros; package com.cpic.xim.web.filters.cros;
@@ -23,30 +27,31 @@ import org.springframework.http.HttpMethod;
public class CrosFilter implements Filter public class CrosFilter implements Filter
{ {
private static Logger logger = LoggerFactory.getLogger(CrosFilter.class); private static Logger logger = LoggerFactory.getLogger( CrosFilter.class );
@Override @Override
public void doFilter( ServletRequest req, ServletResponse resp, FilterChain chain ) public void doFilter( ServletRequest req, ServletResponse resp, FilterChain chain )
throws ServletException, IOException throws ServletException,
IOException
{ {
HttpServletRequest request = (HttpServletRequest) req; HttpServletRequest request = ( HttpServletRequest ) req;
HttpServletResponse response = (HttpServletResponse) resp; HttpServletResponse response = ( HttpServletResponse ) resp;
String method = request.getMethod(); String method = request.getMethod();
String originHeader = request.getHeader( "Origin" ); String originHeader = request.getHeader( "Origin" );
logger.info( "收到" + method + "请求,来自" + originHeader); logger.info( "收到" + method + "请求,来自" + originHeader );
// 如果是Options请求 // 如果是Options请求
if ( method.equals(HttpMethod.OPTIONS.toString()) ) if ( method.equals( HttpMethod.OPTIONS.toString() ) )
{ {
originHeader = "*"; originHeader = "*";
} }
response.setHeader( "Access-Control-Allow-Origin", originHeader ); response.setHeader( "Access-Control-Allow-Origin", originHeader );
response.setHeader( "Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT" ); response.setHeader( "Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT" );
response.setHeader( "Access-Control-Max-Age", "0" ); response.setHeader( "Access-Control-Max-Age", "0" );
response.setHeader( "Access-Control-Allow-Headers", 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" ); "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token" );
response.setHeader( "Access-Control-Allow-Credentials", "true" ); response.setHeader( "Access-Control-Allow-Credentials", "true" );
response.setHeader( "XDomainRequestAllowed", "1" ); response.setHeader( "XDomainRequestAllowed", "1" );
response.setHeader( "XDomainRequestAllowed", "1" ); response.setHeader( "XDomainRequestAllowed", "1" );

View File

@@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.ArchievementMapper"> <mapper namespace="com.cpic.xim.mybatis.mapper.ArchievementMapper">
<select id="getDepartmentArchievement" useCache="false" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="getDepartmentArchievement" useCache="false" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsale_archievement_dev_pkg.department_archievement( call telsale_archievement_pkg.department_archievement(
#{a_department_code, mode=IN, jdbcType=VARCHAR}, #{a_department_code, mode=IN, jdbcType=VARCHAR},
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR}, #{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},
#{a_attaching_rate_target, mode=OUT, jdbcType=VARCHAR}, #{a_attaching_rate_target, mode=OUT, jdbcType=VARCHAR},
@@ -12,7 +12,7 @@
#{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper}) #{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper})
</select> </select>
<select id="getCallerArchievement" useCache="false" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="getCallerArchievement" useCache="false" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsale_archievement_dev_pkg.caller_archievement( call telsale_archievement_pkg.caller_archievement(
#{a_caller_code, mode=IN, jdbcType=VARCHAR}, #{a_caller_code, mode=IN, jdbcType=VARCHAR},
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR}, #{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},
#{a_renewal_rate, mode=OUT, jdbcType=VARCHAR}, #{a_renewal_rate, mode=OUT, jdbcType=VARCHAR},

View File

@@ -11,12 +11,11 @@
</insert> </insert>
<insert id="insertTelsalerRenewalRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord"> <insert id="insertTelsalerRenewalRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord">
insert into BI电销坐席续保率跟踪表 ("责任部门","责任人","机构目标值1(%)","到期数-全月", insert into "BI电销坐席续保率跟踪表-24年" ("责任部门","责任人","机构目标值1(%)","到期数-全月",
"序时到期数占比(%)","个车续保率(序时)(%)","个车续保率(全月)(%)", "序时到期数占比(%)","个车续保率(序时)(%)","个车续保率(全月)(%)",
"环比昨日(%)","环比上月(%)","平均提前签单天数","环比") "环比昨日(%)","环比上月(%)")
values (#{责任部门},#{责任人},#{机构目标值},#{到期数全月},#{序时到期数占比}, values (#{责任部门},#{责任人},#{机构目标值},#{到期数全月},#{序时到期数占比},
#{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月}, #{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月} )
#{平均提前签单天数},#{环比})
</insert> </insert>
<insert id="insertDepartmentAttachingRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord"> <insert id="insertDepartmentAttachingRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord">
@@ -30,24 +29,23 @@
</insert> </insert>
<insert id="insertDepartmentRenewalRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord" > <insert id="insertDepartmentRenewalRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord" >
insert into BI机构当月个车续保率跟踪表( "责任部门","机构目标值1(%)","到期数-全月" ,"序时到期数占比(%)","个车续保率(序时)(%)", insert into "BI机构续保率跟踪表-24年"( "责任部门","机构目标值1(%)","到期数-全月" ,"序时到期数占比(%)","个车续保率(序时)(%)",
"个车续保率(全月)(%)","环比昨日(%)","环比上月(%)","平均提前签单天数","环比") "个车续保率(全月)(%)","环比昨日(%)","环比上月(%)")
values (#{责任部门},#{机构目标值},#{到期数全月},#{序时到期数占比}, values (#{责任部门},#{机构目标值},#{到期数全月},#{序时到期数占比},
#{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月}, #{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月} )
#{平均提前签单天数},#{环比})
</insert> </insert>
<select id="cleanTelsalerAttachingRateData" statementType="CALLABLE"> <select id="cleanTelsalerAttachingRateData" statementType="CALLABLE">
call telsale_bi_utils.清理BI电销坐席车非渗透率跟踪表() call TELSALE_BI_UTILS.清理BI电销坐席车非渗透率跟踪表()
</select> </select>
<select id="cleanTelsalerRenewalRateData" statementType="CALLABLE"> <select id="cleanTelsalerRenewalRateData" statementType="CALLABLE">
call telsale_bi_utils.清理BI电销坐席续保率跟踪表() call TELSALE_BI_UTILS.清理BI电销坐席续保率跟踪表()
</select> </select>
<select id="cleanDepartmentAttachingRateData" statementType="CALLABLE"> <select id="cleanDepartmentAttachingRateData" statementType="CALLABLE">
call telsale_bi_utils.清理BI部门渗透率跟踪表() call TELSALE_BI_UTILS.清理BI部门渗透率跟踪表()
</select> </select>
<select id="cleanDepartmentRenewalRateData" statementType="CALLABLE"> <select id="cleanDepartmentRenewalRateData" statementType="CALLABLE">
call telsale_bi_utils.清理BI部门续保率跟踪表() call TELSALE_BI_UTILS.清理BI部门续保率跟踪表()
</select> </select>
</mapper> </mapper>

View File

@@ -43,10 +43,8 @@
t."个车续保率(序时)(%)" as 个车续保率序时, t."个车续保率(序时)(%)" as 个车续保率序时,
t."个车续保率(全月)(%)" as 个车续保率全月, t."个车续保率(全月)(%)" as 个车续保率全月,
t."环比昨日(%)" as 环比昨日, t."环比昨日(%)" as 环比昨日,
t."环比上月(%)" as 环比上月, t."环比上月(%)" as 环比上月
t.平均提前签单天数, from "BI电销坐席续保率跟踪表-24年" t
t.环比
from BI电销坐席续保率跟踪表 t
</select> </select>
<resultMap id="BITelsalerRenewalRate" type="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord"> <resultMap id="BITelsalerRenewalRate" type="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord">
<result property="责任部门" column="责任部门" javaType="String" jdbcType="VARCHAR" /> <result property="责任部门" column="责任部门" javaType="String" jdbcType="VARCHAR" />
@@ -58,8 +56,8 @@
<result property="个车续保率全月" column="个车续保率全月" javaType="double" jdbcType="DOUBLE" /> <result property="个车续保率全月" column="个车续保率全月" javaType="double" jdbcType="DOUBLE" />
<result property="环比昨日" column="环比昨日" javaType="double" jdbcType="DOUBLE" /> <result property="环比昨日" column="环比昨日" javaType="double" jdbcType="DOUBLE" />
<result property="环比上月" column="环比上月" javaType="double" jdbcType="DOUBLE" /> <result property="环比上月" column="环比上月" javaType="double" jdbcType="DOUBLE" />
<result property="平均提前签单天数" column="平均提前签单天数" javaType="int" jdbcType="DOUBLE" /> <!-- <result property="平均提前签单天数" column="平均提前签单天数" javaType="int" jdbcType="DOUBLE" /> -->
<result property="环比" column="环比" javaType="int" jdbcType="DOUBLE" /> <!-- <result property="环比" column="环比" javaType="int" jdbcType="DOUBLE" /> -->
</resultMap> </resultMap>
<!-- 机构渗透率 --> <!-- 机构渗透率 -->
@@ -104,10 +102,8 @@
t."个车续保率(序时)(%)" as 个车续保率序时, t."个车续保率(序时)(%)" as 个车续保率序时,
t."个车续保率(全月)(%)" as 个车续保率全月, t."个车续保率(全月)(%)" as 个车续保率全月,
t."环比昨日(%)" as 环比昨日, t."环比昨日(%)" as 环比昨日,
t."环比上月(%)" as 环比上月, t."环比上月(%)" as 环比上月
t.平均提前签单天数, from "BI机构续保率跟踪表-24年" t
t.环比
from BI机构当月个车续保率跟踪表 t
</select> </select>
<resultMap id="BIDepartmentRenewalRate" type="com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord"> <resultMap id="BIDepartmentRenewalRate" type="com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord">
<result column="责任部门" property="责任部门" jdbcType="VARCHAR" javaType="String" /> <result column="责任部门" property="责任部门" jdbcType="VARCHAR" javaType="String" />
@@ -118,7 +114,7 @@
<result column="个车续保率全月" property="个车续保率全月" jdbcType="DOUBLE" javaType="double" /> <result column="个车续保率全月" property="个车续保率全月" jdbcType="DOUBLE" javaType="double" />
<result column="环比昨日" property="环比昨日" jdbcType="DOUBLE" javaType="double" /> <result column="环比昨日" property="环比昨日" jdbcType="DOUBLE" javaType="double" />
<result column="环比上月" property="环比上月" jdbcType="DOUBLE" javaType="double" /> <result column="环比上月" property="环比上月" jdbcType="DOUBLE" javaType="double" />
<result column="平均提前签单天数" property="平均提前签单天数" jdbcType="INTEGER" javaType="int" /> <!-- <result column="平均提前签单天数" property="平均提前签单天数" jdbcType="INTEGER" javaType="int" /> -->
<result column="环比" property="环比" jdbcType="DOUBLE" javaType="double" /> <!-- <result column="环比" property="环比" jdbcType="DOUBLE" javaType="double" /> -->
</resultMap> </resultMap>
</mapper> </mapper>

View File

@@ -79,6 +79,86 @@
</resultMap> </resultMap>
<!-- insertTWrTelsalerRecordToDB --> <!-- insertTWrTelsalerRecordToDB -->
<insert id="insertTWrTelsalerRecordToDB"> <insert id="insertTWrTelsalerRecordToDB" parameterType="TWrTelsalerRecord">
insert into TWR_TELSALER_DEV(
人员姓名,
人员工号,
籍贯,
参加工作时间,
入职日期,
入司日期,
业务类型,
办公地省,
办公地市,
人员类别,
现任岗位,
现任职级,
机构名称,
职场分类,
片区名称,
团队名称,
对口分公司,
展业地区,
招聘渠道,
渠道明细,
全日制最高学历,
学历类型,
用工性质名称,
合同种类,
合同类型,
合同性质,
合同签订次数,
合同生效日期,
合同到期日期,
人员属性,
保代员工号,
职场属性,
办公性质,
保代人员属性,
人员状态)
values (
#{人员姓名},
#{人员工号},
#{籍贯},
#{参加工作时间},
#{入职日期},
#{入司日期},
#{业务类型},
#{办公地省},
#{办公地市},
#{人员类别},
#{现任岗位},
#{现任职级},
#{机构名称},
#{职场分类},
#{片区名称},
#{团队名称},
#{对口分公司},
#{展业地区},
#{招聘渠道},
#{渠道明细},
#{全日制最高学历},
#{学历类型},
#{用工性质名称},
#{合同种类},
#{合同类型},
#{合同性质},
#{合同签订次数},
#{合同生效日期},
#{合同到期日期},
#{人员属性},
#{保代员工号},
#{职场属性},
#{办公性质},
#{保代人员属性},
#{人员状态} )
</insert> </insert>
<select id="cleanTWrTelsalerRecord" statementType="CALLABLE">
call TELSALER_TWR_UTILS.清理TWR坐席清单()
</select>
<select id="cleanTWrTelsalerTeamRecord" statementType="CALLABLE">
call TELSALER_TWR_UTILS.清理TWR团队清单()
</select>
</mapper> </mapper>

View File

@@ -32,7 +32,8 @@
<mapper resource="mybatis/mapper/RankingListMapper.xml" /> <mapper resource="mybatis/mapper/RankingListMapper.xml" />
<mapper resource="mybatis/mapper/RewardsMapper.xml" /> <mapper resource="mybatis/mapper/RewardsMapper.xml" />
<mapper resource="mybatis/mapper/ImportBIArchievementDataMapper.xml" /> <mapper resource="mybatis/mapper/ImportBIArchievementDataMapper.xml" />
<mapper resource="mybatis/mapper/QueryBIArchievementDataMapper.xml" /> <mapper resource="mybatis/mapper/QueryBIArchievementDataMapper.xml" />
<mapper resource="mybatis/mapper/TWrTelsalerMapper.xml" />
</mappers> </mappers>
</configuration> </configuration>

View File

@@ -1,8 +1,12 @@
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" <?xml version="1.0" encoding="UTF-8"?>
<web-app
version="4.0"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:javaee="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
version="3.1">
<display-name>Archetype Created Web Application</display-name> <display-name>Archetype Created Web Application</display-name>
<servlet> <servlet>

View File

@@ -18,6 +18,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.cpic.xim.mybatis.mapper.ImportBIArchievementDataMapper; import com.cpic.xim.mybatis.mapper.ImportBIArchievementDataMapper;
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord; import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord;
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord; import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
import com.cpic.xim.mybatis.utils.MybatisUtils; import com.cpic.xim.mybatis.utils.MybatisUtils;
import com.cpic.xim.utils.data.ImportBIExcelData; import com.cpic.xim.utils.data.ImportBIExcelData;
@@ -74,7 +75,7 @@ public class BatchInsertTest
@Test @Test
public void testBatchInsertBITeslsalerRenewalRate() public void testBatchInsertBITeslsalerRenewalRate()
{ {
String filePath = "D:/develop/cpicxim/deskop_task_schedule/数据/测试用/坐席-续保.xlsx"; String filePath = "D:\\develop\\cpicxim\\deskop_task_schedule\\数据\\测试用\\24年报表\\坐席-续保.xlsx";
ArrayList<BITelsalerRenewalRateRecord> records = null; ArrayList<BITelsalerRenewalRateRecord> records = null;
SqlSession session = null; SqlSession session = null;
ImportBIArchievementDataMapper mapper = null; ImportBIArchievementDataMapper mapper = null;
@@ -114,7 +115,7 @@ public class BatchInsertTest
@Test @Test
public void testBatchInsertBIDepartmentAttachingRateToDB() public void testBatchInsertBIDepartmentAttachingRateToDB()
{ {
String filePath = "D:/develop/cpicxim/deskop_task_schedule/数据/测试用/机构渗透.xlsx"; String filePath = "D:\\develop\\cpicxim\\deskop_task_schedule\\数据\\测试用\\24年报表\\机构-续保.xlsx";
ArrayList<BIDepartmentAttachingRateRecord> records = null; ArrayList<BIDepartmentAttachingRateRecord> records = null;
SqlSession session = null; SqlSession session = null;
@@ -148,4 +149,42 @@ public class BatchInsertTest
assert( false ); assert( false );
} }
} }
@Test
public void testBatchInsertBIDepartmentRenewalRateToDB()
{
String filePath = "D:\\develop\\cpicxim\\deskop_task_schedule\\数据\\测试用\\24年报表\\机构-续保.xlsx";
ArrayList<BIDepartmentRenewalRateRecord> records = null;
SqlSession session = null;
ImportBIArchievementDataMapper mapper = null;
try
{
records =
ImportBIExcelData.importBIDepartmentRenewalRateRecordsFromXlsx( filePath, 0, 1 );
session = MybatisUtils.getSqlSessionBatch();
mapper = session.getMapper( ImportBIArchievementDataMapper.class );
mapper.cleanDepartmentRenewalRateData();
for ( BIDepartmentRenewalRateRecord record : records )
{
mapper.insertDepartmentRenewalRateDataToDB( record );
}
session.commit();
}
catch ( Exception error )
{
if ( session != null )
{
session.rollback();
}
logger.error("错误", error);
assert( false );
}
}
} }

Binary file not shown.

Binary file not shown.