From 4eec8a9f189d219dcc8c59e084f3ea27ddae4d49 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Mon, 5 Jun 2023 18:09:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=8E=92=E8=A1=8C=E6=A6=9C?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E8=BF=98=E6=B2=A1=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/db/pkg/telsale_archievement_pkg.pck | 82 ++++++++---- .../xim/utils/ranking/CallerRankingItem.java | 7 + .../xim/utils/ranking/CallerRankingList.java | 124 +++++++++++++++--- 3 files changed, 176 insertions(+), 37 deletions(-) diff --git a/code/db/pkg/telsale_archievement_pkg.pck b/code/db/pkg/telsale_archievement_pkg.pck index 3fc531d..15bda13 100644 --- a/code/db/pkg/telsale_archievement_pkg.pck +++ b/code/db/pkg/telsale_archievement_pkg.pck @@ -6,6 +6,10 @@ CREATE OR REPLACE PACKAGE telsale_archievement_pkg IS TYPE cur_type IS REF CURSOR; + -- 异常 + DEPARTMENTCODE_EXCEPTION_CODE CONSTANT INTEGER := -20000; + DEPARTMENTCODE_EXCEPTION_MSG CONSTANT VARCHAR2(100) := '部门代码无效'; + PROCEDURE department_archievement ( a_department_code IN VARCHAR2, @@ -17,8 +21,11 @@ CREATE OR REPLACE PACKAGE telsale_archievement_pkg IS PROCEDURE caller_arch_ranking_list ( - a_department_code IN VARCHAR2, - a_chefei_ranking_list OUT cur_type + a_department_code IN VARCHAR2, + a_year IN VARCHAR2, + a_month IN VARCHAR2, + a_attaching_ranking_list OUT cur_type, + a_renewal_ranking_list OUT cur_type ); END telsale_archievement_pkg; @@ -46,11 +53,19 @@ CREATE OR REPLACE PACKAGE BODY telsale_archievement_pkg IS l_firstday := to_date(to_char(SYSDATE, 'yyyy') || '-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss'); - -- 取得部门代码 - SELECT bm.department_name - INTO l_department_name - FROM idst0.bm_t bm - WHERE bm.department_code = a_department_code; + -- 获取部门名称 + BEGIN + SELECT department_name + INTO l_department_name + FROM idst0.bm_t bm + WHERE bm.department_code = a_department_code; + EXCEPTION + -- 如果没有找到部门名称,说明代码错误,抛出异常 + WHEN NO_DATA_FOUND THEN + raise_application_error(DEPARTMENTCODE_EXCEPTION_CODE, + DEPARTMENTCODE_EXCEPTION_MSG); + + END; --车非渗透率 SELECT decode(SUM(cf.车险个人客户保费), @@ -102,32 +117,55 @@ CREATE OR REPLACE PACKAGE BODY telsale_archievement_pkg IS ORDER BY cf.月份; END; + /*******************************************************/ + -- 坐席排行榜 PROCEDURE caller_arch_ranking_list ( - a_department_code IN VARCHAR2, - a_chefei_ranking_list OUT cur_type + a_department_code IN VARCHAR2, + a_year IN VARCHAR2, + a_month IN VARCHAR2, + a_attaching_ranking_list OUT cur_type, + a_renewal_ranking_list OUT cur_type ) IS - l_current_month VARCHAR2(10); - l_current_year VARCHAR2(4); + l_department_name VARCHAR2(100); BEGIN - l_current_month := to_char(SYSDATE, - 'mm'); - l_current_year := to_char(SYSDATE, - 'yyyy'); + -- 获取部门名称 + BEGIN + SELECT department_name + INTO l_department_name + FROM idst0.bm_t bm + WHERE bm.department_code = a_department_code; + EXCEPTION + -- 如果没有找到部门名称,说明代码错误,抛出异常 + WHEN NO_DATA_FOUND THEN + raise_application_error(DEPARTMENTCODE_EXCEPTION_CODE, + DEPARTMENTCODE_EXCEPTION_MSG); + + END; - OPEN a_chefei_ranking_list FOR + -- 车非融合率排行榜 + OPEN a_attaching_ranking_list FOR SELECT 坐席名称, - round(SUM(车非融合保费) / SUM(车险个人客户保费) * 100, + round(nvl(SUM(车非融合保费) / SUM(车险个人客户保费), + 0) * 100, 2) 车非渗透率 FROM 坐席车非每日保费 - WHERE 月份 = l_current_month - AND 年份 = l_current_year + WHERE 月份 = a_month + AND 年份 = a_year AND 部门代码 = a_department_code - GROUP BY 月份, - 部门代码, - 坐席名称 + GROUP BY 坐席名称 --HAVING 月份 = '06月' ORDER BY 车非渗透率 DESC; + + -- 续保率排行榜 + OPEN a_renewal_ranking_list FOR + SELECT 坐席名称, + round(nvl(已续保累计 / 到期数 * 100, + 0), + 2) 续保率 + FROM 坐席续保统计 xb + WHERE xb.部门 = '续保业务部' + ORDER BY 续保率 DESC; END; BEGIN diff --git a/code/鍚庣/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRankingItem.java b/code/鍚庣/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRankingItem.java index 27eedfa..d517f67 100644 --- a/code/鍚庣/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRankingItem.java +++ b/code/鍚庣/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRankingItem.java @@ -15,6 +15,13 @@ public class CallerRankingItem { public CallerRankingItem() {} + + public CallerRankingItem( int index, String callName, String appraiseValue ) + { + this.index = index; + this.callerName = callName; + this.appraiseValue = appraiseValue; + } public int getIndex() { diff --git a/code/鍚庣/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRankingList.java b/code/鍚庣/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRankingList.java index 1ca50c2..4c98ffb 100644 --- a/code/鍚庣/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRankingList.java +++ b/code/鍚庣/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/ranking/CallerRankingList.java @@ -9,17 +9,12 @@ */ package com.cpic.xim.utils.ranking; -import java.util.Vector; -import com.fasterxml.jackson.annotation.JsonProperty; +import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; -import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.CallableStatement; - import java.util.Vector; -import com.fasterxml.jackson.annotation.JsonProperty; import oracle.jdbc.OracleCallableStatement; import oracle.jdbc.OracleTypes; @@ -30,9 +25,13 @@ public class CallerRankingList private static String userName = "desktop_archievement_admin"; private static String password = "Cpic123456"; - private CallerRankingList( Vector attachingRateRankingList, + private CallerRankingList( String departmentCode, String year, String month, + Vector attachingRateRankingList, Vector renewalRateRankingList) { + this.departmentCode = departmentCode; + this.year = year; + this.month = month; this.attachingRateRankingList = attachingRateRankingList; this.renewalRateRankingList = renewalRateRankingList; } @@ -51,30 +50,77 @@ public class CallerRankingList Connection connection = null; CallableStatement statement = null; - ResultSet result = null; + ResultSet cur_attaching = null; + ResultSet cur_renewal = null; String sql = """ {call telsale_archievement_pkg.caller_arch_ranking_list(?,?,?)} """; String monthRegx = "(0[1-9])|(1[0-2])"; String yearRegx = "20[0-2][0-0]"; + Vector attachingRateRankingList = new Vector<>(); + Vector renewalRateRankingList = new Vector<>(); + + int index = 1; + try { Class.forName( "oracle.jdbc.driver.OracleDriver" ); connection = DriverManager.getConnection( jdbcURL, userName, password ); - statement = connection.prepareCall(sql); + statement = connection.prepareCall( sql ); statement.setString( 1, departmentCode ); - statement.registerOutParameter(2, OracleTypes.CURSOR ); - statement.registerOutParameter(3, OracleTypes.CURSOR ); + statement.setString( 2, year ); + statement.setString( 3, month ); + statement.registerOutParameter( 4, OracleTypes.CURSOR ); + statement.registerOutParameter( 5, OracleTypes.CURSOR ); + + statement.execute(); + + // 杞﹂潪娓楅忕巼 + cur_attaching = ((OracleCallableStatement) statement).getCursor( 4 ); + index = 1; + + while ( cur_attaching.next()) + { + String callerName = cur_attaching.getString( 1 ); + String appraiseValue = cur_attaching.getString( 2 ); + + CallerRankingItem caller = + new CallerRankingItem( index, callerName, appraiseValue ); + + attachingRateRankingList.add( caller ); + + index++; + } + + // 缁繚鐜 + cur_renewal = ((OracleCallableStatement) statement).getCursor( 5 ); + index = 1; + + while ( cur_renewal.next()) + { + String callerName = cur_renewal.getString( 1 ); + String appraiseValue = cur_renewal.getString( 2 ); + + CallerRankingItem caller = + new CallerRankingItem( index, callerName, appraiseValue ); + + attachingRateRankingList.add( caller ); + + index++; + } + + rankingList = new CallerRankingList( departmentCode, year, month, + attachingRateRankingList, renewalRateRankingList ); } finally { try { - if ( result != null ) + if ( cur_attaching != null ) { - result.close(); + cur_attaching.close(); } } catch ( Exception exception ) @@ -111,6 +157,56 @@ public class CallerRankingList return rankingList; } + public String getDepartmentCode() + { + return departmentCode; + } + + public void setDepartmentCode( String departmentCode ) + { + this.departmentCode = departmentCode; + } + + public String getYear() + { + return year; + } + + public void setYear( String year ) + { + this.year = year; + } + + public String getMonth() + { + return month; + } + + public void setMonth( String month ) + { + this.month = month; + } + + public Vector getAttachingRateRankingList() + { + return attachingRateRankingList; + } + + public void setAttachingRateRankingList( Vector attachingRateRankingList ) + { + this.attachingRateRankingList = attachingRateRankingList; + } + + public Vector getRenewalRateRankingList() + { + return renewalRateRankingList; + } + + public void setRenewalRateRankingList( Vector renewalRateRankingList ) + { + this.renewalRateRankingList = renewalRateRankingList; + } + // 閮ㄩ棬浠g爜 private String departmentCode; @@ -121,11 +217,9 @@ public class CallerRankingList private String month; // 杞﹂潪铻嶅悎鐜囨帓琛 - @JsonProperty( "attachingRateRankingList" ) private Vector attachingRateRankingList; // 缁繚鐜囨帓琛 - @JsonProperty( "renewalRateRankingList" ) private Vector renewalRateRankingList; }