Compare commits
41 Commits
c3479d7d8e
...
feature-te
Author | SHA1 | Date | |
---|---|---|---|
c6ea898505 | |||
711697e6a1 | |||
89866c8513 | |||
f90114e204 | |||
0458da2fae | |||
46d0ff64ef | |||
57b5edd9c0 | |||
73cfe24460 | |||
9e0d07a9f7 | |||
ab957962fc | |||
da9da6e906 | |||
7ba9d249ee | |||
afccb2a88c | |||
962c22400e | |||
c7bf9f6c0d | |||
daa1d2aaaf | |||
6a93fc2738 | |||
e3858d23d9 | |||
0cf8e16129 | |||
fe6707ca3f | |||
c6705d326d | |||
3e071cedd7 | |||
c7ae33222d | |||
a9c6e0476b | |||
2e02b9182d | |||
f391880c9c | |||
372824ec50 | |||
e4b68276dd | |||
8489f43b55 | |||
42dd59e141 | |||
d20a3222c0 | |||
68a314703f | |||
f33486197e | |||
6e8a42086b | |||
591a5865f3 | |||
d33572abb8 | |||
041ea37122 | |||
0f25aa4a72 | |||
33cb13fe29 | |||
eb0bd517d5 | |||
d1aebdc7f5 |
28
code/db/pkg/TELSALER_TWR_UTILS.pck
Normal file
28
code/db/pkg/TELSALER_TWR_UTILS.pck
Normal 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;
|
||||
/
|
23
code/db/pkg/Telsaler_twr_pkg.pck
Normal file
23
code/db/pkg/Telsaler_twr_pkg.pck
Normal file
@@ -0,0 +1,23 @@
|
||||
create or replace package Telsaler_twr_pkg is
|
||||
|
||||
-- Author : KANE
|
||||
-- Created : 2023/11/26 18:19:22
|
||||
-- Purpose : TWRϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>pkg
|
||||
|
||||
procedure <20><><EFBFBD><EFBFBD>TWR<57><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯԱ<CFAF><D4B1><EFBFBD><EFBFBD>;
|
||||
|
||||
end Telsaler_twr_pkg;
|
||||
/
|
||||
create or replace package body Telsaler_twr_pkg is
|
||||
|
||||
procedure <20><><EFBFBD><EFBFBD>TWR<57><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯԱ<CFAF><D4B1><EFBFBD><EFBFBD>
|
||||
is
|
||||
begin
|
||||
execute immediate 'truncate table twr_telsaler';
|
||||
end;
|
||||
|
||||
begin
|
||||
-- Initialization
|
||||
null;
|
||||
end Telsaler_twr_pkg;
|
||||
/
|
309
code/db/pkg/telsale_archievement_dev_pkg.pck
Normal file
309
code/db/pkg/telsale_archievement_dev_pkg.pck
Normal file
@@ -0,0 +1,309 @@
|
||||
CREATE OR REPLACE PACKAGE TELSALE_ARCHIEVEMENT_DEV_PKG IS
|
||||
|
||||
-- Author : WANGWEI-202
|
||||
-- Created : 2023/3/10 15:13:34
|
||||
-- Purpose : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD>
|
||||
|
||||
TYPE CUR_TYPE IS REF CURSOR;
|
||||
|
||||
-- <20>쳣
|
||||
DEPARTMENTCODE_EXCEPTION_CODE CONSTANT INTEGER := -20000;
|
||||
DEPARTMENTCODE_EXCEPTION_MSG CONSTANT VARCHAR2(100) := '<27><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>';
|
||||
|
||||
CALLERCODE_EXCEPTION_CODE CONSTANT INTEGER := -20001;
|
||||
CALLERCODE_EXCEPTION_MSG CONSTANT VARCHAR2(100) := '<27><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>';
|
||||
|
||||
PROCEDURE DEPARTMENT_ARCHIEVEMENT
|
||||
(
|
||||
A_DEPARTMENT_CODE IN VARCHAR2,
|
||||
A_ATTACHING_RATE OUT VARCHAR2,
|
||||
A_ATTACHING_RATE_TARGET OUT VARCHAR2,
|
||||
A_RENEWAL_RATE OUT VARCHAR2,
|
||||
A_RENEWAL_RATE_TARGET OUT VARCHAR2,
|
||||
A_TOTAL OUT INTEGER,
|
||||
A_MENSUAL_CUR OUT CUR_TYPE
|
||||
);
|
||||
|
||||
PROCEDURE CALLER_ARCHIEVEMENT
|
||||
(
|
||||
A_CALLER_CODE IN VARCHAR2,
|
||||
A_ATTACHING_RATE OUT VARCHAR2,
|
||||
A_RENEWAL_RATE OUT VARCHAR2,
|
||||
A_TOTAL OUT INTEGER,
|
||||
A_PRESENT_MONTH OUT NUMBER,
|
||||
A_MENSUAL_CUR OUT CUR_TYPE
|
||||
);
|
||||
|
||||
PROCEDURE CALLER_ARCH_RANKING_LIST
|
||||
(
|
||||
A_DEPARTMENT_CODE IN VARCHAR2,
|
||||
A_YEAR IN VARCHAR2,
|
||||
A_MONTH IN VARCHAR2,
|
||||
A_ATTACHING_RANKING_LIST OUT CUR_TYPE,
|
||||
A_RENEWAL_RANKING_LIST OUT CUR_TYPE
|
||||
);
|
||||
|
||||
END TELSALE_ARCHIEVEMENT_DEV_PKG;
|
||||
/
|
||||
CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_DEV_PKG IS
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>
|
||||
PROCEDURE DEPARTMENT_ARCHIEVEMENT
|
||||
(
|
||||
A_DEPARTMENT_CODE IN VARCHAR2,
|
||||
A_ATTACHING_RATE OUT VARCHAR2,
|
||||
A_ATTACHING_RATE_TARGET OUT VARCHAR2,
|
||||
A_RENEWAL_RATE OUT VARCHAR2,
|
||||
A_RENEWAL_RATE_TARGET OUT VARCHAR2,
|
||||
A_TOTAL OUT INTEGER,
|
||||
A_MENSUAL_CUR OUT CUR_TYPE
|
||||
) IS
|
||||
L_FIRSTDAY DATE;
|
||||
L_DEPARTMENT_NAME VARCHAR2(100);
|
||||
L_RENEWAL_RATE_TARGET NUMBER;
|
||||
BEGIN
|
||||
L_FIRSTDAY := TO_DATE(TO_CHAR(SYSDATE,
|
||||
'yyyy') || '-01-01 00:00:00',
|
||||
'yyyy-mm-dd hh24:mi:ss');
|
||||
-- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
SELECT DEPARTMENT_NAME
|
||||
INTO L_DEPARTMENT_NAME
|
||||
FROM IDST0.BM_T BM
|
||||
WHERE BM.DEPARTMENT_CODE = A_DEPARTMENT_CODE;
|
||||
EXCEPTION
|
||||
-- <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>쳣
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
RAISE_APPLICATION_ERROR(DEPARTMENTCODE_EXCEPTION_CODE,
|
||||
DEPARTMENTCODE_EXCEPTION_MSG);
|
||||
END;
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>&Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
SELECT ROUND(DEPT.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>,
|
||||
2),
|
||||
ROUND(DEPT.Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
2)
|
||||
INTO A_ATTACHING_RATE,
|
||||
A_ATTACHING_RATE_TARGET
|
||||
FROM DESKTOP_ARCHIEVEMENT_ADMIN.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
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
A_ATTACHING_RATE := '0.0';
|
||||
A_ATTACHING_RATE_TARGET := '0.0';
|
||||
END;
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
SELECT ROUND(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ʱ<EFBFBD><CAB1>(%)",
|
||||
2),
|
||||
ROUND(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ʱ<EFBFBD><CAB1>(%)" - t."<22><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ1(%)",
|
||||
2)
|
||||
INTO A_RENEWAL_RATE,
|
||||
A_RENEWAL_RATE_TARGET
|
||||
FROM "BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<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
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
A_RENEWAL_RATE := '0.0';
|
||||
A_RENEWAL_RATE_TARGET := '0.0';
|
||||
END;
|
||||
|
||||
--<2D><>ҵ<EFBFBD><D2B5>
|
||||
A_TOTAL := 0;
|
||||
|
||||
--ÿ<><C3BF>ҵ<EFBFBD><D2B5>
|
||||
OPEN A_MENSUAL_CUR FOR
|
||||
SELECT CF.<2E>·<EFBFBD> MM,
|
||||
ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD> + CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / 10000,
|
||||
0),
|
||||
0) BF
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
|
||||
WHERE <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = A_DEPARTMENT_CODE
|
||||
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE,
|
||||
'yyyy') || '-01-01 00:00:00',
|
||||
'yyyy-mm-dd hh24:mi:ss')
|
||||
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> < TO_DATE(TO_CHAR(SYSDATE,
|
||||
'yyyy-mm') || '-01 00:00:00',
|
||||
'yyyy-mm-dd hh24:mi:ss')
|
||||
GROUP BY CF.<2E>·<EFBFBD>
|
||||
ORDER BY CF.<2E>·<EFBFBD>;
|
||||
END;
|
||||
|
||||
/*******************************************************/
|
||||
-- <20><>ϯҵ<CFAF><D2B5>
|
||||
PROCEDURE CALLER_ARCHIEVEMENT
|
||||
(
|
||||
A_CALLER_CODE IN VARCHAR2,
|
||||
A_ATTACHING_RATE OUT VARCHAR2,
|
||||
A_RENEWAL_RATE OUT VARCHAR2,
|
||||
A_TOTAL OUT INTEGER,
|
||||
A_PRESENT_MONTH OUT NUMBER,
|
||||
A_MENSUAL_CUR OUT CUR_TYPE
|
||||
) IS
|
||||
L_CALLER_NAME VARCHAR2(100);
|
||||
L_DEPARTMENT_NAME VARCHAR2(100);
|
||||
L_THIS_YEAR VARCHAR2(4);
|
||||
L_ROWNUM INTEGER;
|
||||
BEGIN
|
||||
--<2D><>ѯ<EFBFBD><D1AF>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD><C6A3>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
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
|
||||
-- <20><><EFBFBD><EFBFBD>û<EFBFBD>в<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>쳣
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
RAISE_APPLICATION_ERROR(CALLERCODE_EXCEPTION_CODE,
|
||||
CALLERCODE_EXCEPTION_MSG);
|
||||
END;
|
||||
|
||||
L_THIS_YEAR := TO_CHAR(SYSDATE,
|
||||
'yyyy');
|
||||
|
||||
--<2D>ܳ<EFBFBD><DCB3>ձ<EFBFBD><D5B1><EFBFBD>
|
||||
SELECT ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0),
|
||||
2) BF
|
||||
INTO A_TOTAL
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
|
||||
WHERE CF.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = L_CALLER_NAME
|
||||
AND CF.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME
|
||||
AND CF.<2E><><EFBFBD><EFBFBD> = L_THIS_YEAR;
|
||||
|
||||
--<2D><><EFBFBD><CDB8>
|
||||
BEGIN
|
||||
SELECT ROWNUM,
|
||||
ROUND(NVL(T.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>,
|
||||
0),
|
||||
2),
|
||||
ROUND(NVL(t."<22><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>(<28><>)" * 10000,
|
||||
0),
|
||||
2)
|
||||
INTO L_ROWNUM,
|
||||
A_ATTACHING_RATE,
|
||||
A_PRESENT_MONTH
|
||||
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
|
||||
AND ROWNUM = 1;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
L_ROWNUM := 1;
|
||||
A_ATTACHING_RATE := 0.0;
|
||||
A_PRESENT_MONTH := 0.0;
|
||||
END;
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
SELECT ROWNUM,
|
||||
ROUND(NVL(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)",
|
||||
0),
|
||||
2)
|
||||
INTO L_ROWNUM,
|
||||
A_RENEWAL_RATE
|
||||
FROM "BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>-24<32><34>" T
|
||||
WHERE T.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = L_CALLER_NAME
|
||||
AND ROWNUM = 1;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
L_ROWNUM := 1;
|
||||
A_RENEWAL_RATE := 0.0;
|
||||
END;
|
||||
|
||||
--ÿ<><C3BF>ҵ<EFBFBD><D2B5>
|
||||
OPEN A_MENSUAL_CUR FOR
|
||||
SELECT CF.<2E>·<EFBFBD> MM,
|
||||
ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0),
|
||||
0) BF
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
|
||||
WHERE CF.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = L_CALLER_NAME
|
||||
AND CF.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME
|
||||
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE,
|
||||
'yyyy') || '-01-01 00:00:00',
|
||||
'yyyy-mm-dd hh24:mi:ss')
|
||||
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= SYSDATE
|
||||
GROUP BY CF.<2E>·<EFBFBD>
|
||||
ORDER BY CF.<2E>·<EFBFBD>;
|
||||
END;
|
||||
|
||||
/*******************************************************/
|
||||
-- <20><>ϯ<EFBFBD><CFAF><EFBFBD>а<EFBFBD>
|
||||
PROCEDURE CALLER_ARCH_RANKING_LIST
|
||||
(
|
||||
A_DEPARTMENT_CODE IN VARCHAR2,
|
||||
A_YEAR IN VARCHAR2,
|
||||
A_MONTH IN VARCHAR2,
|
||||
A_ATTACHING_RANKING_LIST OUT CUR_TYPE,
|
||||
A_RENEWAL_RANKING_LIST OUT CUR_TYPE
|
||||
) IS
|
||||
L_DEPARTMENT_NAME VARCHAR2(100);
|
||||
BEGIN
|
||||
-- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
SELECT DEPARTMENT_NAME
|
||||
INTO L_DEPARTMENT_NAME
|
||||
FROM IDST0.BM_T BM
|
||||
WHERE BM.DEPARTMENT_CODE = A_DEPARTMENT_CODE;
|
||||
EXCEPTION
|
||||
-- <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>쳣
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
RAISE_APPLICATION_ERROR(DEPARTMENTCODE_EXCEPTION_CODE,
|
||||
DEPARTMENTCODE_EXCEPTION_MSG);
|
||||
END;
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||
OPEN A_ATTACHING_RANKING_LIST FOR
|
||||
SELECT ROWNUM,
|
||||
PAIHANG.<2E><><EFBFBD><EFBFBD> AS CALLER_NAME,
|
||||
PAIHANG.XBL AS ATTACHING_RATE
|
||||
FROM (SELECT T.<2E><><EFBFBD><EFBFBD>,
|
||||
ROUND(T.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>,
|
||||
2) XBL
|
||||
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
|
||||
ORDER BY T.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8> DESC) PAIHANG;
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||
OPEN A_RENEWAL_RANKING_LIST FOR
|
||||
SELECT ROWNUM,
|
||||
PAIHANG.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS CALLER_NAME,
|
||||
PAIHANG.XBL AS RENEWAL_RATE
|
||||
FROM (SELECT T.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
ROUND(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)",
|
||||
2) XBL
|
||||
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> T
|
||||
WHERE T.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD> = L_DEPARTMENT_NAME
|
||||
ORDER BY XBL DESC) PAIHANG;
|
||||
END;
|
||||
BEGIN
|
||||
NULL;
|
||||
END TELSALE_ARCHIEVEMENT_DEV_PKG;
|
||||
/
|
@@ -1,10 +1,10 @@
|
||||
CREATE OR REPLACE PACKAGE telsale_archievement_pkg IS
|
||||
CREATE OR REPLACE PACKAGE TELSALE_ARCHIEVEMENT_PKG IS
|
||||
|
||||
-- Author : WANGWEI-202
|
||||
-- Created : 2023/3/10 15:13:34
|
||||
-- Purpose : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD>
|
||||
|
||||
TYPE cur_type IS REF CURSOR;
|
||||
TYPE CUR_TYPE IS REF CURSOR;
|
||||
|
||||
-- <20>쳣
|
||||
DEPARTMENTCODE_EXCEPTION_CODE CONSTANT INTEGER := -20000;
|
||||
@@ -13,55 +13,55 @@ CREATE OR REPLACE PACKAGE telsale_archievement_pkg IS
|
||||
CALLERCODE_EXCEPTION_CODE CONSTANT INTEGER := -20001;
|
||||
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_attaching_rate OUT VARCHAR2,
|
||||
a_renewal_rate OUT VARCHAR2,
|
||||
a_total OUT INTEGER,
|
||||
a_mensual_cur OUT cur_type
|
||||
A_DEPARTMENT_CODE IN VARCHAR2,
|
||||
A_ATTACHING_RATE OUT VARCHAR2,
|
||||
A_ATTACHING_RATE_TARGET OUT VARCHAR2,
|
||||
A_RENEWAL_RATE OUT VARCHAR2,
|
||||
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_attaching_rate OUT VARCHAR2,
|
||||
a_renewal_rate OUT VARCHAR2,
|
||||
a_total OUT INTEGER,
|
||||
a_present_month OUT NUMBER,
|
||||
a_mensual_cur OUT cur_type
|
||||
A_CALLER_CODE IN VARCHAR2,
|
||||
A_ATTACHING_RATE OUT VARCHAR2,
|
||||
A_RENEWAL_RATE OUT VARCHAR2,
|
||||
A_TOTAL OUT INTEGER,
|
||||
A_PRESENT_MONTH OUT NUMBER,
|
||||
A_MENSUAL_CUR OUT CUR_TYPE
|
||||
);
|
||||
|
||||
PROCEDURE caller_arch_ranking_list
|
||||
PROCEDURE CALLER_ARCH_RANKING_LIST
|
||||
(
|
||||
a_department_code IN VARCHAR2,
|
||||
a_year IN VARCHAR2,
|
||||
a_month IN VARCHAR2,
|
||||
a_attaching_ranking_list OUT cur_type,
|
||||
a_renewal_ranking_list OUT cur_type
|
||||
A_DEPARTMENT_CODE IN VARCHAR2,
|
||||
A_YEAR IN VARCHAR2,
|
||||
A_MONTH IN VARCHAR2,
|
||||
A_ATTACHING_RANKING_LIST OUT CUR_TYPE,
|
||||
A_RENEWAL_RANKING_LIST OUT CUR_TYPE
|
||||
);
|
||||
|
||||
END telsale_archievement_pkg;
|
||||
END TELSALE_ARCHIEVEMENT_PKG;
|
||||
/
|
||||
CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>
|
||||
PROCEDURE DEPARTMENT_ARCHIEVEMENT
|
||||
(
|
||||
A_DEPARTMENT_CODE IN VARCHAR2,
|
||||
A_ATTACHING_RATE OUT VARCHAR2,
|
||||
A_RENEWAL_RATE OUT VARCHAR2,
|
||||
A_TOTAL OUT INTEGER,
|
||||
A_MENSUAL_CUR OUT CUR_TYPE
|
||||
A_DEPARTMENT_CODE IN VARCHAR2,
|
||||
A_ATTACHING_RATE OUT VARCHAR2,
|
||||
A_ATTACHING_RATE_TARGET OUT VARCHAR2,
|
||||
A_RENEWAL_RATE OUT VARCHAR2,
|
||||
A_RENEWAL_RATE_TARGET OUT VARCHAR2,
|
||||
A_TOTAL OUT INTEGER,
|
||||
A_MENSUAL_CUR OUT CUR_TYPE
|
||||
) IS
|
||||
--L_THIS_MONTH VARCHAR2(4);
|
||||
--L_THIS_YEAR VARCHAR2(4);
|
||||
L_FIRSTDAY DATE;
|
||||
L_DEPARTMENT_NAME VARCHAR2(100);
|
||||
L_FIRSTDAY DATE;
|
||||
L_DEPARTMENT_NAME VARCHAR2(100);
|
||||
L_RENEWAL_RATE_TARGET NUMBER;
|
||||
BEGIN
|
||||
/*L_THIS_MONTH := TO_CHAR(SYSDATE,
|
||||
'mm');
|
||||
L_THIS_YEAR := TO_CHAR(SYSDATE,
|
||||
'yyyy');*/
|
||||
L_FIRSTDAY := TO_DATE(TO_CHAR(SYSDATE,
|
||||
'yyyy') || '-01-01 00:00:00',
|
||||
'yyyy-mm-dd hh24:mi:ss');
|
||||
@@ -77,45 +77,62 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
RAISE_APPLICATION_ERROR(DEPARTMENTCODE_EXCEPTION_CODE,
|
||||
DEPARTMENTCODE_EXCEPTION_MSG);
|
||||
END;
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>
|
||||
/*SELECT DECODE(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0,
|
||||
0,
|
||||
ROUND((SUM(CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>) * 100),
|
||||
2))
|
||||
INTO A_ATTACHING_RATE
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
|
||||
WHERE CF.<2E>·<EFBFBD> = L_THIS_MONTH
|
||||
AND CF.<2E><><EFBFBD><EFBFBD> = L_THIS_YEAR
|
||||
AND <20><><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD> = A_DEPARTMENT_CODE;*/
|
||||
SELECT round(dept.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>,
|
||||
2)
|
||||
INTO A_ATTACHING_RATE
|
||||
FROM desktop_archievement_admin.BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> dept
|
||||
WHERE dept.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME;
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*SELECT DECODE(SUM(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0,
|
||||
0,
|
||||
ROUND(SUM(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||
2))
|
||||
INTO A_RENEWAL_RATE
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>
|
||||
WHERE <20><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME;*/
|
||||
SELECT round(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)",
|
||||
2)
|
||||
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
|
||||
WHERE t.<2E><><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME;
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>&Ŀ<><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
SELECT ROUND(DEPT.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>,
|
||||
2),
|
||||
ROUND(DEPT.Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
2)
|
||||
INTO A_ATTACHING_RATE,
|
||||
A_ATTACHING_RATE_TARGET
|
||||
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> DEPT
|
||||
WHERE DEPT.<2E><EFBFBD><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
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
A_ATTACHING_RATE := '0.0';
|
||||
A_ATTACHING_RATE_TARGET := '0.0';
|
||||
END;
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
SELECT ROUND(t."<EFBFBD><EFBFBD><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)
|
||||
INTO A_RENEWAL_RATE,
|
||||
A_RENEWAL_RATE_TARGET
|
||||
FROM "BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<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
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
A_RENEWAL_RATE := '0.0';
|
||||
A_RENEWAL_RATE_TARGET := '0.0';
|
||||
END;
|
||||
|
||||
--<2D><>ҵ<EFBFBD><D2B5>
|
||||
SELECT ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD> + CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>),
|
||||
0),
|
||||
0)
|
||||
INTO A_TOTAL
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
|
||||
WHERE <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = A_DEPARTMENT_CODE
|
||||
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= L_FIRSTDAY
|
||||
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= SYSDATE;
|
||||
A_TOTAL := 0;
|
||||
|
||||
--ÿ<><C3BF>ҵ<EFBFBD><D2B5>
|
||||
OPEN A_MENSUAL_CUR FOR
|
||||
SELECT CF.<2E>·<EFBFBD> MM,
|
||||
@@ -136,86 +153,90 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
|
||||
/*******************************************************/
|
||||
-- <20><>ϯҵ<CFAF><D2B5>
|
||||
PROCEDURE caller_archievement
|
||||
PROCEDURE CALLER_ARCHIEVEMENT
|
||||
(
|
||||
a_caller_code IN VARCHAR2,
|
||||
a_attaching_rate OUT VARCHAR2,
|
||||
a_renewal_rate OUT VARCHAR2,
|
||||
a_total OUT INTEGER,
|
||||
a_present_month OUT NUMBER,
|
||||
a_mensual_cur OUT cur_type
|
||||
A_CALLER_CODE IN VARCHAR2,
|
||||
A_ATTACHING_RATE OUT VARCHAR2,
|
||||
A_RENEWAL_RATE OUT VARCHAR2,
|
||||
A_TOTAL OUT INTEGER,
|
||||
A_PRESENT_MONTH OUT NUMBER,
|
||||
A_MENSUAL_CUR OUT CUR_TYPE
|
||||
) IS
|
||||
l_caller_name VARCHAR2(100);
|
||||
l_department_name VARCHAR2(100);
|
||||
--l_this_month VARCHAR2(4);
|
||||
l_this_year VARCHAR2(4);
|
||||
--l_firstday DATE;
|
||||
l_rownum INTEGER;
|
||||
L_CALLER_NAME VARCHAR2(100);
|
||||
L_DEPARTMENT_NAME VARCHAR2(100);
|
||||
L_THIS_YEAR VARCHAR2(4);
|
||||
L_ROWNUM INTEGER;
|
||||
BEGIN
|
||||
--<2D><>ѯ<EFBFBD><D1AF>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD><C6A3>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
SELECT zx.saler_name,
|
||||
bm.department_name
|
||||
INTO l_caller_name,
|
||||
l_department_name
|
||||
FROM tele_saler zx,
|
||||
tele_saler_team team,
|
||||
idst0.bm_t bm
|
||||
WHERE zx.saler_code = a_caller_code
|
||||
AND zx.team_code = team.team_code
|
||||
AND team.department_code = bm.department_code;
|
||||
/* SELECT saler_name
|
||||
INTO l_caller_name
|
||||
FROM tele_saler
|
||||
WHERE saler_code = a_caller_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
|
||||
-- <20><><EFBFBD><EFBFBD>û<EFBFBD>в<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>쳣
|
||||
WHEN no_data_found THEN
|
||||
raise_application_error(CALLERCODE_EXCEPTION_CODE,
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
RAISE_APPLICATION_ERROR(CALLERCODE_EXCEPTION_CODE,
|
||||
CALLERCODE_EXCEPTION_MSG);
|
||||
END;
|
||||
|
||||
--l_this_month := to_char(SYSDATE,
|
||||
-- 'mm');
|
||||
l_this_year := to_char(SYSDATE,
|
||||
L_THIS_YEAR := TO_CHAR(SYSDATE,
|
||||
'yyyy');
|
||||
--l_firstday := to_date(l_this_year || '-01-01 00:00:00',
|
||||
-- 'yyyy-mm-dd hh24:mi:ss');
|
||||
|
||||
--<2D>ܳ<EFBFBD><DCB3>ձ<EFBFBD><D5B1><EFBFBD>
|
||||
SELECT round(nvl(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||
SELECT ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0),
|
||||
2) bf
|
||||
INTO a_total
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf
|
||||
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = l_caller_name
|
||||
AND cf.<2E><><EFBFBD><EFBFBD> = l_department_name
|
||||
AND cf.<2E><><EFBFBD><EFBFBD> = l_this_year;
|
||||
2) BF
|
||||
INTO A_TOTAL
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
|
||||
WHERE CF.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = L_CALLER_NAME
|
||||
AND CF.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME
|
||||
AND CF.<2E><><EFBFBD><EFBFBD> = L_THIS_YEAR;
|
||||
|
||||
--<2D><><EFBFBD><CDB8>
|
||||
SELECT rownum,
|
||||
round(nvl(t.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>,
|
||||
0),
|
||||
2),
|
||||
round(nvl(t."<22><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>(<28><>)" * 10000,
|
||||
0),
|
||||
2)
|
||||
INTO l_rownum,
|
||||
a_attaching_rate,
|
||||
a_present_month
|
||||
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
|
||||
AND rownum = 1;
|
||||
BEGIN
|
||||
SELECT ROWNUM,
|
||||
ROUND(NVL(T.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>,
|
||||
0),
|
||||
2),
|
||||
ROUND(NVL(t."<22><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>(<28><>)" * 10000,
|
||||
0),
|
||||
2)
|
||||
INTO L_ROWNUM,
|
||||
A_ATTACHING_RATE,
|
||||
A_PRESENT_MONTH
|
||||
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
|
||||
AND ROWNUM = 1;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
L_ROWNUM := 1;
|
||||
A_ATTACHING_RATE := 0.0;
|
||||
A_PRESENT_MONTH := 0.0;
|
||||
END;
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SELECT rownum,
|
||||
round(nvl(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)",
|
||||
0),
|
||||
2)
|
||||
INTO l_rownum,
|
||||
a_renewal_rate
|
||||
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD> t
|
||||
WHERE t.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = l_caller_name
|
||||
AND rownum = 1;
|
||||
BEGIN
|
||||
SELECT ROWNUM,
|
||||
ROUND(NVL(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)",
|
||||
0),
|
||||
2)
|
||||
INTO L_ROWNUM,
|
||||
A_RENEWAL_RATE
|
||||
FROM "BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>-24<32><34>" T
|
||||
WHERE T.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = L_CALLER_NAME
|
||||
AND ROWNUM = 1;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
L_ROWNUM := 1;
|
||||
A_RENEWAL_RATE := 0.0;
|
||||
END;
|
||||
|
||||
--ÿ<><C3BF>ҵ<EFBFBD><D2B5>
|
||||
OPEN A_MENSUAL_CUR FOR
|
||||
@@ -224,8 +245,8 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
0),
|
||||
0) BF
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
|
||||
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = l_caller_name
|
||||
AND cf.<2E><><EFBFBD><EFBFBD> = l_department_name
|
||||
WHERE CF.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = L_CALLER_NAME
|
||||
AND CF.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME
|
||||
AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE,
|
||||
'yyyy') || '-01-01 00:00:00',
|
||||
'yyyy-mm-dd hh24:mi:ss')
|
||||
@@ -260,54 +281,27 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
END;
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||
OPEN A_ATTACHING_RANKING_LIST FOR
|
||||
SELECT rownum,
|
||||
paihang.<2E><><EFBFBD><EFBFBD> AS caller_name,
|
||||
paihang.attaching_rate
|
||||
FROM (SELECT DISTINCT *
|
||||
FROM (SELECT t.<2E><><EFBFBD><EFBFBD>,
|
||||
round(t.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>,
|
||||
2) attaching_rate,
|
||||
zuoxi.department_name
|
||||
FROM BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><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> = zuoxi.saler_name) st
|
||||
ORDER BY st.department_name,
|
||||
st.attaching_rate DESC) paihang;
|
||||
SELECT ROWNUM,
|
||||
PAIHANG.<2E><><EFBFBD><EFBFBD> AS CALLER_NAME,
|
||||
PAIHANG.XBL AS ATTACHING_RATE
|
||||
FROM (SELECT T.<2E><><EFBFBD><EFBFBD>,
|
||||
ROUND(T.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
2) XBL
|
||||
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
|
||||
ORDER BY T.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8> DESC) PAIHANG;
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||
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;
|
||||
SELECT ROWNUM,
|
||||
PAIHANG.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS CALLER_NAME,
|
||||
PAIHANG.XBL AS RENEWAL_RATE
|
||||
FROM (SELECT T.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
ROUND(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)",
|
||||
2) XBL
|
||||
FROM "BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ٱ<EFBFBD>-24<32><34>" T
|
||||
WHERE T.<2E><><EFBFBD>β<EFBFBD><CEB2><EFBFBD> = L_DEPARTMENT_NAME
|
||||
ORDER BY XBL DESC) PAIHANG;
|
||||
END;
|
||||
BEGIN
|
||||
NULL;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
CREATE OR REPLACE PACKAGE telsale_bi_utils IS
|
||||
CREATE OR REPLACE PACKAGE TELSALE_BI_UTILS IS
|
||||
|
||||
-- Author : WANGWEI-202
|
||||
-- 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>;
|
||||
|
||||
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
|
||||
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
|
||||
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;
|
||||
|
||||
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
|
||||
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;
|
||||
|
||||
BEGIN
|
||||
-- Initialization
|
||||
NULL;
|
||||
END telsale_bi_utils;
|
||||
END TELSALE_BI_UTILS;
|
||||
/
|
||||
|
45
code/db/pkg/telsale_bi_utils_dev.pck
Normal file
45
code/db/pkg/telsale_bi_utils_dev.pck
Normal 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;
|
||||
/
|
17
code/db/twr_常用.sql
Normal file
17
code/db/twr_常用.sql
Normal file
@@ -0,0 +1,17 @@
|
||||
select *
|
||||
from twr_telsaler_team;
|
||||
|
||||
|
||||
|
||||
SELECT ry.<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
ry.<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
team.team_code,
|
||||
team.team_name,
|
||||
bm.department_code,
|
||||
bm.department_name
|
||||
FROM twr_telsaler ry,
|
||||
twr_telsaler_team team,
|
||||
idst0.bm_t bm
|
||||
WHERE ry.<EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = team.team_name
|
||||
AND team.department_code = bm.department_code
|
||||
AND (ry.<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>' OR ry.<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>');
|
3
code/db/宽表.sql
Normal file
3
code/db/宽表.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
SELECT * FROM datacenter.kx_bi_c_kb_qd WHERE <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> >= DATE '2023-01-01';
|
||||
|
||||
SELECT * FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD> CF WHERE <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>' ORDER BY ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC;
|
@@ -1,30 +1,30 @@
|
||||
SELECT *
|
||||
FROM reward_gainers
|
||||
FROM REWARD_GAINERS
|
||||
FOR UPDATE;
|
||||
|
||||
SELECT b.reward_name,
|
||||
a.*
|
||||
FROM reward_gainers a,
|
||||
reward_projects b
|
||||
WHERE a.reward_index = b.reward_index;
|
||||
SELECT B.REWARD_NAME,
|
||||
A.*
|
||||
FROM REWARD_GAINERS A,
|
||||
REWARD_PROJECTS B
|
||||
WHERE A.REWARD_INDEX = B.REWARD_INDEX;
|
||||
|
||||
--<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SELECT DISTINCT s.saler_code,
|
||||
s.saler_name,
|
||||
t.team_code,
|
||||
t.team,
|
||||
bm.department_code,
|
||||
bm.department_name
|
||||
FROM tele_saler s,
|
||||
tele_saler_team t,
|
||||
idst0.bm_t bm
|
||||
WHERE s.team_code = t.team_code
|
||||
AND t.department_code = bm.department_code
|
||||
AND s.saler_code = '61136';
|
||||
SELECT DISTINCT S.SALER_CODE,
|
||||
S.SALER_NAME,
|
||||
T.TEAM_CODE,
|
||||
T.TEAM,
|
||||
BM.DEPARTMENT_CODE,
|
||||
BM.DEPARTMENT_NAME
|
||||
FROM TELE_SALER S,
|
||||
TELE_SALER_TEAM T,
|
||||
IDST0.BM_T BM
|
||||
WHERE S.TEAM_CODE = T.TEAM_CODE
|
||||
AND T.DEPARTMENT_CODE = BM.DEPARTMENT_CODE
|
||||
AND S.SALER_CODE = '61136';
|
||||
|
||||
SELECT *
|
||||
FROM tele_saler_team t
|
||||
WHERE t.team_code = '107077'
|
||||
FROM TELE_SALER_TEAM T
|
||||
WHERE T.TEAM_CODE = '107077'
|
||||
|
||||
SELECT *
|
||||
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
|
||||
@@ -35,7 +35,7 @@ SELECT *
|
||||
SELECT <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD>,
|
||||
round((SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)) * 100,
|
||||
ROUND((SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)) * 100,
|
||||
0) || '%' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD>
|
||||
GROUP BY <EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
@@ -46,7 +46,7 @@ SELECT
|
||||
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
SUM(<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
|
||||
SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>),
|
||||
round(SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||
ROUND(SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
|
||||
GROUP BY <EFBFBD>·<EFBFBD>,
|
||||
@@ -57,7 +57,7 @@ HAVING
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC;
|
||||
|
||||
SELECT <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
round(SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||
ROUND(SUM(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
|
||||
WHERE <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD> = 'QDI'
|
||||
@@ -68,37 +68,37 @@ 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),
|
||||
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD> xb
|
||||
WHERE xb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||||
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD> XB
|
||||
WHERE XB.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||||
GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ORDER BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC;
|
||||
-------------------------------------
|
||||
SELECT zx.saler_name,
|
||||
bm.department_name
|
||||
FROM tele_saler zx,
|
||||
tele_saler_team team,
|
||||
idst0.bm_t bm
|
||||
WHERE zx.saler_name = '<EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD>'
|
||||
AND zx.team_code = team.team_code
|
||||
AND team.department_code = bm.department_code;
|
||||
SELECT ZX.SALER_NAME,
|
||||
BM.DEPARTMENT_NAME
|
||||
FROM TELE_SALER ZX,
|
||||
TELE_SALER_TEAM TEAM,
|
||||
IDST0.BM_T BM
|
||||
WHERE ZX.SALER_NAME = '<EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD>'
|
||||
AND ZX.TEAM_CODE = TEAM.TEAM_CODE
|
||||
AND TEAM.DEPARTMENT_CODE = BM.DEPARTMENT_CODE;
|
||||
----------------------------------------
|
||||
/*
|
||||
truncate table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>;
|
||||
*/
|
||||
|
||||
SELECT *
|
||||
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>';
|
||||
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>';
|
||||
|
||||
SELECT *
|
||||
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>
|
||||
WHERE <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>';
|
||||
|
||||
SELECT *
|
||||
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>;
|
||||
|
||||
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>";
|
||||
|
39
code/db/建表/TWr坐席.sql
Normal file
39
code/db/建表/TWr坐席.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
drop table twr_telsaler;
|
||||
create table twr_telsaler
|
||||
(
|
||||
<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD>μӹ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> varchar2(20),
|
||||
<EFBFBD><EFBFBD>ְ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(20),
|
||||
<EFBFBD><EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(20),
|
||||
ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD>칫<EFBFBD><EFBFBD>ʡ varchar2(40),
|
||||
<EFBFBD>칫<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD>λ varchar2(40),
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
ְ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
Ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD>Կڷֹ<EFBFBD>˾ varchar2(40),
|
||||
չҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD>Ƹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ varchar2(40),
|
||||
ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><EFBFBD> varchar2(40),
|
||||
ѧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD>ͬǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> integer,
|
||||
<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(20),
|
||||
<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(20),
|
||||
<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
ְ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD>칫<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(40),
|
||||
<EFBFBD><EFBFBD>Ա״̬ varchar2(40)
|
||||
);
|
7
code/db/建表/TWr坐席团队.sql
Normal file
7
code/db/建表/TWr坐席团队.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
drop table twr_telsaler_team;
|
||||
create table twr_telsaler_team
|
||||
(
|
||||
team_name varchar2(40) not null,
|
||||
team_code varchar2(20),
|
||||
department_code varchar2(6) not null
|
||||
);
|
@@ -113,6 +113,7 @@ module.exports = {
|
||||
// typescript
|
||||
"@typescript-eslint/indent": ["warn", 4,],
|
||||
"@typescript-eslint/no-explicit-any": "warn",
|
||||
"@typescript-eslint/no-unsafe-argument": "warn",
|
||||
"@typescript-eslint/no-extra-semi": "off",
|
||||
"@typescript-eslint/no-inferrable-types": "off",
|
||||
"@typescript-eslint/no-unused-vars": "warn",
|
||||
@@ -159,6 +160,7 @@ module.exports = {
|
||||
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-unsafe-argument": "warn",
|
||||
"@typescript-eslint/indent": ["error", 4,],
|
||||
"@typescript-eslint/no-extra-semi": "off",
|
||||
"@typescript-eslint/no-inferrable-types": "off",
|
||||
|
17
code/web/task_schedule/pack.txt
Normal file
17
code/web/task_schedule/pack.txt
Normal 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
|
40
code/web/task_schedule/package copy.json
Normal file
40
code/web/task_schedule/package copy.json
Normal 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"
|
||||
}
|
||||
}
|
11522
code/web/task_schedule/package-lock.json
generated
11522
code/web/task_schedule/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -9,32 +9,22 @@
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "^2.1.0",
|
||||
"echarts": "^5.4.3",
|
||||
"element-plus": "^2.4.2",
|
||||
"@element-plus/icons-vue": "^2.3.2",
|
||||
"axios": "^1.11.0",
|
||||
"echarts": "^6.0.0",
|
||||
"element-plus": "^2.11.1",
|
||||
"mitt": "^3.0.1",
|
||||
"moment": "^2.29.4",
|
||||
"sass-loader": "^13.3.2",
|
||||
"vue": "^3.3.8",
|
||||
"vue-router": "^4.2.5",
|
||||
"moment": "^2.30.1",
|
||||
"task_schedule": "file:",
|
||||
"vue": "^3.5.21",
|
||||
"vue-router": "^4.5.1",
|
||||
"vuex": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/eslint-parser": "^7.23.3",
|
||||
"@rushstack/eslint-patch": "^1.5.1",
|
||||
"@typescript-eslint/eslint-plugin": "^6.11.0",
|
||||
"@vitejs/plugin-vue": "^4.5.0",
|
||||
"@vue/cli-plugin-eslint": "^5.0.8",
|
||||
"@vue/eslint-config-typescript": "^12.0.0",
|
||||
"axios": "^1.6.2",
|
||||
"babel": "^6.23.0",
|
||||
"@vitejs/plugin-vue": "^6.0.1",
|
||||
"eslint-config-recommended": "^4.1.0",
|
||||
"eslint-config-standard-with-typescript": "^40.0.0",
|
||||
"eslint-plugin-vue": "^9.18.1",
|
||||
"node-sass": "^9.0.0",
|
||||
"sass": "^1.69.5",
|
||||
"style-loader": "^3.3.3",
|
||||
"ts-node": "^10.9.1",
|
||||
"vue-eslint-parser": "^9.3.2"
|
||||
"eslint-config-standard-with-typescript": "^43.0.1",
|
||||
"eslint-plugin-vue": "^10.4.0",
|
||||
"ts-node": "^10.9.2"
|
||||
}
|
||||
}
|
||||
|
@@ -12,18 +12,18 @@
|
||||
<el-progress
|
||||
type="circle"
|
||||
:percentage="ui.percentage"
|
||||
status="success"
|
||||
:status="ui.warningLevel"
|
||||
>
|
||||
<template #default>
|
||||
<span class="percentage-label">{{ ui.indicator }}</span>
|
||||
<span class="percentage-value">{{ percentage }}%</span>
|
||||
<span :class="warningLevelClass">{{ percentage }}%</span>
|
||||
</template>
|
||||
</el-progress>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { reactive } from "vue";
|
||||
import { reactive, computed } from "vue";
|
||||
export default {
|
||||
name: "ArchievementCompleteRateComponent",
|
||||
props: {
|
||||
@@ -36,17 +36,42 @@ export default {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
warningLevel: { // 警告等级
|
||||
type: String,
|
||||
default: "success",
|
||||
},
|
||||
},
|
||||
setup( props )
|
||||
{
|
||||
const percentage = Number( props.percentage ).valueOf();
|
||||
|
||||
const warningLevelClass = computed((): string =>
|
||||
{
|
||||
let textClass = "";
|
||||
|
||||
if ( props.warningLevel === "success" )
|
||||
{
|
||||
textClass = "percentage-value";
|
||||
}
|
||||
else if ( props.warningLevel === "warning" )
|
||||
{
|
||||
textClass = "percentage-value-warning";
|
||||
}
|
||||
else if ( props.warningLevel === "exception" )
|
||||
{
|
||||
textClass = "percentage-value-exception";
|
||||
}
|
||||
|
||||
return textClass;
|
||||
});
|
||||
|
||||
const ui = reactive({
|
||||
percentage,
|
||||
indicator: props.indicator,
|
||||
warningLevel: props.warningLevel,
|
||||
});
|
||||
|
||||
return { ui, };
|
||||
return { ui, warningLevelClass, };
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -74,6 +99,21 @@ export default {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.percentage-value-warning {
|
||||
display: block;
|
||||
margin-top: 10px;
|
||||
font-size: 28px;
|
||||
color: #e59f46;
|
||||
}
|
||||
|
||||
.percentage-value-exception {
|
||||
display: block;
|
||||
margin-top: 10px;
|
||||
font-size: 28px;
|
||||
color: red;
|
||||
// color: #f3666b;
|
||||
}
|
||||
|
||||
.percentage-label {
|
||||
display: block;
|
||||
margin-top: 10px;
|
||||
|
@@ -78,32 +78,22 @@
|
||||
// @ts-expect-error 之后再补充类型文件
|
||||
import { hasOnlyChild } from "@/router/index.js";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
// import { useRoute, useRouter, type RouteRecordNormalized, type _RouteRecordBase } from "vue-router";
|
||||
import { computed } from "vue";
|
||||
|
||||
// declare interface SideBarRouteRecordNormalized extends RouteRecordNormalized
|
||||
// {
|
||||
// hidden?: boolean;
|
||||
// }
|
||||
|
||||
// declare interface SideBarRouteRecordSingleView extends _RouteRecordBase
|
||||
// {
|
||||
|
||||
// }
|
||||
|
||||
export default {
|
||||
name: "LayoutAside",
|
||||
setup()
|
||||
{
|
||||
const userRout = useRoute();
|
||||
const router = useRouter();
|
||||
const routes = router.getRoutes();// as SideBarRouteRecordNormalized[];
|
||||
|
||||
const currentPath = computed(() =>
|
||||
{
|
||||
return useRoute().path;
|
||||
return userRout.path;
|
||||
});
|
||||
|
||||
return { routes, currentPath, hasOnlyChild, };
|
||||
return { userRout, routes, currentPath, hasOnlyChild, };
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
@@ -12,7 +12,7 @@
|
||||
<span class="company-name">CPIC</span>
|
||||
<div class="version-wrapper">
|
||||
<span>桌面霸屏后台管理</span>
|
||||
<span>Build-20230915</span>
|
||||
<span>Build-20240111</span>
|
||||
</div>
|
||||
<div class="buttons-wrapper">
|
||||
<component
|
||||
|
89
code/web/task_schedule/src/test/identify.ts
Normal file
89
code/web/task_schedule/src/test/identify.ts
Normal 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
|
||||
};
|
50
code/web/task_schedule/src/test/requestTest.ts
Normal file
50
code/web/task_schedule/src/test/requestTest.ts
Normal 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
|
||||
};
|
35
code/web/task_schedule/src/test/testBI.ts
Normal file
35
code/web/task_schedule/src/test/testBI.ts
Normal 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 );
|
28
code/web/task_schedule/src/test/testCallerArchievement.ts
Normal file
28
code/web/task_schedule/src/test/testCallerArchievement.ts
Normal 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 );
|
31
code/web/task_schedule/src/test/testRankingListRequest.ts
Normal file
31
code/web/task_schedule/src/test/testRankingListRequest.ts
Normal 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 };
|
30
code/web/task_schedule/src/test/testRewardRequest.ts
Normal file
30
code/web/task_schedule/src/test/testRewardRequest.ts
Normal 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 );
|
@@ -11,10 +11,12 @@
|
||||
"compilerOptions": {
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"useDefineForClassFields": true,
|
||||
"allowImportingTsExtensions": true,
|
||||
"noEmit": true,
|
||||
"target": "ESNext",
|
||||
"module": "ESNext",
|
||||
"module": "NodeNext",
|
||||
// "module": "CommonJS",
|
||||
"moduleResolution": "node",
|
||||
"moduleResolution": "NodeNext",
|
||||
"strict": true,
|
||||
"jsx": "preserve",
|
||||
"sourceMap": true,
|
||||
@@ -47,6 +49,7 @@
|
||||
"./node_modules",
|
||||
],
|
||||
"ts-node": {
|
||||
"esm": true
|
||||
"esm": true,
|
||||
"require": ["tsconfig-paths/register"],
|
||||
},
|
||||
}
|
@@ -7,8 +7,8 @@
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
import { service as instance } from "./api/request.js";
|
||||
import { API_URL } from "./api/config.js";
|
||||
import { service as instance } from "./api/request.ts";
|
||||
import { API_URL } from "./api/config.ts";
|
||||
import { type AxiosResponse } from "axios";
|
||||
interface BIReportType
|
||||
{
|
||||
|
@@ -7,6 +7,7 @@
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
// 请求的url
|
||||
const API_URL = {
|
||||
// 登录
|
||||
URL_LOGIN: import.meta.env.VITE_URL_LOGIN,
|
||||
|
@@ -27,6 +27,7 @@ function loadStaffInfo(): StaffInfo
|
||||
obj = {};
|
||||
}
|
||||
|
||||
/* eslint-disable */
|
||||
const stuff = new StaffInfo(
|
||||
obj._p13uid ?? "",
|
||||
obj._stuffCode ?? "",
|
||||
@@ -35,7 +36,7 @@ function loadStaffInfo(): StaffInfo
|
||||
obj._department_name ?? "",
|
||||
obj._section_office_code ?? "",
|
||||
obj._section_office_name ?? "" );
|
||||
|
||||
/* eslint-enable */
|
||||
return stuff;
|
||||
}
|
||||
|
||||
|
@@ -13,7 +13,7 @@ import axios, { type AxiosInstance } from "axios";
|
||||
const service: AxiosInstance = axios.create(
|
||||
{
|
||||
baseURL: "",
|
||||
timeout: 10000,
|
||||
timeout: 30000,
|
||||
}
|
||||
);
|
||||
|
||||
|
18
code/web/task_schedule/src/utils/api/systemParameters.ts
Normal file
18
code/web/task_schedule/src/utils/api/systemParameters.ts
Normal 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 };
|
@@ -7,10 +7,10 @@
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
import { service as instance } from "./api/request.js";
|
||||
import { API_URL } from "./api/config.js";
|
||||
import { type Department } from "../types/cpicxim/Department.js";
|
||||
import { type TelSaler } from "../types/cpicxim/TelSaler.js";
|
||||
import { service as instance } from "./api/request.ts";
|
||||
import { API_URL } from "./api/config.ts";
|
||||
import { type Department } from "../types/cpicxim/Department.ts";
|
||||
import { type TelSaler } from "../types/cpicxim/TelSaler.ts";
|
||||
import { type AxiosResponse } from "axios";
|
||||
|
||||
interface DepartmentArchievement // 定义业绩对象的结构
|
||||
@@ -20,7 +20,9 @@ interface DepartmentArchievement // 定义业绩对象的结构
|
||||
total_archievement: number;
|
||||
mensual_archievement_list: number[];
|
||||
insurance_renewal_rate: string;
|
||||
insurance_renewal_rate_target: string;
|
||||
attaching_rate: string;
|
||||
attaching_rate_target: string;
|
||||
leading_reward_gainers: string[];
|
||||
advance_reward_gainers: string[];
|
||||
backward_list: string[];
|
||||
@@ -57,7 +59,9 @@ function queryDepartmentArchievement( departmentInfo: Department, render: any ):
|
||||
total_archievement: 0,
|
||||
mensual_archievement_list: [],
|
||||
insurance_renewal_rate: "",
|
||||
insurance_renewal_rate_target: "",
|
||||
attaching_rate: "",
|
||||
attaching_rate_target: "",
|
||||
leading_reward_gainers: [],
|
||||
advance_reward_gainers: [],
|
||||
backward_list: [],
|
||||
@@ -78,7 +82,9 @@ function queryDepartmentArchievement( departmentInfo: Department, render: any ):
|
||||
archievement.total_archievement = data.total_archievement;
|
||||
archievement.mensual_archievement_list = [];
|
||||
archievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0";
|
||||
archievement.insurance_renewal_rate_target = data.insurance_renewal_rate_target ?? "0.0";
|
||||
archievement.attaching_rate = data.attaching_rate ?? "0.0";
|
||||
archievement.attaching_rate_target = data.attaching_rate_target ?? "0.0";
|
||||
archievement.leading_reward_gainers = data.leading_reward_gainers ?? [];
|
||||
archievement.advance_reward_gainers = data.advance_reward_gainers ?? [];
|
||||
archievement.backward_list = data.backward_list ?? [];
|
||||
@@ -87,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.forEach(( item: any ) =>
|
||||
{
|
||||
archievement.mensual_archievement_list.push( item.premium );
|
||||
archievement.mensual_archievement_list.push( item.premium ); // eslint-disable-line
|
||||
});
|
||||
|
||||
console.log( "每月业绩", archievement );
|
||||
@@ -163,7 +169,7 @@ function queryCallerArchievement( callerInfo: TelSaler, render: any ): void
|
||||
callArchievement.attaching_rate = data.attaching_rate ?? "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 =>
|
||||
|
@@ -7,9 +7,9 @@
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
import { service as instance } from "./api/request.js";
|
||||
import { API_URL } from "./api/config.js";
|
||||
import { type RankingListItem } from "../types/cpicxim/RankingListItem.js";
|
||||
import { service as instance } from "./api/request.ts";
|
||||
import { API_URL } from "./api/config.ts";
|
||||
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
|
||||
|
||||
/**
|
||||
* 请求坐席排行榜。
|
||||
|
@@ -8,8 +8,8 @@
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
import { type AxiosResponse } from "axios";
|
||||
import { service as instance } from "./api/request.js";
|
||||
import { API_URL } from "./api/config.js";
|
||||
import { service as instance } from "./api/request.ts";
|
||||
import { API_URL } from "./api/config.ts";
|
||||
|
||||
interface RewardProject
|
||||
{
|
||||
@@ -103,7 +103,7 @@ function requestRewardPorjectsList( handler: any ): void
|
||||
const data = response.data ?? {};
|
||||
rewardResponse.success = data.success ?? false;
|
||||
rewardResponse.message = data.message ?? "";
|
||||
rewardResponse.rewardList = checkRewardProjects( data.rewardList ?? []);
|
||||
rewardResponse.rewardList = checkRewardProjects( data.rewardList ?? []); // eslint-disable-line
|
||||
|
||||
handler( rewardResponse, null );
|
||||
})
|
||||
@@ -144,7 +144,7 @@ function requestRewardGainers( handler: any ): void
|
||||
|
||||
rewardResponse.success = data.success;
|
||||
rewardResponse.message = data.message;
|
||||
rewardResponse.gainerList = checkRewardGainers( data.gainerList );
|
||||
rewardResponse.gainerList = checkRewardGainers( data.gainerList ); // eslint-disable-line
|
||||
|
||||
handler( rewardResponse, null );
|
||||
})
|
||||
|
@@ -25,10 +25,12 @@
|
||||
<ArchievementCompleteRateComponent
|
||||
indicator="续保完成率"
|
||||
:percentage="ui.insurance_renewal_rate"
|
||||
:warning-level="renewalRateWarningLevel(ui.insurance_renewal_rate_target)"
|
||||
/>
|
||||
<ArchievementCompleteRateComponent
|
||||
indicator="车非渗透率"
|
||||
:percentage="ui.attaching_rate"
|
||||
:warning-level="attachingRateWarningLevel(ui.attaching_rate_target)"
|
||||
/>
|
||||
</div>
|
||||
<div class="total-archievement-charts-wrapper">
|
||||
@@ -103,7 +105,9 @@ interface ui
|
||||
chartData: number[];
|
||||
totalArchievement: number;
|
||||
attaching_rate: string;
|
||||
attaching_rate_target: string;
|
||||
insurance_renewal_rate: string; // 续保率
|
||||
insurance_renewal_rate_target: string; // 续保率
|
||||
leading_reward_gainers: string[]; // 领跑奖
|
||||
advance_reward_gainers: string[]; // 飞跃奖
|
||||
dishonorPersons: string[];
|
||||
@@ -153,7 +157,9 @@ export default {
|
||||
chartData: [0,], // 业绩表
|
||||
totalArchievement: 0, // 总业绩
|
||||
attaching_rate: "", // 车非渗透率
|
||||
attaching_rate_target: "", // 车非渗透率目标值
|
||||
insurance_renewal_rate: "", // 续保率
|
||||
insurance_renewal_rate_target: "", // 续保率目标值
|
||||
leading_reward_gainers: ["",], // 领跑奖
|
||||
advance_reward_gainers: ["",], // 飞跃奖
|
||||
dishonorPersons: ["",],
|
||||
@@ -201,7 +207,9 @@ export default {
|
||||
// ui.chartData = data.mensual_archievement_list;
|
||||
// ui.totalArchievement = data.total_archievement;
|
||||
ui.attaching_rate = data.attaching_rate;
|
||||
ui.attaching_rate_target = data.attaching_rate_target;
|
||||
ui.insurance_renewal_rate = data.insurance_renewal_rate;
|
||||
ui.insurance_renewal_rate_target = data.insurance_renewal_rate_target;
|
||||
ui.leading_reward_gainers = data.leading_reward_gainers;
|
||||
ui.advance_reward_gainers = data.advance_reward_gainers;
|
||||
ui.dishonorPersons = data.backward_list;
|
||||
@@ -331,6 +339,52 @@ export default {
|
||||
clearInterval( timerHandler );
|
||||
});
|
||||
|
||||
const attachingRateWarningLevel = ( attachingRateTarget: string ): string =>
|
||||
{
|
||||
const value: number = Number( attachingRateTarget );
|
||||
let warningLevel = "";
|
||||
|
||||
console.log( "渗透率目标差值", attachingRateTarget, value );
|
||||
|
||||
if ( value >= 0.0 )
|
||||
{
|
||||
warningLevel = "success";
|
||||
}
|
||||
else if ( value > -0.5 && value < 0.0 )
|
||||
{
|
||||
warningLevel = "warning";
|
||||
}
|
||||
else if ( value <= -0.5 )
|
||||
{
|
||||
warningLevel = "exception";
|
||||
}
|
||||
|
||||
return warningLevel;
|
||||
};
|
||||
|
||||
const renewalRateWarningLevel = ( attachingRateTarget: string ): string =>
|
||||
{
|
||||
const value: number = Number( attachingRateTarget );
|
||||
let warningLevel = "";
|
||||
|
||||
console.log( "续保率目标差值", attachingRateTarget, value );
|
||||
|
||||
if ( value >= 0.0 )
|
||||
{
|
||||
warningLevel = "success";
|
||||
}
|
||||
else if ( value >= -3 && value < 0.0 )
|
||||
{
|
||||
warningLevel = "warning";
|
||||
}
|
||||
else if ( value <= -3 )
|
||||
{
|
||||
warningLevel = "exception";
|
||||
}
|
||||
|
||||
return warningLevel;
|
||||
};
|
||||
|
||||
return {
|
||||
ui,
|
||||
callerInfo,
|
||||
@@ -339,6 +393,8 @@ export default {
|
||||
renderData: applyDepartmentArchievementData,
|
||||
refresh,
|
||||
logoutDesktopArchievement,
|
||||
attachingRateWarningLevel,
|
||||
renewalRateWarningLevel,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
@@ -2,8 +2,8 @@
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-17 10:56:43
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/data/bi/BiDataUploadView.vue
|
||||
* @Description:
|
||||
* @FilePath: /task_schedule/src/views/data/DataUploadView.vue
|
||||
* @Description: 上传文件用的组件
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
-->
|
||||
@@ -104,20 +104,24 @@ export default {
|
||||
selectedReportType: 0,
|
||||
reportType: [
|
||||
{
|
||||
reportTypeCode: 0,
|
||||
reportTypeCode: 1,
|
||||
reportTypeName: "坐席车非渗透率",
|
||||
},
|
||||
{
|
||||
reportTypeCode: 1,
|
||||
reportTypeCode: 2,
|
||||
reportTypeName: "坐席续保率",
|
||||
},
|
||||
{
|
||||
reportTypeCode: 2,
|
||||
reportTypeCode: 3,
|
||||
reportTypeName: "部门车非渗透率",
|
||||
},
|
||||
{
|
||||
reportTypeCode: 3,
|
||||
reportTypeCode: 4,
|
||||
reportTypeName: "当月个车续保率跟踪报表【机构】",
|
||||
},
|
||||
{
|
||||
reportTypeCode: 10,
|
||||
reportTypeName: "TWr坐席清单",
|
||||
},],
|
||||
sheetIndex: 0,
|
||||
firstRow: 1,
|
@@ -7,7 +7,6 @@
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div class="wrapper">
|
||||
<el-row :gutter="10">
|
||||
@@ -92,7 +91,7 @@
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<BiDataUploadView :report-type="2" />
|
||||
<DataUploadView :report-type="3" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
@@ -106,7 +105,7 @@ import {
|
||||
queryDepartmentAttachingRateData
|
||||
} from "@/utils/BIReport.js";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
|
||||
import DataUploadView from "@/views/data/DataUploadView.vue";
|
||||
|
||||
interface UI
|
||||
{
|
||||
@@ -119,7 +118,7 @@ interface UI
|
||||
|
||||
export default {
|
||||
name: "DepartmentAttachingRateView",
|
||||
components: { BiDataUploadView, },
|
||||
components: { DataUploadView, },
|
||||
setup()
|
||||
{
|
||||
const ui: UI = reactive({
|
||||
|
@@ -108,7 +108,7 @@
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<BiDataUploadView :report-type="3" />
|
||||
<DataUploadView :report-type="4" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
@@ -122,7 +122,7 @@ import {
|
||||
queryDepartmentRenewalRateData
|
||||
} from "@/utils/BIReport.js";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
|
||||
import DataUploadView from "@/views/data/DataUploadView.vue";
|
||||
|
||||
interface UI
|
||||
{
|
||||
@@ -135,7 +135,7 @@ interface UI
|
||||
|
||||
export default {
|
||||
name: "DepartmentRenewalRateView",
|
||||
components: { BiDataUploadView, },
|
||||
components: { DataUploadView, },
|
||||
setup()
|
||||
{
|
||||
const ui: UI = reactive({
|
||||
|
@@ -109,7 +109,7 @@
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<BiDataUploadView :report-type="0" />
|
||||
<DataUploadView :report-type="1" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
@@ -122,7 +122,7 @@ import {
|
||||
type QueryBITelsalerAttachingRateDataHandler,
|
||||
queryBITelsalerAttachingRateData
|
||||
} from "@/utils/BIReport.js";
|
||||
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
|
||||
import DataUploadView from "@/views/data/DataUploadView.vue";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
|
||||
interface UI
|
||||
@@ -136,7 +136,7 @@ interface UI
|
||||
|
||||
export default {
|
||||
name: "TelsalerAttachingRateView",
|
||||
components: { BiDataUploadView, },
|
||||
components: { DataUploadView, },
|
||||
setup()
|
||||
{
|
||||
const ui: UI = reactive({
|
||||
|
@@ -62,7 +62,7 @@
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.个车续保率序时 }}</span>
|
||||
<span>{{ telsaler.row.个车续保率序时.toFixed(2) + "%" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
@@ -70,7 +70,7 @@
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.个车续保率全月 }}</span>
|
||||
<span>{{ telsaler.row.个车续保率全月.toFixed(2) + "%" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -99,14 +99,14 @@
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<BiDataUploadView :report-type="1" />
|
||||
<DataUploadView :report-type="2" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { reactive, computed, onBeforeMount } from "vue";
|
||||
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
|
||||
import DataUploadView from "@/views/data/DataUploadView.vue";
|
||||
import {
|
||||
type QueryBITelsalerRenewalRateDataHandler,
|
||||
type BITelsalerRenewalRateRecord,
|
||||
@@ -126,7 +126,7 @@ interface UI
|
||||
|
||||
export default {
|
||||
name: "TelsalerAttachingRateView",
|
||||
components: { BiDataUploadView, },
|
||||
components: { DataUploadView, },
|
||||
setup()
|
||||
{
|
||||
const ui: UI = reactive({
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* @Date: 2023-03-23 16:05:08
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/telsaler/TelsalerManagement.vue
|
||||
* @Description:
|
||||
* @Description: 坐席管理组件
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
@@ -51,9 +51,19 @@
|
||||
>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button icon="refresh">
|
||||
<el-button
|
||||
icon="refresh"
|
||||
@click="onResetQuery"
|
||||
>
|
||||
重置
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="upload"
|
||||
type="warning"
|
||||
@click="ui.showUploadDialog = true;"
|
||||
>
|
||||
上传
|
||||
</el-button>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -102,19 +112,38 @@
|
||||
@size-change="onTablePageSizeChange"
|
||||
/>
|
||||
</div>
|
||||
<div class="upload-dialog-wrapper">
|
||||
<el-dialog
|
||||
v-model="ui.showUploadDialog"
|
||||
title="上传报表"
|
||||
width="600px"
|
||||
:close-on-click-modal="false"
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<DataUploadView :report-type="10" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import DataUploadView from "@/views/data/DataUploadView.vue";
|
||||
import { reactive, computed } from "vue";
|
||||
|
||||
export default {
|
||||
name: "TelsalerManagement",
|
||||
components: { DataUploadView, },
|
||||
setup()
|
||||
{
|
||||
const ui = reactive({
|
||||
showUploadDialog: false,
|
||||
caller_code: "",
|
||||
caller_name: "",
|
||||
section_office_code: "",
|
||||
section_office_name: "",
|
||||
department_code: "",
|
||||
department_name: "",
|
||||
team_name: "",
|
||||
table_current_page_index: 1,
|
||||
table_page_size: 50,
|
||||
callers: [],
|
||||
@@ -142,7 +171,18 @@ export default {
|
||||
return 10 * 50 + 40;
|
||||
});
|
||||
|
||||
return { ui, onCurrentPageIndexChange, onTablePageSizeChange, tableHeight, };
|
||||
const onResetQuery = (): void =>
|
||||
{
|
||||
ui.caller_code = "";
|
||||
ui.caller_name = "";
|
||||
ui.section_office_code = "";
|
||||
ui.section_office_name = "";
|
||||
ui.department_code = "";
|
||||
ui.department_name = "";
|
||||
ui.team_name = "";
|
||||
};
|
||||
|
||||
return { ui, onResetQuery, onCurrentPageIndexChange, onTablePageSizeChange, tableHeight, };
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* @Date: 2023-09-27 10:13:31
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/telsaler/TelsalerManagementView.vue
|
||||
* @Description:
|
||||
* @Description: 坐席和团队管理父组件
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
@@ -23,7 +23,7 @@
|
||||
<el-tab-pane>
|
||||
<template #label>
|
||||
<el-icon><Document /></el-icon>
|
||||
<span>导入导出</span>
|
||||
<span>团队管理</span>
|
||||
</template>
|
||||
导入导出
|
||||
</el-tab-pane>
|
||||
|
@@ -11,6 +11,8 @@
|
||||
"compilerOptions": {
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"useDefineForClassFields": true,
|
||||
"allowImportingTsExtensions": true,
|
||||
"noEmit": true,
|
||||
"target": "ESNext",
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "node",
|
||||
|
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"name": "desktop_archievement_backend",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {}
|
||||
}
|
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
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">
|
||||
@@ -13,9 +14,9 @@
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<spring.version>5.3.24</spring.version>
|
||||
<!-- <spring.version>5.3.30</spring.version> -->
|
||||
<log4j2.version>2.20.0</log4j2.version>
|
||||
<!-- <spring.version>6.0.11</spring.version> -->
|
||||
<spring.version>6.2.4</spring.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
@@ -66,7 +67,7 @@
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>2.11.0</version>
|
||||
<version>2.18.0</version>
|
||||
</dependency>
|
||||
|
||||
<!--jackson-->
|
||||
@@ -145,6 +146,7 @@
|
||||
<version>3.5.13</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>desktop_archievement_backend</finalName>
|
||||
<resources>
|
||||
|
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-25 18:48:11
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/TWrTelsalerMapper.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.mybatis.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.cpic.xim.mybatis.pojo.TWrTelsalerRecord;
|
||||
|
||||
public interface TWrTelsalerMapper
|
||||
{
|
||||
public TWrTelsalerRecord queryTWrTelsalerInfo( @Param("telsaler") String telsaler );
|
||||
|
||||
public void insertTWrTelsalerRecordToDB( TWrTelsalerRecord record );
|
||||
|
||||
public void cleanTWrTelsalerRecord();
|
||||
|
||||
public void cleanTWrTelsalerTeamRecord();
|
||||
}
|
@@ -19,14 +19,14 @@ public class BIDepartmentRenewalRateRecord
|
||||
private double 个车续保率全月;
|
||||
private double 环比昨日;
|
||||
private double 环比上月;
|
||||
private int 平均提前签单天数;
|
||||
private double 环比;
|
||||
// private int 平均提前签单天数;
|
||||
// private double 环比;
|
||||
|
||||
public BIDepartmentRenewalRateRecord()
|
||||
{}
|
||||
|
||||
public BIDepartmentRenewalRateRecord( String 责任部门, double 机构目标值, int 到期数全月, double 序时到期数占比,
|
||||
double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月, int 平均提前签单天数, double 环比 )
|
||||
double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月 )
|
||||
{
|
||||
this.责任部门 = 责任部门;
|
||||
this.机构目标值 = 机构目标值;
|
||||
@@ -36,8 +36,8 @@ public class BIDepartmentRenewalRateRecord
|
||||
this.个车续保率全月 = 个车续保率全月;
|
||||
this.环比昨日 = 环比昨日;
|
||||
this.环比上月 = 环比上月;
|
||||
this.平均提前签单天数 = 平均提前签单天数;
|
||||
this.环比 = 环比;
|
||||
// this.平均提前签单天数 = 平均提前签单天数;
|
||||
// this.环比 = 环比;
|
||||
}
|
||||
|
||||
public String get责任部门()
|
||||
@@ -120,25 +120,6 @@ public class BIDepartmentRenewalRateRecord
|
||||
this.环比上月 = 环比上月;
|
||||
}
|
||||
|
||||
public int get平均提前签单天数()
|
||||
{
|
||||
return 平均提前签单天数;
|
||||
}
|
||||
|
||||
public void set平均提前签单天数( int 平均提前签单天数 )
|
||||
{
|
||||
this.平均提前签单天数 = 平均提前签单天数;
|
||||
}
|
||||
|
||||
public double get环比()
|
||||
{
|
||||
return 环比;
|
||||
}
|
||||
|
||||
public void set环比( double 环比 )
|
||||
{
|
||||
this.环比 = 环比;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
@@ -160,9 +141,6 @@ public class BIDepartmentRenewalRateRecord
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( 环比上月 );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
result = prime * result + 平均提前签单天数;
|
||||
temp = Double.doubleToLongBits( 环比 );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -197,10 +175,6 @@ public class BIDepartmentRenewalRateRecord
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( 环比上月 ) != Double.doubleToLongBits( other.环比上月 ) )
|
||||
return false;
|
||||
if ( 平均提前签单天数 != other.平均提前签单天数 )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( 环比 ) != Double.doubleToLongBits( other.环比 ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -209,7 +183,6 @@ public class BIDepartmentRenewalRateRecord
|
||||
{
|
||||
return "BIDepartmentRenewalRateRecord [责任部门=" + 责任部门 + ", 机构目标值=" + 机构目标值 + ", 到期数全月="
|
||||
+ 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时 + ", 个车续保率全月=" + 个车续保率全月
|
||||
+ ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + ", 平均提前签单天数=" + 平均提前签单天数 + ", 环比=" + 环比
|
||||
+ "]";
|
||||
+ ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + "]";
|
||||
}
|
||||
}
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* @Date: 2023-10-09 21:45:39
|
||||
* @LastEditors: Kane
|
||||
* @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.
|
||||
*/
|
||||
@@ -20,12 +20,11 @@ public class BITelsalerRenewalRateRecord
|
||||
private double 个车续保率全月;
|
||||
private double 环比昨日;
|
||||
private double 环比上月;
|
||||
private double 平均提前签单天数;
|
||||
private double 环比;
|
||||
// private double 平均提前签单天数;
|
||||
// private double 环比;
|
||||
|
||||
public BITelsalerRenewalRateRecord( String 责任部门, String 责任人, double 机构目标值, double 到期数全月,
|
||||
double 序时到期数占比, double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月,
|
||||
double 平均提前签单天数, double 环比 )
|
||||
double 序时到期数占比, double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月 )
|
||||
{
|
||||
this.责任部门 = 责任部门;
|
||||
this.责任人 = 责任人;
|
||||
@@ -36,32 +35,8 @@ public class BITelsalerRenewalRateRecord
|
||||
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责任部门()
|
||||
{
|
||||
return 责任部门;
|
||||
@@ -94,10 +69,6 @@ public class BITelsalerRenewalRateRecord
|
||||
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));
|
||||
temp = Double.doubleToLongBits( 环比 );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -139,10 +110,6 @@ public class BITelsalerRenewalRateRecord
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( 环比上月 ) != Double.doubleToLongBits( other.环比上月 ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( 平均提前签单天数 ) != Double.doubleToLongBits( other.平均提前签单天数 ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( 环比 ) != Double.doubleToLongBits( other.环比 ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -151,8 +118,7 @@ public class BITelsalerRenewalRateRecord
|
||||
{
|
||||
return "BITelsalerRenewalRateRecord [责任部门=" + 责任部门 + ", 责任人=" + 责任人 + ", 机构目标值=" + 机构目标值
|
||||
+ ", 到期数全月=" + 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时
|
||||
+ ", 个车续保率全月=" + 个车续保率全月 + ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + ", 平均提前签单天数="
|
||||
+ 平均提前签单天数 + ", 环比=" + 环比 + "]";
|
||||
+ ", 个车续保率全月=" + 个车续保率全月 + ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + "]";
|
||||
}
|
||||
|
||||
public String get责任人()
|
||||
|
@@ -0,0 +1,755 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-24 14:34:16
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/TwrTelsalerRecord.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.mybatis.pojo;
|
||||
|
||||
public class TWrTelsalerRecord
|
||||
{
|
||||
private String 人员姓名;
|
||||
private String 人员工号;
|
||||
private String 籍贯;
|
||||
private String 参加工作时间;
|
||||
private String 入职日期;
|
||||
private String 入司日期;
|
||||
private String 业务类型;
|
||||
private String 办公地省;
|
||||
private String 办公地市;
|
||||
private String 人员类别;
|
||||
private String 现任岗位;
|
||||
private String 现任职级;
|
||||
private String 机构名称;
|
||||
private String 职场分类;
|
||||
private String 片区名称;
|
||||
private String 团队名称;
|
||||
private String 对口分公司;
|
||||
private String 展业地区;
|
||||
private String 招聘渠道;
|
||||
private String 渠道明细;
|
||||
private String 全日制最高学历;
|
||||
private String 学历类型;
|
||||
private String 用工性质名称;
|
||||
private String 合同种类;
|
||||
private String 合同类型;
|
||||
private String 合同性质;
|
||||
private int 合同签订次数;
|
||||
private String 合同生效日期;
|
||||
private String 合同到期日期;
|
||||
private String 人员属性;
|
||||
private String 保代员工号;
|
||||
private String 职场属性;
|
||||
private String 办公性质;
|
||||
private String 保代人员属性;
|
||||
private String 人员状态;
|
||||
|
||||
public TWrTelsalerRecord( String 人员姓名, String 人员工号, String 籍贯, String 参加工作时间, String 入职日期,
|
||||
String 入司日期, String 业务类型, String 办公地省, String 办公地市, String 人员类别, String 现任岗位,
|
||||
String 现任职级, String 机构名称, String 职场分类, String 片区名称, String 团队名称, String 对口分公司,
|
||||
String 展业地区, String 招聘渠道, String 渠道明细, String 全日制最高学历, String 学历类型, String 用工性质名称,
|
||||
String 合同种类, String 合同类型, String 合同性质, int 合同签订次数, String 合同生效日期, String 合同到期日期,
|
||||
String 人员属性, String 保代员工号, String 职场属性, String 办公性质, String 保代人员属性, String 人员状态 )
|
||||
{
|
||||
this.人员姓名 = 人员姓名;
|
||||
this.人员工号 = 人员工号;
|
||||
this.籍贯 = 籍贯;
|
||||
this.参加工作时间 = 参加工作时间;
|
||||
this.入职日期 = 入职日期;
|
||||
this.入司日期 = 入司日期;
|
||||
this.业务类型 = 业务类型;
|
||||
this.办公地省 = 办公地省;
|
||||
this.办公地市 = 办公地市;
|
||||
this.人员类别 = 人员类别;
|
||||
this.现任岗位 = 现任岗位;
|
||||
this.现任职级 = 现任职级;
|
||||
this.机构名称 = 机构名称;
|
||||
this.职场分类 = 职场分类;
|
||||
this.片区名称 = 片区名称;
|
||||
this.团队名称 = 团队名称;
|
||||
this.对口分公司 = 对口分公司;
|
||||
this.展业地区 = 展业地区;
|
||||
this.招聘渠道 = 招聘渠道;
|
||||
this.渠道明细 = 渠道明细;
|
||||
this.全日制最高学历 = 全日制最高学历;
|
||||
this.学历类型 = 学历类型;
|
||||
this.用工性质名称 = 用工性质名称;
|
||||
this.合同种类 = 合同种类;
|
||||
this.合同类型 = 合同类型;
|
||||
this.合同性质 = 合同性质;
|
||||
this.合同签订次数 = 合同签订次数;
|
||||
this.合同生效日期 = 合同生效日期;
|
||||
this.合同到期日期 = 合同到期日期;
|
||||
this.人员属性 = 人员属性;
|
||||
this.保代员工号 = 保代员工号;
|
||||
this.职场属性 = 职场属性;
|
||||
this.办公性质 = 办公性质;
|
||||
this.保代人员属性 = 保代人员属性;
|
||||
this.人员状态 = 人员状态;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "TWrTelsalerRecord [人员姓名=" + 人员姓名 + ", 人员工号=" + 人员工号 + ", 籍贯=" + 籍贯 + ", 参加工作时间="
|
||||
+ 参加工作时间 + ", 入职日期=" + 入职日期 + ", 入司日期=" + 入司日期 + ", 业务类型=" + 业务类型 + ", 办公地省=" + 办公地省
|
||||
+ ", 办公地市=" + 办公地市 + ", 人员类别=" + 人员类别 + ", 现任岗位=" + 现任岗位 + ", 现任职级=" + 现任职级
|
||||
+ ", 机构名称=" + 机构名称 + ", 职场分类=" + 职场分类 + ", 片区名称=" + 片区名称 + ", 团队名称=" + 团队名称
|
||||
+ ", 对口分公司=" + 对口分公司 + ", 展业地区=" + 展业地区 + ", 招聘渠道=" + 招聘渠道 + ", 渠道明细=" + 渠道明细
|
||||
+ ", 全日制最高学历=" + 全日制最高学历 + ", 学历类型=" + 学历类型 + ", 用工性质名称=" + 用工性质名称 + ", 合同种类="
|
||||
+ 合同种类 + ", 合同类型=" + 合同类型 + ", 合同性质=" + 合同性质 + ", 合同签订次数=" + 合同签订次数 + ", 合同生效日期="
|
||||
+ 合同生效日期 + ", 合同到期日期=" + 合同到期日期 + ", 人员属性=" + 人员属性 + ", 保代员工号=" + 保代员工号 + ", 职场属性="
|
||||
+ 职场属性 + ", 办公性质=" + 办公性质 + ", 保代人员属性=" + 保代人员属性 + ", 人员状态=" + 人员状态 + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((人员姓名 == null) ? 0 : 人员姓名.hashCode());
|
||||
result = prime * result + ((人员工号 == null) ? 0 : 人员工号.hashCode());
|
||||
result = prime * result + ((籍贯 == null) ? 0 : 籍贯.hashCode());
|
||||
result = prime * result + ((参加工作时间 == null) ? 0 : 参加工作时间.hashCode());
|
||||
result = prime * result + ((入职日期 == null) ? 0 : 入职日期.hashCode());
|
||||
result = prime * result + ((入司日期 == null) ? 0 : 入司日期.hashCode());
|
||||
result = prime * result + ((业务类型 == null) ? 0 : 业务类型.hashCode());
|
||||
result = prime * result + ((办公地省 == null) ? 0 : 办公地省.hashCode());
|
||||
result = prime * result + ((办公地市 == null) ? 0 : 办公地市.hashCode());
|
||||
result = prime * result + ((人员类别 == null) ? 0 : 人员类别.hashCode());
|
||||
result = prime * result + ((现任岗位 == null) ? 0 : 现任岗位.hashCode());
|
||||
result = prime * result + ((现任职级 == null) ? 0 : 现任职级.hashCode());
|
||||
result = prime * result + ((机构名称 == null) ? 0 : 机构名称.hashCode());
|
||||
result = prime * result + ((职场分类 == null) ? 0 : 职场分类.hashCode());
|
||||
result = prime * result + ((片区名称 == null) ? 0 : 片区名称.hashCode());
|
||||
result = prime * result + ((团队名称 == null) ? 0 : 团队名称.hashCode());
|
||||
result = prime * result + ((对口分公司 == null) ? 0 : 对口分公司.hashCode());
|
||||
result = prime * result + ((展业地区 == null) ? 0 : 展业地区.hashCode());
|
||||
result = prime * result + ((招聘渠道 == null) ? 0 : 招聘渠道.hashCode());
|
||||
result = prime * result + ((渠道明细 == null) ? 0 : 渠道明细.hashCode());
|
||||
result = prime * result + ((全日制最高学历 == null) ? 0 : 全日制最高学历.hashCode());
|
||||
result = prime * result + ((学历类型 == null) ? 0 : 学历类型.hashCode());
|
||||
result = prime * result + ((用工性质名称 == null) ? 0 : 用工性质名称.hashCode());
|
||||
result = prime * result + ((合同种类 == null) ? 0 : 合同种类.hashCode());
|
||||
result = prime * result + ((合同类型 == null) ? 0 : 合同类型.hashCode());
|
||||
result = prime * result + ((合同性质 == null) ? 0 : 合同性质.hashCode());
|
||||
result = prime * result + 合同签订次数;
|
||||
result = prime * result + ((合同生效日期 == null) ? 0 : 合同生效日期.hashCode());
|
||||
result = prime * result + ((合同到期日期 == null) ? 0 : 合同到期日期.hashCode());
|
||||
result = prime * result + ((人员属性 == null) ? 0 : 人员属性.hashCode());
|
||||
result = prime * result + ((保代员工号 == null) ? 0 : 保代员工号.hashCode());
|
||||
result = prime * result + ((职场属性 == null) ? 0 : 职场属性.hashCode());
|
||||
result = prime * result + ((办公性质 == null) ? 0 : 办公性质.hashCode());
|
||||
result = prime * result + ((保代人员属性 == null) ? 0 : 保代人员属性.hashCode());
|
||||
result = prime * result + ((人员状态 == null) ? 0 : 人员状态.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( obj == null )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
TWrTelsalerRecord other = (TWrTelsalerRecord) obj;
|
||||
if ( 人员姓名 == null )
|
||||
{
|
||||
if ( other.人员姓名 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !人员姓名.equals( other.人员姓名 ) )
|
||||
return false;
|
||||
if ( 人员工号 == null )
|
||||
{
|
||||
if ( other.人员工号 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !人员工号.equals( other.人员工号 ) )
|
||||
return false;
|
||||
if ( 籍贯 == null )
|
||||
{
|
||||
if ( other.籍贯 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !籍贯.equals( other.籍贯 ) )
|
||||
return false;
|
||||
if ( 参加工作时间 == null )
|
||||
{
|
||||
if ( other.参加工作时间 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !参加工作时间.equals( other.参加工作时间 ) )
|
||||
return false;
|
||||
if ( 入职日期 == null )
|
||||
{
|
||||
if ( other.入职日期 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !入职日期.equals( other.入职日期 ) )
|
||||
return false;
|
||||
if ( 入司日期 == null )
|
||||
{
|
||||
if ( other.入司日期 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !入司日期.equals( other.入司日期 ) )
|
||||
return false;
|
||||
if ( 业务类型 == null )
|
||||
{
|
||||
if ( other.业务类型 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !业务类型.equals( other.业务类型 ) )
|
||||
return false;
|
||||
if ( 办公地省 == null )
|
||||
{
|
||||
if ( other.办公地省 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !办公地省.equals( other.办公地省 ) )
|
||||
return false;
|
||||
if ( 办公地市 == null )
|
||||
{
|
||||
if ( other.办公地市 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !办公地市.equals( other.办公地市 ) )
|
||||
return false;
|
||||
if ( 人员类别 == null )
|
||||
{
|
||||
if ( other.人员类别 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !人员类别.equals( other.人员类别 ) )
|
||||
return false;
|
||||
if ( 现任岗位 == null )
|
||||
{
|
||||
if ( other.现任岗位 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !现任岗位.equals( other.现任岗位 ) )
|
||||
return false;
|
||||
if ( 现任职级 == null )
|
||||
{
|
||||
if ( other.现任职级 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !现任职级.equals( other.现任职级 ) )
|
||||
return false;
|
||||
if ( 机构名称 == null )
|
||||
{
|
||||
if ( other.机构名称 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !机构名称.equals( other.机构名称 ) )
|
||||
return false;
|
||||
if ( 职场分类 == null )
|
||||
{
|
||||
if ( other.职场分类 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !职场分类.equals( other.职场分类 ) )
|
||||
return false;
|
||||
if ( 片区名称 == null )
|
||||
{
|
||||
if ( other.片区名称 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !片区名称.equals( other.片区名称 ) )
|
||||
return false;
|
||||
if ( 团队名称 == null )
|
||||
{
|
||||
if ( other.团队名称 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !团队名称.equals( other.团队名称 ) )
|
||||
return false;
|
||||
if ( 对口分公司 == null )
|
||||
{
|
||||
if ( other.对口分公司 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !对口分公司.equals( other.对口分公司 ) )
|
||||
return false;
|
||||
if ( 展业地区 == null )
|
||||
{
|
||||
if ( other.展业地区 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !展业地区.equals( other.展业地区 ) )
|
||||
return false;
|
||||
if ( 招聘渠道 == null )
|
||||
{
|
||||
if ( other.招聘渠道 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !招聘渠道.equals( other.招聘渠道 ) )
|
||||
return false;
|
||||
if ( 渠道明细 == null )
|
||||
{
|
||||
if ( other.渠道明细 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !渠道明细.equals( other.渠道明细 ) )
|
||||
return false;
|
||||
if ( 全日制最高学历 == null )
|
||||
{
|
||||
if ( other.全日制最高学历 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !全日制最高学历.equals( other.全日制最高学历 ) )
|
||||
return false;
|
||||
if ( 学历类型 == null )
|
||||
{
|
||||
if ( other.学历类型 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !学历类型.equals( other.学历类型 ) )
|
||||
return false;
|
||||
if ( 用工性质名称 == null )
|
||||
{
|
||||
if ( other.用工性质名称 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !用工性质名称.equals( other.用工性质名称 ) )
|
||||
return false;
|
||||
if ( 合同种类 == null )
|
||||
{
|
||||
if ( other.合同种类 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !合同种类.equals( other.合同种类 ) )
|
||||
return false;
|
||||
if ( 合同类型 == null )
|
||||
{
|
||||
if ( other.合同类型 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !合同类型.equals( other.合同类型 ) )
|
||||
return false;
|
||||
if ( 合同性质 == null )
|
||||
{
|
||||
if ( other.合同性质 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !合同性质.equals( other.合同性质 ) )
|
||||
return false;
|
||||
if ( 合同签订次数 != other.合同签订次数 )
|
||||
return false;
|
||||
if ( 合同生效日期 == null )
|
||||
{
|
||||
if ( other.合同生效日期 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !合同生效日期.equals( other.合同生效日期 ) )
|
||||
return false;
|
||||
if ( 合同到期日期 == null )
|
||||
{
|
||||
if ( other.合同到期日期 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !合同到期日期.equals( other.合同到期日期 ) )
|
||||
return false;
|
||||
if ( 人员属性 == null )
|
||||
{
|
||||
if ( other.人员属性 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !人员属性.equals( other.人员属性 ) )
|
||||
return false;
|
||||
if ( 保代员工号 == null )
|
||||
{
|
||||
if ( other.保代员工号 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !保代员工号.equals( other.保代员工号 ) )
|
||||
return false;
|
||||
if ( 职场属性 == null )
|
||||
{
|
||||
if ( other.职场属性 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !职场属性.equals( other.职场属性 ) )
|
||||
return false;
|
||||
if ( 办公性质 == null )
|
||||
{
|
||||
if ( other.办公性质 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !办公性质.equals( other.办公性质 ) )
|
||||
return false;
|
||||
if ( 保代人员属性 == null )
|
||||
{
|
||||
if ( other.保代人员属性 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !保代人员属性.equals( other.保代人员属性 ) )
|
||||
return false;
|
||||
if ( 人员状态 == null )
|
||||
{
|
||||
if ( other.人员状态 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !人员状态.equals( other.人员状态 ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public String get人员姓名()
|
||||
{
|
||||
return 人员姓名;
|
||||
}
|
||||
|
||||
public void set人员姓名( String 人员姓名 )
|
||||
{
|
||||
this.人员姓名 = 人员姓名;
|
||||
}
|
||||
|
||||
public String get人员工号()
|
||||
{
|
||||
return 人员工号;
|
||||
}
|
||||
|
||||
public void set人员工号( String 人员工号 )
|
||||
{
|
||||
this.人员工号 = 人员工号;
|
||||
}
|
||||
|
||||
public String get籍贯()
|
||||
{
|
||||
return 籍贯;
|
||||
}
|
||||
|
||||
public void set籍贯( String 籍贯 )
|
||||
{
|
||||
this.籍贯 = 籍贯;
|
||||
}
|
||||
|
||||
public String get参加工作时间()
|
||||
{
|
||||
return 参加工作时间;
|
||||
}
|
||||
|
||||
public void set参加工作时间( String 参加工作时间 )
|
||||
{
|
||||
this.参加工作时间 = 参加工作时间;
|
||||
}
|
||||
|
||||
public String get入职日期()
|
||||
{
|
||||
return 入职日期;
|
||||
}
|
||||
|
||||
public void set入职日期( String 入职日期 )
|
||||
{
|
||||
this.入职日期 = 入职日期;
|
||||
}
|
||||
|
||||
public String get入司日期()
|
||||
{
|
||||
return 入司日期;
|
||||
}
|
||||
|
||||
public void set入司日期( String 入司日期 )
|
||||
{
|
||||
this.入司日期 = 入司日期;
|
||||
}
|
||||
|
||||
public String get业务类型()
|
||||
{
|
||||
return 业务类型;
|
||||
}
|
||||
|
||||
public void set业务类型( String 业务类型 )
|
||||
{
|
||||
this.业务类型 = 业务类型;
|
||||
}
|
||||
|
||||
public String get办公地省()
|
||||
{
|
||||
return 办公地省;
|
||||
}
|
||||
|
||||
public void set办公地省( String 办公地省 )
|
||||
{
|
||||
this.办公地省 = 办公地省;
|
||||
}
|
||||
|
||||
public String get办公地市()
|
||||
{
|
||||
return 办公地市;
|
||||
}
|
||||
|
||||
public void set办公地市( String 办公地市 )
|
||||
{
|
||||
this.办公地市 = 办公地市;
|
||||
}
|
||||
|
||||
public String get人员类别()
|
||||
{
|
||||
return 人员类别;
|
||||
}
|
||||
|
||||
public void set人员类别( String 人员类别 )
|
||||
{
|
||||
this.人员类别 = 人员类别;
|
||||
}
|
||||
|
||||
public String get现任岗位()
|
||||
{
|
||||
return 现任岗位;
|
||||
}
|
||||
|
||||
public void set现任岗位( String 现任岗位 )
|
||||
{
|
||||
this.现任岗位 = 现任岗位;
|
||||
}
|
||||
|
||||
public String get现任职级()
|
||||
{
|
||||
return 现任职级;
|
||||
}
|
||||
|
||||
public void set现任职级( String 现任职级 )
|
||||
{
|
||||
this.现任职级 = 现任职级;
|
||||
}
|
||||
|
||||
public String get机构名称()
|
||||
{
|
||||
return 机构名称;
|
||||
}
|
||||
|
||||
public void set机构名称( String 机构名称 )
|
||||
{
|
||||
this.机构名称 = 机构名称;
|
||||
}
|
||||
|
||||
public String get职场分类()
|
||||
{
|
||||
return 职场分类;
|
||||
}
|
||||
|
||||
public void set职场分类( String 职场分类 )
|
||||
{
|
||||
this.职场分类 = 职场分类;
|
||||
}
|
||||
|
||||
public String get片区名称()
|
||||
{
|
||||
return 片区名称;
|
||||
}
|
||||
|
||||
public void set片区名称( String 片区名称 )
|
||||
{
|
||||
this.片区名称 = 片区名称;
|
||||
}
|
||||
|
||||
public String get团队名称()
|
||||
{
|
||||
return 团队名称;
|
||||
}
|
||||
|
||||
public void set团队名称( String 团队名称 )
|
||||
{
|
||||
this.团队名称 = 团队名称;
|
||||
}
|
||||
|
||||
public String get对口分公司()
|
||||
{
|
||||
return 对口分公司;
|
||||
}
|
||||
|
||||
public void set对口分公司( String 对口分公司 )
|
||||
{
|
||||
this.对口分公司 = 对口分公司;
|
||||
}
|
||||
|
||||
public String get展业地区()
|
||||
{
|
||||
return 展业地区;
|
||||
}
|
||||
|
||||
public void set展业地区( String 展业地区 )
|
||||
{
|
||||
this.展业地区 = 展业地区;
|
||||
}
|
||||
|
||||
public String get招聘渠道()
|
||||
{
|
||||
return 招聘渠道;
|
||||
}
|
||||
|
||||
public void set招聘渠道( String 招聘渠道 )
|
||||
{
|
||||
this.招聘渠道 = 招聘渠道;
|
||||
}
|
||||
|
||||
public String get渠道明细()
|
||||
{
|
||||
return 渠道明细;
|
||||
}
|
||||
|
||||
public void set渠道明细( String 渠道明细 )
|
||||
{
|
||||
this.渠道明细 = 渠道明细;
|
||||
}
|
||||
|
||||
public String get全日制最高学历()
|
||||
{
|
||||
return 全日制最高学历;
|
||||
}
|
||||
|
||||
public void set全日制最高学历( String 全日制最高学历 )
|
||||
{
|
||||
this.全日制最高学历 = 全日制最高学历;
|
||||
}
|
||||
|
||||
public String get学历类型()
|
||||
{
|
||||
return 学历类型;
|
||||
}
|
||||
|
||||
public void set学历类型( String 学历类型 )
|
||||
{
|
||||
this.学历类型 = 学历类型;
|
||||
}
|
||||
|
||||
public String get用工性质名称()
|
||||
{
|
||||
return 用工性质名称;
|
||||
}
|
||||
|
||||
public void set用工性质名称( String 用工性质名称 )
|
||||
{
|
||||
this.用工性质名称 = 用工性质名称;
|
||||
}
|
||||
|
||||
public String get合同种类()
|
||||
{
|
||||
return 合同种类;
|
||||
}
|
||||
|
||||
public void set合同种类( String 合同种类 )
|
||||
{
|
||||
this.合同种类 = 合同种类;
|
||||
}
|
||||
|
||||
public String get合同类型()
|
||||
{
|
||||
return 合同类型;
|
||||
}
|
||||
|
||||
public void set合同类型( String 合同类型 )
|
||||
{
|
||||
this.合同类型 = 合同类型;
|
||||
}
|
||||
|
||||
public String get合同性质()
|
||||
{
|
||||
return 合同性质;
|
||||
}
|
||||
|
||||
public void set合同性质( String 合同性质 )
|
||||
{
|
||||
this.合同性质 = 合同性质;
|
||||
}
|
||||
|
||||
public int get合同签订次数()
|
||||
{
|
||||
return 合同签订次数;
|
||||
}
|
||||
|
||||
public void set合同签订次数( int 合同签订次数 )
|
||||
{
|
||||
this.合同签订次数 = 合同签订次数;
|
||||
}
|
||||
|
||||
public String get合同生效日期()
|
||||
{
|
||||
return 合同生效日期;
|
||||
}
|
||||
|
||||
public void set合同生效日期( String 合同生效日期 )
|
||||
{
|
||||
this.合同生效日期 = 合同生效日期;
|
||||
}
|
||||
|
||||
public String get合同到期日期()
|
||||
{
|
||||
return 合同到期日期;
|
||||
}
|
||||
|
||||
public void set合同到期日期( String 合同到期日期 )
|
||||
{
|
||||
this.合同到期日期 = 合同到期日期;
|
||||
}
|
||||
|
||||
public String get人员属性()
|
||||
{
|
||||
return 人员属性;
|
||||
}
|
||||
|
||||
public void set人员属性( String 人员属性 )
|
||||
{
|
||||
this.人员属性 = 人员属性;
|
||||
}
|
||||
|
||||
public String get保代员工号()
|
||||
{
|
||||
return 保代员工号;
|
||||
}
|
||||
|
||||
public void set保代员工号( String 保代员工号 )
|
||||
{
|
||||
this.保代员工号 = 保代员工号;
|
||||
}
|
||||
|
||||
public String get职场属性()
|
||||
{
|
||||
return 职场属性;
|
||||
}
|
||||
|
||||
public void set职场属性( String 职场属性 )
|
||||
{
|
||||
this.职场属性 = 职场属性;
|
||||
}
|
||||
|
||||
public String get办公性质()
|
||||
{
|
||||
return 办公性质;
|
||||
}
|
||||
|
||||
public void set办公性质( String 办公性质 )
|
||||
{
|
||||
this.办公性质 = 办公性质;
|
||||
}
|
||||
|
||||
public String get保代人员属性()
|
||||
{
|
||||
return 保代人员属性;
|
||||
}
|
||||
|
||||
public void set保代人员属性( String 保代人员属性 )
|
||||
{
|
||||
this.保代人员属性 = 保代人员属性;
|
||||
}
|
||||
|
||||
public String get人员状态()
|
||||
{
|
||||
return 人员状态;
|
||||
}
|
||||
|
||||
public void set人员状态( String 人员状态 )
|
||||
{
|
||||
this.人员状态 = 人员状态;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -60,19 +60,32 @@ public final class TeleSalerInfo
|
||||
PreparedStatement statement = null;
|
||||
ResultSet result = null;
|
||||
|
||||
String sql = """
|
||||
SELECT s.saler_code,
|
||||
s.saler_name,
|
||||
t.team_code,
|
||||
t.team,
|
||||
bm.department_code,
|
||||
bm.department_name
|
||||
FROM tele_saler s,
|
||||
tele_saler_team t,
|
||||
idst0.bm_t bm
|
||||
WHERE s.team_code = t.team_code
|
||||
AND t.department_code = bm.department_code
|
||||
AND (s.saler_code = ? or s.saler_name = ?) """;
|
||||
// String sql = """
|
||||
// SELECT s.saler_code,
|
||||
// s.saler_name,
|
||||
// t.team_code,
|
||||
// t.team,
|
||||
// bm.department_code,
|
||||
// bm.department_name
|
||||
// FROM tele_saler s,
|
||||
// tele_saler_team t,
|
||||
// idst0.bm_t bm
|
||||
// WHERE s.team_code = t.team_code
|
||||
// AND t.department_code = bm.department_code
|
||||
// AND (s.saler_code = ? or s.saler_name = ?) """;
|
||||
String sql2 = """
|
||||
select ry.人员工号 ,
|
||||
ry.人员姓名,
|
||||
team.team_code,
|
||||
team.team_name,
|
||||
bm.department_code,
|
||||
bm.department_name
|
||||
from twr_telsaler ry,
|
||||
twr_telsaler_team team,
|
||||
idst0.bm_t bm
|
||||
where trim(ry.团队名称) = trim(team.team_name)
|
||||
and team.department_code = bm.department_code
|
||||
AND (ry.人员工号 = ? or ry.人员姓名 = ?)""";
|
||||
// String sql = "SELECT DISTINCT s.saler_code, s.saler_name, \n"
|
||||
// + " t.team_code, t.team, \n"
|
||||
// + " bm.department_code, bm.department_name \n"
|
||||
@@ -84,7 +97,7 @@ public final class TeleSalerInfo
|
||||
{
|
||||
Class.forName( "oracle.jdbc.driver.OracleDriver" );
|
||||
connection = DriverManager.getConnection( jdbcURL, userName, password );
|
||||
statement = connection.prepareStatement( sql );
|
||||
statement = connection.prepareStatement( sql2 );
|
||||
|
||||
statement.setString( 1, telsaler );
|
||||
statement.setString( 2, telsaler );
|
||||
|
@@ -61,7 +61,7 @@ public class CallerArchievement
|
||||
|
||||
params.put( "a_caller_code", callerCode );
|
||||
|
||||
// session.clearCache();
|
||||
session.clearCache();
|
||||
mapper.getCallerArchievement( params );
|
||||
|
||||
// 总业绩
|
||||
|
@@ -25,36 +25,6 @@ public class DepartmentArchievement
|
||||
// log4j2
|
||||
private static Logger logger = LoggerFactory.getLogger(DepartmentArchievement.class);
|
||||
|
||||
/**
|
||||
* 默认的构造函数,提供给json使用。
|
||||
*/
|
||||
public DepartmentArchievement()
|
||||
{
|
||||
this.totalArchievement = 0;
|
||||
this.mensualArchievementList = null;
|
||||
this.insuranceRenewalRate = "";
|
||||
this.attachingRate = "";
|
||||
this.departmentCode = "";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 构造函数,提供所有成员对象的值。
|
||||
* @param departmentCode 部门代码
|
||||
* @param totalArchievement 总业绩
|
||||
* @param mensualArchievementList 每月业绩表
|
||||
* @param insuranceRenewalRate 续保率
|
||||
* @param attachingRate 车非渗透率
|
||||
*/
|
||||
public DepartmentArchievement( String departmentCode, long totalArchievement,
|
||||
ArrayList<MensualArchievementItem> mensualArchievementList, String insuranceRenewalRate, String attachingRate)
|
||||
{
|
||||
this.departmentCode = departmentCode;
|
||||
this.totalArchievement = totalArchievement;
|
||||
this.mensualArchievementList = mensualArchievementList;
|
||||
this.insuranceRenewalRate = insuranceRenewalRate;
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
/**
|
||||
* 静态方法,用于根据部门代码,查询部门业绩,生成一个 DepartmentArchievement 对象。
|
||||
* @param departmentCode 部门代码
|
||||
@@ -82,15 +52,17 @@ public class DepartmentArchievement
|
||||
|
||||
Integer totalArchievement = (Integer)params.get("a_total");
|
||||
String attachingRate = (String)params.get("a_attaching_rate");
|
||||
String attachingRateTarget = (String)params.get("a_attaching_rate_target");
|
||||
String renewalRate = (String)params.get("a_renewal_rate");
|
||||
String renewalRateTarget = (String)params.get("a_renewal_rate_target");
|
||||
ArrayList<MensualArchievementItem> mensual = (ArrayList<MensualArchievementItem>)params.get("a_mensual_cur");
|
||||
|
||||
archievement = new DepartmentArchievement(
|
||||
departmentCode,
|
||||
totalArchievement.intValue(),
|
||||
mensual,
|
||||
renewalRate,
|
||||
attachingRate);
|
||||
renewalRate, renewalRateTarget,
|
||||
attachingRate, attachingRateTarget);
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
@@ -104,6 +76,67 @@ public class DepartmentArchievement
|
||||
return archievement;
|
||||
}
|
||||
|
||||
@JsonProperty( "department_code" )
|
||||
private String departmentCode;
|
||||
|
||||
@JsonProperty( "total_archievement" )
|
||||
private long totalArchievement; // 总业绩
|
||||
|
||||
// 每月业绩列表
|
||||
// 要保证数据是按照月份排序。
|
||||
@JsonProperty( "mensual_archievement_list" )
|
||||
private ArrayList<MensualArchievementItem> mensualArchievementList;
|
||||
|
||||
@JsonProperty( "insurance_renewal_rate" )
|
||||
private String insuranceRenewalRate; // 续保率
|
||||
|
||||
@JsonProperty( "insurance_renewal_rate_target" )
|
||||
private String insuranceRenewalRateTarget; // 续保率目标值
|
||||
|
||||
@JsonProperty( "attaching_rate" )
|
||||
private String attachingRate; // 车非渗透率
|
||||
|
||||
@JsonProperty( "attaching_rate_target" )
|
||||
private String attachingRateTarget; // 车非渗透率目标值
|
||||
|
||||
/**
|
||||
* 默认的构造函数,提供给json使用。
|
||||
*/
|
||||
public DepartmentArchievement()
|
||||
{
|
||||
this.totalArchievement = 0;
|
||||
this.mensualArchievementList = null;
|
||||
this.insuranceRenewalRate = "";
|
||||
this.attachingRate = "";
|
||||
this.insuranceRenewalRateTarget = "";
|
||||
this.attachingRateTarget = "";
|
||||
this.departmentCode = "";
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 构造函数,提供所有成员对象的值。
|
||||
* @param departmentCode 部门代码
|
||||
* @param totalArchievement 总业绩
|
||||
* @param mensualArchievementList 每月业绩表
|
||||
* @param insuranceRenewalRate 续保率
|
||||
* @param insuranceRenewalRateTarget 续保率目标值
|
||||
* @param attachingRate 车非渗透率
|
||||
* @param attachingRateTarget 车非渗透率目标值
|
||||
*/
|
||||
public DepartmentArchievement( String departmentCode, long totalArchievement,
|
||||
ArrayList<MensualArchievementItem> mensualArchievementList, String insuranceRenewalRate,
|
||||
String insuranceRenewalRateTarget, String attachingRate, String attachingRateTarget )
|
||||
{
|
||||
this.departmentCode = departmentCode;
|
||||
this.totalArchievement = totalArchievement;
|
||||
this.mensualArchievementList = mensualArchievementList;
|
||||
this.insuranceRenewalRate = insuranceRenewalRate;
|
||||
this.insuranceRenewalRateTarget = insuranceRenewalRateTarget;
|
||||
this.attachingRate = attachingRate;
|
||||
this.attachingRateTarget = attachingRateTarget;
|
||||
}
|
||||
|
||||
public long getTotalArchievement()
|
||||
{
|
||||
return totalArchievement;
|
||||
@@ -139,11 +172,117 @@ public class DepartmentArchievement
|
||||
return attachingRate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "DepartmentArchievement [departmentCode=" + departmentCode + ", totalArchievement="
|
||||
+ totalArchievement + ", mensualArchievementList=" + mensualArchievementList
|
||||
+ ", insuranceRenewalRate=" + insuranceRenewalRate + ", insuranceRenewalRateTarget="
|
||||
+ insuranceRenewalRateTarget + ", attachingRate=" + attachingRate
|
||||
+ ", attachingRateTarget=" + attachingRateTarget + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((departmentCode == null) ? 0 : departmentCode.hashCode());
|
||||
result = prime * result + (int) (totalArchievement ^ (totalArchievement >>> 32));
|
||||
result = prime * result
|
||||
+ ((mensualArchievementList == null) ? 0 : mensualArchievementList.hashCode());
|
||||
result = prime * result
|
||||
+ ((insuranceRenewalRate == null) ? 0 : insuranceRenewalRate.hashCode());
|
||||
result = prime * result + ((insuranceRenewalRateTarget == null) ? 0
|
||||
: insuranceRenewalRateTarget.hashCode());
|
||||
result = prime * result + ((attachingRate == null) ? 0 : attachingRate.hashCode());
|
||||
result = prime * result
|
||||
+ ((attachingRateTarget == null) ? 0 : attachingRateTarget.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( obj == null )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
DepartmentArchievement other = (DepartmentArchievement) obj;
|
||||
if ( departmentCode == null )
|
||||
{
|
||||
if ( other.departmentCode != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !departmentCode.equals( other.departmentCode ) )
|
||||
return false;
|
||||
if ( totalArchievement != other.totalArchievement )
|
||||
return false;
|
||||
if ( mensualArchievementList == null )
|
||||
{
|
||||
if ( other.mensualArchievementList != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !mensualArchievementList.equals( other.mensualArchievementList ) )
|
||||
return false;
|
||||
if ( insuranceRenewalRate == null )
|
||||
{
|
||||
if ( other.insuranceRenewalRate != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !insuranceRenewalRate.equals( other.insuranceRenewalRate ) )
|
||||
return false;
|
||||
if ( insuranceRenewalRateTarget == null )
|
||||
{
|
||||
if ( other.insuranceRenewalRateTarget != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !insuranceRenewalRateTarget.equals( other.insuranceRenewalRateTarget ) )
|
||||
return false;
|
||||
if ( attachingRate == null )
|
||||
{
|
||||
if ( other.attachingRate != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !attachingRate.equals( other.attachingRate ) )
|
||||
return false;
|
||||
if ( attachingRateTarget == null )
|
||||
{
|
||||
if ( other.attachingRateTarget != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !attachingRateTarget.equals( other.attachingRateTarget ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public void setAttachingRate( String attachingRate )
|
||||
{
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
public String getInsuranceRenewalRateTarget()
|
||||
{
|
||||
return insuranceRenewalRateTarget;
|
||||
}
|
||||
|
||||
public void setInsuranceRenewalRateTarget( String insuranceRenewalRateTarget )
|
||||
{
|
||||
this.insuranceRenewalRateTarget = insuranceRenewalRateTarget;
|
||||
}
|
||||
|
||||
public String getAttachingRateTarget()
|
||||
{
|
||||
return attachingRateTarget;
|
||||
}
|
||||
|
||||
public void setAttachingRateTarget( String attachingRateTarget )
|
||||
{
|
||||
this.attachingRateTarget = attachingRateTarget;
|
||||
}
|
||||
|
||||
public String getDepartmentCode()
|
||||
{
|
||||
return departmentCode;
|
||||
@@ -153,21 +292,4 @@ public class DepartmentArchievement
|
||||
{
|
||||
this.departmentCode = departmentCode;
|
||||
}
|
||||
|
||||
@JsonProperty( "department_code" )
|
||||
private String departmentCode;
|
||||
|
||||
@JsonProperty( "total_archievement" )
|
||||
private long totalArchievement; // 总业绩
|
||||
|
||||
// 每月业绩列表
|
||||
// 要保证数据是按照月份排序。
|
||||
@JsonProperty( "mensual_archievement_list" )
|
||||
private ArrayList<MensualArchievementItem> mensualArchievementList;
|
||||
|
||||
@JsonProperty( "insurance_renewal_rate" )
|
||||
private String insuranceRenewalRate; // 续保率
|
||||
|
||||
@JsonProperty( "attaching_rate" )
|
||||
private String attachingRate; // 车非渗透率
|
||||
}
|
||||
|
@@ -34,21 +34,24 @@ public final class ImportBIExcelData
|
||||
{
|
||||
private static Logger logger = LoggerFactory.getLogger( ImportBIExcelData.class );
|
||||
|
||||
// 坐席 渗透率
|
||||
private static String[] TelsalerAttachingRateExcelTitle = new String[]
|
||||
{ "部门", "经办", "车险保费(万)", "车险保费占比", "非车保费(万)", "当月保费渗透率", "保费渗透率环比上月", "当月客户渗透率", "客户渗透率环比上月",
|
||||
"当月车非客均保费", "客均保费环比上月"};
|
||||
|
||||
// 坐席 续保率
|
||||
private static String[] TelSalerRenewalRateExcelTitle = new String[]
|
||||
{ "责任部门", "责任人", "机构目标值1(%)", "到期数-全月", "序时到期数占比(%)", "个车续保率(序时)(%)", "个车续保率(全月)(%)", "环比昨日(%)",
|
||||
"环比上月(%)", "平均提前签单天数", "环比"};
|
||||
"环比上月(%)", "序时-部门内", "全月-部门内"};
|
||||
|
||||
// 机构 渗透率
|
||||
private static String[] DepartmentAttachingRateExcelTitle = new String[]
|
||||
{ "部门", "目标值-机构", "目标差距", "车险保费(万)", "车险保费占比", "非车保费(万)", "当月保费渗透率", "保费渗透率环比上月", "车险客户数", "当月客户渗透率",
|
||||
"客户渗透率环比上月", "当月车非客均保费", "客均保费环比上月"};
|
||||
|
||||
// 机构 续保率
|
||||
private static String[] DepartmentRenewalRateExcelTitle = new String[]
|
||||
{ "责任部门", "机构目标值1(%)", "到期数-全月", "序时到期数占比(%)", "个车续保率(序时)(%)", "个车续保率(全月)(%)", "环比昨日(%)",
|
||||
"环比上月(%)", "平均提前签单天数", "环比",};
|
||||
"环比上月(%)", "序时-部门内", "全月-部门内",};
|
||||
|
||||
/**
|
||||
* 用于通过对比标题行判断excel文件格式的函数。
|
||||
@@ -95,6 +98,8 @@ public final class ImportBIExcelData
|
||||
{
|
||||
String cellString = MyPOIUtils.getStringCellValue( cell );
|
||||
|
||||
logger.info( "比较报表标题行,待导入报表标题:" + cellString + ";验证标题:" + title[cellIndex] );
|
||||
|
||||
if ( !cellString.equals( title[cellIndex] ) )
|
||||
{
|
||||
result = false;
|
||||
@@ -320,11 +325,11 @@ public final class ImportBIExcelData
|
||||
double 个车续保率全月 = MyPOIUtils.getNumbericCellValue( row, 6 ) * 100;
|
||||
double 环比昨日 = MyPOIUtils.getNumbericCellValue( row, 7 ) * 100;
|
||||
double 环比上月 = MyPOIUtils.getNumbericCellValue( row, 8 ) * 100;
|
||||
double 平均提前签单天数 = MyPOIUtils.getNumbericCellValue( row, 9 );
|
||||
double 环比 = MyPOIUtils.getNumbericCellValue( row, 10 );
|
||||
// double 平均提前签单天数 = MyPOIUtils.getNumbericCellValue( row, 9 );
|
||||
// double 环比 = MyPOIUtils.getNumbericCellValue( row, 10 );
|
||||
|
||||
BITelsalerRenewalRateRecord record = new BITelsalerRenewalRateRecord( 责任部门, 责任人,
|
||||
机构目标值, 到期数全月, 序时到期数占比, 个车续保率序时, 个车续保率全月, 环比昨日, 环比上月, 平均提前签单天数, 环比 );
|
||||
机构目标值, 到期数全月, 序时到期数占比, 个车续保率序时, 个车续保率全月, 环比昨日, 环比上月 );
|
||||
|
||||
records.add( record );
|
||||
}
|
||||
@@ -499,11 +504,11 @@ public final class ImportBIExcelData
|
||||
double 个车续保率全月 = MyPOIUtils.getNumbericCellValue( row, 5 ) * 100;
|
||||
double 环比昨日 = MyPOIUtils.getNumbericCellValue( row, 6 ) * 100;
|
||||
double 环比上月 = MyPOIUtils.getNumbericCellValue( row, 7 ) * 100;
|
||||
int 平均提前签单天数 = (int) MyPOIUtils.getNumbericCellValue( row, 8 );
|
||||
double 环比 = MyPOIUtils.getNumbericCellValue( row, 9 ) * 100;
|
||||
// int 平均提前签单天数 = (int) MyPOIUtils.getNumbericCellValue( row, 8 );
|
||||
// double 环比 = MyPOIUtils.getNumbericCellValue( row, 9 ) * 100;
|
||||
|
||||
BIDepartmentRenewalRateRecord record = new BIDepartmentRenewalRateRecord( 责任部门,
|
||||
机构目标值, 到期数全月, 序时到期数占比, 个车续保率序时, 个车续保率全月, 环比昨日, 环比上月, 平均提前签单天数, 环比 );
|
||||
机构目标值, 到期数全月, 序时到期数占比, 个车续保率序时, 个车续保率全月, 环比昨日, 环比上月 );
|
||||
|
||||
records.add( record );
|
||||
}
|
||||
|
@@ -0,0 +1,192 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-24 11:09:46
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportTWRTelsalerData.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.utils.data;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.ss.usermodel.WorkbookFactory;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import com.cpic.xim.mybatis.pojo.TWrTelsalerRecord;
|
||||
import com.cpic.xim.utils.poi.MyPOIUtils;
|
||||
|
||||
public class ImportTWRTelsalerData
|
||||
{
|
||||
private static Logger logger = LoggerFactory.getLogger( ImportTWRTelsalerData.class );
|
||||
private static String[] TwrTelsalerListExcelTitle = new String[]
|
||||
{ "人员姓名", "人员工号", "籍 贯", "参加工作时间", "入职日期", "入司日期", "业务类型", "办公地省", "办公地市", "人员类别", "现任岗位",
|
||||
"现任职级", "机构名称", "职场分类", "片区名称", "团队名称", "对口分公司", "展业地区", "招聘渠道", "渠道明细", "全日制最高学历",
|
||||
"学历类型", "用工性质名称", "合同种类", "合同类型", "合同性质", "合同签订次数", "合同生效日期", "合同到期日期", "人员属性", "保代员工号",
|
||||
"职场属性", "办公性质", "保代人员属性", "人员状态",};
|
||||
|
||||
public static ArrayList<TWrTelsalerRecord> importTWrTelsalerDataFromExcel( String filePath, int sheetIndex,
|
||||
int firstRow ) throws IOException, InvalidFormatException
|
||||
{
|
||||
ArrayList<TWrTelsalerRecord> records = new ArrayList<>( 200 );
|
||||
|
||||
Workbook wb = null;
|
||||
Sheet sheet = null;
|
||||
|
||||
try
|
||||
{
|
||||
wb = WorkbookFactory.create( new File( filePath ) );
|
||||
sheet = wb.getSheetAt( sheetIndex );
|
||||
|
||||
// 先验证格式,不对就抛出错误
|
||||
if ( !checkExcelFormat( sheet, null, 0, TwrTelsalerListExcelTitle, 0 ) )
|
||||
{
|
||||
throw new InvalidFormatException( "Excel文件格式错误,请检查报表内容!" );
|
||||
}
|
||||
|
||||
for ( Row row : sheet )
|
||||
{
|
||||
int rowIndex = row.getRowNum();
|
||||
|
||||
// 从数据行开始
|
||||
if ( row.getRowNum() < firstRow )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
String 人员姓名 = MyPOIUtils.getStringCellValue( row, 0 );
|
||||
String 人员工号 = MyPOIUtils.getStringCellValue( row, 1 );
|
||||
String 籍贯 = MyPOIUtils.getStringCellValue( row, 2 );
|
||||
String 参加工作时间 = MyPOIUtils.getStringCellValue( row, 3 );
|
||||
String 入职日期 = MyPOIUtils.getStringCellValue( row, 4 );
|
||||
String 入司日期 = MyPOIUtils.getStringCellValue( row, 5 );
|
||||
String 业务类型 = MyPOIUtils.getStringCellValue( row, 6 );
|
||||
String 办公地省 = MyPOIUtils.getStringCellValue( row, 7 );
|
||||
String 办公地市 = MyPOIUtils.getStringCellValue( row, 8 );
|
||||
String 人员类别 = MyPOIUtils.getStringCellValue( row, 9 );
|
||||
String 现任岗位 = MyPOIUtils.getStringCellValue( row, 10 );
|
||||
String 现任职级 = MyPOIUtils.getStringCellValue( row, 11 );
|
||||
String 机构名称 = MyPOIUtils.getStringCellValue( row, 12 );
|
||||
String 职场分类 = MyPOIUtils.getStringCellValue( row, 13 );
|
||||
String 片区名称 = MyPOIUtils.getStringCellValue( row, 14 );
|
||||
String 团队名称 = MyPOIUtils.getStringCellValue( row, 15 );
|
||||
String 对口分公司 = MyPOIUtils.getStringCellValue( row, 16 );
|
||||
String 展业地区 = MyPOIUtils.getStringCellValue( row, 17 );
|
||||
String 招聘渠道 = MyPOIUtils.getStringCellValue( row, 18 );
|
||||
String 渠道明细 = MyPOIUtils.getStringCellValue( row, 19 );
|
||||
String 全日制最高学历 = MyPOIUtils.getStringCellValue( row, 20 );
|
||||
String 学历类型 = MyPOIUtils.getStringCellValue( row, 21 );
|
||||
String 用工性质名称 = MyPOIUtils.getStringCellValue( row, 22 );
|
||||
String 合同种类 = MyPOIUtils.getStringCellValue( row, 23 );
|
||||
String 合同类型 = MyPOIUtils.getStringCellValue( row, 24 );
|
||||
String 合同性质 = MyPOIUtils.getStringCellValue( row, 25 );
|
||||
int 合同签订次数 = (int)MyPOIUtils.getNumbericCellValue( row, 26 );
|
||||
String 合同生效日期 = MyPOIUtils.getStringCellValue( row, 27 );
|
||||
String 合同到期日期 = MyPOIUtils.getStringCellValue( row, 28 );
|
||||
String 人员属性 = MyPOIUtils.getStringCellValue( row, 29 );
|
||||
String 保代员工号 = MyPOIUtils.getStringCellValue( row, 30 );
|
||||
String 职场属性 = MyPOIUtils.getStringCellValue( row, 31 );
|
||||
String 办公性质 = MyPOIUtils.getStringCellValue( row, 32 );
|
||||
String 保代人员属性 = MyPOIUtils.getStringCellValue( row, 33 );
|
||||
String 人员状态 = MyPOIUtils.getStringCellValue( row, 34 );
|
||||
|
||||
TWrTelsalerRecord record = new TWrTelsalerRecord(人员姓名, 人员工号, 籍贯, 参加工作时间, 入职日期, 入司日期, 业务类型, 办公地省, 办公地市, 人员类别, 现任岗位, 现任职级, 机构名称, 职场分类, 片区名称, 团队名称, 对口分公司, 展业地区, 招聘渠道, 渠道明细, 全日制最高学历, 学历类型, 用工性质名称, 合同种类, 合同类型, 合同性质, 合同签订次数, 合同生效日期, 合同到期日期, 人员属性, 保代员工号, 职场属性, 办公性质, 保代人员属性, 人员状态);
|
||||
|
||||
records.add(record);
|
||||
}
|
||||
catch ( IllegalStateException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
catch ( NumberFormatException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
String message = "第" + String.valueOf( rowIndex ) + "行出现NullPointerException异常";
|
||||
logger.error( message, error );
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( wb != null )
|
||||
{
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return records;
|
||||
}
|
||||
|
||||
private static boolean checkExcelFormat( Sheet sheet, String caption, int captionRowIndex,
|
||||
String[] title, int titleRowIndex )
|
||||
{
|
||||
boolean result = true;
|
||||
|
||||
Row captionRow = sheet.getRow( captionRowIndex );
|
||||
Row titleRow = sheet.getRow( titleRowIndex );
|
||||
|
||||
if ( caption != null && !caption.isEmpty() )
|
||||
{
|
||||
try
|
||||
{
|
||||
int captionCellNum = captionRow.getFirstCellNum();
|
||||
String captionString = MyPOIUtils.getStringCellValue( captionRow, captionCellNum );
|
||||
|
||||
if ( !caption.equals( captionString ) )
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ( title.length != 0 )
|
||||
{
|
||||
int cellIndex = 0;
|
||||
|
||||
try
|
||||
{
|
||||
for ( Cell cell : titleRow )
|
||||
{
|
||||
String cellString = MyPOIUtils.getStringCellValue( cell );
|
||||
|
||||
if ( !cellString.equals( title[cellIndex] ) )
|
||||
{
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
|
||||
cellIndex++;
|
||||
}
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
@@ -10,6 +10,7 @@
|
||||
package com.cpic.xim.utils.poi;
|
||||
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.CellType;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
|
||||
|
||||
@@ -17,7 +18,7 @@ public class MyPOIUtils
|
||||
{
|
||||
public static String getStringCellValue( Cell cell )
|
||||
{
|
||||
switch( cell.getCellType() )
|
||||
switch ( cell.getCellType())
|
||||
{
|
||||
case STRING:
|
||||
return cell.getStringCellValue();
|
||||
@@ -28,9 +29,9 @@ public class MyPOIUtils
|
||||
|
||||
public static String getStringCellValue( Row row, int columnIndex )
|
||||
{
|
||||
Cell cell = row.getCell(columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK);
|
||||
Cell cell = row.getCell( columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK );
|
||||
|
||||
switch( cell.getCellType() )
|
||||
switch ( cell.getCellType())
|
||||
{
|
||||
case STRING:
|
||||
return cell.getStringCellValue();
|
||||
@@ -43,7 +44,7 @@ public class MyPOIUtils
|
||||
{
|
||||
double value = 0.0;
|
||||
|
||||
switch ( cell.getCellType() )
|
||||
switch ( cell.getCellType())
|
||||
{
|
||||
case NUMERIC:
|
||||
value = cell.getNumericCellValue();
|
||||
@@ -59,12 +60,29 @@ public class MyPOIUtils
|
||||
public static double getNumbericCellValue( Row row, int columnIndex )
|
||||
{
|
||||
double value = 0.0;
|
||||
String strValue;
|
||||
Cell cell = row.getCell( columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK );
|
||||
CellType type = cell.getCellType();
|
||||
|
||||
switch ( cell.getCellType() )
|
||||
switch ( type )
|
||||
{
|
||||
case NUMERIC:
|
||||
value = cell.getNumericCellValue();
|
||||
break;
|
||||
case STRING:
|
||||
// 字符串类型,尝试转换成数字
|
||||
strValue = cell.getStringCellValue();
|
||||
|
||||
try
|
||||
{
|
||||
value = Double.parseDouble( strValue );
|
||||
}
|
||||
// 任何异常都视为转换失败
|
||||
catch ( Exception error )
|
||||
{
|
||||
value = 0.0;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
value = 0.0;
|
||||
|
@@ -70,11 +70,10 @@ public class ArchievementQueryController
|
||||
|
||||
result.setTotalArchievement( departmentArch.getTotalArchievement() );
|
||||
result.setInsuranceRenewalRate( departmentArch.getInsuranceRenewalRate() );
|
||||
result.setInsuranceRenewalRateTarget( departmentArch.getInsuranceRenewalRateTarget() );
|
||||
result.setAttachingRate( departmentArch.getAttachingRate() );
|
||||
// result.addAdvanceRewardGainer( "沈群" );
|
||||
// result.addLeadingRewardGainer( "王鸿津" );
|
||||
// result.addLeadingRewardGainer( "林宗泽" );
|
||||
// result.addBackwardStaff( "王炜" );
|
||||
result.setAttachingRateTarget( departmentArch.getAttachingRateTarget() );
|
||||
|
||||
result.setMensualArchievementList( departmentArch.getMensualArchievementList() );
|
||||
}
|
||||
catch ( IOException error )
|
||||
|
@@ -7,7 +7,6 @@
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.cpic.xim.web.controllers.archievement.department;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -23,6 +22,35 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
*/
|
||||
public class DepartmentArchievementQueryResult extends QueryResponse
|
||||
{
|
||||
@JsonProperty( "total_archievement" )
|
||||
private long totalArchievement; // 总业绩
|
||||
|
||||
// 每月业绩列表
|
||||
// 要保证数据是按照月份排序。
|
||||
@JsonProperty( "mensual_archievement_list" )
|
||||
private ArrayList<MensualArchievementItem> mensualArchievementList;
|
||||
|
||||
@JsonProperty( "insurance_renewal_rate" )
|
||||
private String insuranceRenewalRate; // 续保率
|
||||
|
||||
@JsonProperty( "insurance_renewal_rate_target" )
|
||||
private String insuranceRenewalRateTarget; // 续保率目标值
|
||||
|
||||
@JsonProperty( "attaching_rate" )
|
||||
private String attachingRate; // 车非渗透率
|
||||
|
||||
@JsonProperty( "attaching_rate_target" )
|
||||
private String attachingRateTarget; // 车非渗透率目标值
|
||||
|
||||
@JsonProperty( "leading_reward_gainers" )
|
||||
private Vector<String> leadingRewardGainers; // 领跑奖
|
||||
|
||||
@JsonProperty( "advance_reward_gainers" )
|
||||
private Vector<String> advanceRewardGainers; // 飞跃奖
|
||||
|
||||
@JsonProperty( "backward_list" )
|
||||
private Vector<String> backwardList; // 消七灭六坐席
|
||||
|
||||
public DepartmentArchievementQueryResult()
|
||||
{
|
||||
mensualArchievementList = new ArrayList<MensualArchievementItem>();
|
||||
@@ -117,26 +145,129 @@ public class DepartmentArchievementQueryResult extends QueryResponse
|
||||
this.backwardList = backwardList;
|
||||
}
|
||||
|
||||
@JsonProperty( "total_archievement" )
|
||||
private long totalArchievement; // 总业绩
|
||||
public String getInsuranceRenewalRateTarget()
|
||||
{
|
||||
return insuranceRenewalRateTarget;
|
||||
}
|
||||
|
||||
// 每月业绩列表
|
||||
// 要保证数据是按照月份排序。
|
||||
@JsonProperty( "mensual_archievement_list" )
|
||||
private ArrayList<MensualArchievementItem> mensualArchievementList;
|
||||
public void setInsuranceRenewalRateTarget( String insuranceRenewalRateTarget )
|
||||
{
|
||||
this.insuranceRenewalRateTarget = insuranceRenewalRateTarget;
|
||||
}
|
||||
|
||||
@JsonProperty( "insurance_renewal_rate" )
|
||||
private String insuranceRenewalRate; // 续保率
|
||||
public String getAttachingRateTarget()
|
||||
{
|
||||
return attachingRateTarget;
|
||||
}
|
||||
|
||||
@JsonProperty( "attaching_rate" )
|
||||
private String attachingRate; // 车非渗透率
|
||||
public void setAttachingRateTarget( String attachingRateTarget )
|
||||
{
|
||||
this.attachingRateTarget = attachingRateTarget;
|
||||
}
|
||||
|
||||
@JsonProperty( "leading_reward_gainers" )
|
||||
private Vector<String> leadingRewardGainers; // 领跑奖
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "DepartmentArchievementQueryResult [totalArchievement=" + totalArchievement
|
||||
+ ", mensualArchievementList=" + mensualArchievementList + ", insuranceRenewalRate="
|
||||
+ insuranceRenewalRate + ", insuranceRenewalRateTarget="
|
||||
+ insuranceRenewalRateTarget + ", attachingRate=" + attachingRate
|
||||
+ ", attachingRateTarget=" + attachingRateTarget + ", leadingRewardGainers="
|
||||
+ leadingRewardGainers + ", advanceRewardGainers=" + advanceRewardGainers
|
||||
+ ", backwardList=" + backwardList + "]";
|
||||
}
|
||||
|
||||
@JsonProperty( "advance_reward_gainers" )
|
||||
private Vector<String> advanceRewardGainers; // 飞跃奖
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + (int) (totalArchievement ^ (totalArchievement >>> 32));
|
||||
result = prime * result
|
||||
+ ((mensualArchievementList == null) ? 0 : mensualArchievementList.hashCode());
|
||||
result = prime * result
|
||||
+ ((insuranceRenewalRate == null) ? 0 : insuranceRenewalRate.hashCode());
|
||||
result = prime * result + ((insuranceRenewalRateTarget == null) ? 0
|
||||
: insuranceRenewalRateTarget.hashCode());
|
||||
result = prime * result + ((attachingRate == null) ? 0 : attachingRate.hashCode());
|
||||
result = prime * result
|
||||
+ ((attachingRateTarget == null) ? 0 : attachingRateTarget.hashCode());
|
||||
result = prime * result
|
||||
+ ((leadingRewardGainers == null) ? 0 : leadingRewardGainers.hashCode());
|
||||
result = prime * result
|
||||
+ ((advanceRewardGainers == null) ? 0 : advanceRewardGainers.hashCode());
|
||||
result = prime * result + ((backwardList == null) ? 0 : backwardList.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@JsonProperty( "backward_list" )
|
||||
private Vector<String> backwardList; // 消七灭六坐席
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( !super.equals( obj ) )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
DepartmentArchievementQueryResult other = (DepartmentArchievementQueryResult) obj;
|
||||
if ( totalArchievement != other.totalArchievement )
|
||||
return false;
|
||||
if ( mensualArchievementList == null )
|
||||
{
|
||||
if ( other.mensualArchievementList != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !mensualArchievementList.equals( other.mensualArchievementList ) )
|
||||
return false;
|
||||
if ( insuranceRenewalRate == null )
|
||||
{
|
||||
if ( other.insuranceRenewalRate != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !insuranceRenewalRate.equals( other.insuranceRenewalRate ) )
|
||||
return false;
|
||||
if ( insuranceRenewalRateTarget == null )
|
||||
{
|
||||
if ( other.insuranceRenewalRateTarget != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !insuranceRenewalRateTarget.equals( other.insuranceRenewalRateTarget ) )
|
||||
return false;
|
||||
if ( attachingRate == null )
|
||||
{
|
||||
if ( other.attachingRate != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !attachingRate.equals( other.attachingRate ) )
|
||||
return false;
|
||||
if ( attachingRateTarget == null )
|
||||
{
|
||||
if ( other.attachingRateTarget != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !attachingRateTarget.equals( other.attachingRateTarget ) )
|
||||
return false;
|
||||
if ( leadingRewardGainers == null )
|
||||
{
|
||||
if ( other.leadingRewardGainers != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !leadingRewardGainers.equals( other.leadingRewardGainers ) )
|
||||
return false;
|
||||
if ( advanceRewardGainers == null )
|
||||
{
|
||||
if ( other.advanceRewardGainers != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !advanceRewardGainers.equals( other.advanceRewardGainers ) )
|
||||
return false;
|
||||
if ( backwardList == null )
|
||||
{
|
||||
if ( other.backwardList != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !backwardList.equals( other.backwardList ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -10,7 +10,6 @@
|
||||
package com.cpic.xim.web.controllers.dataimport.bi;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import org.apache.ibatis.exceptions.PersistenceException;
|
||||
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.ResponseBody;
|
||||
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.BIDepartmentRenewalRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
|
||||
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.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
|
||||
@RequestMapping( method = RequestMethod.POST, path = "/import_bi_data" )
|
||||
@@ -43,29 +45,35 @@ public class ImportBIDataController
|
||||
{
|
||||
ImportBIDataResponse response = new ImportBIDataResponse();
|
||||
String filePath = request.getFilePath();
|
||||
ReportType type = request.getReportType();
|
||||
int type = request.getReportType();
|
||||
int firstRow = request.getFirstRow();
|
||||
int sheetIndex = request.getSheetIndex();
|
||||
int importedCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
if ( type == ReportType.TelsalerAttachingRateReport )
|
||||
if ( type == ReportType.BiTelsalerAttachingRateReport.getReportTypeCode() )
|
||||
{
|
||||
importedCount = importBITelsalerAttachingRate( filePath, sheetIndex, firstRow );
|
||||
}
|
||||
else if ( type == ReportType.TelsalerRenewalRateReport )
|
||||
else if ( type == ReportType.BiTelsalerRenewalRateReport.getReportTypeCode() )
|
||||
{
|
||||
importedCount = importBITeslsalerRenewalRate( filePath, sheetIndex, firstRow );
|
||||
}
|
||||
else if ( type == ReportType.DepartmentAttachingRateReport )
|
||||
else if ( type == ReportType.BiDepartmentAttachingRateReport.getReportTypeCode() )
|
||||
{
|
||||
importedCount = importBIDepartmentAttachingRate( filePath, sheetIndex, firstRow );
|
||||
}
|
||||
else if ( type == ReportType.DepartmentRenewalRateReport )
|
||||
else if ( type == ReportType.BiDepartmentRenewalRateReport.getReportTypeCode() )
|
||||
{
|
||||
importedCount = importBIDepartmentRenewalRate( filePath, sheetIndex, firstRow );
|
||||
}
|
||||
else if ( type == ReportType.TWrTelsalerList.getReportTypeCode() )
|
||||
{
|
||||
logger.info( "导入机构续保率报表。");
|
||||
|
||||
importedCount = importTWrTelsalerList( filePath, sheetIndex, firstRow );
|
||||
}
|
||||
|
||||
response.setImportedCount( importedCount );
|
||||
response.setSuccess( true );
|
||||
@@ -254,4 +262,43 @@ public class ImportBIDataController
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@@ -9,72 +9,59 @@
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.dataimport.bi;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
@Controller
|
||||
public class ImportBIDataRequest
|
||||
{
|
||||
public enum ReportType {
|
||||
TelsalerAttachingRateReport, TelsalerRenewalRateReport, DepartmentAttachingRateReport, DepartmentRenewalRateReport
|
||||
};
|
||||
public class ImportBIDataRequest {
|
||||
|
||||
// 导入文件的路径
|
||||
@JsonProperty( "filePath" )
|
||||
private String filePath;
|
||||
@JsonProperty("filePath")
|
||||
private String filePath;
|
||||
|
||||
// 报表名称
|
||||
@JsonProperty( "reportType" )
|
||||
private ReportType reportType;
|
||||
@JsonProperty("reportType")
|
||||
private int reportType;
|
||||
|
||||
// 是否有标题行
|
||||
@JsonProperty( "firstRow" )
|
||||
private int firstRow;
|
||||
@JsonProperty("firstRow")
|
||||
private int firstRow;
|
||||
|
||||
// sheet索引
|
||||
@JsonProperty( "sheetIndex" )
|
||||
private int sheetIndex;
|
||||
@JsonProperty("sheetIndex")
|
||||
private int sheetIndex;
|
||||
|
||||
public ImportBIDataRequest()
|
||||
{}
|
||||
public ImportBIDataRequest() {}
|
||||
|
||||
public int getFirstRow()
|
||||
{
|
||||
public int getFirstRow() {
|
||||
return firstRow;
|
||||
}
|
||||
|
||||
public void setFirstRow( int firstRow )
|
||||
{
|
||||
public void setFirstRow(int firstRow) {
|
||||
this.firstRow = firstRow;
|
||||
}
|
||||
|
||||
public int getSheetIndex()
|
||||
{
|
||||
public int getSheetIndex() {
|
||||
return sheetIndex;
|
||||
}
|
||||
|
||||
public void setSheetIndex( int sheetIndex )
|
||||
{
|
||||
public void setSheetIndex(int sheetIndex) {
|
||||
this.sheetIndex = sheetIndex;
|
||||
}
|
||||
|
||||
public String getFilePath()
|
||||
{
|
||||
public String getFilePath() {
|
||||
return filePath;
|
||||
}
|
||||
|
||||
public void setFilePath( String filePath )
|
||||
{
|
||||
public void setFilePath(String filePath) {
|
||||
this.filePath = filePath;
|
||||
}
|
||||
|
||||
public ReportType getReportType()
|
||||
{
|
||||
public int getReportType() {
|
||||
return reportType;
|
||||
}
|
||||
|
||||
public void setReportType( ReportType reportType )
|
||||
{
|
||||
public void setReportType(int reportType) {
|
||||
this.reportType = reportType;
|
||||
}
|
||||
|
||||
@@ -84,7 +71,7 @@ public class ImportBIDataRequest
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
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 + sheetIndex;
|
||||
return result;
|
||||
@@ -117,11 +104,17 @@ public class ImportBIDataRequest
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "ImportBIDataRequest [filePath=" + filePath + ", reportType=" + reportType
|
||||
+ ", firstRow=" + firstRow + ", sheetIndex=" + sheetIndex + "]";
|
||||
public String toString() {
|
||||
return (
|
||||
"ImportBIDataRequest [filePath=" +
|
||||
filePath +
|
||||
", reportType=" +
|
||||
reportType +
|
||||
", firstRow=" +
|
||||
firstRow +
|
||||
", sheetIndex=" +
|
||||
sheetIndex +
|
||||
"]"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -1,8 +1,12 @@
|
||||
/*
|
||||
* @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.
|
||||
@@ -23,21 +27,22 @@ import org.springframework.http.HttpMethod;
|
||||
|
||||
public class CrosFilter implements Filter
|
||||
{
|
||||
private static Logger logger = LoggerFactory.getLogger(CrosFilter.class);
|
||||
private static Logger logger = LoggerFactory.getLogger( CrosFilter.class );
|
||||
|
||||
@Override
|
||||
public void doFilter( ServletRequest req, ServletResponse resp, FilterChain chain )
|
||||
throws ServletException, IOException
|
||||
throws ServletException,
|
||||
IOException
|
||||
{
|
||||
HttpServletRequest request = (HttpServletRequest) req;
|
||||
HttpServletResponse response = (HttpServletResponse) resp;
|
||||
String method = request.getMethod();
|
||||
String originHeader = request.getHeader( "Origin" );
|
||||
HttpServletRequest request = ( HttpServletRequest ) req;
|
||||
HttpServletResponse response = ( HttpServletResponse ) resp;
|
||||
String method = request.getMethod();
|
||||
String originHeader = request.getHeader( "Origin" );
|
||||
|
||||
logger.info( "收到" + method + "请求,来自" + originHeader);
|
||||
logger.info( "收到" + method + "请求,来自" + originHeader );
|
||||
|
||||
// 如果是Options请求
|
||||
if ( method.equals(HttpMethod.OPTIONS.toString()) )
|
||||
if ( method.equals( HttpMethod.OPTIONS.toString() ) )
|
||||
{
|
||||
originHeader = "*";
|
||||
}
|
||||
@@ -46,7 +51,7 @@ public class CrosFilter implements Filter
|
||||
response.setHeader( "Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT" );
|
||||
response.setHeader( "Access-Control-Max-Age", "0" );
|
||||
response.setHeader( "Access-Control-Allow-Headers",
|
||||
"Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token" );
|
||||
"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( "XDomainRequestAllowed", "1" );
|
||||
response.setHeader( "XDomainRequestAllowed", "1" );
|
||||
|
@@ -5,7 +5,9 @@
|
||||
call telsale_archievement_pkg.department_archievement(
|
||||
#{a_department_code, mode=IN, jdbcType=VARCHAR},
|
||||
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},
|
||||
#{a_attaching_rate_target, mode=OUT, jdbcType=VARCHAR},
|
||||
#{a_renewal_rate, mode=OUT, jdbcType=VARCHAR},
|
||||
#{a_renewal_rate_target, mode=OUT, jdbcType=VARCHAR},
|
||||
#{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer},
|
||||
#{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper})
|
||||
</select>
|
||||
|
@@ -11,12 +11,11 @@
|
||||
</insert>
|
||||
|
||||
<insert id="insertTelsalerRenewalRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord">
|
||||
insert into BI电销坐席续保率跟踪表 ("责任部门","责任人","机构目标值1(%)","到期数-全月",
|
||||
insert into "BI电销坐席续保率跟踪表-24年" ("责任部门","责任人","机构目标值1(%)","到期数-全月",
|
||||
"序时到期数占比(%)","个车续保率(序时)(%)","个车续保率(全月)(%)",
|
||||
"环比昨日(%)","环比上月(%)","平均提前签单天数","环比")
|
||||
"环比昨日(%)","环比上月(%)")
|
||||
values (#{责任部门},#{责任人},#{机构目标值},#{到期数全月},#{序时到期数占比},
|
||||
#{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月},
|
||||
#{平均提前签单天数},#{环比})
|
||||
#{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月} )
|
||||
</insert>
|
||||
|
||||
<insert id="insertDepartmentAttachingRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord">
|
||||
@@ -30,24 +29,23 @@
|
||||
</insert>
|
||||
|
||||
<insert id="insertDepartmentRenewalRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord" >
|
||||
insert into BI机构当月个车续保率跟踪表( "责任部门","机构目标值1(%)","到期数-全月" ,"序时到期数占比(%)","个车续保率(序时)(%)",
|
||||
"个车续保率(全月)(%)","环比昨日(%)","环比上月(%)","平均提前签单天数","环比")
|
||||
insert into "BI机构续保率跟踪表-24年"( "责任部门","机构目标值1(%)","到期数-全月" ,"序时到期数占比(%)","个车续保率(序时)(%)",
|
||||
"个车续保率(全月)(%)","环比昨日(%)","环比上月(%)")
|
||||
values (#{责任部门},#{机构目标值},#{到期数全月},#{序时到期数占比},
|
||||
#{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月},
|
||||
#{平均提前签单天数},#{环比})
|
||||
#{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月} )
|
||||
</insert>
|
||||
|
||||
<select id="cleanTelsalerAttachingRateData" statementType="CALLABLE">
|
||||
call telsale_bi_utils.清理BI电销坐席车非渗透率跟踪表()
|
||||
call TELSALE_BI_UTILS.清理BI电销坐席车非渗透率跟踪表()
|
||||
</select>
|
||||
<select id="cleanTelsalerRenewalRateData" statementType="CALLABLE">
|
||||
call telsale_bi_utils.清理BI电销坐席续保率跟踪表()
|
||||
call TELSALE_BI_UTILS.清理BI电销坐席续保率跟踪表()
|
||||
</select>
|
||||
<select id="cleanDepartmentAttachingRateData" statementType="CALLABLE">
|
||||
call telsale_bi_utils.清理BI部门渗透率跟踪表()
|
||||
call TELSALE_BI_UTILS.清理BI部门渗透率跟踪表()
|
||||
</select>
|
||||
|
||||
<select id="cleanDepartmentRenewalRateData" statementType="CALLABLE">
|
||||
call telsale_bi_utils.清理BI部门续保率跟踪表()
|
||||
call TELSALE_BI_UTILS.清理BI部门续保率跟踪表()
|
||||
</select>
|
||||
</mapper>
|
@@ -43,10 +43,8 @@
|
||||
t."个车续保率(序时)(%)" as 个车续保率序时,
|
||||
t."个车续保率(全月)(%)" as 个车续保率全月,
|
||||
t."环比昨日(%)" as 环比昨日,
|
||||
t."环比上月(%)" as 环比上月,
|
||||
t.平均提前签单天数,
|
||||
t.环比
|
||||
from BI电销坐席续保率跟踪表 t
|
||||
t."环比上月(%)" as 环比上月
|
||||
from "BI电销坐席续保率跟踪表-24年" t
|
||||
</select>
|
||||
<resultMap id="BITelsalerRenewalRate" type="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord">
|
||||
<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="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>
|
||||
|
||||
<!-- 机构渗透率 -->
|
||||
@@ -104,10 +102,8 @@
|
||||
t."个车续保率(序时)(%)" as 个车续保率序时,
|
||||
t."个车续保率(全月)(%)" as 个车续保率全月,
|
||||
t."环比昨日(%)" as 环比昨日,
|
||||
t."环比上月(%)" as 环比上月,
|
||||
t.平均提前签单天数,
|
||||
t.环比
|
||||
from BI机构当月个车续保率跟踪表 t
|
||||
t."环比上月(%)" as 环比上月
|
||||
from "BI机构续保率跟踪表-24年" t
|
||||
</select>
|
||||
<resultMap id="BIDepartmentRenewalRate" type="com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord">
|
||||
<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="INTEGER" javaType="int" />
|
||||
<result column="环比" property="环比" jdbcType="DOUBLE" javaType="double" />
|
||||
<!-- <result column="平均提前签单天数" property="平均提前签单天数" jdbcType="INTEGER" javaType="int" /> -->
|
||||
<!-- <result column="环比" property="环比" jdbcType="DOUBLE" javaType="double" /> -->
|
||||
</resultMap>
|
||||
</mapper>
|
@@ -0,0 +1,164 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cpic.xim.mybatis.mapper.TWrTelsalerMapper">
|
||||
<select id="queryTWrTelsalerInfo" resultMap="TWrTelsaler">
|
||||
select t.人员姓名,
|
||||
t.人员工号,
|
||||
t.籍贯,
|
||||
t.参加工作时间,
|
||||
t.入职日期,
|
||||
t.入司日期,
|
||||
t.业务类型,
|
||||
t.办公地省,
|
||||
t.办公地市,
|
||||
t.人员类别,
|
||||
t.现任岗位,
|
||||
t.现任职级,
|
||||
t.机构名称,
|
||||
t.职场分类,
|
||||
t.片区名称,
|
||||
t.团队名称,
|
||||
t.对口分公司,
|
||||
t.展业地区,
|
||||
t.招聘渠道,
|
||||
t.渠道明细,
|
||||
t.全日制最高学历,
|
||||
t.学历类型,
|
||||
t.用工性质名称,
|
||||
t.合同种类,
|
||||
t.合同类型,
|
||||
t.合同性质,
|
||||
t.合同签订次数,
|
||||
t.合同生效日期,
|
||||
t.合同到期日期,
|
||||
t.人员属性,
|
||||
t.保代员工号,
|
||||
t.职场属性,
|
||||
t.办公性质,
|
||||
t.保代人员属性,
|
||||
t.人员状态
|
||||
from telsaler t
|
||||
where t.人员姓名 = #{telsaler} or t.人员工号 = #{telsaler}
|
||||
</select>
|
||||
<resultMap id="TWrTelsaler" type="TWrTelsalerRecord">
|
||||
<result column="人员姓名" property="人员姓名" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="人员工号" property="人员工号" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="籍贯" property="籍贯" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="参加工作时间" property="参加工作时间" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="入职日期" property="入职日期" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="入司日期" property="入司日期" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="业务类型" property="业务类型" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="办公地省" property="办公地省" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="办公地市" property="办公地市" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="人员类别" property="人员类别" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="现任岗位" property="现任岗位" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="现任职级" property="现任职级" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="机构名称" property="机构名称" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="职场分类" property="职场分类" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="片区名称" property="片区名称" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="团队名称" property="团队名称" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="对口分公司" property="对口分公司" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="展业地区" property="展业地区" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="招聘渠道" property="招聘渠道" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="渠道明细" property="渠道明细" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="全日制最高学历" property="全日制最高学历" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="学历类型" property="学历类型" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="用工性质名称" property="用工性质名称" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同种类" property="合同种类" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同类型" property="合同类型" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同性质" property="合同性质" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同签订次数" property="合同签订次数" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同生效日期" property="合同生效日期" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同到期日期" property="合同到期日期" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="人员属性" property="人员属性" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="保代员工号" property="保代员工号" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="职场属性" property="职场属性" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="办公性质" property="办公性质" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="保代人员属性" property="保代人员属性" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="人员状态" property="人员状态" jdbcType="VARCHAR" javaType="String"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- insertTWrTelsalerRecordToDB -->
|
||||
<insert id="insertTWrTelsalerRecordToDB" parameterType="TWrTelsalerRecord">
|
||||
insert into TWR_TELSALER_DEV(
|
||||
人员姓名,
|
||||
人员工号,
|
||||
籍贯,
|
||||
参加工作时间,
|
||||
入职日期,
|
||||
入司日期,
|
||||
业务类型,
|
||||
办公地省,
|
||||
办公地市,
|
||||
人员类别,
|
||||
现任岗位,
|
||||
现任职级,
|
||||
机构名称,
|
||||
职场分类,
|
||||
片区名称,
|
||||
团队名称,
|
||||
对口分公司,
|
||||
展业地区,
|
||||
招聘渠道,
|
||||
渠道明细,
|
||||
全日制最高学历,
|
||||
学历类型,
|
||||
用工性质名称,
|
||||
合同种类,
|
||||
合同类型,
|
||||
合同性质,
|
||||
合同签订次数,
|
||||
合同生效日期,
|
||||
合同到期日期,
|
||||
人员属性,
|
||||
保代员工号,
|
||||
职场属性,
|
||||
办公性质,
|
||||
保代人员属性,
|
||||
人员状态)
|
||||
values (
|
||||
#{人员姓名},
|
||||
#{人员工号},
|
||||
#{籍贯},
|
||||
#{参加工作时间},
|
||||
#{入职日期},
|
||||
#{入司日期},
|
||||
#{业务类型},
|
||||
#{办公地省},
|
||||
#{办公地市},
|
||||
#{人员类别},
|
||||
#{现任岗位},
|
||||
#{现任职级},
|
||||
#{机构名称},
|
||||
#{职场分类},
|
||||
#{片区名称},
|
||||
#{团队名称},
|
||||
#{对口分公司},
|
||||
#{展业地区},
|
||||
#{招聘渠道},
|
||||
#{渠道明细},
|
||||
#{全日制最高学历},
|
||||
#{学历类型},
|
||||
#{用工性质名称},
|
||||
#{合同种类},
|
||||
#{合同类型},
|
||||
#{合同性质},
|
||||
#{合同签订次数},
|
||||
#{合同生效日期},
|
||||
#{合同到期日期},
|
||||
#{人员属性},
|
||||
#{保代员工号},
|
||||
#{职场属性},
|
||||
#{办公性质},
|
||||
#{保代人员属性},
|
||||
#{人员状态} )
|
||||
</insert>
|
||||
|
||||
<select id="cleanTWrTelsalerRecord" statementType="CALLABLE">
|
||||
call TELSALER_TWR_UTILS.清理TWR坐席清单()
|
||||
</select>
|
||||
|
||||
<select id="cleanTWrTelsalerTeamRecord" statementType="CALLABLE">
|
||||
call TELSALER_TWR_UTILS.清理TWR团队清单()
|
||||
</select>
|
||||
</mapper>
|
@@ -33,6 +33,7 @@
|
||||
<mapper resource="mybatis/mapper/RewardsMapper.xml" />
|
||||
<mapper resource="mybatis/mapper/ImportBIArchievementDataMapper.xml" />
|
||||
<mapper resource="mybatis/mapper/QueryBIArchievementDataMapper.xml" />
|
||||
<mapper resource="mybatis/mapper/TWrTelsalerMapper.xml" />
|
||||
</mappers>
|
||||
|
||||
</configuration>
|
@@ -1,7 +1,11 @@
|
||||
<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"
|
||||
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
|
||||
version="3.1">
|
||||
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
|
||||
|
||||
<display-name>Archetype Created Web Application</display-name>
|
||||
|
||||
|
@@ -18,6 +18,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import com.cpic.xim.mybatis.mapper.ImportBIArchievementDataMapper;
|
||||
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.utils.MybatisUtils;
|
||||
import com.cpic.xim.utils.data.ImportBIExcelData;
|
||||
@@ -74,7 +75,7 @@ public class BatchInsertTest
|
||||
@Test
|
||||
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;
|
||||
SqlSession session = null;
|
||||
ImportBIArchievementDataMapper mapper = null;
|
||||
@@ -114,7 +115,7 @@ public class BatchInsertTest
|
||||
@Test
|
||||
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;
|
||||
SqlSession session = null;
|
||||
@@ -148,4 +149,42 @@ public class BatchInsertTest
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
BIN
数据/坐席/TWr业务员人力查询 (1).xlsx
Normal file
BIN
数据/坐席/TWr业务员人力查询 (1).xlsx
Normal file
Binary file not shown.
BIN
数据/坐席/TWr团队.xlsx
Normal file
BIN
数据/坐席/TWr团队.xlsx
Normal file
Binary file not shown.
BIN
数据/测试用/24年报表/坐席-续保.xlsx
Normal file
BIN
数据/测试用/24年报表/坐席-续保.xlsx
Normal file
Binary file not shown.
BIN
数据/测试用/24年报表/机构-续保.xlsx
Normal file
BIN
数据/测试用/24年报表/机构-续保.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user