Compare commits
67 Commits
feature-re
...
feature-ui
Author | SHA1 | Date | |
---|---|---|---|
4511395d35 | |||
68a314703f | |||
f33486197e | |||
6e8a42086b | |||
591a5865f3 | |||
d33572abb8 | |||
041ea37122 | |||
0f25aa4a72 | |||
33cb13fe29 | |||
eb0bd517d5 | |||
d1aebdc7f5 | |||
c3479d7d8e | |||
0c89df8c34 | |||
a5d392c2f6 | |||
84b2e906f3 | |||
3b4c340b70 | |||
3001165bd5 | |||
39a75c7bf2 | |||
237cc350be | |||
d202d976a3 | |||
492239f269 | |||
c0406e7000 | |||
44357ad3ce | |||
e07039b517 | |||
484b8a78e9 | |||
4e74bff380 | |||
7311ab5e2a | |||
0650227861 | |||
75a9c46c2e | |||
02ac5274e0 | |||
6f303eec03 | |||
d517c2e82a | |||
80ba8da7e0 | |||
1422c0b781 | |||
a33981ac55 | |||
506f18abfe | |||
e4d641021e | |||
6ddfe56e6d | |||
a3c56df910 | |||
8b31ffb6d6 | |||
b794e99694 | |||
321ff39e1c | |||
05aabea1a2 | |||
0caf428d67 | |||
0ad42d00a9 | |||
16df86e3a7 | |||
636ae55b43 | |||
cb1c08fff4 | |||
3c807a6efa | |||
7964f8fbe0 | |||
a1de9387c8 | |||
0021873ef7 | |||
be1a5ffb00 | |||
6d06ad934d | |||
e805bf914b | |||
e40b81672a | |||
041ec287b9 | |||
e5dfb45c79 | |||
19d658858e | |||
5fa7639314 | |||
8a64561471 | |||
fdb345176e | |||
c6e08981f7 | |||
a9c05eef2c | |||
0c2c762721 | |||
b8df96ac42 | |||
580e917347 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -729,3 +729,6 @@ target/*
|
||||
# oracle
|
||||
*.~pck
|
||||
*.~sql
|
||||
|
||||
# 输出目录
|
||||
输出/*
|
18
code/db/BI相关常用语句.sql
Normal file
18
code/db/BI相关常用语句.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
SELECT *
|
||||
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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>;
|
||||
|
||||
SELECT *
|
||||
FROM BI<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD>;
|
||||
|
||||
/*
|
||||
truncate table BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<CDB8>Ʊ<EFBFBD>;
|
||||
|
||||
BEGIN
|
||||
telsale_bi_utils.<2E><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<CDB8>Ʊ<EFBFBD>;
|
||||
telsale_bi_utils.<2E><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD>;
|
||||
telsale_bi_utils.<2E><><EFBFBD><EFBFBD>BI<42><49><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ͳ<EFBFBD>Ʊ<EFBFBD>;
|
||||
END;
|
||||
*/
|
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;
|
||||
/
|
@@ -28,6 +28,7 @@ CREATE OR REPLACE PACKAGE telsale_archievement_pkg IS
|
||||
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
|
||||
);
|
||||
|
||||
@@ -52,18 +53,18 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
A_TOTAL OUT INTEGER,
|
||||
A_MENSUAL_CUR OUT CUR_TYPE
|
||||
) IS
|
||||
L_THIS_MONTH VARCHAR2(4);
|
||||
L_THIS_YEAR VARCHAR2(4);
|
||||
--L_THIS_MONTH VARCHAR2(4);
|
||||
--L_THIS_YEAR VARCHAR2(4);
|
||||
L_FIRSTDAY DATE;
|
||||
L_DEPARTMENT_NAME VARCHAR2(100);
|
||||
BEGIN
|
||||
L_THIS_MONTH := TO_CHAR(SYSDATE,
|
||||
/*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');
|
||||
'yyyy');*/
|
||||
L_FIRSTDAY := TO_DATE(TO_CHAR(SYSDATE,
|
||||
'yyyy') || '-01-01 00:00:00',
|
||||
'yyyy-mm-dd hh24:mi:ss');
|
||||
-- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
SELECT DEPARTMENT_NAME
|
||||
@@ -77,25 +78,35 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
DEPARTMENTCODE_EXCEPTION_MSG);
|
||||
END;
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>
|
||||
SELECT DECODE(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0,
|
||||
0,
|
||||
ROUND((SUM(CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>) * 100),
|
||||
2))
|
||||
/*SELECT DECODE(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0,
|
||||
0,
|
||||
ROUND((SUM(CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>) * 100),
|
||||
2))
|
||||
INTO A_ATTACHING_RATE
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> CF
|
||||
WHERE CF.<2E>·<EFBFBD> = L_THIS_MONTH
|
||||
AND CF.<2E><><EFBFBD><EFBFBD> = L_THIS_YEAR
|
||||
AND <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = A_DEPARTMENT_CODE;*/
|
||||
SELECT round(dept.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>,
|
||||
2)
|
||||
INTO A_ATTACHING_RATE
|
||||
FROM <20><>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD> CF
|
||||
WHERE CF.<2E>·<EFBFBD> = L_THIS_MONTH
|
||||
AND CF.<2E><><EFBFBD><EFBFBD> = L_THIS_YEAR
|
||||
AND <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = A_DEPARTMENT_CODE;
|
||||
FROM desktop_archievement_admin.BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<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))
|
||||
/*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 <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD>
|
||||
WHERE <EFBFBD><EFBFBD><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME;
|
||||
FROM BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD> t
|
||||
WHERE t.<2E><><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME;
|
||||
--<2D><>ҵ<EFBFBD><D2B5>
|
||||
SELECT ROUND(NVL(SUM(CF.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD> + CF.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>),
|
||||
0),
|
||||
@@ -131,19 +142,38 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
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_this_month VARCHAR2(4);
|
||||
l_this_year VARCHAR2(4);
|
||||
l_firstday DATE;
|
||||
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;
|
||||
BEGIN
|
||||
--<2D><>ѯ<EFBFBD><D1AF>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
|
||||
--<2D><>ѯ<EFBFBD><D1AF>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD><C6A3>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BEGIN
|
||||
SELECT saler_name
|
||||
INTO l_caller_name
|
||||
FROM tele_saler
|
||||
WHERE saler_code = a_caller_code;
|
||||
/*SELECT zx.saler_name,
|
||||
bm.department_name
|
||||
INTO l_caller_name,
|
||||
l_department_name
|
||||
FROM tele_saler zx,
|
||||
tele_saler_team team,
|
||||
idst0.bm_t bm
|
||||
WHERE zx.saler_code = a_caller_code
|
||||
AND zx.team_code = team.team_code
|
||||
AND team.department_code = bm.department_code;*/
|
||||
SELECT ry.<2E><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>,
|
||||
bm.department_name
|
||||
INTO l_caller_name,
|
||||
l_department_name
|
||||
FROM twr_telsaler ry,
|
||||
twr_telsaler_team team,
|
||||
idst0.bm_t bm
|
||||
WHERE ry.<2E>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD> = team.team_name
|
||||
AND team.department_code = bm.department_code
|
||||
AND ry.<2E><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD> = a_caller_code;
|
||||
EXCEPTION
|
||||
-- <20><><EFBFBD><EFBFBD>û<EFBFBD>в<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>쳣
|
||||
WHEN no_data_found THEN
|
||||
@@ -151,12 +181,12 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
CALLERCODE_EXCEPTION_MSG);
|
||||
END;
|
||||
|
||||
l_this_month := to_char(SYSDATE,
|
||||
'mm');
|
||||
l_this_year := to_char(SYSDATE,
|
||||
'yyyy');
|
||||
l_firstday := to_date(l_this_year || '-01-01 00:00:00',
|
||||
'yyyy-mm-dd hh24:mi:ss');
|
||||
--l_this_month := to_char(SYSDATE,
|
||||
-- 'mm');
|
||||
l_this_year := to_char(SYSDATE,
|
||||
'yyyy');
|
||||
--l_firstday := to_date(l_this_year || '-01-01 00:00:00',
|
||||
-- 'yyyy-mm-dd hh24:mi:ss');
|
||||
|
||||
--<2D>ܳ<EFBFBD><DCB3>ձ<EFBFBD><D5B1><EFBFBD>
|
||||
SELECT round(nvl(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||
@@ -164,41 +194,44 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
2) bf
|
||||
INTO a_total
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf
|
||||
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code
|
||||
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 decode(nvl(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0),
|
||||
0,
|
||||
0,
|
||||
round(SUM(cf.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ںϱ<EFBFBD><EFBFBD><EFBFBD>) / SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||
2))
|
||||
INTO a_attaching_rate
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf
|
||||
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code
|
||||
AND cf.<2E><><EFBFBD><EFBFBD> = l_this_year
|
||||
AND cf.<2E>·<EFBFBD> = l_this_month;
|
||||
|
||||
SELECT rownum,
|
||||
round(nvl(t.<2E><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>,
|
||||
0),
|
||||
2),
|
||||
round(nvl(t."<EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD>)" * 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;
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SELECT decode(nvl(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0),
|
||||
0,
|
||||
0,
|
||||
round(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||
2)) xbl
|
||||
INTO a_renewal_rate
|
||||
FROM <20><>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD> xb
|
||||
WHERE xb.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code;
|
||||
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.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = l_caller_name
|
||||
AND rownum = 1;
|
||||
|
||||
--ÿ<><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>),
|
||||
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> = a_caller_code
|
||||
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')
|
||||
@@ -233,38 +266,54 @@ 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,
|
||||
<20><>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS CALLER_NAME,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS ATTACHING_RATE
|
||||
FROM (SELECT <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
ROUND(DECODE(nvl(SUM(<28><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0),
|
||||
0,
|
||||
0,
|
||||
(SUM(<28><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>˿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)) * 100),
|
||||
2) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>
|
||||
WHERE <20>·<EFBFBD> = A_MONTH
|
||||
AND <20><><EFBFBD><EFBFBD> = A_YEAR
|
||||
AND <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> = A_DEPARTMENT_CODE
|
||||
GROUP BY <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>
|
||||
ORDER BY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8> DESC);
|
||||
SELECT rownum,
|
||||
paihang.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS caller_name,
|
||||
paihang.attaching_rate
|
||||
FROM (SELECT DISTINCT *
|
||||
FROM (SELECT t.<EFBFBD><EFBFBD><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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<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;
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||
OPEN A_RENEWAL_RANKING_LIST FOR
|
||||
SELECT ROWNUM,
|
||||
<20><>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS CALLER_NAME,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AS RENEWAL_RATE
|
||||
FROM (SELECT <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
decode(nvl(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0),
|
||||
0,
|
||||
0,
|
||||
round(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(xb.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||
2)) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3> XB
|
||||
WHERE XB.<2E><><EFBFBD><EFBFBD> = L_DEPARTMENT_NAME
|
||||
GROUP BY <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>
|
||||
ORDER BY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC);
|
||||
SELECT rownum,
|
||||
paihang.<EFBFBD><EFBFBD><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><EFBFBD>ٱ<EFBFBD> t,
|
||||
(SELECT DISTINCT t.saler_code,
|
||||
t.saler_name,
|
||||
t.team_code,
|
||||
team.team,
|
||||
bm.department_name
|
||||
FROM tele_saler t,
|
||||
tele_saler_team team,
|
||||
idst0.bm_t bm
|
||||
WHERE t.team_code = team.team_code
|
||||
AND team.department_code = bm.department_code
|
||||
AND bm.department_name = L_DEPARTMENT_NAME) zuoxi
|
||||
WHERE t.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = zuoxi.saler_name) xb
|
||||
ORDER BY xb.department_name,
|
||||
xb.xbl DESC) paihang;
|
||||
END;
|
||||
BEGIN
|
||||
NULL;
|
||||
|
43
code/db/pkg/telsale_bi_utils.pck
Normal file
43
code/db/pkg/telsale_bi_utils.pck
Normal file
@@ -0,0 +1,43 @@
|
||||
CREATE OR REPLACE PACKAGE telsale_bi_utils 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;
|
||||
/
|
||||
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
|
||||
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>';
|
||||
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>';
|
||||
END;
|
||||
|
||||
BEGIN
|
||||
-- Initialization
|
||||
NULL;
|
||||
END telsale_bi_utils;
|
||||
/
|
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>');
|
@@ -52,7 +52,7 @@ SELECT
|
||||
GROUP BY <EFBFBD>·<EFBFBD>,
|
||||
<EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>,
|
||||
<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HAVING <EFBFBD>·<EFBFBD> = '06<EFBFBD><EFBFBD>'
|
||||
HAVING <EFBFBD>·<EFBFBD> = '10<EFBFBD><EFBFBD>'
|
||||
ORDER BY <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC;
|
||||
|
||||
@@ -61,7 +61,7 @@ SELECT
|
||||
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
FROM <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
|
||||
WHERE <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD> = 'QDI'
|
||||
AND <EFBFBD>·<EFBFBD> = '05'
|
||||
AND <EFBFBD>·<EFBFBD> = '10'
|
||||
AND <EFBFBD><EFBFBD><EFBFBD><EFBFBD> = '2023'
|
||||
GROUP BY <EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ORDER BY <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DESC;
|
||||
@@ -75,3 +75,30 @@ SELECT
|
||||
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;
|
||||
----------------------------------------
|
||||
/*
|
||||
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>';
|
||||
|
||||
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>';
|
||||
|
||||
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>;
|
||||
|
14
code/db/建表/BI机构当月个车续保率跟踪表.sql
Normal file
14
code/db/建表/BI机构当月个车续保率跟踪表.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
drop table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>;
|
||||
create table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>
|
||||
(
|
||||
"<EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD>" varchar2(100),
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>ֵ1(%)" number,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-ȫ<><C8AB>" integer,
|
||||
"<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>(%)" number,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>(%)" number,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)" number,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(%)" number,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(%)" number,
|
||||
"ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" integer,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" number
|
||||
);
|
15
code/db/建表/BI电销坐席续保率统计表.sql
Normal file
15
code/db/建表/BI电销坐席续保率统计表.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
drop table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>;
|
||||
create table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>
|
||||
(
|
||||
"<EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD>" varchar2(100),
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" varchar2(30),
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>ֵ1(%)" number default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-ȫ<><C8AB>" integer default 0,
|
||||
"<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>(%)" number default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>(%)" number default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)" number default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(%)" number default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(%)" number default 0,
|
||||
"ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" integer default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" number
|
||||
)
|
14
code/db/建表/BI电销坐席续保率跟踪表.sql
Normal file
14
code/db/建表/BI电销坐席续保率跟踪表.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
--drop table BI<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD>;
|
||||
create table BI<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD>
|
||||
(
|
||||
summary_date date default sysdate not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(20) not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>ֵ NUMBER default 0 not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD> NUMBER default 0 not null,
|
||||
<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD> NUMBER default 0 not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ NUMBER default 0 not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD> NUMBER default 0 not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NUMBER default 0 not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NUMBER default 0 not null
|
||||
);
|
||||
comment on table BI<EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD> is '<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>';
|
14
code/db/建表/BI电销坐席车非渗透率跟踪表.sql
Normal file
14
code/db/建表/BI电销坐席车非渗透率跟踪表.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
create table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>ٱ<EFBFBD>
|
||||
(
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" varchar2(100),
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" varchar2(100) not null,
|
||||
"<EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>(<28><>)" number default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>" number default 0,
|
||||
"<EFBFBD>dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>)" number default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" number default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" number default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD>¿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" number default 0,
|
||||
"<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" number default 0,
|
||||
"<EFBFBD><EFBFBD><EFBFBD>³<EFBFBD><EFBFBD>ǿ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" number default 0,
|
||||
"<EFBFBD>;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" number default 0
|
||||
);
|
17
code/db/建表/BI部门渗透率续保率统计表.sql
Normal file
17
code/db/建表/BI部门渗透率续保率统计表.sql
Normal file
@@ -0,0 +1,17 @@
|
||||
drop table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD>;
|
||||
create table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD>
|
||||
(
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> varchar2(100) not null,
|
||||
"Ŀ<EFBFBD><EFBFBD>ֵ-<2D><><EFBFBD><EFBFBD>" number default 0 not null,
|
||||
Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> number default 0 not null,
|
||||
"<EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>" number default 0 not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD> number default 0 not null,
|
||||
"<EFBFBD>dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" number default 0 not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> number default 0 not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> number default 0 not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD>¿ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> number default 0 not null,
|
||||
<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> number default 0 not null,
|
||||
<EFBFBD><EFBFBD><EFBFBD>³<EFBFBD><EFBFBD>ǿ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> number default 0 not null,
|
||||
<EFBFBD>;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> number default 0 not null
|
||||
);
|
||||
comment on table BI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD> is '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>BIϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>';
|
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
|
||||
);
|
@@ -7,7 +7,44 @@
|
||||
#
|
||||
# Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
###
|
||||
NODE_ENV = 'development'
|
||||
NODE_ENV='development'
|
||||
VITE_URL_VALIDATE_ACCOUNT="http://222.76.244.118:11101/desktop_archievement_backend/account/query_staff_info.do"
|
||||
VITE_URL_LOGIN = "http://222.76.244.118:11101/admin-system/account/p13_account_check"
|
||||
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do"
|
||||
VITE_URL_LOGIN="http://222.76.244.118:11101/admin-system/account/p13_account_check"
|
||||
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do"
|
||||
|
||||
### URL相关 ##########
|
||||
#登录
|
||||
VITE_URL_LOGIN="http://222.76.244.118:11101/admin-system/account/p13_account_check"
|
||||
VITE_URL_LOGIN_CALLER="http://222.76.244.118:11101/desktop_archievement_backend/account/query_telsaler_info.do"
|
||||
|
||||
#部门业绩查询
|
||||
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do"
|
||||
#坐席业绩查询
|
||||
VITE_URL_CALLER_ARCHIEVEMENT="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_caller_archievement.do"
|
||||
|
||||
#排行榜
|
||||
VITE_URL_RANKINGLIST="http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_ranking_list.do"
|
||||
|
||||
|
||||
## 奖项相关 ##
|
||||
## 查询奖励项目
|
||||
VITE_URL_RWARD_PROJECTS="http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_projects.do"
|
||||
## 查询获奖人员
|
||||
VITE_URL_REWARD_GAINERS="http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_gainers.do"
|
||||
## 添加获奖人员
|
||||
VITE_URL_ADD_REWARD_TELSALER="http://222.76.244.118:11101/desktop_archievement_backend/rewards/add_telsaler_reward.do"
|
||||
## 更新获奖人员
|
||||
VITE_URL_UPDATE_REWARD_TELSALER="http://222.76.244.118:11101/desktop_archievement_backend/rewards/update_telsaler_reward.do"
|
||||
## 删除获奖人员
|
||||
VITE_URL_DEL_REWARD_TELSALER="http://222.76.244.118:11101/desktop_archievement_backend/rewards/delete_telsaler_reward.do"
|
||||
|
||||
## 上传文件
|
||||
VITE_URL_UPLOAD_FILE="http://222.76.244.118:11101/desktop_archievement_backend/file/file-upload.do"
|
||||
## 导入报表
|
||||
VITE_URL_IMPORT_REPORT="http://222.76.244.118:11101/desktop_archievement_backend/import_bi_data/excel.do"
|
||||
|
||||
## 请求BI报表数据
|
||||
VITE_URL_BI_TELSALER_ATTACHINGRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_telsaler_attachingrate.do"
|
||||
VITE_URL_BI_TELSALER_RENEWALRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_telsaler_renewalrate.do"
|
||||
VITE_URL_BI_DEPARTMENT_ATTACHINGRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_department_attachingrate.do"
|
||||
VITE_URL_BI_DEPARTMENT_RENEWALRATE="http://222.76.244.118:11101/desktop_archievement_backend/archievement/bi_department_renewalrate.do"
|
49
code/web/task_schedule/.env.production
Normal file
49
code/web/task_schedule/.env.production
Normal file
@@ -0,0 +1,49 @@
|
||||
###
|
||||
# @Author: Kane
|
||||
# @Date: 2023-03-14 23:46:12
|
||||
# @LastEditors: Kane
|
||||
# @FilePath: /task_schedule/.env.production
|
||||
# @Description:
|
||||
#
|
||||
# Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
###
|
||||
VITE_URL_VALIDATE_ACCOUNT="http://10.39.0.61:8081/desktop_archievement_backend/account/query_staff_info.do"
|
||||
VITE_URL_LOGIN="http://10.39.0.61:8081/admin-system/account/p13_account_check"
|
||||
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_department_archievement.do"
|
||||
|
||||
### URL相关 ##########
|
||||
#登录
|
||||
VITE_URL_LOGIN="http://10.39.0.61:8081/admin-system/account/p13_account_check"
|
||||
VITE_URL_LOGIN_CALLER="http://10.39.0.61:8081/desktop_archievement_backend/account/query_telsaler_info.do"
|
||||
|
||||
#部门业绩查询
|
||||
VITE_URL_DEPARTMENT_ARCHIEVEMENT="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_department_archievement.do"
|
||||
#坐席业绩查询
|
||||
VITE_URL_CALLER_ARCHIEVEMENT="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_caller_archievement.do"
|
||||
|
||||
#排行榜
|
||||
VITE_URL_RANKINGLIST="http://10.39.0.61:8081/desktop_archievement_backend/archievement/query_ranking_list.do"
|
||||
|
||||
|
||||
## 奖项相关 ##
|
||||
## 查询奖励项目
|
||||
VITE_URL_RWARD_PROJECTS="http://10.39.0.61:8081/desktop_archievement_backend/rewards/query_reward_projects.do"
|
||||
## 查询获奖人员
|
||||
VITE_URL_REWARD_GAINERS="http://10.39.0.61:8081/desktop_archievement_backend/rewards/query_reward_gainers.do"
|
||||
## 添加获奖人员
|
||||
VITE_URL_ADD_REWARD_TELSALER="http://10.39.0.61:8081/desktop_archievement_backend/rewards/add_telsaler_reward.do"
|
||||
## 更新获奖人员
|
||||
VITE_URL_UPDATE_REWARD_TELSALER="http://10.39.0.61:8081/desktop_archievement_backend/rewards/update_telsaler_reward.do"
|
||||
## 删除获奖人员
|
||||
VITE_URL_DEL_REWARD_TELSALER="http://10.39.0.61:8081/desktop_archievement_backend/rewards/delete_telsaler_reward.do"
|
||||
|
||||
## 上传文件
|
||||
VITE_URL_UPLOAD_FILE="http://10.39.0.61:8081/desktop_archievement_backend/file/file-upload.do"
|
||||
## 导入报表
|
||||
VITE_URL_IMPORT_REPORT="http://10.39.0.61:8081/desktop_archievement_backend/import_bi_data/excel.do"
|
||||
|
||||
## 请求BI报表数据
|
||||
VITE_URL_BI_TELSALER_ATTACHINGRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_telsaler_attachingrate.do"
|
||||
VITE_URL_BI_TELSALER_RENEWALRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_telsaler_renewalrate.do"
|
||||
VITE_URL_BI_DEPARTMENT_ATTACHINGRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_department_attachingrate.do"
|
||||
VITE_URL_BI_DEPARTMENT_RENEWALRATE="http://10.39.0.61:8081/desktop_archievement_backend/archievement/bi_department_renewalrate.do"
|
@@ -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",
|
||||
|
30748
code/web/task_schedule/package-lock.json
generated
30748
code/web/task_schedule/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,40 +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.1.0",
|
||||
"echarts": "^5.4.3",
|
||||
"element-plus": "^2.3.14",
|
||||
"mitt": "^3.0.1",
|
||||
"moment": "^2.29.4",
|
||||
"sass-loader": "^13.3.2",
|
||||
"vue": "^3.3.4",
|
||||
"vue-router": "^4.2.5",
|
||||
"vuex": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/eslint-parser": "^7.22.15",
|
||||
"@rushstack/eslint-patch": "^1.4.0",
|
||||
"@typescript-eslint/eslint-plugin": "^6.7.2",
|
||||
"@vitejs/plugin-vue": "^4.3.4",
|
||||
"@vue/cli-plugin-eslint": "^5.0.8",
|
||||
"@vue/eslint-config-typescript": "^12.0.0",
|
||||
"axios": "^1.5.0",
|
||||
"babel": "^6.23.0",
|
||||
"eslint-config-recommended": "^4.1.0",
|
||||
"eslint-config-standard-with-typescript": "^39.1.0",
|
||||
"eslint-plugin-vue": "^9.17.0",
|
||||
"node-sass": "^9.0.0",
|
||||
"sass": "^1.68.0",
|
||||
"style-loader": "^3.3.3",
|
||||
"ts-node": "^10.9.1",
|
||||
"vue-eslint-parser": "^9.3.1"
|
||||
}
|
||||
"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.4.3",
|
||||
"mitt": "^3.0.1",
|
||||
"moment": "^2.29.4",
|
||||
"sass-loader": "^13.3.2",
|
||||
"vue": "^3.3.11",
|
||||
"vue-router": "^4.2.5",
|
||||
"vuex": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/eslint-parser": "^7.23.3",
|
||||
"@rushstack/eslint-patch": "^1.6.0",
|
||||
"@typescript-eslint/eslint-plugin": "^6.14.0",
|
||||
"@vitejs/plugin-vue": "^4.5.2",
|
||||
"@vue/cli-plugin-eslint": "^5.0.8",
|
||||
"@vue/eslint-config-typescript": "^12.0.0",
|
||||
"axios": "^1.6.2",
|
||||
"babel": "^6.23.0",
|
||||
"eslint-config-recommended": "^4.1.0",
|
||||
"eslint-config-standard-with-typescript": "^42.0.0",
|
||||
"eslint-plugin-vue": "^9.19.2",
|
||||
"node-sass": "^9.0.0",
|
||||
"sass": "^1.69.5",
|
||||
"style-loader": "^3.3.3",
|
||||
"ts-node": "^10.9.2",
|
||||
"vue-eslint-parser": "^9.3.2"
|
||||
}
|
||||
}
|
||||
|
@@ -2,18 +2,28 @@
|
||||
* @Author: Kane
|
||||
* @Date: 2023-02-28 19:25:30
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/assets/css/public/global.scss
|
||||
* @FilePath: /task_schedule/src/assets/css/public/variables.scss
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
|
||||
// color
|
||||
/*
|
||||
$color-bg-01: #fecb96;
|
||||
$color-bg-02: #f7954e;
|
||||
$color-bg-03: #f27620;
|
||||
$color-bg-04: #da3703;
|
||||
$color-bg-05: #ba1800;
|
||||
*/
|
||||
|
||||
$color-bg-01: #00b2f8;
|
||||
$color-bg-02: #00b0fb;
|
||||
$color-bg-03: #0279ea;
|
||||
$color-bg-04: #046ed6;
|
||||
$color-bg-05: #033eb6;
|
||||
|
||||
$color-title-font: #046ed6;
|
||||
|
||||
$color-charts-bg: #ffffff9f;
|
||||
$color-honorlist-bg: rgba(255, 255, 255, 0.3);
|
||||
|
@@ -12,6 +12,7 @@
|
||||
<el-progress
|
||||
type="circle"
|
||||
:percentage="ui.percentage"
|
||||
status="success"
|
||||
>
|
||||
<template #default>
|
||||
<span class="percentage-label">{{ ui.indicator }}</span>
|
||||
|
@@ -15,10 +15,13 @@
|
||||
alt=""
|
||||
>
|
||||
<div class="title-wrapper">
|
||||
<span>"消8灭70"突围战</span>
|
||||
<span>{{ props.month }}月入营坐席</span>
|
||||
<span>“消 8 灭 6 突围战”</span>
|
||||
<span>指标落后入营坐席</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="telsaler-list-wrapper">
|
||||
<span>开发中……</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -46,6 +49,8 @@ export default {
|
||||
|
||||
<style scoped lang="scss">
|
||||
.dishonorlist-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 240px;
|
||||
width: 360px;
|
||||
border-radius: 5px;
|
||||
@@ -55,10 +60,16 @@ export default {
|
||||
|
||||
padding: 10px;
|
||||
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.banner-wrapper {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: stretch;
|
||||
height: 65px;
|
||||
flex-grow: 0;
|
||||
|
||||
img {
|
||||
// width: 70px;
|
||||
@@ -80,4 +91,24 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.telsaler-list-wrapper {
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
display: block;
|
||||
text-align: center;
|
||||
color: rgb(101, 140, 194);
|
||||
margin-top: 0px;
|
||||
|
||||
font: {
|
||||
size: 2rem;
|
||||
family: "FZ-ZHUOHEI";
|
||||
weight: 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@@ -9,39 +9,18 @@
|
||||
-->
|
||||
<template>
|
||||
<div class="honorlist-wrapper">
|
||||
<span class="title">“90俱乐部”{{ $props.month }}月入围坐席</span>
|
||||
<div class="reward-wrapper">
|
||||
<div class="leading-reward-wrapper">
|
||||
<div class="banner-wrapper">
|
||||
<img
|
||||
src="@/assets/img/ranking/medal.png"
|
||||
alt="领跑奖"
|
||||
>
|
||||
<span>领跑奖</span>
|
||||
</div>
|
||||
<div class="gainer-wrapper">
|
||||
<span
|
||||
v-for="gainer in ui.leadingReward"
|
||||
:key="gainer"
|
||||
>{{ gainer }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="advance-reward-wrapper">
|
||||
<div class="banner-wrapper">
|
||||
<img
|
||||
src="@/assets/img/ranking/copper_medal.png"
|
||||
alt="飞跃奖"
|
||||
>
|
||||
<span>飞跃奖</span>
|
||||
</div>
|
||||
<div class="gainer-wrapper">
|
||||
<span
|
||||
v-for="gainer in ui.advanceReward"
|
||||
:key="gainer"
|
||||
>{{ gainer }}</span>
|
||||
</div>
|
||||
<div class="banner-wrapper">
|
||||
<img
|
||||
src="@/assets/img/ranking/medal.png"
|
||||
alt=""
|
||||
>
|
||||
<div class="title-wrapper">
|
||||
<span>“90俱乐部”标杆坐席</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="telsaler-list-wrapper">
|
||||
<span>开发中……</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -81,6 +60,8 @@ export default {
|
||||
|
||||
<style scoped lang="scss">
|
||||
.honorlist-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 240px;
|
||||
width: 360px;
|
||||
border-radius: 5px;
|
||||
@@ -93,78 +74,54 @@ export default {
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
display: block;
|
||||
text-align: center;
|
||||
.banner-wrapper {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 65px;
|
||||
flex-grow: 0;
|
||||
|
||||
font: {
|
||||
family: "FZ-ZHUOHEI";
|
||||
size: 1.4rem;
|
||||
}
|
||||
|
||||
color: goldenrod;
|
||||
img {
|
||||
width: 65px;
|
||||
height: 65px;
|
||||
}
|
||||
|
||||
.reward-wrapper {
|
||||
width: 100%;
|
||||
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: stretch;
|
||||
|
||||
>*+* {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.leading-reward-wrapper {
|
||||
width: 165px;
|
||||
height: 100%;
|
||||
|
||||
}
|
||||
|
||||
.advance-reward-wrapper {
|
||||
width: 165px;
|
||||
height: 100%;
|
||||
}
|
||||
.title-wrapper {
|
||||
|
||||
span {
|
||||
display: block;
|
||||
|
||||
margin-top: 5px;
|
||||
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
color: rgb(245, 178, 11);
|
||||
margin-top: 0px;
|
||||
|
||||
font: {
|
||||
size: 2rem;
|
||||
family: "FZ-ZHUOHEI";
|
||||
weight: 100;
|
||||
}
|
||||
}
|
||||
|
||||
.banner-wrapper {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
img {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
|
||||
font: {
|
||||
size: 1.5rem;
|
||||
family: "FZ-ZHUOHEI";
|
||||
weight: 100;
|
||||
}
|
||||
font: {
|
||||
size: 1.65rem;
|
||||
family: "FZ-ZHUOHEI";
|
||||
weight: 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.telsaler-list-wrapper {
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
display: block;
|
||||
text-align: center;
|
||||
color: rgb(101, 140, 194);
|
||||
margin-top: 0px;
|
||||
|
||||
font: {
|
||||
size: 2rem;
|
||||
family: "FZ-ZHUOHEI";
|
||||
weight: 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@@ -9,6 +9,9 @@
|
||||
-->
|
||||
<template>
|
||||
<div class="rankinglist-wrapper">
|
||||
<div class="rankinglist-title">
|
||||
<span>{{ props.title }}</span>
|
||||
</div>
|
||||
<el-table
|
||||
:data="topFive"
|
||||
stripe
|
||||
@@ -25,7 +28,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="名次"
|
||||
label="名称"
|
||||
width="160"
|
||||
align="center"
|
||||
>
|
||||
@@ -39,7 +42,7 @@
|
||||
align="center"
|
||||
>
|
||||
<template #default="ranking">
|
||||
<span class="rankinglist-index">{{ ranking.row.appraiseValue }}</span>
|
||||
<span class="rankinglist-index">{{ ranking.row.appraiseValue }}%</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -103,7 +106,14 @@ export default {
|
||||
// border: 1px solid red;
|
||||
border-radius: 5px;
|
||||
width: 300px;
|
||||
height: 260px;
|
||||
height: 270px;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.rankinglist-index {
|
||||
@@ -113,7 +123,7 @@ export default {
|
||||
|
||||
:deep(.el-table)
|
||||
{
|
||||
border-radius: 5px;
|
||||
border-radius: 0px 0px 5px 5px;
|
||||
}
|
||||
|
||||
:deep(.el-table__header-wrapper) {
|
||||
@@ -129,4 +139,28 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
.rankinglist-title {
|
||||
color: #da3703;
|
||||
background-color: #fecc96;
|
||||
|
||||
width: 100%;
|
||||
border-radius: 5px 5px 0px 0px;
|
||||
|
||||
height: 1.5rem;
|
||||
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
padding-top: 10px;
|
||||
padding-bottom: 0px;
|
||||
|
||||
span {
|
||||
font: {
|
||||
size: 1rem;
|
||||
weight: 700;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
@@ -92,7 +92,7 @@ export default {
|
||||
align-items: start;
|
||||
|
||||
font: {
|
||||
size: 0.5rem;
|
||||
size: 0.75rem;
|
||||
}
|
||||
|
||||
>*+* {
|
||||
|
@@ -11,7 +11,7 @@
|
||||
* @Author: Kane
|
||||
* @Date: 2023-01-04 11:40:03
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-03-27 18:19:35
|
||||
* @LastEditTime: 2023-09-27 11:19:05
|
||||
* @FilePath: /it-console/src/layout/components/Main.vue
|
||||
* @Description:
|
||||
*
|
||||
@@ -37,6 +37,6 @@ export default {
|
||||
.el-scrollbar {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
background-color: #ecf2f9;
|
||||
/* background-color: #ecf2f9; */
|
||||
}
|
||||
</style>
|
||||
|
@@ -62,13 +62,13 @@ const routes = [
|
||||
component: ()=> import( "../layout/Index.vue" ),
|
||||
children:[
|
||||
{
|
||||
path:"/staff_data",
|
||||
name:"StaffDataManagement",
|
||||
path:"/telsaler_data",
|
||||
name:"TelsalerManagement",
|
||||
meta: {
|
||||
title:"坐席管理",
|
||||
icon: "user",
|
||||
},
|
||||
component: ()=> import( "../views/StaffManagement.vue" ),
|
||||
component: ()=> import( "../views/telsaler/TelsalerManagementView.vue" ),
|
||||
},
|
||||
{
|
||||
path: "/data_management",
|
||||
@@ -77,7 +77,7 @@ const routes = [
|
||||
title: "数据管理",
|
||||
icon: "document",
|
||||
},
|
||||
component: ()=> import( "../views/DataManagement.vue" ),
|
||||
component: ()=> import( "../views/data/DataManagement.vue" ),
|
||||
},
|
||||
{
|
||||
path:"/reward_management",
|
||||
|
356
code/web/task_schedule/src/utils/BIReport.ts
Normal file
356
code/web/task_schedule/src/utils/BIReport.ts
Normal file
@@ -0,0 +1,356 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-17 11:18:19
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/utils/BIReport.ts
|
||||
* @Description: BI报表相关的代码
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
import { service as instance } from "./api/request.js";
|
||||
import { API_URL } from "./api/config.js";
|
||||
import { type AxiosResponse } from "axios";
|
||||
interface BIReportType
|
||||
{
|
||||
reportTypeCode: number;
|
||||
reportTypeName: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入报表的请求对象
|
||||
*/
|
||||
interface ImportBIReportRequest
|
||||
{
|
||||
filePath: string,
|
||||
reportType: number,
|
||||
firstRow: number,
|
||||
sheetIndex: number,
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入报表的相应对象
|
||||
*/
|
||||
interface ImportBIReportResponse
|
||||
{
|
||||
success: boolean, // 请求成功标志
|
||||
message: string, // 请求结果说明
|
||||
importedCount: number, // 导入记录的数量
|
||||
}
|
||||
|
||||
// BI坐席渗透率报表记录
|
||||
interface BITelsalerAttachingRateRecord
|
||||
{
|
||||
departmentName: string; // 部门
|
||||
telsalerName: string; // 经办人
|
||||
motoPremium: number; // 车险保费
|
||||
nomotoPremium: number; // 非车险保费
|
||||
motoPremiumProportion: number; // 车险保费占比
|
||||
attachingRate: number; // 保费渗透率
|
||||
attachingRateChange: number; // 渗透率环比上月
|
||||
customerHandleRate: number; // 当月客户渗透率
|
||||
customerHandleRateChange: number; // 客户渗透率环比上月
|
||||
noMotoPremiumPerCustomer: number; // 当月车非客均保费
|
||||
noMotoPremiumPerCustomerChange: number; // 客均保费环比上月
|
||||
}
|
||||
|
||||
interface QueryBITelsalerAttachingRateReportResponse
|
||||
{
|
||||
success: boolean,
|
||||
message: string,
|
||||
records: BITelsalerAttachingRateRecord[];
|
||||
}
|
||||
|
||||
/**
|
||||
* BI坐席续保率报表记录
|
||||
*/
|
||||
interface BITelsalerRenewalRateRecord
|
||||
{
|
||||
责任部门: string;
|
||||
责任人: string;
|
||||
机构目标值: number;
|
||||
到期数全月: number;
|
||||
序时到期数占比: number;
|
||||
个车续保率序时: number;
|
||||
个车续保率全月: number;
|
||||
环比昨日: number;
|
||||
环比上月: number;
|
||||
平均提前签单天数: number;
|
||||
环比: number;
|
||||
}
|
||||
|
||||
interface QueryBITelsalerRenewalRateReportResponse
|
||||
{
|
||||
success: boolean;
|
||||
message: string;
|
||||
records: BITelsalerRenewalRateRecord[];
|
||||
}
|
||||
|
||||
/** 机构 ***/
|
||||
// 机构渗透率
|
||||
/**
|
||||
* 机构渗漏率报表记录
|
||||
*/
|
||||
interface BIDepartmentAttachingRateRecord
|
||||
{
|
||||
departmentName: string;
|
||||
departmentObject: number;
|
||||
objectGap: number;
|
||||
motoPremium: number;
|
||||
motoPremiumProPortion: number;
|
||||
nomotoPremium: number;
|
||||
attachingRate: number;
|
||||
attachingRateChange: number;
|
||||
motoInsuranceCustomerCount: number;
|
||||
customerHandleRate: number;
|
||||
customerHandleRateChange: number;
|
||||
premiumPerCustomer: number;
|
||||
premiumPerCustomerChange: number;
|
||||
}
|
||||
|
||||
interface QueryBIDepartmentAttachingRateResponse
|
||||
{
|
||||
success: boolean;
|
||||
message: string;
|
||||
records: BIDepartmentAttachingRateRecord[];
|
||||
}
|
||||
|
||||
// 机构续保率
|
||||
interface BIDepartmentRenewalRateRecord
|
||||
{
|
||||
责任部门: string;
|
||||
机构目标值: number;
|
||||
到期数全月: number;
|
||||
序时到期数占比: number;
|
||||
个车续保率序时: number;
|
||||
个车续保率全月: number;
|
||||
环比昨日: number;
|
||||
环比上月: number;
|
||||
平均提前签单天数: number;
|
||||
环比: number;
|
||||
}
|
||||
|
||||
interface QueryBIDepartmentRenewalRateResponse
|
||||
{
|
||||
success: boolean;
|
||||
message: string;
|
||||
records: BIDepartmentRenewalRateRecord[];
|
||||
}
|
||||
|
||||
type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error: any ) => void;
|
||||
type QueryBITelsalerAttachingRateDataHandler = ( response: QueryBITelsalerAttachingRateReportResponse, error: any ) => void;
|
||||
type QueryBITelsalerRenewalRateDataHandler = ( response: QueryBITelsalerRenewalRateReportResponse, error: any ) => void;
|
||||
type QueryBIDepartmentAttachingRateDataHandler = ( response: QueryBIDepartmentAttachingRateResponse, error: any ) => void;
|
||||
type QueryBIDepartmentRenewalRateDataHandler = ( response: QueryBIDepartmentRenewalRateResponse, error: any ) => void;
|
||||
|
||||
/**
|
||||
* 请求导入BI报表
|
||||
* @param request 请求参数
|
||||
* @param handler 调用者提供的请求结果处理函数
|
||||
*/
|
||||
function importBIReport( request: ImportBIReportRequest, handler: ImportBIReportResponseHandler ): void
|
||||
{
|
||||
const importResponse: ImportBIReportResponse = {
|
||||
success: false,
|
||||
message: "",
|
||||
importedCount: 0,
|
||||
};
|
||||
|
||||
instance.request({
|
||||
url: API_URL.URL_IMPORT_REPORT,
|
||||
method: "post",
|
||||
data: request,
|
||||
})
|
||||
.then(( response: AxiosResponse<any, any> ): any =>
|
||||
{
|
||||
const data: ImportBIReportResponse = response.data;
|
||||
|
||||
importResponse.success = data.success ?? false;
|
||||
importResponse.message = data.message ?? "请求完成,但服务器未返回请求结果消息!";
|
||||
importResponse.importedCount = data.importedCount ?? 0;
|
||||
|
||||
handler( importResponse, null );
|
||||
})
|
||||
.catch(( error: any ): any =>
|
||||
{
|
||||
importResponse.message = "请求导入报表错误,请查看控制台!";
|
||||
console.log( error );
|
||||
|
||||
handler( importResponse, error );
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 请求BI坐席渗透率数据
|
||||
* @param handler 处理请求结果的handler函数。
|
||||
*/
|
||||
function queryBITelsalerAttachingRateData( handler: QueryBITelsalerAttachingRateDataHandler ): void
|
||||
{
|
||||
const queryResponse: QueryBITelsalerAttachingRateReportResponse = {
|
||||
success: false,
|
||||
message: "",
|
||||
records: [],
|
||||
};
|
||||
|
||||
instance.request({
|
||||
url: API_URL.URL_BI_TELSALER_ATTACHINGRATE,
|
||||
method: "post",
|
||||
})
|
||||
.then(( response: AxiosResponse<any, any> ): void =>
|
||||
{
|
||||
const data = response.data ?? {};
|
||||
|
||||
queryResponse.success = data.success ?? false;
|
||||
queryResponse.message = data.message ?? "";
|
||||
queryResponse.records = data.records ?? [];
|
||||
|
||||
console.log( "请求BI坐席渗透率数据", queryResponse );
|
||||
handler( queryResponse, null );
|
||||
})
|
||||
.catch(( error ): void =>
|
||||
{
|
||||
queryResponse.message = "请求BI坐席渗漏率报表数据时出现错误,请查看控制台消息!";
|
||||
queryResponse.success = false;
|
||||
|
||||
console.log( error );
|
||||
|
||||
handler( queryResponse, error );
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 请求BI坐席续保率数据
|
||||
* @param handler 调用者提供的处理请求结果的函数。
|
||||
*/
|
||||
function queryBITelsalerRenewalData( handler: QueryBITelsalerRenewalRateDataHandler ): void
|
||||
{
|
||||
const queryResponse: QueryBITelsalerRenewalRateReportResponse = {
|
||||
success: false,
|
||||
message: "",
|
||||
records: [],
|
||||
};
|
||||
|
||||
instance.request({
|
||||
url: API_URL.URL_BI_TELSALER_RENEWALRATE,
|
||||
method: "post",
|
||||
})
|
||||
.then(( response: AxiosResponse<any, any> ): void =>
|
||||
{
|
||||
const data = response.data ?? {};
|
||||
|
||||
queryResponse.success = data.success ?? false;
|
||||
queryResponse.message = data.message ?? "";
|
||||
queryResponse.records = data.records ?? [];
|
||||
|
||||
console.log( "请求BI坐席续保率数据", queryResponse );
|
||||
handler( queryResponse, null );
|
||||
})
|
||||
.catch(( error: any ): void =>
|
||||
{
|
||||
queryResponse.success = false;
|
||||
queryResponse.message = "查询BI坐席续保率数据失败,请查看控制台!";
|
||||
|
||||
console.log( error );
|
||||
|
||||
handler( queryResponse, error );
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 请求机构渗透率数据
|
||||
* @param handler 调用者提供的处理请求结果的函数。
|
||||
*/
|
||||
function queryDepartmentAttachingRateData( handler: QueryBIDepartmentAttachingRateDataHandler ): void
|
||||
{
|
||||
const queryResponse: QueryBIDepartmentAttachingRateResponse = {
|
||||
success: false,
|
||||
message: "",
|
||||
records: [],
|
||||
};
|
||||
|
||||
instance.request({
|
||||
url: API_URL.URL_BI_DEPARTMENT_ATTACHINGRATE,
|
||||
method: "post",
|
||||
})
|
||||
.then(( response: AxiosResponse<any, any> ): void =>
|
||||
{
|
||||
const data = response.data ?? {};
|
||||
|
||||
queryResponse.success = data.success ?? false;
|
||||
queryResponse.message = data.message ?? "请求完成,但结果未知!";
|
||||
queryResponse.records = data.records ?? [];
|
||||
|
||||
handler( queryResponse, null );
|
||||
})
|
||||
.catch(( error: any ): void =>
|
||||
{
|
||||
queryResponse.success = false;
|
||||
queryResponse.message = "查询BI机构续渗透失败,请查看控制台!";
|
||||
queryResponse.records = [];
|
||||
|
||||
console.log( "查询BI机构渗透率失败:", error );
|
||||
|
||||
handler( queryResponse, error );
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 请求BI机构续保率数据
|
||||
* @param handler 调用者提供的处理请求结果的函数。
|
||||
*/
|
||||
function queryDepartmentRenewalRateData( handler: QueryBIDepartmentRenewalRateDataHandler ): void
|
||||
{
|
||||
const queryResponse: QueryBIDepartmentRenewalRateResponse = {
|
||||
success: false,
|
||||
message: "",
|
||||
records: [],
|
||||
};
|
||||
|
||||
instance.request({
|
||||
url: API_URL.URL_BI_DEPARTMENT_RENEWALRATE,
|
||||
method: "post",
|
||||
})
|
||||
.then(( response: AxiosResponse<any, any> ): void =>
|
||||
{
|
||||
const data = response.data ?? {};
|
||||
|
||||
queryResponse.success = data.success ?? false;
|
||||
queryResponse.message = data.message ?? "请求完成,但结果未知!";
|
||||
queryResponse.records = data.records ?? [];
|
||||
|
||||
handler( queryResponse, null );
|
||||
})
|
||||
.catch(( error: any ): void =>
|
||||
{
|
||||
queryResponse.success = false;
|
||||
queryResponse.message = "查询BI机构续保率失败,请查看控制台!";
|
||||
queryResponse.records = [];
|
||||
|
||||
console.log( "查询BI机构续保率失败:", error );
|
||||
|
||||
handler( queryResponse, error );
|
||||
});
|
||||
}
|
||||
|
||||
export {
|
||||
type BIReportType,
|
||||
type ImportBIReportRequest,
|
||||
type ImportBIReportResponse,
|
||||
type ImportBIReportResponseHandler,
|
||||
type BITelsalerAttachingRateRecord,
|
||||
type QueryBITelsalerAttachingRateReportResponse,
|
||||
type QueryBITelsalerAttachingRateDataHandler,
|
||||
type QueryBITelsalerRenewalRateDataHandler,
|
||||
type BITelsalerRenewalRateRecord,
|
||||
type QueryBITelsalerRenewalRateReportResponse,
|
||||
type BIDepartmentAttachingRateRecord,
|
||||
type QueryBIDepartmentAttachingRateResponse,
|
||||
type QueryBIDepartmentAttachingRateDataHandler,
|
||||
type BIDepartmentRenewalRateRecord,
|
||||
type QueryBIDepartmentRenewalRateResponse,
|
||||
type QueryBIDepartmentRenewalRateDataHandler,
|
||||
importBIReport,
|
||||
queryBITelsalerAttachingRateData,
|
||||
queryBITelsalerRenewalData,
|
||||
queryDepartmentAttachingRateData,
|
||||
queryDepartmentRenewalRateData
|
||||
};
|
@@ -25,7 +25,7 @@ interface LoginInfo
|
||||
|
||||
interface LoginCallerInfo
|
||||
{
|
||||
telsaler_code: string;
|
||||
telsaler: string;
|
||||
}
|
||||
|
||||
interface RequestResult
|
||||
|
@@ -8,43 +8,39 @@
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
const API_URL = {
|
||||
// URL_LOGIN: import.meta.env.VITE_URL_LOGIN,
|
||||
// URL_LOGIN: "http://222.76.244.118:11101/admin-system/account/p13_account_check",
|
||||
URL_LOGIN: "http://10.39.0.41:8081/admin-system/account/p13_account_check",
|
||||
|
||||
// URL_LOGIN_CALLER: "http://localhost:8080/desktop_archievement_backend/account/query_telsaler_info.do",
|
||||
// URL_LOGIN_CALLER: "http://222.76.244.118:11101/desktop_archievement_backend/account/query_telsaler_info.do",
|
||||
URL_LOGIN_CALLER: "http://10.39.0.41:8081/desktop_archievement_backend/account/query_telsaler_info.do",
|
||||
|
||||
// URL_DEPARTMENT_ARCHIEVEMENT: import.meta.env.VITE_URL_DEPARTMENT_ARCHIEVEMENT,
|
||||
// URL_DEPARTMENT_ARCHIEVEMENT: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_department_archievement.do",
|
||||
URL_DEPARTMENT_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_department_archievement.do",
|
||||
|
||||
// URL_RANKINGLIST: "http://localhost:8080/desktop_archievement_backend/archievement/query_ranking_list.do",
|
||||
// URL_RANKINGLIST: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_ranking_list.do",
|
||||
URL_RANKINGLIST: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_ranking_list.do",
|
||||
// 登录
|
||||
URL_LOGIN: import.meta.env.VITE_URL_LOGIN,
|
||||
URL_LOGIN_CALLER: import.meta.env.VITE_URL_LOGIN_CALLER,
|
||||
|
||||
// 机构业绩
|
||||
URL_DEPARTMENT_ARCHIEVEMENT: import.meta.env.VITE_URL_DEPARTMENT_ARCHIEVEMENT,
|
||||
// 坐席业绩查询
|
||||
// URL_CALLER_ARCHIEVEMENT: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_caller_archievement.do",
|
||||
URL_CALLER_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_caller_archievement.do",
|
||||
URL_CALLER_ARCHIEVEMENT: import.meta.env.VITE_URL_CALLER_ARCHIEVEMENT,
|
||||
|
||||
// 排行榜
|
||||
URL_RANKINGLIST: import.meta.env.VITE_URL_RANKINGLIST,
|
||||
|
||||
/** 奖项相关 **/
|
||||
// 查询奖励项目
|
||||
// URL_RWARD_PROJECTS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_projects.do",
|
||||
URL_RWARD_PROJECTS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_projects.do",
|
||||
URL_RWARD_PROJECTS: import.meta.env.VITE_URL_RWARD_PROJECTS,
|
||||
// 查询获奖人员
|
||||
URL_REWARD_GAINERS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_gainers.do",
|
||||
// URL_REWARD_GAINERS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_gainers.do",
|
||||
URL_REWARD_GAINERS: import.meta.env.VITE_URL_REWARD_GAINERS,
|
||||
// 添加获奖人员
|
||||
URL_ADD_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/add_telsaler_reward.do",
|
||||
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/add_telsaler_reward.do",
|
||||
URL_ADD_REWARD_TELSALER: import.meta.env.VITE_URL_ADD_REWARD_TELSALER,
|
||||
// 更新获奖人员
|
||||
URL_UPDATE_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/update_telsaler_reward.do",
|
||||
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/update_telsaler_reward.do",
|
||||
URL_UPDATE_REWARD_TELSALER: import.meta.env.VITE_URL_UPDATE_REWARD_TELSALER,
|
||||
// 删除获奖人员
|
||||
URL_DEL_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/delete_telsaler_reward.do",
|
||||
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/delete_telsaler_reward.do",
|
||||
URL_DEL_REWARD_TELSALER: import.meta.env.VITE_URL_DEL_REWARD_TELSALER,
|
||||
// 上传文件
|
||||
URL_UPLOAD_FILE: import.meta.env.VITE_URL_UPLOAD_FILE,
|
||||
// 导入报表
|
||||
URL_IMPORT_REPORT: import.meta.env.VITE_URL_IMPORT_REPORT,
|
||||
|
||||
// 请求BI报表数据
|
||||
URL_BI_TELSALER_ATTACHINGRATE: import.meta.env.VITE_URL_BI_TELSALER_ATTACHINGRATE,
|
||||
URL_BI_TELSALER_RENEWALRATE: import.meta.env.VITE_URL_BI_TELSALER_RENEWALRATE,
|
||||
URL_BI_DEPARTMENT_ATTACHINGRATE: import.meta.env.VITE_URL_BI_DEPARTMENT_ATTACHINGRATE,
|
||||
URL_BI_DEPARTMENT_RENEWALRATE: import.meta.env.VITE_URL_BI_DEPARTMENT_RENEWALRATE,
|
||||
};
|
||||
|
||||
export { API_URL };
|
||||
|
@@ -31,6 +31,7 @@ interface CallerArchievement // 坐席业绩对象
|
||||
success: boolean;
|
||||
message: string;
|
||||
total_archievement: number;
|
||||
moto_premium_present_month: number;
|
||||
mensual_archievement_list: number[];
|
||||
insurance_renewal_rate: string;
|
||||
attaching_rate: string;
|
||||
@@ -134,6 +135,7 @@ function queryCallerArchievement( callerInfo: TelSaler, render: any ): void
|
||||
success: false,
|
||||
message: "",
|
||||
total_archievement: 0,
|
||||
moto_premium_present_month: 0,
|
||||
mensual_archievement_list: [],
|
||||
insurance_renewal_rate: "0.0",
|
||||
attaching_rate: "0.0",
|
||||
@@ -150,9 +152,12 @@ function queryCallerArchievement( callerInfo: TelSaler, render: any ): void
|
||||
{
|
||||
const data = response.data ?? {};
|
||||
|
||||
console.log( "个人业绩数据", data );
|
||||
|
||||
callArchievement.success = data.success ?? false;
|
||||
callArchievement.message = data.message ?? "服务器没有返回调用结果消息,请检查日志!";
|
||||
callArchievement.total_archievement = data.total_archievement ?? 0;
|
||||
callArchievement.moto_premium_present_month = data.motoPremiumPresentMonth ?? 0;
|
||||
callArchievement.mensual_archievement_list = [];
|
||||
callArchievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0";
|
||||
callArchievement.attaching_rate = data.attaching_rate ?? "0.0";
|
||||
|
20
code/web/task_schedule/src/utils/fileUpload.ts
Normal file
20
code/web/task_schedule/src/utils/fileUpload.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-09-27 14:13:47
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/utils/fileUpload.ts
|
||||
* @Description: 文件上传相关
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
|
||||
interface FileUploadResponse
|
||||
{
|
||||
success: boolean;
|
||||
message: string;
|
||||
fileList: string[];
|
||||
}
|
||||
|
||||
export {
|
||||
type FileUploadResponse
|
||||
};
|
@@ -170,6 +170,8 @@ function addRewardTelsaler( data: AddRewardTelsalerRequest, handler: any ): void
|
||||
message: "",
|
||||
};
|
||||
|
||||
console.log( "URL:", API_URL.URL_ADD_REWARD_TELSALER );
|
||||
|
||||
instance.request({
|
||||
method: "post",
|
||||
url: API_URL.URL_ADD_REWARD_TELSALER,
|
||||
|
@@ -1,40 +0,0 @@
|
||||
<!--
|
||||
* @Author: Kane
|
||||
* @Date: 2023-09-25 09:48:25
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/DataManagement.vue
|
||||
* @Description: 数据管理view
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="data_management_wrapper">
|
||||
数据管理
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { ref, reactive } from "vue";
|
||||
|
||||
export default {
|
||||
name: "DataManagement",
|
||||
setup()
|
||||
{
|
||||
const ui = reactive({
|
||||
showUI: false,
|
||||
});
|
||||
|
||||
return { ui, };
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.data_management_wrapper {
|
||||
margin: 10px;
|
||||
|
||||
min-width: 800px;
|
||||
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
</style>
|
@@ -54,34 +54,16 @@
|
||||
:attaching-rate="ui.callerAttachingRate"
|
||||
:renewal-rate="ui.callerRenewalRate"
|
||||
/>
|
||||
<div class="carousel-item">
|
||||
<el-carousel
|
||||
arrow="never"
|
||||
indicator-position="none"
|
||||
:interval="4000"
|
||||
>
|
||||
<el-carousel-item :key="1">
|
||||
<RankingListComponent :ranking-list="ui.attachingRankingList" />
|
||||
</el-carousel-item>
|
||||
<el-carousel-item :key="2">
|
||||
<RankingListComponent :ranking-list="ui.renewalRankingList" />
|
||||
</el-carousel-item>
|
||||
</el-carousel>
|
||||
</div>
|
||||
<div class="carousel-item">
|
||||
<el-carousel
|
||||
arrow="never"
|
||||
indicator-position="none"
|
||||
:interval="4000"
|
||||
>
|
||||
<el-carousel-item :key="1">
|
||||
<RankingListComponent :ranking-list="ui.attachingRankingList" />
|
||||
</el-carousel-item>
|
||||
<el-carousel-item :key="2">
|
||||
<RankingListComponent :ranking-list="ui.renewalRankingList" />
|
||||
</el-carousel-item>
|
||||
</el-carousel>
|
||||
</div>
|
||||
|
||||
<RankingListComponent
|
||||
title="渗透率"
|
||||
:ranking-list="ui.attachingRankingList"
|
||||
/>
|
||||
|
||||
<RankingListComponent
|
||||
title="续保率"
|
||||
:ranking-list="ui.renewalRankingList"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -256,10 +238,10 @@ export default {
|
||||
ui.totalArchievement = data.total_archievement;
|
||||
ui.callerAttachingRate = data.attaching_rate;
|
||||
ui.callerRenewalRate = data.insurance_renewal_rate;
|
||||
ui.callerPersentMonthPremium = data.mensual_archievement_list[thisMonth];
|
||||
ui.callerPersentMonthPremium = data.moto_premium_present_month;
|
||||
// ui.callerPersentMonthPremium = data.mensual_archievement_list[thisMonth];
|
||||
|
||||
// console.log( "业绩清单", ui.chartData );
|
||||
// console.log( "当月", data.mensual_archievement_list );
|
||||
console.log( "业绩清单", data );
|
||||
|
||||
ui.showUI = false;
|
||||
setTimeout(() =>
|
||||
@@ -402,7 +384,7 @@ export default {
|
||||
size: 90px;
|
||||
}
|
||||
|
||||
color: $color-bg-04;
|
||||
color: $color-title-font;
|
||||
text-shadow: #feebb1 0px 0px,
|
||||
#feebb1 5px 0px,
|
||||
#feebb1 -5px -0px,
|
||||
|
@@ -169,7 +169,7 @@ export default {
|
||||
{
|
||||
// 是坐席
|
||||
const loginInfo: LoginCallerInfo = {
|
||||
telsaler_code: ui.account,
|
||||
telsaler: ui.account,
|
||||
};
|
||||
|
||||
// 登录
|
||||
|
@@ -260,10 +260,12 @@ export default {
|
||||
}
|
||||
else
|
||||
{
|
||||
ElMessage({
|
||||
ElMessageBox({
|
||||
message: response.message,
|
||||
type: "error",
|
||||
});
|
||||
})
|
||||
.then(() => {})
|
||||
.catch(() => {});
|
||||
}
|
||||
|
||||
refresh();
|
||||
|
98
code/web/task_schedule/src/views/data/DataManagement.vue
Normal file
98
code/web/task_schedule/src/views/data/DataManagement.vue
Normal file
@@ -0,0 +1,98 @@
|
||||
<!--
|
||||
* @Author: Kane
|
||||
* @Date: 2023-09-25 09:48:25
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/data/DataManagement.vue
|
||||
* @Description: 数据管理view
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="data_management_wrapper">
|
||||
<el-tabs>
|
||||
<el-tab-pane label="坐席车非渗透率">
|
||||
<TelsalerAttachingRateView />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="坐席续保率">
|
||||
<TelsalerRenewalRateView />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="机构渗透率">
|
||||
<DepartmentAttachingRateView />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="机构续保率">
|
||||
<DepartmentRenewalRateView />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { ref, reactive } from "vue";
|
||||
import { ElMessage, ElMessageBox, type UploadFile, type UploadFiles, type UploadProps, type UploadUserFile } from "element-plus";
|
||||
import TelsalerAttachingRateView from "@/views/data/bi/TelsalerAttachingRateView.vue";
|
||||
import TelsalerRenewalRateView from "@/views/data/bi/TelsalerRenewalRateView.vue";
|
||||
import DepartmentRenewalRateView from "@/views/data/bi/DepartmentRenewalRateView.vue";
|
||||
import DepartmentAttachingRateView from "@/views/data/bi/DepartmentAttachingRateView.vue";
|
||||
|
||||
export default {
|
||||
name: "DataManagement",
|
||||
components: { TelsalerAttachingRateView, TelsalerRenewalRateView, DepartmentRenewalRateView, DepartmentAttachingRateView, },
|
||||
setup()
|
||||
{
|
||||
const ui = reactive({
|
||||
showUI: false,
|
||||
fileList: ref<UploadUserFile[]>([]),
|
||||
uploadData: {
|
||||
"task-name": "1234",
|
||||
},
|
||||
});
|
||||
|
||||
const handleRemove: UploadProps["onRemove"] = ( file, uploadFile ) =>
|
||||
{
|
||||
console.log( file, uploadFile );
|
||||
};
|
||||
|
||||
const handlePreview: UploadProps["onPreview"] = ( uploadFile ) =>
|
||||
{
|
||||
console.log( uploadFile );
|
||||
};
|
||||
|
||||
const handleExceed: UploadProps["onExceed"] = ( files, uploadFiles ) =>
|
||||
{
|
||||
ElMessage.warning( "一次只能上传三个文件!" );
|
||||
};
|
||||
|
||||
const beforeRemove: UploadProps["beforeRemove"] = async ( uploadFile, uploadFiles ) =>
|
||||
{
|
||||
return await ElMessageBox.confirm(
|
||||
`放弃上传${uploadFile.name}`
|
||||
)
|
||||
.then(() => true, () => false );
|
||||
};
|
||||
|
||||
const handleUploadSuccess = ( response: any, uploadFile: UploadFile, uploadFiles: UploadFiles ): void =>
|
||||
{
|
||||
console.log( response );
|
||||
};
|
||||
|
||||
return {
|
||||
ui,
|
||||
handleRemove,
|
||||
handlePreview,
|
||||
handleExceed,
|
||||
beforeRemove,
|
||||
handleUploadSuccess,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.data_management_wrapper {
|
||||
margin: 10px;
|
||||
|
||||
min-width: 800px;
|
||||
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
</style>
|
246
code/web/task_schedule/src/views/data/bi/BiDataUploadView.vue
Normal file
246
code/web/task_schedule/src/views/data/bi/BiDataUploadView.vue
Normal file
@@ -0,0 +1,246 @@
|
||||
<!--
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-17 10:56:43
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/data/bi/BiDataUploadView.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="bi-dataupload-wrapper">
|
||||
<div class="query-box-wrapper">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="4">
|
||||
<span>报表类型</span>
|
||||
</el-col>
|
||||
<el-col :span="9">
|
||||
<el-select v-model="ui.selectedReportType">
|
||||
<el-option
|
||||
v-for="item in ui.reportType"
|
||||
:key="item.reportTypeCode"
|
||||
:label="item.reportTypeName"
|
||||
:value="item.reportTypeCode"
|
||||
width="100%"
|
||||
/>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<span>sheet编号</span>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-input v-model.lazy.number="ui.sheetIndex" />
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="4">
|
||||
<span>起始行</span>
|
||||
</el-col>
|
||||
<el-col :span="9">
|
||||
<el-input v-model.lazy.number="ui.firstRow" />
|
||||
</el-col>
|
||||
<el-col :span="11">
|
||||
<span style="text-align:left;color:red;">*从0开始计数</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<el-upload
|
||||
drag
|
||||
:action="ui.urlFileUpload"
|
||||
name="files"
|
||||
:show-file-list="false"
|
||||
:data="ui.uploadParameters"
|
||||
:on-success="onUploadSuccess"
|
||||
>
|
||||
<el-icon class="el-icon--upload">
|
||||
<upload-filled />
|
||||
</el-icon>
|
||||
<div class="el-upload__text">
|
||||
将文件拖到此处,或<em>点击上传</em>
|
||||
</div>
|
||||
</el-upload>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { reactive, onBeforeMount } from "vue";
|
||||
import {
|
||||
type BIReportType,
|
||||
type ImportBIReportRequest,
|
||||
type ImportBIReportResponse,
|
||||
type ImportBIReportResponseHandler,
|
||||
importBIReport
|
||||
} from "@/utils/BIReport.js";
|
||||
import { API_URL } from "@/utils/api/config.js";
|
||||
import { type FileUploadResponse } from "@/utils/fileUpload.js";
|
||||
// import { UploadFilled } from "@element-plus/icons-vue";
|
||||
import { type UploadProps, type UploadFile, type UploadFiles, ElMessage, ElMessageBox } from "element-plus";
|
||||
|
||||
interface UI
|
||||
{
|
||||
showUI: boolean,
|
||||
selectedReportType: number,
|
||||
reportType: BIReportType[],
|
||||
sheetIndex: number,
|
||||
firstRow: number,
|
||||
hasCaption: boolean,
|
||||
uploadParameters: any,
|
||||
showFileList: boolean,
|
||||
urlFileUpload: string,
|
||||
}
|
||||
|
||||
export default {
|
||||
name: "BiDataUploadView",
|
||||
props: {
|
||||
reportType: {
|
||||
type: Number,
|
||||
require: true,
|
||||
default: (): number => 0,
|
||||
},
|
||||
},
|
||||
setup( props )
|
||||
{
|
||||
const ui: UI = reactive({
|
||||
showUI: false,
|
||||
selectedReportType: 0,
|
||||
reportType: [
|
||||
{
|
||||
reportTypeCode: 0,
|
||||
reportTypeName: "坐席车非渗透率",
|
||||
},
|
||||
{
|
||||
reportTypeCode: 1,
|
||||
reportTypeName: "坐席续保率",
|
||||
},
|
||||
{
|
||||
reportTypeCode: 2,
|
||||
reportTypeName: "部门车非渗透率",
|
||||
},
|
||||
{
|
||||
reportTypeCode: 3,
|
||||
reportTypeName: "当月个车续保率跟踪报表【机构】",
|
||||
},],
|
||||
sheetIndex: 0,
|
||||
firstRow: 1,
|
||||
hasCaption: true,
|
||||
uploadParameters: {
|
||||
"task-name": "1234",
|
||||
},
|
||||
showFileList: false,
|
||||
urlFileUpload: API_URL.URL_UPLOAD_FILE,
|
||||
});
|
||||
|
||||
/**
|
||||
* 文件上传成功响应函数
|
||||
* @param response 响应结果参数
|
||||
* @param uploadFile
|
||||
* @param uploadFiles
|
||||
*/
|
||||
const onUploadSuccess: UploadProps["onSuccess"] = ( response: FileUploadResponse, uploadFile: UploadFile, uploadFiles: UploadFiles ): void =>
|
||||
{
|
||||
// 先判断成功标志位
|
||||
if ( response.success )
|
||||
{
|
||||
// 成功,发出导入报表请求
|
||||
if ( response.fileList.length === 0 )
|
||||
{
|
||||
// 上传文件路径有问题,提示一下
|
||||
ElMessageBox.confirm(
|
||||
"上传文件的保存路径有误,请联系开发人员。",
|
||||
"上传文件错误",
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
type: "warning",
|
||||
center: true,
|
||||
}
|
||||
)
|
||||
.then((): void => {})
|
||||
.catch((): void => {});
|
||||
}
|
||||
|
||||
const request: ImportBIReportRequest = {
|
||||
filePath: response.fileList[0],
|
||||
reportType: ui.selectedReportType,
|
||||
firstRow: ui.firstRow,
|
||||
sheetIndex: ui.sheetIndex,
|
||||
};
|
||||
|
||||
console.log( "请求参数", request );
|
||||
|
||||
// 发出请求
|
||||
importBIReport( request, importResponseHandler );
|
||||
}
|
||||
else
|
||||
{
|
||||
// 失败了,提示一下
|
||||
ElMessageBox.confirm(
|
||||
response.message,
|
||||
"上传文件错误",
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
type: "warning",
|
||||
center: true,
|
||||
}
|
||||
)
|
||||
.then((): void => {})
|
||||
.catch((): void => {});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* handler函数
|
||||
* @param response
|
||||
* @param error
|
||||
*/
|
||||
const importResponseHandler: ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error?: any ): void =>
|
||||
{
|
||||
if ( response.success )
|
||||
{
|
||||
ElMessage({
|
||||
type: "success",
|
||||
message: response.message,
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
ElMessageBox.confirm(
|
||||
response.message,
|
||||
"导入错误",
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
type: "warning",
|
||||
center: true,
|
||||
}
|
||||
)
|
||||
.then((): void => {})
|
||||
.catch((): void => {});
|
||||
console.log( error );
|
||||
}
|
||||
};
|
||||
|
||||
onBeforeMount((): void =>
|
||||
{
|
||||
ui.selectedReportType = props.reportType;
|
||||
});
|
||||
|
||||
return {
|
||||
ui,
|
||||
onUploadSuccess,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import "@/assets/css/public/_public.scss";
|
||||
|
||||
.bi-dataupload-wrapper {
|
||||
// max-width: 600px;
|
||||
width: 100%;
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.query-box-wrapper {
|
||||
@include query-box-wrap;
|
||||
}
|
||||
</style>
|
@@ -0,0 +1,227 @@
|
||||
<!--
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-17 14:53:17
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/data/bi/DepartmentAttachingRateView.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div class="wrapper">
|
||||
<el-row :gutter="10">
|
||||
<el-col span="24">
|
||||
<el-button
|
||||
type="warning"
|
||||
icon="upload"
|
||||
@click="showUploadFileDialog"
|
||||
>
|
||||
上传
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="refresh"
|
||||
@click="refresh"
|
||||
>
|
||||
刷新
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table
|
||||
width="100%"
|
||||
stripe
|
||||
border
|
||||
:data="tableData"
|
||||
>
|
||||
<el-table-column
|
||||
label="部门"
|
||||
align="center"
|
||||
>
|
||||
<template #default="department">
|
||||
<span>{{ department.row.departmentName }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="车险保费(万)"
|
||||
align="center"
|
||||
>
|
||||
<template #default="department">
|
||||
<span>{{ department.row.motoPremium.toFixed(2) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="非车险保费(万)"
|
||||
align="center"
|
||||
>
|
||||
<template #default="department">
|
||||
<span>{{ department.row.nomotoPremium.toFixed(2) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="渗透率"
|
||||
align="center"
|
||||
>
|
||||
<template #default="department">
|
||||
<span>{{ department.row.attachingRate.toFixed(2) + "%" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination_wrapper">
|
||||
<el-pagination
|
||||
v-model="ui.tableCurrentPageIndex"
|
||||
class="pull_left"
|
||||
size="small"
|
||||
background
|
||||
:page-size="ui.tablePageSize"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="0"
|
||||
@current-change="onCurrentPageIndexChange"
|
||||
@size-change="onTablePageSizeChange"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="upload-dialog-wrapper"
|
||||
>
|
||||
<el-dialog
|
||||
v-model="ui.showUploadDialog"
|
||||
title="上传报表"
|
||||
width="600px"
|
||||
:close-on-click-modal="false"
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<BiDataUploadView :report-type="2" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { reactive, computed, onBeforeMount } from "vue";
|
||||
import {
|
||||
type BIDepartmentAttachingRateRecord,
|
||||
type QueryBIDepartmentAttachingRateResponse,
|
||||
type QueryBIDepartmentAttachingRateDataHandler,
|
||||
queryDepartmentAttachingRateData
|
||||
} from "@/utils/BIReport.js";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
|
||||
|
||||
interface UI
|
||||
{
|
||||
showUI: boolean,
|
||||
showUploadDialog: boolean,
|
||||
tablePageSize: number,
|
||||
tableCurrentPageIndex: number,
|
||||
BIDepartmentAttachingRateData: BIDepartmentAttachingRateRecord[],
|
||||
}
|
||||
|
||||
export default {
|
||||
name: "DepartmentAttachingRateView",
|
||||
components: { BiDataUploadView, },
|
||||
setup()
|
||||
{
|
||||
const ui: UI = reactive({
|
||||
showUI: true,
|
||||
showUploadDialog: false,
|
||||
tablePageSize: 10,
|
||||
tableCurrentPageIndex: 1,
|
||||
BIDepartmentAttachingRateData: [],
|
||||
});
|
||||
|
||||
const tableData = computed((): BIDepartmentAttachingRateRecord[] =>
|
||||
{
|
||||
const tableCount = ui.BIDepartmentAttachingRateData.length;
|
||||
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) > tableCount ? tableCount - ui.tablePageSize : ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 );
|
||||
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex;
|
||||
|
||||
return ui.BIDepartmentAttachingRateData.slice( startIndex, endIndex );
|
||||
});
|
||||
|
||||
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
|
||||
{
|
||||
ui.tableCurrentPageIndex = pageIndex;
|
||||
};
|
||||
|
||||
const onTablePageSizeChange = ( pageSize: number ): void =>
|
||||
{
|
||||
ui.tablePageSize = pageSize;
|
||||
};
|
||||
|
||||
const handler: QueryBIDepartmentAttachingRateDataHandler = ( response: QueryBIDepartmentAttachingRateResponse, error: any ): void =>
|
||||
{
|
||||
// 判断一下标志位
|
||||
if ( response.success )
|
||||
{
|
||||
// 请求成功
|
||||
ElMessage({
|
||||
message: "更新成功",
|
||||
type: "success",
|
||||
});
|
||||
|
||||
ui.BIDepartmentAttachingRateData = response.records;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 请求失败
|
||||
ElMessageBox.confirm(
|
||||
response.message,
|
||||
"请求机构渗透率数据失败",
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
type: "warning",
|
||||
center: true,
|
||||
}
|
||||
)
|
||||
.then((): void => {})
|
||||
.catch((): void => {});
|
||||
|
||||
if ( error !== null )
|
||||
{
|
||||
console.log( "请求机构渗透率数据失败", error );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const refresh = (): void =>
|
||||
{
|
||||
queryDepartmentAttachingRateData( handler );
|
||||
};
|
||||
|
||||
const showUploadFileDialog = (): void =>
|
||||
{
|
||||
ui.showUploadDialog = true;
|
||||
};
|
||||
|
||||
onBeforeMount((): void =>
|
||||
{
|
||||
refresh();
|
||||
});
|
||||
|
||||
return {
|
||||
ui,
|
||||
tableData,
|
||||
onCurrentPageIndexChange,
|
||||
onTablePageSizeChange,
|
||||
showUploadFileDialog,
|
||||
handler,
|
||||
refresh,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.wrapper {
|
||||
margin: 0px 10px 10px 10px;
|
||||
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.pagination_wrapper {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
</style>
|
@@ -0,0 +1,243 @@
|
||||
<!--
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-10 17:48:01
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/data/bi/DepartmentRenewalRateView.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="wrapper">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-button
|
||||
type="warning"
|
||||
icon="upload"
|
||||
@click="showUploadFileDialog"
|
||||
>
|
||||
上传
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="refresh"
|
||||
@click="refresh"
|
||||
>
|
||||
刷新
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
style="width:100%;"
|
||||
border
|
||||
stripe
|
||||
>
|
||||
<el-table-column
|
||||
label="部门"
|
||||
align="center"
|
||||
width="250px"
|
||||
>
|
||||
<template #default="dept">
|
||||
<span>{{ dept.row.责任部门 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="机构目标值"
|
||||
align="center"
|
||||
>
|
||||
<template #default="dept">
|
||||
<span>{{ dept.row.机构目标值.toFixed(2) + "%" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="到期数全月"
|
||||
align="center"
|
||||
>
|
||||
<template #default="dept">
|
||||
<span>{{ dept.row.到期数全月 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="序时到期数占比"
|
||||
align="center"
|
||||
>
|
||||
<template #default="dept">
|
||||
<span>{{ dept.row.序时到期数占比.toFixed(2) + "%" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="个车续保率序时"
|
||||
align="center"
|
||||
>
|
||||
<template #default="dept">
|
||||
<span>{{ dept.row.个车续保率序时.toFixed(2) + "%" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="个车续保率全月"
|
||||
align="center"
|
||||
>
|
||||
<template #default="dept">
|
||||
<span>{{ dept.row.个车续保率全月.toFixed(2) + "%" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination-wrapper">
|
||||
<el-pagination
|
||||
v-model="ui.tableCurrentPageIndex"
|
||||
class="pull_left"
|
||||
size="small"
|
||||
background
|
||||
:page-size="ui.tablePageSize"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="0"
|
||||
@current-change="onCurrentPageIndexChange"
|
||||
@size-change="onTablePageSizeChange"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="upload-dialog-wrapper"
|
||||
>
|
||||
<el-dialog
|
||||
v-model="ui.showUploadDialog"
|
||||
title="上传报表"
|
||||
width="600px"
|
||||
:close-on-click-modal="false"
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<BiDataUploadView :report-type="3" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { reactive, computed, onBeforeMount } from "vue";
|
||||
import {
|
||||
type BIDepartmentRenewalRateRecord,
|
||||
type QueryBIDepartmentRenewalRateResponse,
|
||||
type QueryBIDepartmentRenewalRateDataHandler,
|
||||
queryDepartmentRenewalRateData
|
||||
} from "@/utils/BIReport.js";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
|
||||
|
||||
interface UI
|
||||
{
|
||||
showUI: boolean;
|
||||
showUploadDialog: boolean;
|
||||
tablePageSize: number;
|
||||
tableCurrentPageIndex: number;
|
||||
BIDepartmentRenewalRateData: BIDepartmentRenewalRateRecord[];
|
||||
}
|
||||
|
||||
export default {
|
||||
name: "DepartmentRenewalRateView",
|
||||
components: { BiDataUploadView, },
|
||||
setup()
|
||||
{
|
||||
const ui: UI = reactive({
|
||||
showUI: true,
|
||||
showUploadDialog: false,
|
||||
tablePageSize: 10,
|
||||
tableCurrentPageIndex: 1,
|
||||
BIDepartmentRenewalRateData: [],
|
||||
});
|
||||
|
||||
// on
|
||||
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
|
||||
{
|
||||
ui.tableCurrentPageIndex = pageIndex;
|
||||
};
|
||||
|
||||
const onTablePageSizeChange = ( pageSize: number ): void =>
|
||||
{
|
||||
ui.tablePageSize = pageSize;
|
||||
};
|
||||
|
||||
// 计算变量
|
||||
const tableData = computed((): BIDepartmentRenewalRateRecord[] =>
|
||||
{
|
||||
const tableCount = ui.BIDepartmentRenewalRateData.length;
|
||||
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) < tableCount ? ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) : ( tableCount - ui.tablePageSize );
|
||||
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex < tableCount ? ui.tablePageSize * ui.tableCurrentPageIndex : tableCount;
|
||||
|
||||
return ui.BIDepartmentRenewalRateData.slice( startIndex, endIndex );
|
||||
});
|
||||
|
||||
// handler
|
||||
const handler: QueryBIDepartmentRenewalRateDataHandler = ( response: QueryBIDepartmentRenewalRateResponse, error: any ): void =>
|
||||
{
|
||||
if ( response.success )
|
||||
{
|
||||
ui.BIDepartmentRenewalRateData = response.records;
|
||||
|
||||
ElMessage({
|
||||
message: "更新完成",
|
||||
type: "success",
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
ElMessageBox.confirm(
|
||||
response.message,
|
||||
"请求BI机构续保率数据失败",
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
type: "warning",
|
||||
center: true,
|
||||
}
|
||||
)
|
||||
.then((): void => {})
|
||||
.catch((): void => {});
|
||||
|
||||
if ( error !== null )
|
||||
{
|
||||
console.log( error );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const showUploadFileDialog = (): void =>
|
||||
{
|
||||
ui.showUploadDialog = true;
|
||||
};
|
||||
|
||||
onBeforeMount((): void =>
|
||||
{
|
||||
refresh();
|
||||
});
|
||||
|
||||
const refresh = (): void =>
|
||||
{
|
||||
queryDepartmentRenewalRateData( handler );
|
||||
};
|
||||
|
||||
return {
|
||||
ui,
|
||||
onCurrentPageIndexChange,
|
||||
onTablePageSizeChange,
|
||||
showUploadFileDialog,
|
||||
// 计算变量
|
||||
tableData,
|
||||
refresh,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.wrapper {
|
||||
margin: 0px 10px 10px 10px;
|
||||
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.pagination-wrapper {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
</style>
|
@@ -0,0 +1,253 @@
|
||||
<!--
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-17 14:41:39
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/data/bi/TelsalerAttachingRateView.vue
|
||||
* @Description: BI坐席车非渗透率数据管理界面
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="wrapper">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-button
|
||||
type="warning"
|
||||
icon="upload"
|
||||
@click="showUploadFileDialog"
|
||||
>
|
||||
上传
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="refresh"
|
||||
@click="refresh"
|
||||
>
|
||||
刷新
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table
|
||||
border
|
||||
stripe
|
||||
style="width:100%;"
|
||||
:data="tableData"
|
||||
>
|
||||
<el-table-column
|
||||
label="部门"
|
||||
align="center"
|
||||
width="300"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.departmentName }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="名称"
|
||||
align="center"
|
||||
width="200"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.telsalerName }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="车险保费"
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ Math.trunc( telsaler.row.motoPremium * 10000) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="非车险保费"
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ Math.trunc( telsaler.row.nomotoPremium * 10000) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="当月保费渗透率"
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.attachingRate.toFixed(2) + "%" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="渗透率环比上月"
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.attachingRateChange.toFixed(2) + "%" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination_wrapper">
|
||||
<el-pagination
|
||||
v-model="ui.tableCurrentPageIndex"
|
||||
class="pull_left"
|
||||
size="small"
|
||||
background
|
||||
:page-size="ui.tablePageSize"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="tableCount"
|
||||
@current-change="onCurrentPageIndexChange"
|
||||
@size-change="onTablePageSizeChange"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="upload-dialog-wrapper"
|
||||
>
|
||||
<el-dialog
|
||||
v-model="ui.showUploadDialog"
|
||||
title="上传报表"
|
||||
width="600px"
|
||||
:close-on-click-modal="false"
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<BiDataUploadView :report-type="0" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { reactive, onBeforeMount, computed } from "vue";
|
||||
import {
|
||||
type BITelsalerAttachingRateRecord,
|
||||
type QueryBITelsalerAttachingRateReportResponse,
|
||||
type QueryBITelsalerAttachingRateDataHandler,
|
||||
queryBITelsalerAttachingRateData
|
||||
} from "@/utils/BIReport.js";
|
||||
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
|
||||
interface UI
|
||||
{
|
||||
showUI: boolean,
|
||||
showUploadDialog: boolean,
|
||||
tableCurrentPageIndex: number,
|
||||
tablePageSize: number,
|
||||
BITelsalerAttachingRateData: BITelsalerAttachingRateRecord[],
|
||||
}
|
||||
|
||||
export default {
|
||||
name: "TelsalerAttachingRateView",
|
||||
components: { BiDataUploadView, },
|
||||
setup()
|
||||
{
|
||||
const ui: UI = reactive({
|
||||
showUI: true,
|
||||
showUploadDialog: false,
|
||||
tableCurrentPageIndex: 1,
|
||||
tablePageSize: 10,
|
||||
BITelsalerAttachingRateData: [],
|
||||
});
|
||||
|
||||
const showUploadFileDialog = (): void =>
|
||||
{
|
||||
ui.showUploadDialog = true;
|
||||
};
|
||||
|
||||
const onCurrentPageIndexChange = ( index: number ): void =>
|
||||
{
|
||||
ui.tableCurrentPageIndex = index;
|
||||
};
|
||||
|
||||
const onTablePageSizeChange = ( pageSize: number ): void =>
|
||||
{
|
||||
ui.tablePageSize = pageSize;
|
||||
};
|
||||
|
||||
/** 请求处理handler ********/
|
||||
const queryBITelsalerAttachingRateDataHandler: QueryBITelsalerAttachingRateDataHandler = ( response: QueryBITelsalerAttachingRateReportResponse, error: any ): void =>
|
||||
{
|
||||
// 判断调用成功标志位
|
||||
if ( response.success )
|
||||
{
|
||||
ui.BITelsalerAttachingRateData = response.records;
|
||||
|
||||
ElMessage({
|
||||
message: "更新成功",
|
||||
type: "success",
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
// 错误处理
|
||||
ElMessageBox.confirm(
|
||||
response.message,
|
||||
"请求BI坐席渗透率数据错误",
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
type: "warning",
|
||||
center: true,
|
||||
}
|
||||
)
|
||||
.then((): void => {})
|
||||
.catch((): void => {});
|
||||
|
||||
if ( error !== null )
|
||||
{
|
||||
console.log( error );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const tableCount = computed((): number =>
|
||||
{
|
||||
return ui.BITelsalerAttachingRateData.length;
|
||||
});
|
||||
|
||||
const tableData = computed((): BITelsalerAttachingRateRecord[] =>
|
||||
{
|
||||
const tableCount = ui.BITelsalerAttachingRateData.length;
|
||||
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) > tableCount ? tableCount - ui.tablePageSize : ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 );
|
||||
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex;
|
||||
|
||||
return ui.BITelsalerAttachingRateData.slice( startIndex, endIndex );
|
||||
});
|
||||
|
||||
onBeforeMount((): void =>
|
||||
{
|
||||
queryBITelsalerAttachingRateData( queryBITelsalerAttachingRateDataHandler );
|
||||
});
|
||||
|
||||
const refresh = (): void =>
|
||||
{
|
||||
console.log( import.meta.env.VITE_TEST );
|
||||
queryBITelsalerAttachingRateData( queryBITelsalerAttachingRateDataHandler );
|
||||
};
|
||||
|
||||
return {
|
||||
ui,
|
||||
showUploadFileDialog,
|
||||
onCurrentPageIndexChange,
|
||||
onTablePageSizeChange,
|
||||
// 计算变量
|
||||
tableData,
|
||||
tableCount,
|
||||
// 函数
|
||||
queryBITelsalerAttachingRateDataHandler,
|
||||
refresh,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.wrapper {
|
||||
margin: 0px 10px 10px 10px;
|
||||
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.pagination_wrapper {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
</style>
|
@@ -0,0 +1,241 @@
|
||||
<!--
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-17 23:31:19
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/data/bi/TelsalerRenewalRateView.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="wrapper">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-button
|
||||
type="warning"
|
||||
icon="Upload"
|
||||
@click="showUploadFileDialog"
|
||||
>
|
||||
上传
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="refresh"
|
||||
@click="refresh"
|
||||
>
|
||||
刷新
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table
|
||||
border
|
||||
stripe
|
||||
style="width:100%;"
|
||||
:data="tableData"
|
||||
>
|
||||
<el-table-column
|
||||
label="部门"
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.责任部门 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="责任人"
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.责任人 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="到期数-全月"
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.到期数全月 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="个车续保率(序时)(%)"
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.个车续保率序时 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="个车续保率(全月)(%)"
|
||||
align="center"
|
||||
>
|
||||
<template #default="telsaler">
|
||||
<span>{{ telsaler.row.个车续保率全月 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination_wrapper">
|
||||
<el-pagination
|
||||
v-model="ui.tableCurrentPageIndex"
|
||||
class="pull_left"
|
||||
size="small"
|
||||
background
|
||||
:page-size="ui.tablePageSize"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="0"
|
||||
@current-change="onCurrentPageIndexChange"
|
||||
@size-change="onTablePageSizeChange"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="upload-dialog-wrapper"
|
||||
>
|
||||
<el-dialog
|
||||
v-model="ui.showUploadDialog"
|
||||
title="上传报表"
|
||||
width="600px"
|
||||
:close-on-click-modal="false"
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<BiDataUploadView :report-type="1" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { reactive, computed, onBeforeMount } from "vue";
|
||||
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
|
||||
import {
|
||||
type QueryBITelsalerRenewalRateDataHandler,
|
||||
type BITelsalerRenewalRateRecord,
|
||||
type QueryBITelsalerRenewalRateReportResponse,
|
||||
queryBITelsalerRenewalData
|
||||
} from "@/utils/BIReport.js";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
|
||||
interface UI
|
||||
{
|
||||
showUI: boolean,
|
||||
showUploadDialog: boolean,
|
||||
tableCurrentPageIndex: number,
|
||||
tablePageSize: number,
|
||||
BITelsalerRenewalRateData: BITelsalerRenewalRateRecord[],
|
||||
}
|
||||
|
||||
export default {
|
||||
name: "TelsalerAttachingRateView",
|
||||
components: { BiDataUploadView, },
|
||||
setup()
|
||||
{
|
||||
const ui: UI = reactive({
|
||||
showUI: true,
|
||||
showUploadDialog: false,
|
||||
tableCurrentPageIndex: 1,
|
||||
tablePageSize: 10,
|
||||
BITelsalerRenewalRateData: [],
|
||||
});
|
||||
|
||||
const showUploadFileDialog = (): void =>
|
||||
{
|
||||
ui.showUploadDialog = true;
|
||||
};
|
||||
|
||||
const onCurrentPageIndexChange = ( index: number ): void =>
|
||||
{
|
||||
ui.tableCurrentPageIndex = index;
|
||||
};
|
||||
|
||||
const onTablePageSizeChange = ( pageSize: number ): void =>
|
||||
{
|
||||
ui.tablePageSize = pageSize;
|
||||
};
|
||||
|
||||
const tableData = computed((): BITelsalerRenewalRateRecord[] =>
|
||||
{
|
||||
const tableCount = ui.BITelsalerRenewalRateData.length;
|
||||
const startIndex = ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 ) > tableCount ? tableCount - ui.tablePageSize : ui.tablePageSize * ( ui.tableCurrentPageIndex - 1 );
|
||||
const endIndex = ui.tablePageSize * ui.tableCurrentPageIndex;
|
||||
|
||||
return ui.BITelsalerRenewalRateData.slice( startIndex, endIndex );
|
||||
});
|
||||
|
||||
const tableCount = computed((): number =>
|
||||
{
|
||||
return ui.BITelsalerRenewalRateData.length;
|
||||
});
|
||||
|
||||
// handler
|
||||
const queryBITelsalerRenewalRateDataHander: QueryBITelsalerRenewalRateDataHandler = ( response: QueryBITelsalerRenewalRateReportResponse, error: any ): void =>
|
||||
{
|
||||
// 判断调用成功标志位
|
||||
if ( response.success )
|
||||
{
|
||||
ui.BITelsalerRenewalRateData = response.records;
|
||||
|
||||
ElMessage({
|
||||
message: "更新成功",
|
||||
type: "success",
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
// 错误处理
|
||||
ElMessageBox.confirm(
|
||||
response.message,
|
||||
"请求BI坐席续保率数据错误",
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
type: "warning",
|
||||
center: true,
|
||||
}
|
||||
)
|
||||
.then((): void => {})
|
||||
.catch((): void => {});
|
||||
|
||||
if ( error !== null )
|
||||
{
|
||||
console.log( error );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
onBeforeMount((): void =>
|
||||
{
|
||||
queryBITelsalerRenewalData( queryBITelsalerRenewalRateDataHander );
|
||||
});
|
||||
|
||||
const refresh = (): void =>
|
||||
{
|
||||
queryBITelsalerRenewalData( queryBITelsalerRenewalRateDataHander );
|
||||
};
|
||||
|
||||
return {
|
||||
ui,
|
||||
showUploadFileDialog,
|
||||
onCurrentPageIndexChange,
|
||||
onTablePageSizeChange,
|
||||
// 计算变量
|
||||
tableData,
|
||||
tableCount,
|
||||
// 函数
|
||||
refresh,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.wrapper {
|
||||
margin: 0px 10px 10px 10px;
|
||||
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.pagination_wrapper {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
</style>
|
@@ -61,17 +61,13 @@ import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import {
|
||||
type RewardProject,
|
||||
type RewardProjectResponse,
|
||||
type RewardGainerResponse,
|
||||
type DeleteRewardTelsalerRequest,
|
||||
type DeleteRewardTelsalerResponse,
|
||||
type AddRewardTelsalerRequest,
|
||||
type AddRewardTelsalerResponse,
|
||||
type UpdateRewardTelsalerRequest,
|
||||
type UpdateRewardTelsalerResponse,
|
||||
requestRewardPorjectsList,
|
||||
addRewardTelsaler,
|
||||
updateTelsalerReward,
|
||||
deleteRewardTelsaler
|
||||
updateTelsalerReward
|
||||
} from "@/utils/reward.js";
|
||||
import eventBus from "@/utils/api/EventBus.js";
|
||||
|
||||
@@ -131,13 +127,9 @@ export default {
|
||||
.then((): void => {})
|
||||
.catch((): void => {});
|
||||
|
||||
console.log( "请求奖励项目失败:", error );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
console.log( "请求奖励项目结果", response.rewardList );
|
||||
|
||||
ui.rewardProjectList = response.rewardList;
|
||||
};
|
||||
|
||||
@@ -153,8 +145,6 @@ export default {
|
||||
ui.selectedRecID = props.selectedRecId;
|
||||
|
||||
refresh();
|
||||
|
||||
console.log( props.selectedRewardProjectCode );
|
||||
});
|
||||
|
||||
const onSaveRewardTelsaler = (): void =>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* @Author: Kane
|
||||
* @Date: 2023-03-23 16:05:08
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/StaffManagement.vue
|
||||
* @FilePath: /task_schedule/src/views/telsaler/TelsalerManagement.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
@@ -107,7 +107,7 @@
|
||||
<script lang="ts">
|
||||
import { reactive, computed } from "vue";
|
||||
export default {
|
||||
name: "StaffManagement",
|
||||
name: "TelsalerManagement",
|
||||
setup()
|
||||
{
|
||||
const ui = reactive({
|
||||
@@ -150,16 +150,9 @@ export default {
|
||||
@import "@/assets/css/public/_public.scss";
|
||||
|
||||
.wrapper {
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
|
||||
background-color: #fff;
|
||||
border-radius: 5px;
|
||||
box-shadow: $box-shadow;
|
||||
|
||||
&:hover {
|
||||
box-shadow: $box-shadow-hover;
|
||||
}
|
||||
|
||||
min-width: 800px;
|
||||
|
@@ -0,0 +1,69 @@
|
||||
<!--
|
||||
* @Author: Kane
|
||||
* @Date: 2023-09-27 10:13:31
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/telsaler/TelsalerManagementView.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div
|
||||
v-if="ui.showUI"
|
||||
class="telsaler-management-view-wrapper"
|
||||
>
|
||||
<el-tabs type="border-card">
|
||||
<el-tab-pane>
|
||||
<template #label>
|
||||
<el-icon><User /></el-icon>
|
||||
<span>坐席管理</span>
|
||||
</template>
|
||||
<TelsalerManagement />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane>
|
||||
<template #label>
|
||||
<el-icon><Document /></el-icon>
|
||||
<span>导入导出</span>
|
||||
</template>
|
||||
导入导出
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { ref, reactive } from "vue";
|
||||
// import { User } from "@element-plus/icons-vue";
|
||||
|
||||
import TelsalerManagement from "@/views/telsaler/TelsalerManagement.vue";
|
||||
|
||||
export default {
|
||||
name: "TelsalerManagementView",
|
||||
components: { TelsalerManagement, },
|
||||
setup()
|
||||
{
|
||||
const ui = reactive({
|
||||
showUI: true,
|
||||
});
|
||||
|
||||
return {
|
||||
ui,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.telsaler-management-view-wrapper {
|
||||
margin: 10px 10px;
|
||||
|
||||
min-width: 800px;
|
||||
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-left: 4px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
</style>
|
@@ -11,10 +11,11 @@
|
||||
"compilerOptions": {
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"useDefineForClassFields": true,
|
||||
"target": "ES2015",
|
||||
"module": "ES2015",
|
||||
"target": "ESNext",
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "node",
|
||||
"strict": true,
|
||||
"strictNullChecks": true,
|
||||
"jsx": "preserve",
|
||||
"sourceMap": true,
|
||||
"resolveJsonModule": true,
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* @Author: Kane
|
||||
* @Date: 2023-02-15 09:25:52
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-06-25 09:51:13
|
||||
* @LastEditTime: 2023-11-13 10:42:29
|
||||
* @FilePath: /task_schedule/vite.config.js
|
||||
* @Description:
|
||||
*
|
||||
@@ -19,6 +19,9 @@ export default defineConfig(( command, mode ) =>
|
||||
|
||||
return {
|
||||
server:{ host: "localhost", port: 5173, },
|
||||
build: {
|
||||
outDir: "../../../输出/web",
|
||||
},
|
||||
plugins: [vue(),],
|
||||
base: "./",
|
||||
resolve: {
|
||||
|
@@ -2,5 +2,7 @@
|
||||
"java.configuration.updateBuildConfiguration": "automatic",
|
||||
"java.compile.nullAnalysis.mode": "automatic",
|
||||
"vue.codeActions.enabled": false,
|
||||
"java.debug.settings.onBuildFailureProceed": true
|
||||
"java.debug.settings.onBuildFailureProceed": true,
|
||||
"java.checkstyle.version": "10.12.4",
|
||||
"java.checkstyle.configuration": "/D:/DevTools/vscode/代码格式化/eclipse-java-google-style.xml"
|
||||
}
|
@@ -13,7 +13,8 @@
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<spring.version>5.3.24</spring.version>
|
||||
<spring.version>5.3.30</spring.version>
|
||||
<log4j2.version>2.20.0</log4j2.version>
|
||||
<!-- <spring.version>6.0.11</spring.version> -->
|
||||
</properties>
|
||||
|
||||
@@ -116,6 +117,27 @@
|
||||
<artifactId>log4j-slf4j2-impl</artifactId>
|
||||
<version>2.20.0</version>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-api</artifactId>
|
||||
<version>2.20.0</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- POI -->
|
||||
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>5.2.3</version>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>5.2.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mybatis</groupId>
|
||||
@@ -140,7 +162,9 @@
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>3.3.2</version>
|
||||
<configuration></configuration>
|
||||
<configuration>
|
||||
<outputDirectory>${project.build.directory}/../../../../输出/back/</outputDirectory>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
|
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-11 16:47:59
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/ImportBIArchievementDataMapper.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.mybatis.mapper;
|
||||
|
||||
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
|
||||
|
||||
public interface ImportBIArchievementDataMapper
|
||||
{
|
||||
public void insertTelsalerAttachingRateDataToDB( BITelsalerAttachingRateRecord record);
|
||||
|
||||
public void insertTelsalerRenewalRateDataToDB( BITelsalerRenewalRateRecord record );
|
||||
|
||||
public void insertDepartmentAttachingRateDataToDB(BIDepartmentAttachingRateRecord record);
|
||||
|
||||
public void insertDepartmentRenewalRateDataToDB(BIDepartmentRenewalRateRecord record);
|
||||
|
||||
public void cleanTelsalerAttachingRateData();
|
||||
|
||||
public void cleanTelsalerRenewalRateData();
|
||||
|
||||
public void cleanDepartmentAttachingRateData();
|
||||
|
||||
public void cleanDepartmentRenewalRateData();
|
||||
}
|
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-01 15:50:40
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/QueryBIArchievementDataMapper.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.mybatis.mapper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
|
||||
|
||||
public interface QueryBIArchievementDataMapper
|
||||
{
|
||||
public ArrayList<BITelsalerAttachingRateRecord> queryBITelsalerAttachingRate();
|
||||
|
||||
public ArrayList<BITelsalerRenewalRateRecord> queryBITesalerRenewalRate();
|
||||
|
||||
public ArrayList<BIDepartmentAttachingRateRecord> queryBIDepartmentAttachingRate();
|
||||
|
||||
public ArrayList<BIDepartmentRenewalRateRecord> queryBIDepartmentRenewalRate();
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-25 18:48:11
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/TWrTelsalerMapper.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.mybatis.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.cpic.xim.mybatis.pojo.TWrTelsalerRecord;
|
||||
|
||||
public interface TWrTelsalerMapper
|
||||
{
|
||||
public TWrTelsalerRecord queryTWrTelsalerInfo( @Param("telsaler") String telsaler );
|
||||
|
||||
public void insertTWrTelsalerRecordToDB( TWrTelsalerRecord record );
|
||||
}
|
@@ -0,0 +1,296 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-10 14:50:55
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentAttachingRateRecord.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.mybatis.pojo;
|
||||
|
||||
public class BIDepartmentAttachingRateRecord
|
||||
{
|
||||
// 部门
|
||||
private String departmentName;
|
||||
// 目标值-机构
|
||||
private double departmentObject;
|
||||
// 目标差距
|
||||
private double objectGap;
|
||||
// 车险保费(万)
|
||||
private double motoPremium;
|
||||
// 车险保费占比
|
||||
private double motoPremiumProPortion;
|
||||
// 非车保费(万)
|
||||
private double nomotoPremium;
|
||||
// 当月保费渗透率
|
||||
private double attachingRate;
|
||||
// 保费渗透率环比上月
|
||||
private double attachingRateChange;
|
||||
// 车险客户数
|
||||
private int motoInsuranceCustomerCount;
|
||||
// 当月客户渗透率
|
||||
private double customerHandleRate;
|
||||
|
||||
// 客户渗透率环比上月
|
||||
private double customerHandleRateChange;
|
||||
|
||||
// 当月车非客均保费
|
||||
private double premiumPerCustomer;
|
||||
|
||||
// 客均保费环比上月
|
||||
private double premiumPerCustomerChange;
|
||||
|
||||
public BIDepartmentAttachingRateRecord( String departmentName, double departmentObject,
|
||||
double objectGap, double motoPremium, double motoPremiumProPortion,
|
||||
double nomotoPremium, double attachingRate, double attachingRateChange,
|
||||
int motoInsuranceCustomerCount, double customerHandleRate,
|
||||
double customerHandleRateChange, double premiumPerCustomer,
|
||||
double premiumPerCustomerChange )
|
||||
{
|
||||
this.departmentName = departmentName;
|
||||
this.departmentObject = departmentObject;
|
||||
this.objectGap = objectGap;
|
||||
this.motoPremium = motoPremium;
|
||||
this.motoPremiumProPortion = motoPremiumProPortion;
|
||||
this.nomotoPremium = nomotoPremium;
|
||||
this.attachingRate = attachingRate;
|
||||
this.attachingRateChange = attachingRateChange;
|
||||
this.motoInsuranceCustomerCount = motoInsuranceCustomerCount;
|
||||
this.customerHandleRate = customerHandleRate;
|
||||
this.customerHandleRateChange = customerHandleRateChange;
|
||||
this.premiumPerCustomer = premiumPerCustomer;
|
||||
this.premiumPerCustomerChange = premiumPerCustomerChange;
|
||||
}
|
||||
|
||||
public int getMotoInsuranceCustomerCount()
|
||||
{
|
||||
return motoInsuranceCustomerCount;
|
||||
}
|
||||
|
||||
public void setMotoInsuranceCustomerCount( int motoInsuranceCustomerCount )
|
||||
{
|
||||
this.motoInsuranceCustomerCount = motoInsuranceCustomerCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "BIDepartmentAttachingRateRecord [departmentName=" + departmentName
|
||||
+ ", departmentObject=" + departmentObject + ", objectGap=" + objectGap
|
||||
+ ", motoPremium=" + motoPremium + ", motoPremiumProPortion="
|
||||
+ motoPremiumProPortion + ", nomotoPremium=" + nomotoPremium + ", attachingRate="
|
||||
+ attachingRate + ", attachingRateChange=" + attachingRateChange
|
||||
+ ", motoInsuranceCustomerCount=" + motoInsuranceCustomerCount
|
||||
+ ", customerHandleRate=" + customerHandleRate + ", customerHandleRateChange="
|
||||
+ customerHandleRateChange + ", premiumPerCustomer=" + premiumPerCustomer
|
||||
+ ", premiumPerCustomerChange=" + premiumPerCustomerChange + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((departmentName == null) ? 0 : departmentName.hashCode());
|
||||
long temp;
|
||||
temp = Double.doubleToLongBits( departmentObject );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( objectGap );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( motoPremium );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( motoPremiumProPortion );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( nomotoPremium );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( attachingRate );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( attachingRateChange );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
result = prime * result + motoInsuranceCustomerCount;
|
||||
temp = Double.doubleToLongBits( customerHandleRate );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( customerHandleRateChange );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( premiumPerCustomer );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( premiumPerCustomerChange );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( obj == null )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
BIDepartmentAttachingRateRecord other = (BIDepartmentAttachingRateRecord) obj;
|
||||
if ( departmentName == null )
|
||||
{
|
||||
if ( other.departmentName != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !departmentName.equals( other.departmentName ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( departmentObject ) != Double
|
||||
.doubleToLongBits( other.departmentObject ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( objectGap ) != Double.doubleToLongBits( other.objectGap ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( motoPremium ) != Double
|
||||
.doubleToLongBits( other.motoPremium ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( motoPremiumProPortion ) != Double
|
||||
.doubleToLongBits( other.motoPremiumProPortion ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( nomotoPremium ) != Double
|
||||
.doubleToLongBits( other.nomotoPremium ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( attachingRate ) != Double
|
||||
.doubleToLongBits( other.attachingRate ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( attachingRateChange ) != Double
|
||||
.doubleToLongBits( other.attachingRateChange ) )
|
||||
return false;
|
||||
if ( motoInsuranceCustomerCount != other.motoInsuranceCustomerCount )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( customerHandleRate ) != Double
|
||||
.doubleToLongBits( other.customerHandleRate ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( customerHandleRateChange ) != Double
|
||||
.doubleToLongBits( other.customerHandleRateChange ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( premiumPerCustomer ) != Double
|
||||
.doubleToLongBits( other.premiumPerCustomer ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( premiumPerCustomerChange ) != Double
|
||||
.doubleToLongBits( other.premiumPerCustomerChange ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public String getDepartmentName()
|
||||
{
|
||||
return departmentName;
|
||||
}
|
||||
|
||||
public void setDepartmentName( String departmentName )
|
||||
{
|
||||
this.departmentName = departmentName;
|
||||
}
|
||||
|
||||
public double getDepartmentObject()
|
||||
{
|
||||
return departmentObject;
|
||||
}
|
||||
|
||||
public void setDepartmentObject( double departmentObject )
|
||||
{
|
||||
this.departmentObject = departmentObject;
|
||||
}
|
||||
|
||||
public double getObjectGap()
|
||||
{
|
||||
return objectGap;
|
||||
}
|
||||
|
||||
public void setObjectGap( double objectGap )
|
||||
{
|
||||
this.objectGap = objectGap;
|
||||
}
|
||||
|
||||
public double getMotoPremium()
|
||||
{
|
||||
return motoPremium;
|
||||
}
|
||||
|
||||
public void setMotoPremium( double motoPremium )
|
||||
{
|
||||
this.motoPremium = motoPremium;
|
||||
}
|
||||
|
||||
public double getMotoPremiumProPortion()
|
||||
{
|
||||
return motoPremiumProPortion;
|
||||
}
|
||||
|
||||
public void setMotoPremiumProPortion( double motoPremiumProPortion )
|
||||
{
|
||||
this.motoPremiumProPortion = motoPremiumProPortion;
|
||||
}
|
||||
|
||||
public double getNomotoPremium()
|
||||
{
|
||||
return nomotoPremium;
|
||||
}
|
||||
|
||||
public void setNomotoPremium( double nomotoPremium )
|
||||
{
|
||||
this.nomotoPremium = nomotoPremium;
|
||||
}
|
||||
|
||||
public double getAttachingRate()
|
||||
{
|
||||
return attachingRate;
|
||||
}
|
||||
|
||||
public void setAttachingRate( double attachingRate )
|
||||
{
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
public double getAttachingRateChange()
|
||||
{
|
||||
return attachingRateChange;
|
||||
}
|
||||
|
||||
public void setAttachingRateChange( double attachingRateChange )
|
||||
{
|
||||
this.attachingRateChange = attachingRateChange;
|
||||
}
|
||||
|
||||
public double getCustomerHandleRate()
|
||||
{
|
||||
return customerHandleRate;
|
||||
}
|
||||
|
||||
public void setCustomerHandleRate( double customerHandleRate )
|
||||
{
|
||||
this.customerHandleRate = customerHandleRate;
|
||||
}
|
||||
|
||||
public double getCustomerHandleRateChange()
|
||||
{
|
||||
return customerHandleRateChange;
|
||||
}
|
||||
|
||||
public void setCustomerHandleRateChange( double customerHandleRateChange )
|
||||
{
|
||||
this.customerHandleRateChange = customerHandleRateChange;
|
||||
}
|
||||
|
||||
public double getPremiumPerCustomer()
|
||||
{
|
||||
return premiumPerCustomer;
|
||||
}
|
||||
|
||||
public void setPremiumPerCustomer( double premiumPerCustomer )
|
||||
{
|
||||
this.premiumPerCustomer = premiumPerCustomer;
|
||||
}
|
||||
|
||||
public double getPremiumPerCustomerChange()
|
||||
{
|
||||
return premiumPerCustomerChange;
|
||||
}
|
||||
|
||||
public void setPremiumPerCustomerChange( double premiumPerCustomerChange )
|
||||
{
|
||||
this.premiumPerCustomerChange = premiumPerCustomerChange;
|
||||
}
|
||||
}
|
@@ -0,0 +1,215 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-24 11:06:29
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentRenewalRateRecord.java
|
||||
* @Description: BI机构当月个车续保率跟踪表记录对象
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.mybatis.pojo;
|
||||
|
||||
public class BIDepartmentRenewalRateRecord
|
||||
{
|
||||
private String 责任部门;
|
||||
private double 机构目标值;
|
||||
private int 到期数全月;
|
||||
private double 序时到期数占比;
|
||||
private double 个车续保率序时;
|
||||
private double 个车续保率全月;
|
||||
private double 环比昨日;
|
||||
private double 环比上月;
|
||||
private int 平均提前签单天数;
|
||||
private double 环比;
|
||||
|
||||
public BIDepartmentRenewalRateRecord()
|
||||
{}
|
||||
|
||||
public BIDepartmentRenewalRateRecord( String 责任部门, double 机构目标值, int 到期数全月, double 序时到期数占比,
|
||||
double 个车续保率序时, double 个车续保率全月, double 环比昨日, double 环比上月, int 平均提前签单天数, double 环比 )
|
||||
{
|
||||
this.责任部门 = 责任部门;
|
||||
this.机构目标值 = 机构目标值;
|
||||
this.到期数全月 = 到期数全月;
|
||||
this.序时到期数占比 = 序时到期数占比;
|
||||
this.个车续保率序时 = 个车续保率序时;
|
||||
this.个车续保率全月 = 个车续保率全月;
|
||||
this.环比昨日 = 环比昨日;
|
||||
this.环比上月 = 环比上月;
|
||||
this.平均提前签单天数 = 平均提前签单天数;
|
||||
this.环比 = 环比;
|
||||
}
|
||||
|
||||
public String get责任部门()
|
||||
{
|
||||
return 责任部门;
|
||||
}
|
||||
|
||||
public void set责任部门( String 责任部门 )
|
||||
{
|
||||
this.责任部门 = 责任部门;
|
||||
}
|
||||
|
||||
public double get机构目标值()
|
||||
{
|
||||
return 机构目标值;
|
||||
}
|
||||
|
||||
public void set机构目标值( double 机构目标值 )
|
||||
{
|
||||
this.机构目标值 = 机构目标值;
|
||||
}
|
||||
|
||||
public int get到期数全月()
|
||||
{
|
||||
return 到期数全月;
|
||||
}
|
||||
|
||||
public void set到期数全月( int 到期数全月 )
|
||||
{
|
||||
this.到期数全月 = 到期数全月;
|
||||
}
|
||||
|
||||
public double get序时到期数占比()
|
||||
{
|
||||
return 序时到期数占比;
|
||||
}
|
||||
|
||||
public void set序时到期数占比( double 序时到期数占比 )
|
||||
{
|
||||
this.序时到期数占比 = 序时到期数占比;
|
||||
}
|
||||
|
||||
public double get个车续保率序时()
|
||||
{
|
||||
return 个车续保率序时;
|
||||
}
|
||||
|
||||
public void set个车续保率序时( double 个车续保率序时 )
|
||||
{
|
||||
this.个车续保率序时 = 个车续保率序时;
|
||||
}
|
||||
|
||||
public double get个车续保率全月()
|
||||
{
|
||||
return 个车续保率全月;
|
||||
}
|
||||
|
||||
public void set个车续保率全月( double 个车续保率全月 )
|
||||
{
|
||||
this.个车续保率全月 = 个车续保率全月;
|
||||
}
|
||||
|
||||
public double get环比昨日()
|
||||
{
|
||||
return 环比昨日;
|
||||
}
|
||||
|
||||
public void set环比昨日( double 环比昨日 )
|
||||
{
|
||||
this.环比昨日 = 环比昨日;
|
||||
}
|
||||
|
||||
public double get环比上月()
|
||||
{
|
||||
return 环比上月;
|
||||
}
|
||||
|
||||
public void set环比上月( double 环比上月 )
|
||||
{
|
||||
this.环比上月 = 环比上月;
|
||||
}
|
||||
|
||||
public int get平均提前签单天数()
|
||||
{
|
||||
return 平均提前签单天数;
|
||||
}
|
||||
|
||||
public void set平均提前签单天数( int 平均提前签单天数 )
|
||||
{
|
||||
this.平均提前签单天数 = 平均提前签单天数;
|
||||
}
|
||||
|
||||
public double get环比()
|
||||
{
|
||||
return 环比;
|
||||
}
|
||||
|
||||
public void set环比( double 环比 )
|
||||
{
|
||||
this.环比 = 环比;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((责任部门 == null) ? 0 : 责任部门.hashCode());
|
||||
long temp;
|
||||
temp = Double.doubleToLongBits( 机构目标值 );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
result = prime * result + 到期数全月;
|
||||
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));
|
||||
temp = Double.doubleToLongBits( 环比昨日 );
|
||||
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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( obj == null )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
BIDepartmentRenewalRateRecord other = (BIDepartmentRenewalRateRecord) obj;
|
||||
if ( 责任部门 == null )
|
||||
{
|
||||
if ( other.责任部门 != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !责任部门.equals( other.责任部门 ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( 机构目标值 ) != Double.doubleToLongBits( other.机构目标值 ) )
|
||||
return false;
|
||||
if ( 到期数全月 != other.到期数全月 )
|
||||
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;
|
||||
if ( Double.doubleToLongBits( 环比昨日 ) != Double.doubleToLongBits( other.环比昨日 ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( 环比上月 ) != Double.doubleToLongBits( other.环比上月 ) )
|
||||
return false;
|
||||
if ( 平均提前签单天数 != other.平均提前签单天数 )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( 环比 ) != Double.doubleToLongBits( other.环比 ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "BIDepartmentRenewalRateRecord [责任部门=" + 责任部门 + ", 机构目标值=" + 机构目标值 + ", 到期数全月="
|
||||
+ 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时 + ", 个车续保率全月=" + 个车续保率全月
|
||||
+ ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + ", 平均提前签单天数=" + 平均提前签单天数 + ", 环比=" + 环比
|
||||
+ "]";
|
||||
}
|
||||
}
|
@@ -0,0 +1,287 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-08 14:45:13
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BITelsalerAttachingRateRecord.java
|
||||
* @Description: 用于存放BI导出每日电销坐席车险非车险保费和车非渗透率数据.
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.mybatis.pojo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class BITelsalerAttachingRateRecord
|
||||
{
|
||||
// 部门
|
||||
@JsonProperty( "departmentName" )
|
||||
private String departmentName;
|
||||
|
||||
// 坐席名称
|
||||
@JsonProperty( "telsalerName" )
|
||||
private String telsalerName;
|
||||
|
||||
// 车险保费
|
||||
@JsonProperty( "motoPremium" )
|
||||
private double motoPremium;
|
||||
|
||||
// 非车险保费
|
||||
@JsonProperty( "nomotoPremium" )
|
||||
private double nomotoPremium;
|
||||
|
||||
// 车险保费占比
|
||||
@JsonProperty( "motoPremiumProportion" )
|
||||
private double motoPremiumProportion;
|
||||
|
||||
// 渗透率
|
||||
@JsonProperty( "attachingRate" )
|
||||
private double attachingRate;
|
||||
|
||||
// 渗透率环比上月
|
||||
@JsonProperty( "attachingRateChange" )
|
||||
private double attachingRateChange;
|
||||
|
||||
// 当月客户渗透率
|
||||
@JsonProperty( "customerHandleRate" )
|
||||
private double customerHandleRate;
|
||||
|
||||
// 客户渗透率环比上月
|
||||
@JsonProperty( "customerHandleRateChange" )
|
||||
private double customerHandleRateChange;
|
||||
|
||||
// 当月车非客均保费
|
||||
@JsonProperty( "noMotoPremiumPerCustomer" )
|
||||
private double noMotoPremiumPerCustomer;
|
||||
|
||||
// 客均保费环比上月
|
||||
@JsonProperty( "noMotoPremiumPerCustomerChange" )
|
||||
private double noMotoPremiumPerCustomerChange;
|
||||
|
||||
public BITelsalerAttachingRateRecord( String departmentName,
|
||||
String telsalerName, double motoPremium, double nomotoPremium,
|
||||
double motoPremiumProportion, double attachingRate, double attachingRateChange,
|
||||
double customerHandleRate, double customerHandleRateChange,
|
||||
double noMotoPremiumPerCustomer, double noMotoPremiumPerCustomerChange )
|
||||
{
|
||||
this.departmentName = departmentName;
|
||||
this.telsalerName = telsalerName;
|
||||
this.motoPremium = motoPremium;
|
||||
this.nomotoPremium = nomotoPremium;
|
||||
this.motoPremiumProportion = motoPremiumProportion;
|
||||
this.attachingRate = attachingRate;
|
||||
this.attachingRateChange = attachingRateChange;
|
||||
this.customerHandleRate = customerHandleRate;
|
||||
this.customerHandleRateChange = customerHandleRateChange;
|
||||
this.noMotoPremiumPerCustomer = noMotoPremiumPerCustomer;
|
||||
this.noMotoPremiumPerCustomerChange = noMotoPremiumPerCustomerChange;
|
||||
}
|
||||
|
||||
public BITelsalerAttachingRateRecord()
|
||||
{}
|
||||
|
||||
public double getCustomerHandleRate()
|
||||
{
|
||||
return customerHandleRate;
|
||||
}
|
||||
|
||||
public void setCustomerHandleRate( double customerHandleRate )
|
||||
{
|
||||
this.customerHandleRate = customerHandleRate;
|
||||
}
|
||||
|
||||
public double getCustomerHandleRateChange()
|
||||
{
|
||||
return customerHandleRateChange;
|
||||
}
|
||||
|
||||
public void setCustomerHandleRateChange( double customerHandleRateChange )
|
||||
{
|
||||
this.customerHandleRateChange = customerHandleRateChange;
|
||||
}
|
||||
|
||||
public double getNoMotoPremiumPerCustomer()
|
||||
{
|
||||
return noMotoPremiumPerCustomer;
|
||||
}
|
||||
|
||||
public void setNoMotoPremiumPerCustomer( double noMotoPremiumPerCustomer )
|
||||
{
|
||||
this.noMotoPremiumPerCustomer = noMotoPremiumPerCustomer;
|
||||
}
|
||||
|
||||
public double getNoMotoPremiumPerCustomerChange()
|
||||
{
|
||||
return noMotoPremiumPerCustomerChange;
|
||||
}
|
||||
|
||||
public void setNoMotoPremiumPerCustomerChange( double noMotoPremiumPerCustomerChange )
|
||||
{
|
||||
this.noMotoPremiumPerCustomerChange = noMotoPremiumPerCustomerChange;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "BITelsalerAttachingRateRecord [departmentName=" + departmentName + ", summaryDate="
|
||||
+ ", telsalerName=" + telsalerName + ", motoPremium=" + motoPremium
|
||||
+ ", nomotoPremium=" + nomotoPremium + ", motoPremiumProportion="
|
||||
+ motoPremiumProportion + ", attachingRate=" + attachingRate
|
||||
+ ", attachingRateChange=" + attachingRateChange + ", customerHandleRate="
|
||||
+ customerHandleRate + ", customerHandleRateChange=" + customerHandleRateChange
|
||||
+ ", noMotoPremiumPerCustomer=" + noMotoPremiumPerCustomer
|
||||
+ ", noMotoPremiumPerCustomerChange=" + noMotoPremiumPerCustomerChange + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((departmentName == null) ? 0 : departmentName.hashCode());
|
||||
result = prime * result + ((telsalerName == null) ? 0 : telsalerName.hashCode());
|
||||
long temp;
|
||||
temp = Double.doubleToLongBits( motoPremium );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( nomotoPremium );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( motoPremiumProportion );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( attachingRate );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( attachingRateChange );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( customerHandleRate );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( customerHandleRateChange );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( noMotoPremiumPerCustomer );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits( noMotoPremiumPerCustomerChange );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( obj == null )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
BITelsalerAttachingRateRecord other = (BITelsalerAttachingRateRecord) obj;
|
||||
if ( departmentName == null )
|
||||
{
|
||||
if ( other.departmentName != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !departmentName.equals( other.departmentName ) )
|
||||
return false;
|
||||
if ( telsalerName == null )
|
||||
{
|
||||
if ( other.telsalerName != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !telsalerName.equals( other.telsalerName ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( motoPremium ) != Double
|
||||
.doubleToLongBits( other.motoPremium ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( nomotoPremium ) != Double
|
||||
.doubleToLongBits( other.nomotoPremium ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( motoPremiumProportion ) != Double
|
||||
.doubleToLongBits( other.motoPremiumProportion ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( attachingRate ) != Double
|
||||
.doubleToLongBits( other.attachingRate ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( attachingRateChange ) != Double
|
||||
.doubleToLongBits( other.attachingRateChange ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( customerHandleRate ) != Double
|
||||
.doubleToLongBits( other.customerHandleRate ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( customerHandleRateChange ) != Double
|
||||
.doubleToLongBits( other.customerHandleRateChange ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( noMotoPremiumPerCustomer ) != Double
|
||||
.doubleToLongBits( other.noMotoPremiumPerCustomer ) )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( noMotoPremiumPerCustomerChange ) != Double
|
||||
.doubleToLongBits( other.noMotoPremiumPerCustomerChange ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public String getTelsalerName()
|
||||
{
|
||||
return telsalerName;
|
||||
}
|
||||
|
||||
public void setTelsalerName( String telsalerName )
|
||||
{
|
||||
this.telsalerName = telsalerName;
|
||||
}
|
||||
|
||||
public double getMotoPremium()
|
||||
{
|
||||
return motoPremium;
|
||||
}
|
||||
|
||||
public void setMotoPremium( double motoPremium )
|
||||
{
|
||||
this.motoPremium = motoPremium;
|
||||
}
|
||||
|
||||
public double getNomotoPremium()
|
||||
{
|
||||
return nomotoPremium;
|
||||
}
|
||||
|
||||
public void setNomotoPremium( double nomotoPremium )
|
||||
{
|
||||
this.nomotoPremium = nomotoPremium;
|
||||
}
|
||||
|
||||
public double getMotoPremiumProportion()
|
||||
{
|
||||
return motoPremiumProportion;
|
||||
}
|
||||
|
||||
public void setMotoPremiumProportion( double motoPremiumProportion )
|
||||
{
|
||||
this.motoPremiumProportion = motoPremiumProportion;
|
||||
}
|
||||
|
||||
public double getAttachingRate()
|
||||
{
|
||||
return attachingRate;
|
||||
}
|
||||
|
||||
public void setAttachingRate( double attachingRate )
|
||||
{
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
public double getAttachingRateChange()
|
||||
{
|
||||
return attachingRateChange;
|
||||
}
|
||||
|
||||
public void setAttachingRateChange( double attachingRateChange )
|
||||
{
|
||||
this.attachingRateChange = attachingRateChange;
|
||||
}
|
||||
|
||||
public String getDepartmentName()
|
||||
{
|
||||
return departmentName;
|
||||
}
|
||||
|
||||
public void setDepartmentName( String departmentName )
|
||||
{
|
||||
this.departmentName = departmentName;
|
||||
}
|
||||
}
|
@@ -0,0 +1,236 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @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文件行记录。
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.mybatis.pojo;
|
||||
|
||||
public class BITelsalerRenewalRateRecord
|
||||
{
|
||||
private String 责任部门;
|
||||
private String 责任人;
|
||||
private double 机构目标值;
|
||||
private double 到期数全月;
|
||||
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 环比 )
|
||||
{
|
||||
this.责任部门 = 责任部门;
|
||||
this.责任人 = 责任人;
|
||||
this.机构目标值 = 机构目标值;
|
||||
this.到期数全月 = 到期数全月;
|
||||
this.序时到期数占比 = 序时到期数占比;
|
||||
this.个车续保率序时 = 个车续保率序时;
|
||||
this.个车续保率全月 = 个车续保率全月;
|
||||
this.环比昨日 = 环比昨日;
|
||||
this.环比上月 = 环比上月;
|
||||
this.平均提前签单天数 = 平均提前签单天数;
|
||||
this.环比 = 环比;
|
||||
}
|
||||
|
||||
public double get平均提前签单天数()
|
||||
{
|
||||
return 平均提前签单天数;
|
||||
}
|
||||
|
||||
public void set平均提前签单天数( double 平均提前签单天数 )
|
||||
{
|
||||
this.平均提前签单天数 = 平均提前签单天数;
|
||||
}
|
||||
|
||||
public double get环比()
|
||||
{
|
||||
return 环比;
|
||||
}
|
||||
|
||||
public void set环比( double 环比 )
|
||||
{
|
||||
this.环比 = 环比;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public String get责任部门()
|
||||
{
|
||||
return 责任部门;
|
||||
}
|
||||
|
||||
public void set责任部门( String 责任部门 )
|
||||
{
|
||||
this.责任部门 = 责任部门;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((责任部门 == null) ? 0 : 责任部门.hashCode());
|
||||
result = prime * result + ((责任人 == null) ? 0 : 责任人.hashCode());
|
||||
long temp;
|
||||
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));
|
||||
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));
|
||||
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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( obj == null )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
BITelsalerRenewalRateRecord other = (BITelsalerRenewalRateRecord) 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 ( Double.doubleToLongBits( 机构目标值 ) != Double.doubleToLongBits( other.机构目标值 ) )
|
||||
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;
|
||||
if ( Double.doubleToLongBits( 个车续保率全月 ) != Double.doubleToLongBits( other.个车续保率全月 ) )
|
||||
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;
|
||||
if ( Double.doubleToLongBits( 环比 ) != Double.doubleToLongBits( other.环比 ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "BITelsalerRenewalRateRecord [责任部门=" + 责任部门 + ", 责任人=" + 责任人 + ", 机构目标值=" + 机构目标值
|
||||
+ ", 到期数全月=" + 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时
|
||||
+ ", 个车续保率全月=" + 个车续保率全月 + ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + ", 平均提前签单天数="
|
||||
+ 平均提前签单天数 + ", 环比=" + 环比 + "]";
|
||||
}
|
||||
|
||||
public String get责任人()
|
||||
{
|
||||
return 责任人;
|
||||
}
|
||||
|
||||
public void set责任人( String 责任人 )
|
||||
{
|
||||
this.责任人 = 责任人;
|
||||
}
|
||||
|
||||
public double get机构目标值()
|
||||
{
|
||||
return 机构目标值;
|
||||
}
|
||||
|
||||
public void set机构目标值( double 机构目标值 )
|
||||
{
|
||||
this.机构目标值 = 机构目标值;
|
||||
}
|
||||
|
||||
public double get到期数全月()
|
||||
{
|
||||
return 到期数全月;
|
||||
}
|
||||
|
||||
public void set到期数全月( double 到期数全月 )
|
||||
{
|
||||
this.到期数全月 = 到期数全月;
|
||||
}
|
||||
|
||||
public double get序时到期数占比()
|
||||
{
|
||||
return 序时到期数占比;
|
||||
}
|
||||
public void set序时到期数占比( double 序时到期数占比 )
|
||||
{
|
||||
this.序时到期数占比 = 序时到期数占比;
|
||||
}
|
||||
|
||||
public double get个车续保率序时()
|
||||
{
|
||||
return 个车续保率序时;
|
||||
}
|
||||
|
||||
public void set个车续保率序时( double 个车续保率序时 )
|
||||
{
|
||||
this.个车续保率序时 = 个车续保率序时;
|
||||
}
|
||||
|
||||
public double get个车续保率全月()
|
||||
{
|
||||
return 个车续保率全月;
|
||||
}
|
||||
|
||||
public void set个车续保率全月( double 个车续保率全月 )
|
||||
{
|
||||
this.个车续保率全月 = 个车续保率全月;
|
||||
}
|
||||
|
||||
public double get环比昨日()
|
||||
{
|
||||
return 环比昨日;
|
||||
}
|
||||
|
||||
public void set环比昨日( double 环比昨日 )
|
||||
{
|
||||
this.环比昨日 = 环比昨日;
|
||||
}
|
||||
|
||||
public double get环比上月()
|
||||
{
|
||||
return 环比上月;
|
||||
}
|
||||
|
||||
public void set环比上月( double 环比上月 )
|
||||
{
|
||||
this.环比上月 = 环比上月;
|
||||
}
|
||||
}
|
@@ -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.人员状态 = 人员状态;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,341 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-07 23:29:22
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/TelsalerFromJYGL.java
|
||||
* @Description: 经营管理系统中导出的电销坐席数据记录。
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.mybatis.pojo;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
/**
|
||||
* 经营管理系统中导出的电销坐席数据记录。
|
||||
* @author Kane
|
||||
*/
|
||||
public class TelsalerFromJYGL
|
||||
{
|
||||
// 名称
|
||||
@JsonProperty("telsalerName")
|
||||
private String telsalerName;
|
||||
|
||||
// 坐席工号
|
||||
@JsonProperty("telsalerCode")
|
||||
private String telsalerCode;
|
||||
|
||||
// 籍贯
|
||||
@JsonProperty("nativePlace")
|
||||
private String nativePlace;
|
||||
|
||||
// 参加工作时间
|
||||
@JsonProperty("startWorkingDate")
|
||||
private LocalDate startWorkingDate;
|
||||
|
||||
// 入司时间
|
||||
@JsonProperty("employmentDate")
|
||||
private LocalDate employmentDate;
|
||||
|
||||
// 业务类型
|
||||
@JsonProperty("business")
|
||||
private String business;
|
||||
|
||||
// 办公地省
|
||||
@JsonProperty("province")
|
||||
private String province;
|
||||
|
||||
// 办公地市
|
||||
@JsonProperty("city")
|
||||
private String city;
|
||||
|
||||
// 人员类别
|
||||
@JsonProperty("employmentType")
|
||||
private String employmentType;
|
||||
|
||||
// 现任岗位
|
||||
@JsonProperty("quarters")
|
||||
private String quarters;
|
||||
|
||||
// 现任职级
|
||||
@JsonProperty("rank")
|
||||
private String rank;
|
||||
|
||||
// 机构名称
|
||||
@JsonProperty("branchName")
|
||||
private String branchName;
|
||||
|
||||
// 职场分类
|
||||
@JsonProperty("workPlaceType")
|
||||
private String workPlaceType;
|
||||
|
||||
public TelsalerFromJYGL() {}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "TelsalerFromJYGL [telsalerName=" + telsalerName + ", telsalerCode=" + telsalerCode
|
||||
+ ", nativePlace=" + nativePlace + ", startWorkingDate=" + startWorkingDate
|
||||
+ ", employmentDate=" + employmentDate + ", business=" + business + ", province="
|
||||
+ province + ", city=" + city + ", employmentType=" + employmentType + ", quarters="
|
||||
+ quarters + ", rank=" + rank + ", branchName=" + branchName + ", workPlaceType="
|
||||
+ workPlaceType + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((telsalerName == null) ? 0 : telsalerName.hashCode());
|
||||
result = prime * result + ((telsalerCode == null) ? 0 : telsalerCode.hashCode());
|
||||
result = prime * result + ((nativePlace == null) ? 0 : nativePlace.hashCode());
|
||||
result = prime * result + ((startWorkingDate == null) ? 0 : startWorkingDate.hashCode());
|
||||
result = prime * result + ((employmentDate == null) ? 0 : employmentDate.hashCode());
|
||||
result = prime * result + ((business == null) ? 0 : business.hashCode());
|
||||
result = prime * result + ((province == null) ? 0 : province.hashCode());
|
||||
result = prime * result + ((city == null) ? 0 : city.hashCode());
|
||||
result = prime * result + ((employmentType == null) ? 0 : employmentType.hashCode());
|
||||
result = prime * result + ((quarters == null) ? 0 : quarters.hashCode());
|
||||
result = prime * result + ((rank == null) ? 0 : rank.hashCode());
|
||||
result = prime * result + ((branchName == null) ? 0 : branchName.hashCode());
|
||||
result = prime * result + ((workPlaceType == null) ? 0 : workPlaceType.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;
|
||||
TelsalerFromJYGL other = (TelsalerFromJYGL) obj;
|
||||
if ( telsalerName == null )
|
||||
{
|
||||
if ( other.telsalerName != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !telsalerName.equals( other.telsalerName ) )
|
||||
return false;
|
||||
if ( telsalerCode == null )
|
||||
{
|
||||
if ( other.telsalerCode != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !telsalerCode.equals( other.telsalerCode ) )
|
||||
return false;
|
||||
if ( nativePlace == null )
|
||||
{
|
||||
if ( other.nativePlace != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !nativePlace.equals( other.nativePlace ) )
|
||||
return false;
|
||||
if ( startWorkingDate == null )
|
||||
{
|
||||
if ( other.startWorkingDate != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !startWorkingDate.equals( other.startWorkingDate ) )
|
||||
return false;
|
||||
if ( employmentDate == null )
|
||||
{
|
||||
if ( other.employmentDate != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !employmentDate.equals( other.employmentDate ) )
|
||||
return false;
|
||||
if ( business == null )
|
||||
{
|
||||
if ( other.business != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !business.equals( other.business ) )
|
||||
return false;
|
||||
if ( province == null )
|
||||
{
|
||||
if ( other.province != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !province.equals( other.province ) )
|
||||
return false;
|
||||
if ( city == null )
|
||||
{
|
||||
if ( other.city != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !city.equals( other.city ) )
|
||||
return false;
|
||||
if ( employmentType == null )
|
||||
{
|
||||
if ( other.employmentType != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !employmentType.equals( other.employmentType ) )
|
||||
return false;
|
||||
if ( quarters == null )
|
||||
{
|
||||
if ( other.quarters != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !quarters.equals( other.quarters ) )
|
||||
return false;
|
||||
if ( rank == null )
|
||||
{
|
||||
if ( other.rank != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !rank.equals( other.rank ) )
|
||||
return false;
|
||||
if ( branchName == null )
|
||||
{
|
||||
if ( other.branchName != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !branchName.equals( other.branchName ) )
|
||||
return false;
|
||||
if ( workPlaceType == null )
|
||||
{
|
||||
if ( other.workPlaceType != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !workPlaceType.equals( other.workPlaceType ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public String getTelsalerName()
|
||||
{
|
||||
return telsalerName;
|
||||
}
|
||||
|
||||
public void setTelsalerName( String telsalerName )
|
||||
{
|
||||
this.telsalerName = telsalerName;
|
||||
}
|
||||
|
||||
public String getTelsalerCode()
|
||||
{
|
||||
return telsalerCode;
|
||||
}
|
||||
|
||||
public void setTelsalerCode( String telsalerCode )
|
||||
{
|
||||
this.telsalerCode = telsalerCode;
|
||||
}
|
||||
|
||||
public String getNativePlace()
|
||||
{
|
||||
return nativePlace;
|
||||
}
|
||||
|
||||
public void setNativePlace( String nativePlace )
|
||||
{
|
||||
this.nativePlace = nativePlace;
|
||||
}
|
||||
|
||||
public LocalDate getStartWorkingDate()
|
||||
{
|
||||
return startWorkingDate;
|
||||
}
|
||||
|
||||
public void setStartWorkingDate( LocalDate startWorkingDate )
|
||||
{
|
||||
this.startWorkingDate = startWorkingDate;
|
||||
}
|
||||
|
||||
public LocalDate getEmploymentDate()
|
||||
{
|
||||
return employmentDate;
|
||||
}
|
||||
|
||||
public void setEmploymentDate( LocalDate employmentDate )
|
||||
{
|
||||
this.employmentDate = employmentDate;
|
||||
}
|
||||
|
||||
public String getBusiness()
|
||||
{
|
||||
return business;
|
||||
}
|
||||
|
||||
public void setBusiness( String business )
|
||||
{
|
||||
this.business = business;
|
||||
}
|
||||
|
||||
public String getProvince()
|
||||
{
|
||||
return province;
|
||||
}
|
||||
|
||||
|
||||
public void setProvince( String province )
|
||||
{
|
||||
this.province = province;
|
||||
}
|
||||
|
||||
public String getCity()
|
||||
{
|
||||
return city;
|
||||
}
|
||||
|
||||
public void setCity( String city )
|
||||
{
|
||||
this.city = city;
|
||||
}
|
||||
|
||||
public String getEmploymentType()
|
||||
{
|
||||
return employmentType;
|
||||
}
|
||||
|
||||
public void setEmploymentType( String employmentType )
|
||||
{
|
||||
this.employmentType = employmentType;
|
||||
}
|
||||
|
||||
public String getQuarters()
|
||||
{
|
||||
return quarters;
|
||||
}
|
||||
|
||||
public void setQuarters( String quarters )
|
||||
{
|
||||
this.quarters = quarters;
|
||||
}
|
||||
|
||||
public String getRank()
|
||||
{
|
||||
return rank;
|
||||
}
|
||||
|
||||
public void setRank( String rank )
|
||||
{
|
||||
this.rank = rank;
|
||||
}
|
||||
|
||||
public String getBranchName()
|
||||
{
|
||||
return branchName;
|
||||
}
|
||||
|
||||
public void setBranchName( String branchName )
|
||||
{
|
||||
this.branchName = branchName;
|
||||
}
|
||||
|
||||
public String getWorkPlaceType()
|
||||
{
|
||||
return workPlaceType;
|
||||
}
|
||||
|
||||
public void setWorkPlaceType( String workPlaceType )
|
||||
{
|
||||
this.workPlaceType = workPlaceType;
|
||||
}
|
||||
}
|
@@ -13,13 +13,17 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import org.apache.ibatis.io.Resources;
|
||||
import org.apache.ibatis.session.ExecutorType;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
|
||||
|
||||
public class MybatisUtils
|
||||
{
|
||||
private static HashMap<String, SqlSession> SessionMap = new HashMap<>();
|
||||
private static HashMap<String, SqlSession> SessionMap = new HashMap<>( 5 );
|
||||
private static HashMap<String, SqlSession> SessionMapBatch = new HashMap<>( 5 );
|
||||
private static HashMap<String, SqlSessionFactory> SessionFactoryMap = new HashMap<>( 5 );
|
||||
private static HashMap<String, SqlSessionFactory> SessionFactoryMapBatch = new HashMap<>( 5 );
|
||||
private static String DEFAULT_CONFIGFILE = "mybatis/mybatis-config.xml";
|
||||
|
||||
/**
|
||||
@@ -31,43 +35,99 @@ public class MybatisUtils
|
||||
public static SqlSession getSqlSession( String configFile ) throws IOException
|
||||
{
|
||||
// 根据配置文件的路径,查找是否已经创建了对应的session
|
||||
SqlSession session = SessionMap.get( configFile );
|
||||
SqlSessionFactory factory = SessionFactoryMap.get( configFile );
|
||||
|
||||
// 找到就直接返回
|
||||
if ( session != null )
|
||||
if ( factory != null )
|
||||
{
|
||||
return session;
|
||||
return factory.openSession();
|
||||
}
|
||||
|
||||
// 没找到就创建一个
|
||||
InputStream configIS = Resources.getResourceAsStream( configFile );
|
||||
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS );
|
||||
session = factory.openSession();
|
||||
factory = new SqlSessionFactoryBuilder().build( configIS );
|
||||
SqlSession session = factory.openSession();
|
||||
|
||||
// 保存
|
||||
SessionMap.put( configFile, session );
|
||||
SessionFactoryMap.put( configFile, factory );
|
||||
|
||||
return session;
|
||||
}
|
||||
|
||||
public static SqlSession getSqlSessionBatch( String configFile ) throws IOException
|
||||
{
|
||||
// 根据配置文件的路径,查找是否已经创建了对应的session
|
||||
SqlSessionFactory factory = SessionFactoryMap.get( configFile );
|
||||
|
||||
// 找到就直接返回
|
||||
if ( factory != null )
|
||||
{
|
||||
return factory.openSession();
|
||||
}
|
||||
|
||||
// 没找到就创建一个
|
||||
InputStream configIS = Resources.getResourceAsStream( configFile );
|
||||
factory = new SqlSessionFactoryBuilder().build( configIS );
|
||||
SqlSession session = factory.openSession( ExecutorType.BATCH, false );
|
||||
|
||||
// 保存
|
||||
SessionFactoryMap.put( configFile, factory );
|
||||
|
||||
return session;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public static SqlSession getSqlSession() throws IOException
|
||||
{
|
||||
// 根据配置文件的路径,查找是否已经创建了对应的session
|
||||
SqlSession session = SessionMap.get( DEFAULT_CONFIGFILE );
|
||||
SqlSessionFactory factory = SessionFactoryMap.get( DEFAULT_CONFIGFILE );
|
||||
|
||||
// 找到就直接返回
|
||||
if ( session != null )
|
||||
if ( factory != null )
|
||||
{
|
||||
return session;
|
||||
return factory.openSession();
|
||||
}
|
||||
|
||||
// 没找到就创建一个
|
||||
InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE );
|
||||
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS );
|
||||
session = factory.openSession();
|
||||
factory = new SqlSessionFactoryBuilder().build( configIS );
|
||||
SqlSession session = factory.openSession();
|
||||
|
||||
// 保存
|
||||
SessionMap.put( DEFAULT_CONFIGFILE, session );
|
||||
SessionFactoryMap.put( DEFAULT_CONFIGFILE, factory );
|
||||
|
||||
return session;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取一个Batch模式的sqlsession,使用默认路径的mybatis-config.xml文件。
|
||||
* 先判断SessionMapBatch中是否有和配置文件对应的缓存的sqlsession对象,有就直接使用。
|
||||
* 没有就创建一个新的,然后放入SessionMapBatch中。
|
||||
* @return ExecutorType.BATCH模式的sqlsession实例对象
|
||||
* @throws IOException 读取配置文件错误时抛出IOException异常
|
||||
*/
|
||||
public static SqlSession getSqlSessionBatch() throws IOException
|
||||
{
|
||||
// 根据配置文件的路径,查找是否已经创建了对应的session
|
||||
SqlSessionFactory factory = SessionFactoryMap.get( DEFAULT_CONFIGFILE );
|
||||
|
||||
// 找到就直接返回
|
||||
if ( factory != null )
|
||||
{
|
||||
return factory.openSession();
|
||||
}
|
||||
|
||||
// 没找到就创建一个
|
||||
InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE );
|
||||
factory = new SqlSessionFactoryBuilder().build( configIS );
|
||||
SqlSession session = factory.openSession( ExecutorType.BATCH, false );
|
||||
|
||||
// 保存
|
||||
SessionFactoryMap.put( DEFAULT_CONFIGFILE, factory );
|
||||
|
||||
return session;
|
||||
}
|
||||
|
@@ -41,12 +41,12 @@ public final class TeleSalerInfo
|
||||
|
||||
/**
|
||||
* 查询坐席工号的static方法。
|
||||
* @param telsalerCode 坐席工号
|
||||
* @param telsaler 坐席工号
|
||||
* @return TeleSalerInfo对象。
|
||||
* @throws ClassNotFoundException
|
||||
* @throws SQLException
|
||||
*/
|
||||
public static TeleSalerInfo queryTeleSalerInfo( String telsalerCode )
|
||||
public static TeleSalerInfo queryTeleSalerInfo( String telsaler )
|
||||
throws ClassNotFoundException, SQLException
|
||||
{
|
||||
TeleSalerInfo info = null;
|
||||
@@ -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 = ? """;
|
||||
// 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,9 +97,10 @@ 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, telsalerCode );
|
||||
statement.setString( 1, telsaler );
|
||||
statement.setString( 2, telsaler );
|
||||
|
||||
result = statement.executeQuery();
|
||||
|
||||
|
@@ -25,52 +25,25 @@ public class CallerArchievement
|
||||
{
|
||||
private static Logger logger = LoggerFactory.getLogger( CallerArchievement.class );
|
||||
private static ArrayList<MensualArchievementItem> monthArray = null;
|
||||
/**
|
||||
* 构造函数
|
||||
* @param callerCode
|
||||
* @param totalArchievement
|
||||
* @param mensualArchievementList
|
||||
* @param insuranceRenewalRate
|
||||
* @param attachingRate
|
||||
*/
|
||||
public CallerArchievement( String callerCode, long totalArchievement,
|
||||
ArrayList<MensualArchievementItem> mensualArchievementList, String insuranceRenewalRate,
|
||||
String attachingRate)
|
||||
{
|
||||
this.callerCode = callerCode;
|
||||
this.totalArchievement = totalArchievement;
|
||||
this.mensualArchievementList = mensualArchievementList;
|
||||
this.insuranceRenewalRate = insuranceRenewalRate;
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
// 静态代码块
|
||||
static
|
||||
{
|
||||
// 初始化月份
|
||||
monthArray = new ArrayList<MensualArchievementItem>(12);
|
||||
monthArray = new ArrayList<MensualArchievementItem>( 12 );
|
||||
|
||||
monthArray.add(new MensualArchievementItem(1, "0"));
|
||||
monthArray.add(new MensualArchievementItem(2, "0"));
|
||||
monthArray.add(new MensualArchievementItem(3, "0"));
|
||||
monthArray.add(new MensualArchievementItem(4, "0"));
|
||||
monthArray.add(new MensualArchievementItem(5, "0"));
|
||||
monthArray.add(new MensualArchievementItem(6, "0"));
|
||||
monthArray.add(new MensualArchievementItem(7, "0"));
|
||||
monthArray.add(new MensualArchievementItem(8, "0"));
|
||||
monthArray.add(new MensualArchievementItem(9, "0"));
|
||||
monthArray.add(new MensualArchievementItem(10, "0"));
|
||||
monthArray.add(new MensualArchievementItem(11, "0"));
|
||||
monthArray.add(new MensualArchievementItem(12, "0"));
|
||||
}
|
||||
|
||||
public CallerArchievement()
|
||||
{
|
||||
this.totalArchievement = 0;
|
||||
this.mensualArchievementList = null;
|
||||
this.insuranceRenewalRate = "";
|
||||
this.attachingRate = "";
|
||||
this.callerCode = "";
|
||||
monthArray.add( new MensualArchievementItem( 1, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 2, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 3, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 4, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 5, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 6, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 7, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 8, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 9, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 10, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 11, "0" ) );
|
||||
monthArray.add( new MensualArchievementItem( 12, "0" ) );
|
||||
}
|
||||
|
||||
public static CallerArchievement getCallerArchievement( String callerCode ) throws IOException
|
||||
@@ -81,28 +54,36 @@ public class CallerArchievement
|
||||
ArchievementMapper mapper = session.getMapper( ArchievementMapper.class );
|
||||
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||
Integer totalArchievement = null;
|
||||
double motoPremiumPresentMonth = 0;
|
||||
String attachingRate = null;
|
||||
String renewalRate = null;
|
||||
ArrayList<MensualArchievementItem> mensual = null;
|
||||
|
||||
params.put( "a_caller_code", callerCode );
|
||||
|
||||
session.clearCache();
|
||||
mapper.getCallerArchievement( params );
|
||||
|
||||
// 总业绩
|
||||
if ( params.get( "a_total" ) instanceof Integer )
|
||||
{
|
||||
totalArchievement = (Integer) params.get( "a_total" );
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
totalArchievement = Integer.valueOf( 0 );
|
||||
}
|
||||
|
||||
// 当月车险保费
|
||||
motoPremiumPresentMonth = ((Double) params.get( "a_present_month" )).doubleValue();
|
||||
|
||||
|
||||
// 车非融合
|
||||
if ( params.get( "a_attaching_rate" ) instanceof String )
|
||||
{
|
||||
attachingRate = (String) params.get( "a_attaching_rate" );
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
attachingRate = "0.0";
|
||||
}
|
||||
@@ -111,18 +92,23 @@ public class CallerArchievement
|
||||
if ( params.get( "a_renewal_rate" ) instanceof String )
|
||||
{
|
||||
renewalRate = (String) params.get( "a_renewal_rate" );
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
renewalRate = "0.0";
|
||||
}
|
||||
|
||||
// 处理每月业绩
|
||||
ArrayList<MensualArchievementItem> mensualList = new ArrayList<>(CallerArchievement.monthArray);
|
||||
// ArrayList<MensualArchievementItem> mensualList = new
|
||||
// ArrayList<>(CallerArchievement.monthArray);
|
||||
// 数据库接收的每月业绩,要检查是否有缺漏
|
||||
mensual = (ArrayList<MensualArchievementItem>) params.get( "a_mensual_cur" );
|
||||
if ( params.get( "a_mensual_cur" ) instanceof ArrayList )
|
||||
{
|
||||
mensual = (ArrayList<MensualArchievementItem>) params.get( "a_mensual_cur" );
|
||||
}
|
||||
|
||||
archievement = new CallerArchievement( callerCode, totalArchievement, mensual, renewalRate,
|
||||
attachingRate );
|
||||
archievement = new CallerArchievement( callerCode, totalArchievement,
|
||||
motoPremiumPresentMonth, mensual, renewalRate, attachingRate );
|
||||
|
||||
return archievement;
|
||||
}
|
||||
@@ -137,6 +123,150 @@ public class CallerArchievement
|
||||
CallerArchievement.logger = logger;
|
||||
}
|
||||
|
||||
public static ArrayList<MensualArchievementItem> getMonthArray()
|
||||
{
|
||||
return monthArray;
|
||||
}
|
||||
|
||||
public static void setMonthArray( ArrayList<MensualArchievementItem> monthArray )
|
||||
{
|
||||
CallerArchievement.monthArray = monthArray;
|
||||
}
|
||||
|
||||
@JsonProperty( "caller_code" )
|
||||
private String callerCode;
|
||||
|
||||
@JsonProperty( "total_archievement" )
|
||||
private long totalArchievement; // 总业绩
|
||||
|
||||
@JsonProperty( "motoPremiumPresentMonth" )
|
||||
private double motoPremiumPresentMonth; // 当月车险保费
|
||||
|
||||
// 每月业绩列表
|
||||
// 要保证数据是按照月份排序。
|
||||
@JsonProperty( "mensual_archievement_list" )
|
||||
private ArrayList<MensualArchievementItem> mensualArchievementList;
|
||||
|
||||
@JsonProperty( "insurance_renewal_rate" )
|
||||
private String insuranceRenewalRate; // 续保率
|
||||
|
||||
@JsonProperty( "attaching_rate" )
|
||||
private String attachingRate; // 车非渗透率
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
* @param callerCode
|
||||
* @param totalArchievement
|
||||
* @param mensualArchievementList
|
||||
* @param insuranceRenewalRate
|
||||
* @param attachingRate
|
||||
*/
|
||||
public CallerArchievement( String callerCode, long totalArchievement,
|
||||
double motoPremiumPresentMonth,
|
||||
ArrayList<MensualArchievementItem> mensualArchievementList, String insuranceRenewalRate,
|
||||
String attachingRate )
|
||||
{
|
||||
this.callerCode = callerCode;
|
||||
this.totalArchievement = totalArchievement;
|
||||
this.motoPremiumPresentMonth = motoPremiumPresentMonth;
|
||||
this.mensualArchievementList = mensualArchievementList;
|
||||
this.insuranceRenewalRate = insuranceRenewalRate;
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
public CallerArchievement()
|
||||
{
|
||||
this.totalArchievement = 0;
|
||||
this.motoPremiumPresentMonth = 0;
|
||||
this.mensualArchievementList = null;
|
||||
this.insuranceRenewalRate = "";
|
||||
this.attachingRate = "";
|
||||
this.callerCode = "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "CallerArchievement [callerCode=" + callerCode + ", totalArchievement="
|
||||
+ totalArchievement + ", motoPremiumPresentMonth=" + motoPremiumPresentMonth
|
||||
+ ", mensualArchievementList=" + mensualArchievementList + ", insuranceRenewalRate="
|
||||
+ insuranceRenewalRate + ", attachingRate=" + attachingRate + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((callerCode == null) ? 0 : callerCode.hashCode());
|
||||
result = prime * result + (int) (totalArchievement ^ (totalArchievement >>> 32));
|
||||
long temp;
|
||||
temp = Double.doubleToLongBits( motoPremiumPresentMonth );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
result = prime * result
|
||||
+ ((mensualArchievementList == null) ? 0 : mensualArchievementList.hashCode());
|
||||
result = prime * result
|
||||
+ ((insuranceRenewalRate == null) ? 0 : insuranceRenewalRate.hashCode());
|
||||
result = prime * result + ((attachingRate == null) ? 0 : attachingRate.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;
|
||||
CallerArchievement other = (CallerArchievement) obj;
|
||||
if ( callerCode == null )
|
||||
{
|
||||
if ( other.callerCode != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !callerCode.equals( other.callerCode ) )
|
||||
return false;
|
||||
if ( totalArchievement != other.totalArchievement )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( motoPremiumPresentMonth ) != Double
|
||||
.doubleToLongBits( other.motoPremiumPresentMonth ) )
|
||||
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 ( attachingRate == null )
|
||||
{
|
||||
if ( other.attachingRate != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !attachingRate.equals( other.attachingRate ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public double getMotoPremiumPresentMonth()
|
||||
{
|
||||
return motoPremiumPresentMonth;
|
||||
}
|
||||
|
||||
public void setMotoPremiumPresentMonth( double motoPremiumPresentMonth )
|
||||
{
|
||||
this.motoPremiumPresentMonth = motoPremiumPresentMonth;
|
||||
}
|
||||
|
||||
public String getCallerCode()
|
||||
{
|
||||
return callerCode;
|
||||
@@ -187,21 +317,4 @@ public class CallerArchievement
|
||||
{
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
@JsonProperty( "caller_code" )
|
||||
private String callerCode;
|
||||
|
||||
@JsonProperty( "total_archievement" )
|
||||
private long totalArchievement; // 总业绩
|
||||
|
||||
// 每月业绩列表
|
||||
// 要保证数据是按照月份排序。
|
||||
@JsonProperty( "mensual_archievement_list" )
|
||||
private ArrayList<MensualArchievementItem> mensualArchievementList;
|
||||
|
||||
@JsonProperty( "insurance_renewal_rate" )
|
||||
private String insuranceRenewalRate; // 续保率
|
||||
|
||||
@JsonProperty( "attaching_rate" )
|
||||
private String attachingRate; // 车非渗透率
|
||||
}
|
||||
|
@@ -77,6 +77,7 @@ public class DepartmentArchievement
|
||||
|
||||
params.put("a_department_code", departmentCode);
|
||||
|
||||
session.clearCache();
|
||||
mapper.getDepartmentArchievement(params);
|
||||
|
||||
Integer totalArchievement = (Integer)params.get("a_total");
|
||||
|
@@ -0,0 +1,535 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-08 15:02:15
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIExcelData.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.time.LocalDate;
|
||||
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.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.utils.poi.MyPOIUtils;
|
||||
|
||||
/**
|
||||
* 坐席业绩相关的数据操作方法。
|
||||
*/
|
||||
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文件格式的函数。
|
||||
* @param sheet
|
||||
* @param caption 标题行文字
|
||||
* @param captionRowIndex 标题行索引
|
||||
* @param title 字段行文字数组
|
||||
* @param titleRowIndex 字段行索引
|
||||
* @return 返回判断结果
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从excel文件读取坐席的车非渗透率数据
|
||||
* @param filePath 文件路径
|
||||
* @param SheetIndex sheet索引
|
||||
* @param firstRow 数据起始行
|
||||
* @return 返回一个ArrayList保存的TelsalerAttachingRateRecord记录数组。
|
||||
* @throws IOException 打开excel文件错误时抛出。
|
||||
* @throws InvalidFormatException excel单元格格式错误时抛出
|
||||
*/
|
||||
public static ArrayList<BITelsalerAttachingRateRecord> importBITelsalerAttachingRateRecordFromXlsx(
|
||||
String filePath, int SheetIndex, int firstRow )
|
||||
throws IOException, InvalidFormatException
|
||||
{
|
||||
ArrayList<BITelsalerAttachingRateRecord> records = new ArrayList<>( 200 );
|
||||
|
||||
Workbook wb = null;
|
||||
Sheet sheet = null;
|
||||
String name = null;
|
||||
String departmentName = null;
|
||||
String departmentCurrentRow = null;
|
||||
|
||||
try
|
||||
{
|
||||
wb = WorkbookFactory.create( new File( filePath ) );
|
||||
sheet = wb.getSheetAt( SheetIndex );
|
||||
|
||||
// 先验证格式,不对就抛出错误
|
||||
if ( !checkExcelFormat( sheet, null, 0, TelsalerAttachingRateExcelTitle, 0 ) )
|
||||
{
|
||||
throw new InvalidFormatException( "Excel文件格式错误,请检查报表内容!" );
|
||||
}
|
||||
|
||||
for ( Row row : sheet )
|
||||
{
|
||||
|
||||
int rowIndex = row.getRowNum();
|
||||
|
||||
// 从数据行开始
|
||||
if ( row.getRowNum() < firstRow )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 部门
|
||||
try
|
||||
{
|
||||
departmentCurrentRow = MyPOIUtils.getStringCellValue( row, 0 );
|
||||
|
||||
// 因为是合并列,所以要判断一下是不是空的
|
||||
if ( !departmentCurrentRow.equals( "" )
|
||||
&& !departmentCurrentRow.equals( "合计" ) )
|
||||
{
|
||||
// 不是空的,也不是合计,说明是新部门的数据,更新部门名称
|
||||
departmentName = departmentCurrentRow;
|
||||
}
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
// cell是空的,说明还是上一行的部门
|
||||
}
|
||||
|
||||
// 坐席名称
|
||||
name = MyPOIUtils.getStringCellValue( row, 1 );
|
||||
|
||||
// 忽略坐席名称为空的行
|
||||
if ( name.equals( "全流程" ) || name.equals( "其他" ) || name.isEmpty() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// 车险保费
|
||||
double motoPremium = MyPOIUtils.getNumbericCellValue( row, 2 );
|
||||
// 非车险保费
|
||||
double nomotoPremium = MyPOIUtils.getNumbericCellValue( row, 4 );
|
||||
// 车险保费占比
|
||||
double motoPremiumProPortion = MyPOIUtils.getNumbericCellValue( row, 3 ) * 100;
|
||||
// 当月保费渗透率
|
||||
double attachingRate = MyPOIUtils.getNumbericCellValue( row, 5 ) * 100;
|
||||
// 保费渗透率环比上月
|
||||
double attachingRateChange = MyPOIUtils.getNumbericCellValue( row, 6 ) * 100;
|
||||
// 当月客户渗透率
|
||||
double customerHandleRateCell = MyPOIUtils.getNumbericCellValue( row, 7 ) * 100;
|
||||
// 客户渗透率环比上月
|
||||
double customerHandleRateChangeCell =
|
||||
MyPOIUtils.getNumbericCellValue( row, 8 ) * 100;
|
||||
// 当月车非客均保费
|
||||
double noMotoPremiumPerCustomerCell =
|
||||
MyPOIUtils.getNumbericCellValue( row, 9 ) * 100;
|
||||
// 客均保费环比上月
|
||||
double noMotoPremiumPerCustomerChangeCell =
|
||||
MyPOIUtils.getNumbericCellValue( row, 10 ) * 100;
|
||||
|
||||
BITelsalerAttachingRateRecord record = new BITelsalerAttachingRateRecord(
|
||||
departmentName, name, motoPremium, nomotoPremium,
|
||||
motoPremiumProPortion, attachingRate, attachingRateChange,
|
||||
customerHandleRateCell, customerHandleRateChangeCell,
|
||||
noMotoPremiumPerCustomerCell, noMotoPremiumPerCustomerChangeCell );
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从excel文件读取坐席的车非渗透率数据。
|
||||
* @param filePath
|
||||
* @param hasCaptionRow
|
||||
* @param summaryDate
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<BITelsalerRenewalRateRecord> importBITelsalerRenewalRateFromXlsx(
|
||||
String filePath, int sheetIndex, int firstRow )
|
||||
throws IOException, InvalidFormatException
|
||||
{
|
||||
ArrayList<BITelsalerRenewalRateRecord> records = new ArrayList<>( 200 );
|
||||
|
||||
Workbook wb = null;
|
||||
Sheet sheet = null;
|
||||
|
||||
try
|
||||
{
|
||||
wb = WorkbookFactory.create( new File( filePath ) );
|
||||
sheet = wb.getSheetAt( sheetIndex );
|
||||
int rowIndex = 0;
|
||||
String 责任部门 = null;
|
||||
String 当前行责任部门 = null;
|
||||
String 责任人 = null;
|
||||
|
||||
if ( !checkExcelFormat( sheet, null, 0, TelSalerRenewalRateExcelTitle, 0 ) )
|
||||
{
|
||||
throw new InvalidFormatException( "格式错误,请检查报表内容!" );
|
||||
}
|
||||
|
||||
for ( Row row : sheet )
|
||||
{
|
||||
rowIndex = row.getRowNum();
|
||||
|
||||
// 从数据行开始
|
||||
if ( row.getRowNum() < firstRow )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 处理责任部门列
|
||||
// 如果读取到的当前行责任部门不为空且与前一行责任部门不同,说明是另一个部门的数据
|
||||
try
|
||||
{
|
||||
当前行责任部门 = MyPOIUtils.getStringCellValue( row, 0 );
|
||||
|
||||
if ( !当前行责任部门.isEmpty() && !当前行责任部门.equals( 责任部门 ) )
|
||||
{
|
||||
责任部门 = 当前行责任部门;
|
||||
}
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
}
|
||||
|
||||
// 判断责任人,如果是空值,就跳过此行
|
||||
责任人 = MyPOIUtils.getStringCellValue( row, 1 );
|
||||
|
||||
if ( 责任人.isEmpty() == true )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
double 机构目标值 = MyPOIUtils.getNumbericCellValue( row, 2 ) * 100;
|
||||
double 到期数全月 = MyPOIUtils.getNumbericCellValue( row, 3 );
|
||||
double 序时到期数占比 = MyPOIUtils.getNumbericCellValue( row, 4 ) * 100;
|
||||
double 个车续保率序时 = MyPOIUtils.getNumbericCellValue( row, 5 ) * 100;
|
||||
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 );
|
||||
|
||||
BITelsalerRenewalRateRecord record = new BITelsalerRenewalRateRecord( 责任部门, 责任人,
|
||||
机构目标值, 到期数全月, 序时到期数占比, 个车续保率序时, 个车续保率全月, 环比昨日, 环比上月, 平均提前签单天数, 环比 );
|
||||
|
||||
records.add( record );
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
String message = "第" + String.valueOf( rowIndex ) + "行出现NullPointerException异常";
|
||||
|
||||
logger.error( message, error );
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( wb != null )
|
||||
{
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return records;
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取BI机构当月个车续保率跟踪表
|
||||
* @param filePath
|
||||
* @param sheetIndex
|
||||
* @param firstRow
|
||||
* @return
|
||||
* @throws IOException
|
||||
* @throws InvalidFormatException
|
||||
*/
|
||||
public static ArrayList<BIDepartmentAttachingRateRecord> importBIDepartmentAttachingRateRecordsFromXlsx(
|
||||
String filePath, int sheetIndex, int firstRow )
|
||||
throws IOException, InvalidFormatException
|
||||
{
|
||||
ArrayList<BIDepartmentAttachingRateRecord> records = new ArrayList<>( 5 );
|
||||
|
||||
Workbook wb = null;
|
||||
|
||||
try
|
||||
{
|
||||
wb = WorkbookFactory.create( new File( filePath ) );
|
||||
|
||||
Sheet sheet = wb.getSheetAt( sheetIndex );
|
||||
int rowIndex = 0;
|
||||
|
||||
if ( !checkExcelFormat( sheet, null, 0, DepartmentAttachingRateExcelTitle, 0 ) )
|
||||
{
|
||||
throw new InvalidFormatException( "Excel文件格式错误,请检查报表内容!" );
|
||||
}
|
||||
|
||||
for ( Row row : sheet )
|
||||
{
|
||||
rowIndex = row.getRowNum();
|
||||
|
||||
// 从数据行开始
|
||||
if ( row.getRowNum() < firstRow )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
String departmentName = MyPOIUtils.getStringCellValue( row, 0 );
|
||||
|
||||
if ( departmentName.isEmpty() || departmentName.equals( "合计" ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
double departmentObject = MyPOIUtils.getNumbericCellValue( row, 1 ) * 100;
|
||||
double objectGap = MyPOIUtils.getNumbericCellValue( row, 2 ) * 100;
|
||||
double motoPremium = MyPOIUtils.getNumbericCellValue( row, 3 );
|
||||
double motoPremiumProPortion = MyPOIUtils.getNumbericCellValue( row, 4 ) * 100;
|
||||
double nomotoPremium = MyPOIUtils.getNumbericCellValue( row, 5 );
|
||||
double attachingRate = MyPOIUtils.getNumbericCellValue( row, 6 ) * 100;
|
||||
double attachingRateChange = MyPOIUtils.getNumbericCellValue( row, 7 ) * 100;
|
||||
int motoInsuranceCustomerCount = (int)MyPOIUtils.getNumbericCellValue( row, 8 );
|
||||
double customerHandleRate = MyPOIUtils.getNumbericCellValue( row, 9 ) * 100;
|
||||
double customerHandleRateChange =
|
||||
MyPOIUtils.getNumbericCellValue( row, 10 ) * 100;
|
||||
double premiumPerCustomer = MyPOIUtils.getNumbericCellValue( row, 11 ) * 100;
|
||||
double premiumPerCustomerChange =
|
||||
MyPOIUtils.getNumbericCellValue( row, 12 ) * 100;
|
||||
|
||||
BIDepartmentAttachingRateRecord record = new BIDepartmentAttachingRateRecord(
|
||||
departmentName, departmentObject, objectGap, motoPremium,
|
||||
motoPremiumProPortion, nomotoPremium, attachingRate,
|
||||
attachingRateChange, motoInsuranceCustomerCount, customerHandleRate, customerHandleRateChange,
|
||||
premiumPerCustomer, premiumPerCustomerChange );
|
||||
|
||||
records.add( record );
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
String message = "第" + String.valueOf( rowIndex ) + "行出现NullPointerException异常";
|
||||
|
||||
logger.error( message, error );
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( wb != null )
|
||||
{
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
String message = "关闭" + filePath + "时出现异常!";
|
||||
|
||||
logger.error( message, error );
|
||||
}
|
||||
}
|
||||
|
||||
return records;
|
||||
}
|
||||
|
||||
public static ArrayList<BIDepartmentRenewalRateRecord> importBIDepartmentRenewalRateRecordsFromXlsx(
|
||||
String filePath, int sheetIndex, int firstRow )
|
||||
throws IOException, InvalidFormatException
|
||||
{
|
||||
ArrayList<BIDepartmentRenewalRateRecord> records = new ArrayList<>( 20 );
|
||||
|
||||
Workbook wb = null;
|
||||
|
||||
try
|
||||
{
|
||||
wb = WorkbookFactory.create( new File( filePath ) );
|
||||
|
||||
Sheet sheet = wb.getSheetAt( sheetIndex );
|
||||
int rowIndex = 0;
|
||||
|
||||
if ( !checkExcelFormat( sheet, null, 0, DepartmentRenewalRateExcelTitle, 0 ) )
|
||||
{
|
||||
throw new InvalidFormatException( "Excel文件格式错误,请检查报表内容!" );
|
||||
}
|
||||
|
||||
for ( Row row : sheet )
|
||||
{
|
||||
rowIndex = row.getRowNum();
|
||||
|
||||
if ( rowIndex < firstRow )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
String 责任部门 = MyPOIUtils.getStringCellValue( row, 0 );
|
||||
|
||||
// 部门为空或者是合计行,就跳过
|
||||
if ( 责任部门.isEmpty() || 责任部门.equals( "合计" ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
double 机构目标值 = MyPOIUtils.getNumbericCellValue( row, 1 ) * 100;
|
||||
int 到期数全月 = (int) MyPOIUtils.getNumbericCellValue( row, 2 );
|
||||
double 序时到期数占比 = MyPOIUtils.getNumbericCellValue( row, 3 ) * 100;
|
||||
double 个车续保率序时 = MyPOIUtils.getNumbericCellValue( row, 4 ) * 100;
|
||||
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;
|
||||
|
||||
BIDepartmentRenewalRateRecord record = new BIDepartmentRenewalRateRecord( 责任部门,
|
||||
机构目标值, 到期数全月, 序时到期数占比, 个车续保率序时, 个车续保率全月, 环比昨日, 环比上月, 平均提前签单天数, 环比 );
|
||||
|
||||
records.add( record );
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
String message = "第" + String.valueOf( rowIndex ) + "行出现NullPointerException异常";
|
||||
|
||||
logger.error( message, error );
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if ( wb != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
wb.close();
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return records;
|
||||
}
|
||||
}
|
@@ -0,0 +1,190 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-24 11:09:46
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportTWRTelsalerData.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.utils.data;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.ss.usermodel.WorkbookFactory;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import com.cpic.xim.mybatis.pojo.TWrTelsalerRecord;
|
||||
import com.cpic.xim.utils.poi.MyPOIUtils;
|
||||
|
||||
public class ImportTWRTelsalerData
|
||||
{
|
||||
private static Logger logger = LoggerFactory.getLogger( ImportTWRTelsalerData.class );
|
||||
private static String[] TwrTelsalerListExcelTitle = new String[]
|
||||
{ "人员姓名", "人员工号", "籍 贯", "参加工作时间", "入职日期", "入司日期", "业务类型", "办公地省", "办公地市", "人员类别", "现任岗位",
|
||||
"现任职级", "机构名称", "职场分类", "片区名称", "团队名称", "对口分公司", "展业地区", "招聘渠道", "渠道明细", "全日制最高学历",
|
||||
"学历类型", "用工性质名称", "合同种类", "合同类型", "合同性质", "合同签订次数", "合同生效日期", "合同到期日期", "人员属性", "保代员工号",
|
||||
"职场属性", "办公性质", "保代人员属性", "人员状态",};
|
||||
|
||||
public static void importTWrTelsalerDataFromExcel( String filePath, int sheetIndex,
|
||||
int firstRow ) throws IOException, InvalidFormatException
|
||||
{
|
||||
ArrayList<TWrTelsalerRecord> records = new ArrayList<>( 200 );
|
||||
|
||||
Workbook wb = null;
|
||||
Sheet sheet = null;
|
||||
|
||||
try
|
||||
{
|
||||
wb = WorkbookFactory.create( new File( filePath ) );
|
||||
sheet = wb.getSheetAt( sheetIndex );
|
||||
|
||||
// 先验证格式,不对就抛出错误
|
||||
if ( !checkExcelFormat( sheet, null, 0, TwrTelsalerListExcelTitle, 0 ) )
|
||||
{
|
||||
throw new InvalidFormatException( "Excel文件格式错误,请检查报表内容!" );
|
||||
}
|
||||
|
||||
for ( Row row : sheet )
|
||||
{
|
||||
int rowIndex = row.getRowNum();
|
||||
|
||||
// 从数据行开始
|
||||
if ( row.getRowNum() < firstRow )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
String 人员姓名 = MyPOIUtils.getStringCellValue( row, 0 );
|
||||
String 人员工号 = MyPOIUtils.getStringCellValue( row, 1 );
|
||||
String 籍贯 = MyPOIUtils.getStringCellValue( row, 2 );
|
||||
String 参加工作时间 = MyPOIUtils.getStringCellValue( row, 3 );
|
||||
String 入职日期 = MyPOIUtils.getStringCellValue( row, 4 );
|
||||
String 入司日期 = MyPOIUtils.getStringCellValue( row, 5 );
|
||||
String 业务类型 = MyPOIUtils.getStringCellValue( row, 6 );
|
||||
String 办公地省 = MyPOIUtils.getStringCellValue( row, 7 );
|
||||
String 办公地市 = MyPOIUtils.getStringCellValue( row, 8 );
|
||||
String 人员类别 = MyPOIUtils.getStringCellValue( row, 9 );
|
||||
String 现任岗位 = MyPOIUtils.getStringCellValue( row, 10 );
|
||||
String 现任职级 = MyPOIUtils.getStringCellValue( row, 11 );
|
||||
String 机构名称 = MyPOIUtils.getStringCellValue( row, 12 );
|
||||
String 职场分类 = MyPOIUtils.getStringCellValue( row, 13 );
|
||||
String 片区名称 = MyPOIUtils.getStringCellValue( row, 14 );
|
||||
String 团队名称 = MyPOIUtils.getStringCellValue( row, 15 );
|
||||
String 对口分公司 = MyPOIUtils.getStringCellValue( row, 16 );
|
||||
String 展业地区 = MyPOIUtils.getStringCellValue( row, 17 );
|
||||
String 招聘渠道 = MyPOIUtils.getStringCellValue( row, 18 );
|
||||
String 渠道明细 = MyPOIUtils.getStringCellValue( row, 19 );
|
||||
String 全日制最高学历 = MyPOIUtils.getStringCellValue( row, 20 );
|
||||
String 学历类型 = MyPOIUtils.getStringCellValue( row, 21 );
|
||||
String 用工性质名称 = MyPOIUtils.getStringCellValue( row, 22 );
|
||||
String 合同种类 = MyPOIUtils.getStringCellValue( row, 23 );
|
||||
String 合同类型 = MyPOIUtils.getStringCellValue( row, 24 );
|
||||
String 合同性质 = MyPOIUtils.getStringCellValue( row, 25 );
|
||||
int 合同签订次数 = (int)MyPOIUtils.getNumbericCellValue( row, 26 );
|
||||
String 合同生效日期 = MyPOIUtils.getStringCellValue( row, 27 );
|
||||
String 合同到期日期 = MyPOIUtils.getStringCellValue( row, 28 );
|
||||
String 人员属性 = MyPOIUtils.getStringCellValue( row, 29 );
|
||||
String 保代员工号 = MyPOIUtils.getStringCellValue( row, 30 );
|
||||
String 职场属性 = MyPOIUtils.getStringCellValue( row, 31 );
|
||||
String 办公性质 = MyPOIUtils.getStringCellValue( row, 32 );
|
||||
String 保代人员属性 = MyPOIUtils.getStringCellValue( row, 33 );
|
||||
String 人员状态 = MyPOIUtils.getStringCellValue( row, 34 );
|
||||
|
||||
TWrTelsalerRecord record = new TWrTelsalerRecord(人员姓名, 人员工号, 籍贯, 参加工作时间, 入职日期, 入司日期, 业务类型, 办公地省, 办公地市, 人员类别, 现任岗位, 现任职级, 机构名称, 职场分类, 片区名称, 团队名称, 对口分公司, 展业地区, 招聘渠道, 渠道明细, 全日制最高学历, 学历类型, 用工性质名称, 合同种类, 合同类型, 合同性质, 合同签订次数, 合同生效日期, 合同到期日期, 人员属性, 保代员工号, 职场属性, 办公性质, 保代人员属性, 人员状态);
|
||||
|
||||
records.add(record);
|
||||
}
|
||||
catch ( IllegalStateException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
catch ( NumberFormatException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
String message = "第" + String.valueOf( rowIndex ) + "行出现NullPointerException异常";
|
||||
logger.error( message, error );
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( wb != null )
|
||||
{
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean checkExcelFormat( Sheet sheet, String caption, int captionRowIndex,
|
||||
String[] title, int titleRowIndex )
|
||||
{
|
||||
boolean result = true;
|
||||
|
||||
Row captionRow = sheet.getRow( captionRowIndex );
|
||||
Row titleRow = sheet.getRow( titleRowIndex );
|
||||
|
||||
if ( caption != null && !caption.isEmpty() )
|
||||
{
|
||||
try
|
||||
{
|
||||
int captionCellNum = captionRow.getFirstCellNum();
|
||||
String captionString = MyPOIUtils.getStringCellValue( captionRow, captionCellNum );
|
||||
|
||||
if ( !caption.equals( captionString ) )
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ( title.length != 0 )
|
||||
{
|
||||
int cellIndex = 0;
|
||||
|
||||
try
|
||||
{
|
||||
for ( Cell cell : titleRow )
|
||||
{
|
||||
String cellString = MyPOIUtils.getStringCellValue( cell );
|
||||
|
||||
if ( !cellString.equals( title[cellIndex] ) )
|
||||
{
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
|
||||
cellIndex++;
|
||||
}
|
||||
}
|
||||
catch ( NullPointerException error )
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-07 23:17:13
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/TelsalerData.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.ss.usermodel.Workbook;
|
||||
import org.apache.poi.ss.usermodel.WorkbookFactory;
|
||||
import com.cpic.xim.mybatis.pojo.TelsalerFromJYGL;
|
||||
|
||||
public class TelsalerData
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @param filePath Xlsx文件路径。
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<TelsalerFromJYGL> importTelsalersFromXlsx( String filePath )
|
||||
{
|
||||
ArrayList<TelsalerFromJYGL> telsalers = new ArrayList<>();
|
||||
|
||||
Workbook wb = null;
|
||||
|
||||
try
|
||||
{
|
||||
wb = WorkbookFactory.create( new File( filePath ) );
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( wb != null )
|
||||
{
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return telsalers;
|
||||
}
|
||||
|
||||
public static int importTelsalers( ArrayList<TelsalerFromJYGL> telsalers )
|
||||
{
|
||||
int importedCount = 0;
|
||||
|
||||
return importedCount;
|
||||
}
|
||||
}
|
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-08 22:12:05
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/poi/MyPOIUtils.java
|
||||
* @Description: POI相关的工具
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
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;
|
||||
|
||||
public class MyPOIUtils
|
||||
{
|
||||
public static String getStringCellValue( Cell cell )
|
||||
{
|
||||
switch ( cell.getCellType())
|
||||
{
|
||||
case STRING:
|
||||
return cell.getStringCellValue();
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static String getStringCellValue( Row row, int columnIndex )
|
||||
{
|
||||
Cell cell = row.getCell( columnIndex, MissingCellPolicy.RETURN_NULL_AND_BLANK );
|
||||
|
||||
switch ( cell.getCellType())
|
||||
{
|
||||
case STRING:
|
||||
return cell.getStringCellValue();
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static double getNumbericCellValue( Cell cell )
|
||||
{
|
||||
double value = 0.0;
|
||||
|
||||
switch ( cell.getCellType())
|
||||
{
|
||||
case NUMERIC:
|
||||
value = cell.getNumericCellValue();
|
||||
break;
|
||||
default:
|
||||
value = 0.0;
|
||||
break;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
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 ( 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;
|
||||
break;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
@@ -2,7 +2,7 @@
|
||||
* @Author: Kane
|
||||
* @Date: 2023-04-05 22:34:36
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/QueryResult.java
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/QueryResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
@@ -11,36 +11,49 @@ package com.cpic.xim.web.controllers;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class QueryResponse {
|
||||
public class QueryResponse
|
||||
{
|
||||
@JsonProperty( "success" )
|
||||
private boolean success;
|
||||
|
||||
public QueryResponse(boolean success, String message) {
|
||||
@JsonProperty( "message" )
|
||||
private String message;
|
||||
|
||||
public QueryResponse( boolean success, String message )
|
||||
{
|
||||
this.success = success;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public QueryResponse() {
|
||||
public QueryResponse()
|
||||
{
|
||||
this.success = false;
|
||||
this.message = "";
|
||||
}
|
||||
|
||||
public boolean isSuccess() {
|
||||
public boolean isSuccess()
|
||||
{
|
||||
return success;
|
||||
}
|
||||
|
||||
public void setSuccess(boolean success) {
|
||||
public void setSuccess( boolean success )
|
||||
{
|
||||
this.success = success;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
public String getMessage()
|
||||
{
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
public void setMessage( String message )
|
||||
{
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + (success ? 1231 : 1237);
|
||||
@@ -49,26 +62,30 @@ public class QueryResponse {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) return true;
|
||||
if (obj == null) return false;
|
||||
if (getClass() != obj.getClass()) return false;
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( obj == null )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
QueryResponse other = (QueryResponse) obj;
|
||||
if (success != other.success) return false;
|
||||
if (message == null) {
|
||||
if (other.message != null) return false;
|
||||
} else if (!message.equals(other.message)) return false;
|
||||
if ( success != other.success )
|
||||
return false;
|
||||
if ( message == null )
|
||||
{
|
||||
if ( other.message != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !message.equals( other.message ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
public String toString()
|
||||
{
|
||||
return "QueryResult [success=" + success + ", message=" + message + "]";
|
||||
}
|
||||
|
||||
@JsonProperty("success")
|
||||
private boolean success;
|
||||
|
||||
@JsonProperty("message")
|
||||
private String message;
|
||||
}
|
||||
|
@@ -73,7 +73,7 @@ public class StaffInfoQueryController
|
||||
|
||||
try
|
||||
{
|
||||
saler = TeleSalerInfo.queryTeleSalerInfo( telSaler.getTelSalerCode() );
|
||||
saler = TeleSalerInfo.queryTeleSalerInfo( telSaler.getTelSaler() );
|
||||
|
||||
// 根据返回结果是否为 null,判断是否查询到坐席信息
|
||||
if ( saler != null )
|
||||
|
@@ -17,19 +17,19 @@ public class TelsalerQueryRequest
|
||||
|
||||
public TelsalerQueryRequest( String telSalerCode )
|
||||
{
|
||||
this.telSalerCode = telSalerCode;
|
||||
this.telSaler = telSalerCode;
|
||||
}
|
||||
|
||||
public String getTelSalerCode()
|
||||
public String getTelSaler()
|
||||
{
|
||||
return telSalerCode;
|
||||
return telSaler;
|
||||
}
|
||||
|
||||
public void setTelSalerCode( String telSalerCode )
|
||||
public void setTelSaler( String telSalerCode )
|
||||
{
|
||||
this.telSalerCode = telSalerCode;
|
||||
this.telSaler = telSalerCode;
|
||||
}
|
||||
|
||||
@JsonProperty("telsaler_code")
|
||||
private String telSalerCode;
|
||||
@JsonProperty("telsaler")
|
||||
private String telSaler;
|
||||
}
|
@@ -29,7 +29,7 @@ import com.cpic.xim.utils.ranking.CallerRankingList;
|
||||
import com.cpic.xim.web.controllers.archievement.RankingList.RankingListRequest;
|
||||
import com.cpic.xim.web.controllers.archievement.RankingList.RankingListResponse;
|
||||
import com.cpic.xim.web.controllers.archievement.caller.CallerArchievementQueryRequest;
|
||||
import com.cpic.xim.web.controllers.archievement.caller.CallerArchievementQueryResult;
|
||||
import com.cpic.xim.web.controllers.archievement.caller.CallerArchievementQueryResponse;
|
||||
import com.cpic.xim.web.controllers.archievement.department.DepartmentArchievementQueryRequest;
|
||||
import com.cpic.xim.web.controllers.archievement.department.DepartmentArchievementQueryResult;
|
||||
|
||||
@@ -71,10 +71,10 @@ public class ArchievementQueryController
|
||||
result.setTotalArchievement( departmentArch.getTotalArchievement() );
|
||||
result.setInsuranceRenewalRate( departmentArch.getInsuranceRenewalRate() );
|
||||
result.setAttachingRate( departmentArch.getAttachingRate() );
|
||||
result.addAdvanceRewardGainer( "沈群" );
|
||||
result.addLeadingRewardGainer( "王鸿津" );
|
||||
result.addLeadingRewardGainer( "林宗泽" );
|
||||
result.addBackwardStaff( "王炜" );
|
||||
// result.addAdvanceRewardGainer( "沈群" );
|
||||
// result.addLeadingRewardGainer( "王鸿津" );
|
||||
// result.addLeadingRewardGainer( "林宗泽" );
|
||||
// result.addBackwardStaff( "王炜" );
|
||||
result.setMensualArchievementList( departmentArch.getMensualArchievementList() );
|
||||
}
|
||||
catch ( IOException error )
|
||||
@@ -90,24 +90,24 @@ public class ArchievementQueryController
|
||||
|
||||
@ResponseBody
|
||||
@PostMapping( "/query_caller_archievement.do" )
|
||||
public CallerArchievementQueryResult queryCallerArchievement(
|
||||
public CallerArchievementQueryResponse queryCallerArchievement(
|
||||
@RequestBody CallerArchievementQueryRequest request )
|
||||
{
|
||||
CallerArchievementQueryResult result = null;
|
||||
CallerArchievementQueryResponse result = null;
|
||||
|
||||
try
|
||||
{
|
||||
CallerArchievement archievement =
|
||||
CallerArchievement.getCallerArchievement( request.getCallerCode() );
|
||||
|
||||
result = new CallerArchievementQueryResult( true, "查询成功", archievement.getCallerCode(),
|
||||
request.getCallName(), archievement.getTotalArchievement(),
|
||||
result = new CallerArchievementQueryResponse( true, "查询成功", archievement.getCallerCode(),
|
||||
request.getCallName(), archievement.getTotalArchievement(), archievement.getMotoPremiumPresentMonth(),
|
||||
archievement.getMensualArchievementList(),
|
||||
archievement.getInsuranceRenewalRate(), archievement.getAttachingRate() );
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
result = new CallerArchievementQueryResult(false, error.getMessage(), null, null, 0, null, null, null);
|
||||
result = new CallerArchievementQueryResponse(false, error.getMessage(), null, null, 0, 0, null, null, null);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@@ -0,0 +1,202 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-01 16:48:56
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/BIReportController.java
|
||||
* @Description: BI报表相关的controller
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.archievement.bi;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.exceptions.PersistenceException;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import com.cpic.xim.mybatis.mapper.QueryBIArchievementDataMapper;
|
||||
import com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
|
||||
import com.cpic.xim.mybatis.utils.MybatisUtils;
|
||||
|
||||
@Controller
|
||||
@RequestMapping( method = RequestMethod.POST, path = "/archievement" )
|
||||
public class BIReportController
|
||||
{
|
||||
private static Logger logger = LoggerFactory.getLogger( BIReportController.class );
|
||||
|
||||
@PostMapping( path = "/bi_telsaler_attachingrate.do" )
|
||||
@ResponseBody
|
||||
public QueryTelsalerAttachingRateReportResponse queryTelsalerAttachingRateRepor()
|
||||
{
|
||||
QueryTelsalerAttachingRateReportResponse response =
|
||||
new QueryTelsalerAttachingRateReportResponse();
|
||||
SqlSession session = null;
|
||||
QueryBIArchievementDataMapper mapper = null;
|
||||
|
||||
try
|
||||
{
|
||||
session = MybatisUtils.getSqlSession();
|
||||
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
|
||||
|
||||
session.clearCache();
|
||||
List<BITelsalerAttachingRateRecord> records =
|
||||
mapper.queryBITelsalerAttachingRate();
|
||||
|
||||
response.setSuccess( true );
|
||||
response.setMessage( "查询成功" );
|
||||
response.setRecords( records );
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
logger.error("查询BI坐席渗透率报表出现IOException异常,异常内容:", error);
|
||||
|
||||
response.setSuccess( false );
|
||||
response.setMessage( "查询失败,原因" + error.getMessage() );
|
||||
response.setRecords( null );
|
||||
}
|
||||
catch ( PersistenceException error )
|
||||
{
|
||||
logger.error("查询BI坐席渗透率报表出现PersistenceException异常,异常内容:", error);
|
||||
|
||||
response.setSuccess( false );
|
||||
response.setMessage( "查询失败,原因" + error.getMessage() );
|
||||
response.setRecords( null );
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
@PostMapping( path="/bi_telsaler_renewalrate.do" )
|
||||
@ResponseBody
|
||||
public QueryTelsalerRenewalRateReportResponse queryTelsalerRenewalRateReport()
|
||||
{
|
||||
QueryTelsalerRenewalRateReportResponse response = new QueryTelsalerRenewalRateReportResponse();
|
||||
SqlSession session = null;
|
||||
QueryBIArchievementDataMapper mapper = null;
|
||||
|
||||
try
|
||||
{
|
||||
session = MybatisUtils.getSqlSession();
|
||||
mapper = session.getMapper(QueryBIArchievementDataMapper.class);
|
||||
|
||||
session.clearCache();
|
||||
ArrayList<BITelsalerRenewalRateRecord> records = mapper.queryBITesalerRenewalRate();
|
||||
|
||||
response.setSuccess( true );
|
||||
response.setMessage("查询成功");
|
||||
response.setRecords(records);
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
logger.error("查询BI坐席续保率报表出现IOException异常,异常内容:", error);
|
||||
|
||||
response.setSuccess( false );
|
||||
response.setMessage( "查询失败,原因" + error.getMessage() );
|
||||
response.setRecords( null );
|
||||
}
|
||||
catch ( PersistenceException error )
|
||||
{
|
||||
logger.error("查询BI坐席续保率报表出现PersistenceException异常,异常内容:", error);
|
||||
|
||||
response.setSuccess( false );
|
||||
response.setMessage( "查询失败,原因" + error.getMessage() );
|
||||
response.setRecords( null );
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
@PostMapping( path = "/bi_department_attachingrate.do" )
|
||||
@ResponseBody
|
||||
public QueryDepartmentAttachingRateReportResponse queryDepartmentAttachingRateRepor()
|
||||
{
|
||||
QueryDepartmentAttachingRateReportResponse response =
|
||||
new QueryDepartmentAttachingRateReportResponse();
|
||||
SqlSession session = null;
|
||||
QueryBIArchievementDataMapper mapper = null;
|
||||
|
||||
try
|
||||
{
|
||||
session = MybatisUtils.getSqlSession();
|
||||
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
|
||||
|
||||
session.clearCache();
|
||||
ArrayList<BIDepartmentAttachingRateRecord> records =
|
||||
mapper.queryBIDepartmentAttachingRate();
|
||||
|
||||
response.setSuccess( true );
|
||||
response.setMessage( "查询成功" );
|
||||
response.setRecords( records );
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
logger.error("查询BI机构渗透率报表出现IOException异常,异常内容:", error);
|
||||
|
||||
response.setSuccess( false );
|
||||
response.setMessage( "查询失败,原因" + error.getMessage() );
|
||||
response.setRecords( null );
|
||||
}
|
||||
catch ( PersistenceException error )
|
||||
{
|
||||
logger.error("查询BI机构渗透率报表出现PersistenceException异常,异常内容:", error);
|
||||
|
||||
response.setSuccess( false );
|
||||
response.setMessage( "查询失败,原因" + error.getMessage() );
|
||||
response.setRecords( null );
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
@PostMapping( path = "/bi_department_renewalrate.do" )
|
||||
@ResponseBody
|
||||
public QueryDepartmentRenewalRateReportResponse queryDepartmentRenewalRateRepor()
|
||||
{
|
||||
QueryDepartmentRenewalRateReportResponse response =
|
||||
new QueryDepartmentRenewalRateReportResponse();
|
||||
SqlSession session = null;
|
||||
QueryBIArchievementDataMapper mapper = null;
|
||||
|
||||
try
|
||||
{
|
||||
session = MybatisUtils.getSqlSession();
|
||||
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
|
||||
|
||||
session.clearCache();
|
||||
ArrayList<BIDepartmentRenewalRateRecord> records =
|
||||
mapper.queryBIDepartmentRenewalRate();
|
||||
|
||||
response.setSuccess( true );
|
||||
response.setMessage( "查询成功" );
|
||||
response.setRecords( records );
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
logger.error("查询BI机构渗透率报表出现IOException异常,异常内容:", error);
|
||||
|
||||
response.setSuccess( false );
|
||||
response.setMessage( "查询失败,原因" + error.getMessage() );
|
||||
response.setRecords( null );
|
||||
}
|
||||
catch ( PersistenceException error )
|
||||
{
|
||||
logger.error("查询BI机构渗透率报表出现PersistenceException异常,异常内容:", error);
|
||||
|
||||
response.setSuccess( false );
|
||||
response.setMessage( "查询失败,原因" + error.getMessage() );
|
||||
response.setRecords( null );
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-02 11:21:03
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryDepartmentAttachingRateReportResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-01 16:51:53
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.archievement.bi;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import com.cpic.xim.mybatis.pojo.*;
|
||||
import com.cpic.xim.web.controllers.QueryResponse;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class QueryDepartmentAttachingRateReportResponse extends QueryResponse
|
||||
{
|
||||
@JsonProperty("records")
|
||||
ArrayList<BIDepartmentAttachingRateRecord> records;
|
||||
|
||||
public QueryDepartmentAttachingRateReportResponse( boolean success, String message,
|
||||
ArrayList<BIDepartmentAttachingRateRecord> records )
|
||||
{
|
||||
super( success, message );
|
||||
this.records = records;
|
||||
}
|
||||
|
||||
public QueryDepartmentAttachingRateReportResponse()
|
||||
{
|
||||
super( false, "" );
|
||||
|
||||
this.records = null;
|
||||
}
|
||||
|
||||
public ArrayList<BIDepartmentAttachingRateRecord> getRecords()
|
||||
{
|
||||
return records;
|
||||
}
|
||||
|
||||
public void setRecords( ArrayList<BIDepartmentAttachingRateRecord> records )
|
||||
{
|
||||
this.records = records;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + ((records == null) ? 0 : records.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( !super.equals( obj ) )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
QueryDepartmentAttachingRateReportResponse other =
|
||||
(QueryDepartmentAttachingRateReportResponse) obj;
|
||||
if ( records == null )
|
||||
{
|
||||
if ( other.records != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !records.equals( other.records ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-02 16:56:50
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryDepartmentRenewalRateReportResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-02 11:21:03
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryDepartmentAttachingRateReportResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-01 16:51:53
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.archievement.bi;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import com.cpic.xim.mybatis.pojo.*;
|
||||
import com.cpic.xim.web.controllers.QueryResponse;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class QueryDepartmentRenewalRateReportResponse extends QueryResponse
|
||||
{
|
||||
@JsonProperty("records")
|
||||
ArrayList<BIDepartmentRenewalRateRecord> records;
|
||||
|
||||
public QueryDepartmentRenewalRateReportResponse( boolean success, String message,
|
||||
ArrayList<BIDepartmentRenewalRateRecord> records )
|
||||
{
|
||||
super( success, message );
|
||||
this.records = records;
|
||||
}
|
||||
|
||||
public QueryDepartmentRenewalRateReportResponse()
|
||||
{
|
||||
super( false, "" );
|
||||
|
||||
this.records = null;
|
||||
}
|
||||
|
||||
public ArrayList<BIDepartmentRenewalRateRecord> getRecords()
|
||||
{
|
||||
return records;
|
||||
}
|
||||
|
||||
public void setRecords( ArrayList<BIDepartmentRenewalRateRecord> records )
|
||||
{
|
||||
this.records = records;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + ((records == null) ? 0 : records.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( !super.equals( obj ) )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
QueryDepartmentRenewalRateReportResponse other =
|
||||
(QueryDepartmentRenewalRateReportResponse) obj;
|
||||
if ( records == null )
|
||||
{
|
||||
if ( other.records != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !records.equals( other.records ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-01 16:51:53
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.archievement.bi;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
|
||||
import com.cpic.xim.web.controllers.QueryResponse;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class QueryTelsalerAttachingRateReportResponse extends QueryResponse
|
||||
{
|
||||
@JsonProperty("records")
|
||||
List<BITelsalerAttachingRateRecord> records;
|
||||
|
||||
public QueryTelsalerAttachingRateReportResponse( boolean success, String message,
|
||||
ArrayList<BITelsalerAttachingRateRecord> records )
|
||||
{
|
||||
super( success, message );
|
||||
this.records = records;
|
||||
}
|
||||
|
||||
public QueryTelsalerAttachingRateReportResponse()
|
||||
{
|
||||
super( false, "" );
|
||||
|
||||
this.records = null;
|
||||
}
|
||||
|
||||
public List<BITelsalerAttachingRateRecord> getRecords()
|
||||
{
|
||||
return records;
|
||||
}
|
||||
|
||||
public void setRecords( List<BITelsalerAttachingRateRecord> records )
|
||||
{
|
||||
this.records = records;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + ((records == null) ? 0 : records.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( !super.equals( obj ) )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
QueryTelsalerAttachingRateReportResponse other =
|
||||
(QueryTelsalerAttachingRateReportResponse) obj;
|
||||
if ( records == null )
|
||||
{
|
||||
if ( other.records != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !records.equals( other.records ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-02 16:54:42
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerRenewalRateReportResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-11-01 16:51:53
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/bi/QueryTelsalerAttachingRateReportResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.archievement.bi;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
|
||||
import com.cpic.xim.web.controllers.QueryResponse;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class QueryTelsalerRenewalRateReportResponse extends QueryResponse
|
||||
{
|
||||
@JsonProperty("records")
|
||||
ArrayList<BITelsalerRenewalRateRecord> records;
|
||||
|
||||
public QueryTelsalerRenewalRateReportResponse( boolean success, String message,
|
||||
ArrayList<BITelsalerRenewalRateRecord> records )
|
||||
{
|
||||
super( success, message );
|
||||
this.records = records;
|
||||
}
|
||||
|
||||
public QueryTelsalerRenewalRateReportResponse()
|
||||
{
|
||||
super( false, "" );
|
||||
|
||||
this.records = null;
|
||||
}
|
||||
|
||||
public ArrayList<BITelsalerRenewalRateRecord> getRecords()
|
||||
{
|
||||
return records;
|
||||
}
|
||||
|
||||
public void setRecords( ArrayList<BITelsalerRenewalRateRecord> records )
|
||||
{
|
||||
this.records = records;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "QueryTelsalerAttachingRateReportResponse [records=" + records + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + ((records == null) ? 0 : records.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( !super.equals( obj ) )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
QueryTelsalerRenewalRateReportResponse other =
|
||||
(QueryTelsalerRenewalRateReportResponse) obj;
|
||||
if ( records == null )
|
||||
{
|
||||
if ( other.records != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !records.equals( other.records ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,222 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-06-06 17:35:54
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/caller/CallerArchievementQueryResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.archievement.caller;
|
||||
|
||||
import com.cpic.xim.mybatis.pojo.MensualArchievementItem;
|
||||
import com.cpic.xim.web.controllers.QueryResponse;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class CallerArchievementQueryResponse extends QueryResponse
|
||||
{
|
||||
@JsonProperty("callerCode")
|
||||
String callerCode;
|
||||
|
||||
@JsonProperty("callerName")
|
||||
String callerName;
|
||||
|
||||
@JsonProperty( "total_archievement" )
|
||||
private long totalArchievement; // 总业绩
|
||||
|
||||
@JsonProperty( "motoPremiumPresentMonth" )
|
||||
private double motoPremiumPresentMonth; // 当月车险保费
|
||||
|
||||
// 每月业绩列表
|
||||
// 要保证数据是按照月份排序。
|
||||
@JsonProperty( "mensual_archievement_list" )
|
||||
private ArrayList<MensualArchievementItem> mensualArchievementList;
|
||||
|
||||
@JsonProperty( "insurance_renewal_rate" )
|
||||
private String insuranceRenewalRate; // 续保率
|
||||
|
||||
@JsonProperty( "attaching_rate" )
|
||||
private String attachingRate; // 车非渗透率
|
||||
|
||||
public CallerArchievementQueryResponse( boolean success, String message, String callerCode,
|
||||
String callerName, long totalArchievement, double motoPremiumPresentMonth,
|
||||
ArrayList<MensualArchievementItem> mensualArchievementList, String insuranceRenewalRate,
|
||||
String attachingRate )
|
||||
{
|
||||
super( success, message );
|
||||
this.callerCode = callerCode;
|
||||
this.callerName = callerName;
|
||||
this.totalArchievement = totalArchievement;
|
||||
this.motoPremiumPresentMonth = motoPremiumPresentMonth;
|
||||
this.mensualArchievementList = mensualArchievementList;
|
||||
this.insuranceRenewalRate = insuranceRenewalRate;
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
public CallerArchievementQueryResponse( String callerCode, String callerName,
|
||||
long totalArchievement, double motoPremiumPresentMonth,
|
||||
ArrayList<MensualArchievementItem> mensualArchievementList, String insuranceRenewalRate,
|
||||
String attachingRate )
|
||||
{
|
||||
this.callerCode = callerCode;
|
||||
this.callerName = callerName;
|
||||
this.totalArchievement = totalArchievement;
|
||||
this.motoPremiumPresentMonth = motoPremiumPresentMonth;
|
||||
this.mensualArchievementList = mensualArchievementList;
|
||||
this.insuranceRenewalRate = insuranceRenewalRate;
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "CallerArchievementQueryResponse [callerCode=" + callerCode + ", callerName="
|
||||
+ callerName + ", totalArchievement=" + totalArchievement
|
||||
+ ", motoPremiumPresentMonth=" + motoPremiumPresentMonth
|
||||
+ ", mensualArchievementList=" + mensualArchievementList + ", insuranceRenewalRate="
|
||||
+ insuranceRenewalRate + ", attachingRate=" + attachingRate + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + ((callerCode == null) ? 0 : callerCode.hashCode());
|
||||
result = prime * result + ((callerName == null) ? 0 : callerName.hashCode());
|
||||
result = prime * result + (int) (totalArchievement ^ (totalArchievement >>> 32));
|
||||
long temp;
|
||||
temp = Double.doubleToLongBits( motoPremiumPresentMonth );
|
||||
result = prime * result + (int) (temp ^ (temp >>> 32));
|
||||
result = prime * result
|
||||
+ ((mensualArchievementList == null) ? 0 : mensualArchievementList.hashCode());
|
||||
result = prime * result
|
||||
+ ((insuranceRenewalRate == null) ? 0 : insuranceRenewalRate.hashCode());
|
||||
result = prime * result + ((attachingRate == null) ? 0 : attachingRate.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setMotoPremiumPresentMonth( double motoPremiumPresentMonth )
|
||||
{
|
||||
this.motoPremiumPresentMonth = motoPremiumPresentMonth;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( !super.equals( obj ) )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
CallerArchievementQueryResponse other = (CallerArchievementQueryResponse) obj;
|
||||
if ( callerCode == null )
|
||||
{
|
||||
if ( other.callerCode != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !callerCode.equals( other.callerCode ) )
|
||||
return false;
|
||||
if ( callerName == null )
|
||||
{
|
||||
if ( other.callerName != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !callerName.equals( other.callerName ) )
|
||||
return false;
|
||||
if ( totalArchievement != other.totalArchievement )
|
||||
return false;
|
||||
if ( Double.doubleToLongBits( motoPremiumPresentMonth ) != Double
|
||||
.doubleToLongBits( other.motoPremiumPresentMonth ) )
|
||||
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 ( attachingRate == null )
|
||||
{
|
||||
if ( other.attachingRate != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !attachingRate.equals( other.attachingRate ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public String getCallerCode()
|
||||
{
|
||||
return callerCode;
|
||||
}
|
||||
|
||||
public void setCallerCode( String callerCode )
|
||||
{
|
||||
this.callerCode = callerCode;
|
||||
}
|
||||
|
||||
public String getCallerName()
|
||||
{
|
||||
return callerName;
|
||||
}
|
||||
|
||||
public void setCallerName( String callerName )
|
||||
{
|
||||
this.callerName = callerName;
|
||||
}
|
||||
|
||||
public long getTotalArchievement()
|
||||
{
|
||||
return totalArchievement;
|
||||
}
|
||||
|
||||
public void setTotalArchievement( long totalArchievement )
|
||||
{
|
||||
this.totalArchievement = totalArchievement;
|
||||
}
|
||||
|
||||
public ArrayList<MensualArchievementItem> getMensualArchievementList()
|
||||
{
|
||||
return mensualArchievementList;
|
||||
}
|
||||
|
||||
public void setMensualArchievementList( ArrayList<MensualArchievementItem> mensualArchievementList )
|
||||
{
|
||||
this.mensualArchievementList = mensualArchievementList;
|
||||
}
|
||||
|
||||
public String getInsuranceRenewalRate()
|
||||
{
|
||||
return insuranceRenewalRate;
|
||||
}
|
||||
|
||||
public void setInsuranceRenewalRate( String insuranceRenewalRate )
|
||||
{
|
||||
this.insuranceRenewalRate = insuranceRenewalRate;
|
||||
}
|
||||
|
||||
public String getAttachingRate()
|
||||
{
|
||||
return attachingRate;
|
||||
}
|
||||
|
||||
public void setAttachingRate( String attachingRate )
|
||||
{
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
public double getMotoPremiumPresentMonth()
|
||||
{
|
||||
return motoPremiumPresentMonth;
|
||||
}
|
||||
}
|
@@ -1,123 +0,0 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-06-06 17:35:54
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/archievement/caller/CallerArchievementQueryResult.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.archievement.caller;
|
||||
|
||||
import com.cpic.xim.mybatis.pojo.MensualArchievementItem;
|
||||
import com.cpic.xim.web.controllers.QueryResponse;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class CallerArchievementQueryResult extends QueryResponse
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @param success
|
||||
* @param message
|
||||
* @param callerCode
|
||||
* @param callerName
|
||||
* @param totalArchievement
|
||||
* @param mensualArchievementList
|
||||
* @param insuranceRenewalRate
|
||||
* @param attachingRate
|
||||
*/
|
||||
public CallerArchievementQueryResult( boolean success, String message, String callerCode,
|
||||
String callerName, long totalArchievement,
|
||||
ArrayList<MensualArchievementItem> mensualArchievementList, String insuranceRenewalRate,
|
||||
String attachingRate)
|
||||
{
|
||||
super( success, message );
|
||||
this.callerCode = callerCode;
|
||||
this.callerName = callerName;
|
||||
this.totalArchievement = totalArchievement;
|
||||
this.mensualArchievementList = mensualArchievementList;
|
||||
this.insuranceRenewalRate = insuranceRenewalRate;
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
@JsonProperty("callerCode")
|
||||
String callerCode;
|
||||
|
||||
public String getCallerCode()
|
||||
{
|
||||
return callerCode;
|
||||
}
|
||||
|
||||
public void setCallerCode( String callerCode )
|
||||
{
|
||||
this.callerCode = callerCode;
|
||||
}
|
||||
|
||||
public String getCallerName()
|
||||
{
|
||||
return callerName;
|
||||
}
|
||||
|
||||
public void setCallerName( String callerName )
|
||||
{
|
||||
this.callerName = callerName;
|
||||
}
|
||||
|
||||
public long getTotalArchievement()
|
||||
{
|
||||
return totalArchievement;
|
||||
}
|
||||
|
||||
public void setTotalArchievement( long totalArchievement )
|
||||
{
|
||||
this.totalArchievement = totalArchievement;
|
||||
}
|
||||
|
||||
public ArrayList<MensualArchievementItem> getMensualArchievementList()
|
||||
{
|
||||
return mensualArchievementList;
|
||||
}
|
||||
|
||||
public void setMensualArchievementList( ArrayList<MensualArchievementItem> mensualArchievementList )
|
||||
{
|
||||
this.mensualArchievementList = mensualArchievementList;
|
||||
}
|
||||
|
||||
public String getInsuranceRenewalRate()
|
||||
{
|
||||
return insuranceRenewalRate;
|
||||
}
|
||||
|
||||
public void setInsuranceRenewalRate( String insuranceRenewalRate )
|
||||
{
|
||||
this.insuranceRenewalRate = insuranceRenewalRate;
|
||||
}
|
||||
|
||||
public String getAttachingRate()
|
||||
{
|
||||
return attachingRate;
|
||||
}
|
||||
|
||||
public void setAttachingRate( String attachingRate )
|
||||
{
|
||||
this.attachingRate = attachingRate;
|
||||
}
|
||||
|
||||
@JsonProperty("callerName")
|
||||
String callerName;
|
||||
|
||||
@JsonProperty( "total_archievement" )
|
||||
private long totalArchievement; // 总业绩
|
||||
|
||||
// 每月业绩列表
|
||||
// 要保证数据是按照月份排序。
|
||||
@JsonProperty( "mensual_archievement_list" )
|
||||
private ArrayList<MensualArchievementItem> mensualArchievementList;
|
||||
|
||||
@JsonProperty( "insurance_renewal_rate" )
|
||||
private String insuranceRenewalRate; // 续保率
|
||||
|
||||
@JsonProperty( "attaching_rate" )
|
||||
private String attachingRate; // 车非渗透率
|
||||
}
|
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-06 00:34:15
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/ImportController.java
|
||||
* @Description: 导入相关的controller
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.dataimport;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
@Controller
|
||||
@RequestMapping( path = "/import", method = RequestMethod.POST )
|
||||
public class ImportController
|
||||
{
|
||||
@PostMapping( path = "/import_telsalers.do" )
|
||||
@ResponseBody
|
||||
public ImportTelsalersResponse importTelsalers( @RequestParam ImportTelsalersRequest request )
|
||||
{
|
||||
ImportTelsalersResponse response = new ImportTelsalersResponse();
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-06 00:44:14
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/ImportTelsalersRequest.java
|
||||
* @Description: 导入作息列表请求。
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.dataimport;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class ImportTelsalersRequest
|
||||
{
|
||||
// 是否全量导入
|
||||
@JsonProperty( "fullImport" )
|
||||
private boolean fullImport;
|
||||
|
||||
// 文件路径
|
||||
@JsonProperty( "filePath" )
|
||||
private String filePath;
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
* @param fullImport 是否全量导入
|
||||
* @param filePath 文件路径
|
||||
*/
|
||||
public ImportTelsalersRequest( boolean fullImport, String filePath )
|
||||
{
|
||||
this.fullImport = fullImport;
|
||||
this.filePath = filePath;
|
||||
}
|
||||
|
||||
public ImportTelsalersRequest()
|
||||
{
|
||||
this.fullImport = false;
|
||||
this.filePath = "";
|
||||
}
|
||||
|
||||
public boolean isFullImport()
|
||||
{
|
||||
return fullImport;
|
||||
}
|
||||
|
||||
public void setFullImport( boolean fullImport )
|
||||
{
|
||||
this.fullImport = fullImport;
|
||||
}
|
||||
|
||||
public String getFilePath()
|
||||
{
|
||||
return filePath;
|
||||
}
|
||||
|
||||
public void setFilePath( String filePath )
|
||||
{
|
||||
this.filePath = filePath;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "ImportTelsalersRequest [fullImport=" + fullImport + ", filePath=" + filePath + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + (fullImport ? 1231 : 1237);
|
||||
result = prime * result + ((filePath == null) ? 0 : filePath.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;
|
||||
ImportTelsalersRequest other = (ImportTelsalersRequest) obj;
|
||||
if ( fullImport != other.fullImport )
|
||||
return false;
|
||||
if ( filePath == null )
|
||||
{
|
||||
if ( other.filePath != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !filePath.equals( other.filePath ) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-06 01:30:29
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/ImportTelsalersResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.dataimport;
|
||||
|
||||
import com.cpic.xim.web.controllers.QueryResponse;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class ImportTelsalersResponse extends QueryResponse
|
||||
{
|
||||
public ImportTelsalersResponse( boolean success, String message, int importedCount )
|
||||
{
|
||||
super( success, message );
|
||||
|
||||
this.importedCount = importedCount;
|
||||
}
|
||||
|
||||
public ImportTelsalersResponse()
|
||||
{
|
||||
super();
|
||||
|
||||
importedCount = 0;
|
||||
}
|
||||
|
||||
public int getImportedCount()
|
||||
{
|
||||
return importedCount;
|
||||
}
|
||||
|
||||
public void setImportedCount( int importedCount )
|
||||
{
|
||||
this.importedCount = importedCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "ImportTelsalersResponse [importedCount=" + importedCount + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + importedCount;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( !super.equals( obj ) )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
ImportTelsalersResponse other = (ImportTelsalersResponse) obj;
|
||||
if ( importedCount != other.importedCount )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 导入的结果数量
|
||||
@JsonProperty( "importedCount" )
|
||||
private int importedCount;
|
||||
}
|
@@ -0,0 +1,257 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-12 00:34:39
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataController.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
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;
|
||||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
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.BITelsalerAttachingRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
|
||||
import com.cpic.xim.mybatis.utils.MybatisUtils;
|
||||
import com.cpic.xim.utils.data.ImportBIExcelData;
|
||||
import com.cpic.xim.web.controllers.dataimport.bi.ImportBIDataRequest.ReportType;
|
||||
|
||||
@Controller
|
||||
@RequestMapping( method = RequestMethod.POST, path = "/import_bi_data" )
|
||||
public class ImportBIDataController
|
||||
{
|
||||
private static Logger logger = LoggerFactory.getLogger( ImportBIDataRequest.class );
|
||||
|
||||
@RequestMapping( method = RequestMethod.POST, path = "/excel.do" )
|
||||
@ResponseBody
|
||||
public static ImportBIDataResponse importBIData( @RequestBody ImportBIDataRequest request )
|
||||
{
|
||||
ImportBIDataResponse response = new ImportBIDataResponse();
|
||||
String filePath = request.getFilePath();
|
||||
ReportType type = request.getReportType();
|
||||
int firstRow = request.getFirstRow();
|
||||
int sheetIndex = request.getSheetIndex();
|
||||
int importedCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
if ( type == ReportType.TelsalerAttachingRateReport )
|
||||
{
|
||||
importedCount = importBITelsalerAttachingRate( filePath, sheetIndex, firstRow );
|
||||
}
|
||||
else if ( type == ReportType.TelsalerRenewalRateReport )
|
||||
{
|
||||
importedCount = importBITeslsalerRenewalRate( filePath, sheetIndex, firstRow );
|
||||
}
|
||||
else if ( type == ReportType.DepartmentAttachingRateReport )
|
||||
{
|
||||
importedCount = importBIDepartmentAttachingRate( filePath, sheetIndex, firstRow );
|
||||
}
|
||||
else if ( type == ReportType.DepartmentRenewalRateReport )
|
||||
{
|
||||
importedCount = importBIDepartmentRenewalRate( filePath, sheetIndex, firstRow );
|
||||
}
|
||||
|
||||
response.setImportedCount( importedCount );
|
||||
response.setSuccess( true );
|
||||
response.setMessage( "导入成功" );
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
String message = "加载文件错误,错误消息:" + error.getMessage();
|
||||
response.setSuccess( false );
|
||||
response.setMessage( message );
|
||||
|
||||
logger.error( message, error );
|
||||
}
|
||||
catch ( InvalidFormatException error )
|
||||
{
|
||||
String message = "Excel文件格式错误,错误消息:" + error.getMessage();
|
||||
response.setSuccess( false );
|
||||
response.setMessage( message );
|
||||
|
||||
logger.error( message, error );
|
||||
}
|
||||
catch ( PersistenceException error )
|
||||
{
|
||||
String message = "Mybatis执行错误,错误消息:" + error.getMessage();
|
||||
response.setSuccess( false );
|
||||
response.setMessage( message );
|
||||
|
||||
logger.error( message, error );
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
private static int importBITelsalerAttachingRate( String filePath, int sheetIndex,
|
||||
int firstRow ) throws PersistenceException, IOException, InvalidFormatException
|
||||
{
|
||||
SqlSession session = null;
|
||||
int importedCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
ArrayList<BITelsalerAttachingRateRecord> records = ImportBIExcelData
|
||||
.importBITelsalerAttachingRateRecordFromXlsx( filePath, sheetIndex, firstRow );
|
||||
|
||||
session = MybatisUtils.getSqlSessionBatch();
|
||||
ImportBIArchievementDataMapper mapper =
|
||||
session.getMapper( ImportBIArchievementDataMapper.class );
|
||||
|
||||
mapper.cleanTelsalerAttachingRateData();
|
||||
|
||||
for ( BITelsalerAttachingRateRecord record : records )
|
||||
{
|
||||
mapper.insertTelsalerAttachingRateDataToDB( record );
|
||||
importedCount++;
|
||||
}
|
||||
|
||||
session.commit();
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
if ( session != null )
|
||||
{
|
||||
session.rollback();
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
|
||||
return importedCount;
|
||||
}
|
||||
|
||||
private static int importBITeslsalerRenewalRate( String filePath, int sheetIndex, int firstRow )
|
||||
throws PersistenceException, IOException, InvalidFormatException
|
||||
{
|
||||
ArrayList<BITelsalerRenewalRateRecord> records = null;
|
||||
SqlSession session = null;
|
||||
ImportBIArchievementDataMapper mapper = null;
|
||||
int importedCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
records = ImportBIExcelData.importBITelsalerRenewalRateFromXlsx( filePath, sheetIndex,
|
||||
firstRow );
|
||||
|
||||
session = MybatisUtils.getSqlSessionBatch();
|
||||
mapper = session.getMapper( ImportBIArchievementDataMapper.class );
|
||||
|
||||
// 清理数据
|
||||
mapper.cleanTelsalerRenewalRateData();
|
||||
|
||||
for ( BITelsalerRenewalRateRecord record : records )
|
||||
{
|
||||
mapper.insertTelsalerRenewalRateDataToDB( record );
|
||||
importedCount++;
|
||||
}
|
||||
|
||||
session.commit();
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
if ( session != null )
|
||||
{
|
||||
session.rollback();
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
|
||||
return importedCount;
|
||||
}
|
||||
|
||||
private static int importBIDepartmentAttachingRate( String filePath, int sheetIndex,
|
||||
int firstRow ) throws PersistenceException, IOException, InvalidFormatException
|
||||
{
|
||||
ArrayList<BIDepartmentAttachingRateRecord> records = null;
|
||||
SqlSession session = null;
|
||||
ImportBIArchievementDataMapper mapper = null;
|
||||
int importedCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
records = ImportBIExcelData.importBIDepartmentAttachingRateRecordsFromXlsx( filePath,
|
||||
sheetIndex, firstRow );
|
||||
session = MybatisUtils.getSqlSessionBatch();
|
||||
mapper = session.getMapper( ImportBIArchievementDataMapper.class );
|
||||
|
||||
mapper.cleanDepartmentAttachingRateData();
|
||||
|
||||
for ( BIDepartmentAttachingRateRecord record : records )
|
||||
{
|
||||
mapper.insertDepartmentAttachingRateDataToDB( record );
|
||||
importedCount++;
|
||||
}
|
||||
|
||||
session.commit();
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
if ( session != null )
|
||||
{
|
||||
session.rollback();
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
|
||||
return importedCount;
|
||||
}
|
||||
|
||||
private static int importBIDepartmentRenewalRate( String filePath, int sheetIndex, int firstRow )
|
||||
throws PersistenceException, IOException, InvalidFormatException
|
||||
{
|
||||
|
||||
ArrayList<BIDepartmentRenewalRateRecord> records = null;
|
||||
SqlSession session = null;
|
||||
ImportBIArchievementDataMapper mapper = null;
|
||||
int importedCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
records = ImportBIExcelData.importBIDepartmentRenewalRateRecordsFromXlsx(filePath, sheetIndex, firstRow);
|
||||
session = MybatisUtils.getSqlSessionBatch();
|
||||
mapper = session.getMapper(ImportBIArchievementDataMapper.class);
|
||||
|
||||
mapper.cleanDepartmentRenewalRateData();
|
||||
|
||||
for ( BIDepartmentRenewalRateRecord record : records )
|
||||
{
|
||||
mapper.insertDepartmentRenewalRateDataToDB(record);
|
||||
|
||||
importedCount++;
|
||||
}
|
||||
|
||||
session.commit();
|
||||
}
|
||||
catch ( Exception error)
|
||||
{
|
||||
if ( session != null )
|
||||
{
|
||||
session.rollback();
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
|
||||
return importedCount;
|
||||
}
|
||||
}
|
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-13 14:39:06
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataRequest.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.dataimport.bi;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
@Controller
|
||||
public class ImportBIDataRequest
|
||||
{
|
||||
public enum ReportType {
|
||||
TelsalerAttachingRateReport, TelsalerRenewalRateReport, DepartmentAttachingRateReport, DepartmentRenewalRateReport
|
||||
};
|
||||
|
||||
// 导入文件的路径
|
||||
@JsonProperty( "filePath" )
|
||||
private String filePath;
|
||||
|
||||
// 报表名称
|
||||
@JsonProperty( "reportType" )
|
||||
private ReportType reportType;
|
||||
|
||||
// 是否有标题行
|
||||
@JsonProperty( "firstRow" )
|
||||
private int firstRow;
|
||||
|
||||
// sheet索引
|
||||
@JsonProperty( "sheetIndex" )
|
||||
private int sheetIndex;
|
||||
|
||||
public ImportBIDataRequest()
|
||||
{}
|
||||
|
||||
public int getFirstRow()
|
||||
{
|
||||
return firstRow;
|
||||
}
|
||||
|
||||
public void setFirstRow( int firstRow )
|
||||
{
|
||||
this.firstRow = firstRow;
|
||||
}
|
||||
|
||||
public int getSheetIndex()
|
||||
{
|
||||
return sheetIndex;
|
||||
}
|
||||
|
||||
public void setSheetIndex( int sheetIndex )
|
||||
{
|
||||
this.sheetIndex = sheetIndex;
|
||||
}
|
||||
|
||||
public String getFilePath()
|
||||
{
|
||||
return filePath;
|
||||
}
|
||||
|
||||
public void setFilePath( String filePath )
|
||||
{
|
||||
this.filePath = filePath;
|
||||
}
|
||||
|
||||
public ReportType getReportType()
|
||||
{
|
||||
return reportType;
|
||||
}
|
||||
|
||||
public void setReportType( ReportType reportType )
|
||||
{
|
||||
this.reportType = reportType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
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 + firstRow;
|
||||
result = prime * result + sheetIndex;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( obj == null )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
ImportBIDataRequest other = (ImportBIDataRequest) obj;
|
||||
if ( filePath == null )
|
||||
{
|
||||
if ( other.filePath != null )
|
||||
return false;
|
||||
}
|
||||
else if ( !filePath.equals( other.filePath ) )
|
||||
return false;
|
||||
if ( reportType != other.reportType )
|
||||
return false;
|
||||
if ( firstRow != other.firstRow )
|
||||
return false;
|
||||
if ( sheetIndex != other.sheetIndex )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "ImportBIDataRequest [filePath=" + filePath + ", reportType=" + reportType
|
||||
+ ", firstRow=" + firstRow + ", sheetIndex=" + sheetIndex + "]";
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-13 14:39:58
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.web.controllers.dataimport.bi;
|
||||
|
||||
import com.cpic.xim.web.controllers.QueryResponse;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class ImportBIDataResponse extends QueryResponse
|
||||
{
|
||||
// 导入数量
|
||||
@JsonProperty( "importedCount" )
|
||||
int importedCount;
|
||||
|
||||
public ImportBIDataResponse()
|
||||
{
|
||||
super();
|
||||
|
||||
importedCount = 0;
|
||||
}
|
||||
|
||||
public ImportBIDataResponse( boolean success, String message, int importedCount )
|
||||
{
|
||||
super( success, message );
|
||||
this.importedCount = importedCount;
|
||||
}
|
||||
|
||||
public ImportBIDataResponse( int importedCount )
|
||||
{
|
||||
this.importedCount = importedCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "ImportBIDataResponse [importedCount=" + importedCount + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + importedCount;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
return true;
|
||||
if ( !super.equals( obj ) )
|
||||
return false;
|
||||
if ( getClass() != obj.getClass() )
|
||||
return false;
|
||||
ImportBIDataResponse other = (ImportBIDataResponse) obj;
|
||||
if ( importedCount != other.importedCount )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public int getImportedCount()
|
||||
{
|
||||
return importedCount;
|
||||
}
|
||||
|
||||
public void setImportedCount( int importedCount )
|
||||
{
|
||||
this.importedCount = importedCount;
|
||||
}
|
||||
}
|
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-01-22 23:11:26
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-10-23 17:01:29
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUpload.java
|
||||
* @Description: 用于接受上传文件的Controller。
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.cpic.xim.web.controllers.fileupload;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.Vector;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@SuppressWarnings( "unused" )
|
||||
@Controller
|
||||
@RequestMapping( path = "/file" )
|
||||
public class FileUpload
|
||||
{
|
||||
/**
|
||||
* 接收上传文件,并保存到临时目录:
|
||||
* 1、临时目录下再用sessionID作为子目录保存文件。
|
||||
* 2、保存时不更改文件名,会覆盖同名文件。
|
||||
* 3、MultipartFile参数形参名称必须和请求form中file标签的name属性一致,否则值为null。
|
||||
* 4、返回值为接收结果和文件保存绝对路径。
|
||||
* @param taskName 任务名称字符串
|
||||
* @param files MultipartFile结构的文件对象
|
||||
* @param request HttpServletRequest对象实例
|
||||
* @return 返回一个FileUploadResult对象,包含上传结果。
|
||||
*/
|
||||
@RequestMapping( path = "/file-upload.do" )
|
||||
@ResponseBody
|
||||
public FileUploadResult getUploadFile( @RequestParam( "task-name" ) String taskName,
|
||||
@RequestParam( "files" ) MultipartFile file, HttpServletRequest request )
|
||||
{
|
||||
// session id用来创建临时目录,避免重复
|
||||
String sessionID = request.getSession().getId();
|
||||
FileUploadResult result = new FileUploadResult();
|
||||
Vector<String> fileNames = new Vector<String>();
|
||||
|
||||
result.setSuccess( true );
|
||||
result.setMessage( "上传成功!" );
|
||||
|
||||
String filePath = request.getServletContext().getRealPath( "/temp/upload/" + sessionID );
|
||||
File dir = new File( filePath );
|
||||
|
||||
if ( !dir.mkdirs() )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// 检查文件长度,如果为0则跳过
|
||||
if ( file.isEmpty() )
|
||||
{
|
||||
result.setSuccess( false );
|
||||
result.setMessage( "不允许上传空文件。" );
|
||||
}
|
||||
else
|
||||
{
|
||||
// 保存文件到临时目录
|
||||
Long milliSecond =
|
||||
LocalDateTime.now().toInstant( ZoneOffset.of( "+8" ) ).toEpochMilli();
|
||||
String fileName = String.valueOf( milliSecond ) + file.getOriginalFilename();
|
||||
// String fileName = file.getOriginalFilename();
|
||||
File destFile = new File( filePath, fileName );
|
||||
|
||||
try
|
||||
{
|
||||
file.transferTo( destFile );
|
||||
// 把上传文件的绝对路径保存,返回给前端
|
||||
fileNames.add( destFile.getAbsolutePath() );
|
||||
|
||||
result.setSuccess( true );
|
||||
result.setMessage( "上传成功" );
|
||||
result.setFileList( fileNames );
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
result.setSuccess( false );
|
||||
result.setMessage( "上传失败,原因:" + error.getMessage() );
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-01-23 22:56:17
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-10-06 00:32:47
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/FileUpload/FileUploadResult.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.cpic.xim.web.controllers.fileupload;
|
||||
|
||||
import java.util.Vector;
|
||||
import com.cpic.xim.web.controllers.QueryResponse;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
@SuppressWarnings( "unused" )
|
||||
public class FileUploadResult extends QueryResponse
|
||||
{
|
||||
public FileUploadResult()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
* @param success 是否上传成功
|
||||
* @param message 消息字符串
|
||||
* @param fileList 文件绝对路径字符串数组
|
||||
*/
|
||||
public FileUploadResult( boolean success,
|
||||
String message,
|
||||
Vector<String> fileList )
|
||||
{
|
||||
super( success, message );
|
||||
|
||||
this.fileList = fileList;
|
||||
}
|
||||
|
||||
public Vector<String> getFileList()
|
||||
{
|
||||
return fileList;
|
||||
}
|
||||
|
||||
public void setFileList( Vector<String> fileList )
|
||||
{
|
||||
this.fileList = fileList;
|
||||
}
|
||||
|
||||
@JsonProperty( "fileList" )
|
||||
private Vector<String> fileList;
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* @Author: Kane
|
||||
* @Date: 2023-09-21 11:35:57
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/AddTelsalerResponse.java
|
||||
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/DeleteTelsalerResponse.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} ### %msg%n" />
|
||||
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
|
||||
</Console>
|
||||
<RollingFile name="rolling_file" filename="d:/logs/桌面霸屏/app.log"
|
||||
<RollingFile name="rolling_file_win" filename="d:/logs/桌面霸屏/app.log"
|
||||
filePattern="d:/logs/桌面霸屏/logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
|
||||
<PatternLayout>
|
||||
<Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern>
|
||||
@@ -15,13 +15,25 @@
|
||||
<DefaultRolloverStrategy max="20" />
|
||||
</Policies>
|
||||
</RollingFile>
|
||||
<RollingFile name="rolling_file_linux" filename="/logs/桌面霸屏/app.log"
|
||||
filePattern="/logs/桌面霸屏/logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
|
||||
<PatternLayout>
|
||||
<Pattern>[%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n</Pattern>
|
||||
</PatternLayout>
|
||||
<Policies>
|
||||
<TimeBasedTriggeringPolicy interval="1" />
|
||||
<SizeBasedTriggeringPolicy size="20MB" />
|
||||
<DefaultRolloverStrategy max="20" />
|
||||
</Policies>
|
||||
</RollingFile>
|
||||
</Appenders>
|
||||
<Loggers>
|
||||
<!-- <Logger name="mylog" level="info">
|
||||
<AppenderRef ref="rolling_file" />
|
||||
</Logger> -->
|
||||
<Root level="debug">
|
||||
<AppenderRef ref="rolling_file" />
|
||||
<AppenderRef ref="rolling_file_linux" />
|
||||
<AppenderRef ref="rolling_file_win" />
|
||||
<AppenderRef ref="Console" />
|
||||
</Root>
|
||||
</Loggers>
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cpic.xim.mybatis.mapper.ArchievementMapper">
|
||||
<select id="getDepartmentArchievement" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
|
||||
<select id="getDepartmentArchievement" useCache="false" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
|
||||
call telsale_archievement_pkg.department_archievement(
|
||||
#{a_department_code, mode=IN, jdbcType=VARCHAR},
|
||||
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},
|
||||
@@ -9,12 +9,13 @@
|
||||
#{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer},
|
||||
#{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper})
|
||||
</select>
|
||||
<select id="getCallerArchievement" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
|
||||
<select id="getCallerArchievement" useCache="false" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
|
||||
call telsale_archievement_pkg.caller_archievement(
|
||||
#{a_caller_code, mode=IN, jdbcType=VARCHAR},
|
||||
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},
|
||||
#{a_renewal_rate, mode=OUT, jdbcType=VARCHAR},
|
||||
#{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer},
|
||||
#{a_present_month, mode=OUT, jdbcType=DOUBLE, javaType=Double},
|
||||
#{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper})
|
||||
</select>
|
||||
|
||||
|
@@ -0,0 +1,53 @@
|
||||
<?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.ImportBIArchievementDataMapper">
|
||||
<insert id="insertTelsalerAttachingRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord">
|
||||
insert into BI电销坐席车非渗透率跟踪表 ( "部门","经办","车险保费(万)","车险保费占比","非车保费(万)",
|
||||
"当月保费渗透率","保费渗透率环比上月","当月客户渗透率","客户渗透率环比上月",
|
||||
"当月车非客均保费","客均保费环比上月" )
|
||||
values ( #{departmentName}, #{telsalerName}, #{motoPremium}, #{motoPremiumProportion}, #{nomotoPremium},
|
||||
#{attachingRate}, #{attachingRateChange}, #{customerHandleRate},
|
||||
#{customerHandleRateChange}, #{noMotoPremiumPerCustomer}, #{noMotoPremiumPerCustomerChange} )
|
||||
</insert>
|
||||
|
||||
<insert id="insertTelsalerRenewalRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord">
|
||||
insert into BI电销坐席续保率跟踪表 ("责任部门","责任人","机构目标值1(%)","到期数-全月",
|
||||
"序时到期数占比(%)","个车续保率(序时)(%)","个车续保率(全月)(%)",
|
||||
"环比昨日(%)","环比上月(%)","平均提前签单天数","环比")
|
||||
values (#{责任部门},#{责任人},#{机构目标值},#{到期数全月},#{序时到期数占比},
|
||||
#{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月},
|
||||
#{平均提前签单天数},#{环比})
|
||||
</insert>
|
||||
|
||||
<insert id="insertDepartmentAttachingRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord">
|
||||
insert into BI机构渗透率跟踪表 ( 部门,"目标值-机构",目标差距,"车险保费",
|
||||
车险保费占比,"非车保费",当月保费渗透率,保费渗透率环比上月,当月客户渗透率,
|
||||
客户渗透率环比上月,当月车非客均保费,客均保费环比上月,车险客户数)
|
||||
values (#{departmentName},#{departmentObject},#{objectGap},#{motoPremium},
|
||||
#{motoPremiumProPortion},#{nomotoPremium},#{attachingRate},#{attachingRateChange},
|
||||
#{customerHandleRate},#{customerHandleRateChange},#{premiumPerCustomer},#{premiumPerCustomerChange},
|
||||
#{motoInsuranceCustomerCount} )
|
||||
</insert>
|
||||
|
||||
<insert id="insertDepartmentRenewalRateDataToDB" parameterType="com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord" >
|
||||
insert into BI机构当月个车续保率跟踪表( "责任部门","机构目标值1(%)","到期数-全月" ,"序时到期数占比(%)","个车续保率(序时)(%)",
|
||||
"个车续保率(全月)(%)","环比昨日(%)","环比上月(%)","平均提前签单天数","环比")
|
||||
values (#{责任部门},#{机构目标值},#{到期数全月},#{序时到期数占比},
|
||||
#{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月},
|
||||
#{平均提前签单天数},#{环比})
|
||||
</insert>
|
||||
|
||||
<select id="cleanTelsalerAttachingRateData" statementType="CALLABLE">
|
||||
call telsale_bi_utils.清理BI电销坐席车非渗透率跟踪表()
|
||||
</select>
|
||||
<select id="cleanTelsalerRenewalRateData" statementType="CALLABLE">
|
||||
call telsale_bi_utils.清理BI电销坐席续保率跟踪表()
|
||||
</select>
|
||||
<select id="cleanDepartmentAttachingRateData" statementType="CALLABLE">
|
||||
call telsale_bi_utils.清理BI部门渗透率跟踪表()
|
||||
</select>
|
||||
|
||||
<select id="cleanDepartmentRenewalRateData" statementType="CALLABLE">
|
||||
call telsale_bi_utils.清理BI部门续保率跟踪表()
|
||||
</select>
|
||||
</mapper>
|
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cpic.xim.mybatis.mapper.QueryBIArchievementDataMapper">
|
||||
|
||||
<!-- 查询坐席车非渗透率报表 -->
|
||||
<select id="queryBITelsalerAttachingRate" statementType="STATEMENT" resultMap="BITelsalerAttachingRate" useCache="false" flushCache="true">
|
||||
SELECT t.部门,
|
||||
t.经办,
|
||||
t."车险保费(万)" as 车险保费,
|
||||
t.车险保费占比,
|
||||
t."非车保费(万)" as 非车保费,
|
||||
t.当月保费渗透率,
|
||||
t.保费渗透率环比上月,
|
||||
t.当月客户渗透率,
|
||||
t.客户渗透率环比上月,
|
||||
t.当月车非客均保费,
|
||||
t.客均保费环比上月
|
||||
FROM BI电销坐席车非渗透率跟踪表 t
|
||||
ORDER BY t.部门
|
||||
</select>
|
||||
<!-- 坐席车非渗透率报表记录 -->
|
||||
<resultMap id="BITelsalerAttachingRate" type="com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord">
|
||||
<result property="departmentName" column="部门" javaType="String" jdbcType="VARCHAR" />
|
||||
<result property="telsalerName" column="经办" javaType="String" jdbcType="VARCHAR" />
|
||||
<result property="motoPremium" column="车险保费" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="motoPremiumProportion" column="车险保费占比" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="nomotoPremium" column="非车保费" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="attachingRate" column="当月保费渗透率" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="attachingRateChange" column="保费渗透率环比上月" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="customerHandleRate" column="当月客户渗透率" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="customerHandleRateChange" column="客户渗透率环比上月" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="noMotoPremiumPerCustomer" column="当月车非客均保费" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="noMotoPremiumPerCustomerChange" column="客均保费环比上月" javaType="double" jdbcType="DOUBLE" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 坐席续保率 -->
|
||||
<select id="queryBITesalerRenewalRate" statementType="STATEMENT" resultMap="BITelsalerRenewalRate" useCache="false" flushCache="true">
|
||||
select t.责任部门,
|
||||
t.责任人,
|
||||
t."机构目标值1(%)" as 机构目标值,
|
||||
t."到期数-全月" as 到期数全月,
|
||||
t."序时到期数占比(%)" as 序时到期数占比,
|
||||
t."个车续保率(序时)(%)" as 个车续保率序时,
|
||||
t."个车续保率(全月)(%)" as 个车续保率全月,
|
||||
t."环比昨日(%)" as 环比昨日,
|
||||
t."环比上月(%)" as 环比上月,
|
||||
t.平均提前签单天数,
|
||||
t.环比
|
||||
from BI电销坐席续保率跟踪表 t
|
||||
</select>
|
||||
<resultMap id="BITelsalerRenewalRate" type="com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord">
|
||||
<result property="责任部门" column="责任部门" javaType="String" jdbcType="VARCHAR" />
|
||||
<result property="责任人" column="责任人" javaType="String" jdbcType="VARCHAR" />
|
||||
<result property="机构目标值" column="机构目标值" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="到期数全月" column="到期数全月" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="序时到期数占比" column="序时到期数占比" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="个车续保率序时" column="个车续保率序时" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="个车续保率全月" column="个车续保率全月" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="环比昨日" column="环比昨日" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="环比上月" column="环比上月" javaType="double" jdbcType="DOUBLE" />
|
||||
<result property="平均提前签单天数" column="平均提前签单天数" javaType="int" jdbcType="DOUBLE" />
|
||||
<result property="环比" column="环比" javaType="int" jdbcType="DOUBLE" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 机构渗透率 -->
|
||||
<select id="queryBIDepartmentAttachingRate" statementType="STATEMENT" resultMap="BIDepartmentAttachingRate" useCache="false" flushCache="true">
|
||||
select t.部门,
|
||||
t."目标值-机构" as 目标值机构,
|
||||
t.目标差距,
|
||||
t.车险保费,
|
||||
t.车险保费占比,
|
||||
t.非车保费,
|
||||
t.当月保费渗透率,
|
||||
t.保费渗透率环比上月,
|
||||
t.当月客户渗透率,
|
||||
t.客户渗透率环比上月,
|
||||
t.当月车非客均保费,
|
||||
t.客均保费环比上月,
|
||||
t.车险客户数
|
||||
from BI机构渗透率跟踪表 t
|
||||
</select>
|
||||
<resultMap id="BIDepartmentAttachingRate" type="com.cpic.xim.mybatis.pojo.BIDepartmentAttachingRateRecord">
|
||||
<result column="部门" property="departmentName" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="目标值机构" property="departmentObject" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="目标差距" property="objectGap" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="车险保费" property="motoPremium" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="车险保费占比" property="motoPremiumProPortion" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="非车保费" property="nomotoPremium" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="当月保费渗透率" property="attachingRate" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="保费渗透率环比上月" property="attachingRateChange" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="当月客户渗透率" property="customerHandleRate" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="客户渗透率环比上月" property="customerHandleRateChange" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="当月车非客均保费" property="premiumPerCustomer" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="客均保费环比上月" property="premiumPerCustomerChange" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="车险客户数" property="motoInsuranceCustomerCount" jdbcType="INTEGER" javaType="int" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 机构续保率 -->
|
||||
<select id="queryBIDepartmentRenewalRate" statementType="STATEMENT" resultMap="BIDepartmentRenewalRate" useCache="false" flushCache="true">
|
||||
select t.责任部门,
|
||||
t."机构目标值1(%)" as 机构目标值,
|
||||
t."到期数-全月" as 到期数全月,
|
||||
t."序时到期数占比(%)" as 序时到期数占比,
|
||||
t."个车续保率(序时)(%)" as 个车续保率序时,
|
||||
t."个车续保率(全月)(%)" as 个车续保率全月,
|
||||
t."环比昨日(%)" as 环比昨日,
|
||||
t."环比上月(%)" as 环比上月,
|
||||
t.平均提前签单天数,
|
||||
t.环比
|
||||
from BI机构当月个车续保率跟踪表 t
|
||||
</select>
|
||||
<resultMap id="BIDepartmentRenewalRate" type="com.cpic.xim.mybatis.pojo.BIDepartmentRenewalRateRecord">
|
||||
<result column="责任部门" property="责任部门" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="机构目标值" property="机构目标值" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="到期数全月" property="到期数全月" jdbcType="INTEGER" javaType="int" />
|
||||
<result column="序时到期数占比" property="序时到期数占比" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="个车续保率序时" property="个车续保率序时" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="个车续保率全月" property="个车续保率全月" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="环比昨日" property="环比昨日" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="环比上月" property="环比上月" jdbcType="DOUBLE" javaType="double" />
|
||||
<result column="平均提前签单天数" property="平均提前签单天数" jdbcType="INTEGER" javaType="int" />
|
||||
<result column="环比" property="环比" jdbcType="DOUBLE" javaType="double" />
|
||||
</resultMap>
|
||||
</mapper>
|
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cpic.xim.mybatis.mapper.RewardsMapper">
|
||||
<select id="queryRewardProjects" resultMap="RewardProjectMap">
|
||||
<select id="queryRewardProjects" statementType="STATEMENT" resultMap="RewardProjectMap" useCache="false" flushCache="true">
|
||||
select reward_index, reward_name from reward_projects order by reward_index desc
|
||||
</select>
|
||||
<resultMap id="RewardProjectMap" type="com.cpic.xim.mybatis.pojo.RewardProject">
|
||||
@@ -9,7 +9,7 @@
|
||||
<result property="rewardName" column="reward_name" javaType="String"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="queryRewardTelsaler" flushCache="true" resultMap="RewardGainerMapper">
|
||||
<select id="queryRewardTelsaler" statementType="STATEMENT" resultMap="RewardGainerMapper" useCache="false" flushCache="true">
|
||||
SELECT hjr.rec_id rec_id,
|
||||
hjr.telsaler_name telsaler_name,
|
||||
hjr.telsaler_code telsaler_code,
|
||||
@@ -28,20 +28,20 @@
|
||||
<result column="reward_index" property="rewardProjectCode" />
|
||||
</resultMap>
|
||||
|
||||
<select id="addRewardTelSaler" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
|
||||
<select id="addRewardTelSaler" statementType="CALLABLE" parameterType="java.util.HashMap" useCache="false" flushCache="true" >
|
||||
call telsaler_reward_pkg.add_telsaler_reward(
|
||||
#{a_reward_index,mode=IN,jdbcType=VARCHAR},
|
||||
#{a_telsaler_name,mode=IN,jdbcType=VARCHAR})
|
||||
</select>
|
||||
|
||||
<!-- 删除获奖坐席记录 -->
|
||||
<select id="deleteRewardTelSaler" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
|
||||
<select id="deleteRewardTelSaler" statementType="CALLABLE" parameterType="java.util.HashMap" useCache="false" flushCache="true" >
|
||||
call telsaler_reward_pkg.delete_telsaler_reward(
|
||||
#{a_rec_id,mode=IN,jdbcType=INTEGER})
|
||||
</select>
|
||||
|
||||
<!-- 更新获奖坐席 -->
|
||||
<select id="updateRewardTelSaler" statementType="CALLABLE" flushCache="true" parameterType="java.util.HashMap" >
|
||||
<select id="updateRewardTelSaler" statementType="CALLABLE" parameterType="java.util.HashMap" useCache="false" flushCache="true" >
|
||||
call telsaler_reward_pkg.update_telsaler_reward(
|
||||
#{a_rec_id,mode=IN,jdbcType=INTEGER},
|
||||
#{a_telsaler_name,mode=IN,jdbcType=VARCHAR},
|
||||
|
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cpic.xim.mybatis.mapper.TWrTelsalerMapper">
|
||||
<select id="queryTWrTelsalerInfo" resultMap="TWrTelsaler">
|
||||
select t.人员姓名,
|
||||
t.人员工号,
|
||||
t.籍贯,
|
||||
t.参加工作时间,
|
||||
t.入职日期,
|
||||
t.入司日期,
|
||||
t.业务类型,
|
||||
t.办公地省,
|
||||
t.办公地市,
|
||||
t.人员类别,
|
||||
t.现任岗位,
|
||||
t.现任职级,
|
||||
t.机构名称,
|
||||
t.职场分类,
|
||||
t.片区名称,
|
||||
t.团队名称,
|
||||
t.对口分公司,
|
||||
t.展业地区,
|
||||
t.招聘渠道,
|
||||
t.渠道明细,
|
||||
t.全日制最高学历,
|
||||
t.学历类型,
|
||||
t.用工性质名称,
|
||||
t.合同种类,
|
||||
t.合同类型,
|
||||
t.合同性质,
|
||||
t.合同签订次数,
|
||||
t.合同生效日期,
|
||||
t.合同到期日期,
|
||||
t.人员属性,
|
||||
t.保代员工号,
|
||||
t.职场属性,
|
||||
t.办公性质,
|
||||
t.保代人员属性,
|
||||
t.人员状态
|
||||
from telsaler t
|
||||
where t.人员姓名 = #{telsaler} or t.人员工号 = #{telsaler}
|
||||
</select>
|
||||
<resultMap id="TWrTelsaler" type="TWrTelsalerRecord">
|
||||
<result column="人员姓名" property="人员姓名" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="人员工号" property="人员工号" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="籍贯" property="籍贯" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="参加工作时间" property="参加工作时间" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="入职日期" property="入职日期" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="入司日期" property="入司日期" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="业务类型" property="业务类型" jdbcType="VARCHAR" javaType="String" />
|
||||
<result column="办公地省" property="办公地省" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="办公地市" property="办公地市" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="人员类别" property="人员类别" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="现任岗位" property="现任岗位" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="现任职级" property="现任职级" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="机构名称" property="机构名称" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="职场分类" property="职场分类" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="片区名称" property="片区名称" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="团队名称" property="团队名称" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="对口分公司" property="对口分公司" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="展业地区" property="展业地区" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="招聘渠道" property="招聘渠道" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="渠道明细" property="渠道明细" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="全日制最高学历" property="全日制最高学历" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="学历类型" property="学历类型" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="用工性质名称" property="用工性质名称" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同种类" property="合同种类" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同类型" property="合同类型" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同性质" property="合同性质" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同签订次数" property="合同签订次数" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同生效日期" property="合同生效日期" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="合同到期日期" property="合同到期日期" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="人员属性" property="人员属性" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="保代员工号" property="保代员工号" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="职场属性" property="职场属性" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="办公性质" property="办公性质" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="保代人员属性" property="保代人员属性" jdbcType="VARCHAR" javaType="String"/>
|
||||
<result column="人员状态" property="人员状态" jdbcType="VARCHAR" javaType="String"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- insertTWrTelsalerRecordToDB -->
|
||||
<insert id="insertTWrTelsalerRecordToDB">
|
||||
</insert>
|
||||
</mapper>
|
@@ -3,6 +3,11 @@
|
||||
<configuration>
|
||||
<properties resource="mybatis/jdbc.properties" />
|
||||
|
||||
<settings>
|
||||
<!-- 二级缓存开启 -->
|
||||
<setting name="cacheEnabled" value="false" />
|
||||
</settings>
|
||||
|
||||
<!-- 类型别名 -->
|
||||
<typeAliases>
|
||||
<package name="com.cpic.xim.mybatis.pojo" />
|
||||
@@ -26,5 +31,8 @@
|
||||
<mapper resource="mybatis/mapper/ArchievementMapper.xml" />
|
||||
<mapper resource="mybatis/mapper/RankingListMapper.xml" />
|
||||
<mapper resource="mybatis/mapper/RewardsMapper.xml" />
|
||||
<mapper resource="mybatis/mapper/ImportBIArchievementDataMapper.xml" />
|
||||
<mapper resource="mybatis/mapper/QueryBIArchievementDataMapper.xml" />
|
||||
</mappers>
|
||||
|
||||
</configuration>
|
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-12 10:43:31
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /desktop_archievement_backend/src/test/java/com/cpic/xim/DesktopArchievement/test/BatchInsertTest.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.DesktopArchievement.test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import org.apache.ibatis.exceptions.PersistenceException;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
||||
import org.junit.Test;
|
||||
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.BITelsalerRenewalRateRecord;
|
||||
import com.cpic.xim.mybatis.utils.MybatisUtils;
|
||||
import com.cpic.xim.utils.data.ImportBIExcelData;
|
||||
|
||||
public class BatchInsertTest
|
||||
{
|
||||
private static Logger logger = LoggerFactory.getLogger(BatchInsertTest.class);
|
||||
@Test
|
||||
public void testBatchInsertIntoBITelsalerAttachingRate()
|
||||
{
|
||||
String filePath = "D:/develop/cpicxim/deskop_task_schedule/数据/测试用/经办 (2).xlsx";
|
||||
ArrayList<BITelsalerRenewalRateRecord> records = null;
|
||||
SqlSession session = null;
|
||||
ImportBIArchievementDataMapper mapper = null;
|
||||
|
||||
try
|
||||
{
|
||||
records = ImportBIExcelData.importBITelsalerRenewalRateFromXlsx( filePath, 0,
|
||||
1 );
|
||||
session = MybatisUtils.getSqlSessionBatch();
|
||||
mapper = session.getMapper( ImportBIArchievementDataMapper.class );
|
||||
|
||||
mapper.cleanTelsalerRenewalRateData();
|
||||
|
||||
for ( BITelsalerRenewalRateRecord record : records )
|
||||
{
|
||||
mapper.insertTelsalerRenewalRateDataToDB( record );
|
||||
}
|
||||
|
||||
session.commit();
|
||||
|
||||
assert (true);
|
||||
}
|
||||
catch ( PersistenceException error)
|
||||
{
|
||||
System.out.println(error);
|
||||
assert( false );
|
||||
}
|
||||
catch(InvalidFormatException error)
|
||||
{
|
||||
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
if ( session != null )
|
||||
{
|
||||
session.rollback();
|
||||
|
||||
assert (false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBatchInsertBITeslsalerRenewalRate()
|
||||
{
|
||||
String filePath = "D:/develop/cpicxim/deskop_task_schedule/数据/测试用/坐席-续保.xlsx";
|
||||
ArrayList<BITelsalerRenewalRateRecord> records = null;
|
||||
SqlSession session = null;
|
||||
ImportBIArchievementDataMapper mapper = null;
|
||||
|
||||
try
|
||||
{
|
||||
session = MybatisUtils.getSqlSessionBatch();
|
||||
mapper = session.getMapper( ImportBIArchievementDataMapper.class );
|
||||
|
||||
records = ImportBIExcelData.importBITelsalerRenewalRateFromXlsx( filePath, 0, 1 );
|
||||
|
||||
// 清理数据
|
||||
mapper.cleanTelsalerRenewalRateData();
|
||||
|
||||
for ( BITelsalerRenewalRateRecord record : records )
|
||||
{
|
||||
mapper.insertTelsalerRenewalRateDataToDB( record );
|
||||
}
|
||||
|
||||
session.commit();
|
||||
|
||||
System.out.println( records );
|
||||
assert (!records.isEmpty());
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
logger.error("出现错误", error);
|
||||
assert (false);
|
||||
|
||||
if ( session != null )
|
||||
{
|
||||
session.rollback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBatchInsertBIDepartmentAttachingRateToDB()
|
||||
{
|
||||
String filePath = "D:/develop/cpicxim/deskop_task_schedule/数据/测试用/机构渗透.xlsx";
|
||||
|
||||
ArrayList<BIDepartmentAttachingRateRecord> records = null;
|
||||
SqlSession session = null;
|
||||
ImportBIArchievementDataMapper mapper = null;
|
||||
|
||||
try
|
||||
{
|
||||
records =
|
||||
ImportBIExcelData.importBIDepartmentAttachingRateRecordsFromXlsx( filePath, 0, 1 );
|
||||
session = MybatisUtils.getSqlSessionBatch();
|
||||
mapper = session.getMapper( ImportBIArchievementDataMapper.class );
|
||||
|
||||
mapper.cleanDepartmentAttachingRateData();
|
||||
|
||||
for ( BIDepartmentAttachingRateRecord record : records )
|
||||
{
|
||||
mapper.insertDepartmentAttachingRateDataToDB( 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
数据/测试用/坐席-渗透.xlsx
Normal file
BIN
数据/测试用/坐席-渗透.xlsx
Normal file
Binary file not shown.
BIN
数据/测试用/坐席-续保.xlsx
Normal file
BIN
数据/测试用/坐席-续保.xlsx
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user