Compare commits
8 Commits
feature-da
...
7311ab5e2a
Author | SHA1 | Date | |
---|---|---|---|
7311ab5e2a | |||
0650227861 | |||
75a9c46c2e | |||
02ac5274e0 | |||
6f303eec03 | |||
d517c2e82a | |||
80ba8da7e0 | |||
1422c0b781 |
@@ -145,18 +145,29 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
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_rownum INTEGER;
|
||||
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 saler_name
|
||||
INTO l_caller_name
|
||||
FROM tele_saler
|
||||
WHERE saler_code = a_caller_code;*/
|
||||
EXCEPTION
|
||||
-- <20><><EFBFBD><EFBFBD>û<EFBFBD>в<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ϯ<EFBFBD><CFAF><EFBFBD>ƣ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>쳣
|
||||
WHEN no_data_found THEN
|
||||
@@ -164,12 +175,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>),
|
||||
@@ -177,7 +188,8 @@ 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>
|
||||
@@ -194,28 +206,7 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
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;
|
||||
/*SELECT decode(nvl(SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0),
|
||||
0,
|
||||
0,
|
||||
round(SUM(cf.<2E><><EFBFBD><EFBFBD><EFBFBD>ںϱ<DABA><CFB1><EFBFBD>) / SUM(cf.<2E><><EFBFBD>ո<EFBFBD><D5B8>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||
2))
|
||||
INTO a_attaching_rate
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ÿ<EFBFBD>ձ<EFBFBD><D5B1><EFBFBD> cf
|
||||
WHERE cf.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code
|
||||
AND cf.<2E><><EFBFBD><EFBFBD> = l_this_year
|
||||
AND cf.<2E>·<EFBFBD> = l_this_month;*/
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*SELECT decode(nvl(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),
|
||||
0),
|
||||
0,
|
||||
0,
|
||||
round(SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>) / SUM(xb.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * 100,
|
||||
2)) xbl
|
||||
INTO a_renewal_rate
|
||||
FROM <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3> xb
|
||||
WHERE xb.<2E><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD> = a_caller_code;*/
|
||||
SELECT rownum,
|
||||
round(nvl(t."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>ȫ<EFBFBD>£<EFBFBD>(%)",
|
||||
0),
|
||||
@@ -229,11 +220,12 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS
|
||||
--ÿ<><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')
|
||||
|
@@ -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>;
|
||||
|
@@ -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,79 +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;
|
||||
margin-top: 0px;
|
||||
|
||||
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>
|
||||
|
@@ -42,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>
|
||||
|
@@ -31,6 +31,24 @@ interface ImportBIReportResponse
|
||||
importedCount: number,
|
||||
}
|
||||
|
||||
// BI坐席渗透率报表记录
|
||||
interface BITelsalerAttachingRateReportRecord
|
||||
{
|
||||
departmentName: string;
|
||||
telsalerName: string;
|
||||
motoPremium: number;
|
||||
nomotoPremium: number;
|
||||
attachingRatePresentMonth: number;
|
||||
attachingRateChange: number;
|
||||
}
|
||||
|
||||
interface QueryBITelsalerAttachingRateReportResponse
|
||||
{
|
||||
success: boolean,
|
||||
message: string,
|
||||
records: BITelsalerAttachingRateReportRecord[];
|
||||
}
|
||||
|
||||
type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error?: any ) => void;
|
||||
|
||||
/**
|
||||
@@ -75,5 +93,7 @@ export {
|
||||
type ImportBIReportRequest,
|
||||
type ImportBIReportResponse,
|
||||
type ImportBIReportResponseHandler,
|
||||
type BITelsalerAttachingRateReportRecord,
|
||||
type QueryBITelsalerAttachingRateReportResponse,
|
||||
importBIReport
|
||||
};
|
||||
|
@@ -384,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,
|
||||
|
@@ -9,36 +9,12 @@
|
||||
-->
|
||||
<template>
|
||||
<div class="data_management_wrapper">
|
||||
<!-- <div class="telsaler-dataupload-wrapper">
|
||||
<el-upload
|
||||
v-model="ui.fileList"
|
||||
drag
|
||||
action="http://localhost:8080/desktop_archievement_backend/file/file-upload.do"
|
||||
:on-preview="handlePreview"
|
||||
:on-remove="handleRemove"
|
||||
:on-success="handleUploadSuccess"
|
||||
:before-remove="beforeRemove"
|
||||
:limit="1"
|
||||
:on-exceed="handleExceed"
|
||||
:data="ui.uploadData"
|
||||
name="files"
|
||||
>
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
<template #tip>
|
||||
<div class="el-upload__tip">
|
||||
文件不能大于100MB。
|
||||
</div>
|
||||
</template>
|
||||
</el-upload>
|
||||
</div> -->
|
||||
<el-tabs>
|
||||
<el-tab-pane label="坐席车非渗透率">
|
||||
<TelsalerAttachingRateView />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="坐席续保率">
|
||||
坐席车非渗透率
|
||||
<TelsalerRenewalRateView />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="机构">
|
||||
坐席车非渗透率
|
||||
@@ -50,9 +26,10 @@
|
||||
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";
|
||||
export default {
|
||||
name: "DataManagement",
|
||||
components: { TelsalerAttachingRateView, },
|
||||
components: { TelsalerAttachingRateView, TelsalerRenewalRateView, },
|
||||
setup()
|
||||
{
|
||||
const ui = reactive({
|
||||
|
@@ -62,7 +62,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { reactive, ref } from "vue";
|
||||
import { reactive, ref, onBeforeMount } from "vue";
|
||||
import {
|
||||
type BIReportType,
|
||||
type ImportBIReportRequest,
|
||||
@@ -92,10 +92,10 @@ export default {
|
||||
reportType: {
|
||||
type: Number,
|
||||
require: true,
|
||||
default: (): number => -9999,
|
||||
default: (): number => 0,
|
||||
},
|
||||
},
|
||||
setup()
|
||||
setup( props )
|
||||
{
|
||||
const ui: UI = reactive({
|
||||
showUI: false,
|
||||
@@ -214,6 +214,11 @@ export default {
|
||||
}
|
||||
};
|
||||
|
||||
onBeforeMount((): void =>
|
||||
{
|
||||
ui.selectedReportType = props.reportType;
|
||||
});
|
||||
|
||||
return {
|
||||
ui,
|
||||
onUploadSuccess,
|
||||
|
@@ -81,7 +81,7 @@
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<BiDataUploadView />
|
||||
<BiDataUploadView :report-type="0" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,30 +1,136 @@
|
||||
src/views/data/bi/TelsalerAttachingRateView.vue<!--
|
||||
<!--
|
||||
* @Author: Kane
|
||||
* @Date: 2023-10-17 14:41:39
|
||||
* @Date: 2023-10-17 23:31:19
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/src/views/data/TelsalerAttachingRateView.vue
|
||||
* @FilePath: /task_schedule/src/views/data/bi/TelsalerRenewalRateView.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2023} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="wrapper" />
|
||||
<div class="wrapper">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-button
|
||||
type="warning"
|
||||
icon="Upload"
|
||||
@click="showUploadFileDialog"
|
||||
>
|
||||
上传
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table
|
||||
border
|
||||
stripe
|
||||
style="width:100%;"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="部门"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="责任人"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="到期数-全月"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="个车续保率(序时)(%)"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="个车续保率(全月)(%)"
|
||||
align="center"
|
||||
/>
|
||||
</el-table>
|
||||
<div class="pagination_wrapper">
|
||||
<el-pagination
|
||||
v-model="ui.tableCurrentPageIndex"
|
||||
class="pull_left"
|
||||
size="small"
|
||||
background
|
||||
:page-size="ui.tablePageSize"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="0"
|
||||
@current-change="onCurrentPageIndexChange"
|
||||
@size-change="onTablePageSizeChange"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="upload-dialog-wrapper"
|
||||
>
|
||||
<el-dialog
|
||||
v-model="ui.showUploadDialog"
|
||||
title="上传报表"
|
||||
width="600px"
|
||||
:close-on-click-modal="false"
|
||||
:close-on-press-escape="false"
|
||||
:show-close="true"
|
||||
>
|
||||
<BiDataUploadView :report-type="1" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { reactive } from "vue";
|
||||
import BiDataUploadView from "@/views/data/bi/BiDataUploadView.vue";
|
||||
|
||||
export default {
|
||||
name: "TelsalerAttachingRateView",
|
||||
components: { BiDataUploadView, },
|
||||
setup()
|
||||
{
|
||||
const ui = reactive({
|
||||
showUI: true,
|
||||
showUploadDialog: false,
|
||||
tableCurrentPageIndex: 1,
|
||||
tablePageSize: 10,
|
||||
});
|
||||
|
||||
const showUploadFileDialog = (): void =>
|
||||
{
|
||||
ui.showUploadDialog = true;
|
||||
};
|
||||
|
||||
const onCurrentPageIndexChange = ( index: number ): void =>
|
||||
{
|
||||
ui.tableCurrentPageIndex = index;
|
||||
};
|
||||
|
||||
const onTablePageSizeChange = ( pageSize: number ): void =>
|
||||
{
|
||||
ui.tablePageSize = pageSize;
|
||||
};
|
||||
|
||||
return {
|
||||
ui,
|
||||
showUploadFileDialog,
|
||||
onCurrentPageIndexChange,
|
||||
onTablePageSizeChange,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.wrapper {
|
||||
margin: 10px;
|
||||
|
||||
>*+* {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.pagination_wrapper {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
</style>
|
||||
|
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* @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.BITelsalerAttachingRateRecord;
|
||||
import com.cpic.xim.mybatis.pojo.BITelsalerRenewalRateRecord;
|
||||
|
||||
public interface QueryBIArchievementDataMapper
|
||||
{
|
||||
public ArrayList<BITelsalerAttachingRateRecord> queryBITelsalerAttachingRate();
|
||||
|
||||
public ArrayList<BITelsalerRenewalRateRecord> queryBITesalerRenewalRate();
|
||||
}
|
@@ -47,19 +47,19 @@ public class BITelsalerAttachingRateRecord
|
||||
private double attachingRateChange;
|
||||
|
||||
// 当月客户渗透率
|
||||
@JsonProperty( "customerHandleRateCell" )
|
||||
@JsonProperty( "customerHandleRate" )
|
||||
private double customerHandleRate;
|
||||
|
||||
// 客户渗透率环比上月
|
||||
@JsonProperty( "customerHandleRateChangeCell" )
|
||||
@JsonProperty( "customerHandleRateChange" )
|
||||
private double customerHandleRateChange;
|
||||
|
||||
// 当月车非客均保费
|
||||
@JsonProperty( "noMotoPremiumPerCustomerCell" )
|
||||
@JsonProperty( "noMotoPremiumPerCustomer" )
|
||||
private double noMotoPremiumPerCustomer;
|
||||
|
||||
// 客均保费环比上月
|
||||
@JsonProperty( "noMotoPremiumPerCustomerChangeCell" )
|
||||
@JsonProperty( "noMotoPremiumPerCustomerChange" )
|
||||
private double noMotoPremiumPerCustomerChange;
|
||||
|
||||
public BITelsalerAttachingRateRecord( String departmentName, LocalDate summaryDate,
|
||||
|
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* @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 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.BITelsalerAttachingRateRecord;
|
||||
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
|
||||
QueryTelsalerAttachingRateReportResponse queryTelsalerAttachingRateRepor()
|
||||
{
|
||||
QueryTelsalerAttachingRateReportResponse response =
|
||||
new QueryTelsalerAttachingRateReportResponse();
|
||||
SqlSession session = null;
|
||||
QueryBIArchievementDataMapper mapper = null;
|
||||
|
||||
try
|
||||
{
|
||||
session = MybatisUtils.getSqlSession();
|
||||
mapper = session.getMapper( QueryBIArchievementDataMapper.class );
|
||||
|
||||
ArrayList<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;
|
||||
}
|
||||
}
|
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* @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.web.controllers.QueryResponse;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class QueryTelsalerAttachingRateReportResponse extends QueryResponse
|
||||
{
|
||||
@JsonProperty("records")
|
||||
ArrayList<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 ArrayList<BITelsalerAttachingRateRecord> getRecords()
|
||||
{
|
||||
return records;
|
||||
}
|
||||
|
||||
public void setRecords( ArrayList<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,63 @@
|
||||
<?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" resultMap="BITelsalerAttachingRate">
|
||||
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" resultMap="BITelsalerRenewalRate">
|
||||
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>
|
||||
</mapper>
|
@@ -27,5 +27,6 @@
|
||||
<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>
|
Reference in New Issue
Block a user