From e4d641021e5c4e4c8e9112bae7a30b748302e837 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Tue, 24 Oct 2023 15:53:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5BI=E6=9C=BA=E6=9E=84=E5=BD=93?= =?UTF-8?q?=E6=9C=88=E4=B8=AA=E8=BD=A6=E7=BB=AD=E4=BF=9D=E7=8E=87=E8=B7=9F?= =?UTF-8?q?=E8=B8=AA=E8=A1=A8=E4=B8=8A=E4=BC=A0=E5=AF=BC=E5=85=A5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/db/pkg/telsale_bi_utils.pck | 11 +- ...BI机构当月个车续保率跟踪表.sql | 14 ++ .../src/views/data/bi/BiDataUploadView.vue | 6 +- .../ImportBIArchievementDataMapper.java | 13 +- ...a => BIDepartmentAttachingRateRecord.java} | 6 +- .../pojo/BIDepartmentRenewalRateRecord.java | 214 ++++++++++++++++++ .../xim/utils/data/ImportBIExcelData.java | 129 +++++++++-- .../dataimport/bi/ImportBIDataController.java | 81 +++++-- .../dataimport/bi/ImportBIDataRequest.java | 2 +- .../mapper/ImportBIArchievementDataMapper.xml | 18 +- .../test/BatchInsertTest.java | 10 +- ...车续保率跟踪报表【机构】.xlsx | Bin 0 -> 6057 bytes 12 files changed, 452 insertions(+), 52 deletions(-) create mode 100644 code/db/建表/BI机构当月个车续保率跟踪表.sql rename code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/{BIDepartmentArchievementRecord.java => BIDepartmentAttachingRateRecord.java} (97%) create mode 100644 code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentRenewalRateRecord.java create mode 100644 数据/测试用/当月个车续保率跟踪报表【机构】.xlsx diff --git a/code/db/pkg/telsale_bi_utils.pck b/code/db/pkg/telsale_bi_utils.pck index 0527b8d..e5471c8 100644 --- a/code/db/pkg/telsale_bi_utils.pck +++ b/code/db/pkg/telsale_bi_utils.pck @@ -8,7 +8,9 @@ CREATE OR REPLACE PACKAGE telsale_bi_utils IS PROCEDURE BIϯͳƱ; - PROCEDURE BIҵͳƱ; + PROCEDURE BI͸ʸٱ; + + PROCEDURE BIʸٱ; END telsale_bi_utils; / @@ -24,11 +26,16 @@ CREATE OR REPLACE PACKAGE BODY telsale_bi_utils IS EXECUTE IMMEDIATE 'truncate table BIϯͳƱ'; END; - PROCEDURE BIҵͳƱ IS + PROCEDURE BI͸ʸٱ IS BEGIN EXECUTE IMMEDIATE 'truncate table BI͸ͳƱ'; END; + PROCEDURE BIʸٱ IS + BEGIN + EXECUTE IMMEDIATE 'truncate table BI¸ʸٱ'; + END; + BEGIN -- Initialization NULL; diff --git a/code/db/建表/BI机构当月个车续保率跟踪表.sql b/code/db/建表/BI机构当月个车续保率跟踪表.sql new file mode 100644 index 0000000..7ade541 --- /dev/null +++ b/code/db/建表/BI机构当月个车续保率跟踪表.sql @@ -0,0 +1,14 @@ +drop table BI¸ʸٱ; +create table BI¸ʸٱ +( +"β" varchar2(100), +"Ŀֵ1(%)" number, +"-ȫ" integer, +"ʱռ(%)" number, +"ʣʱ(%)" number, +"ʣȫ£(%)" number, +"(%)" number, +"(%)" number, +"ƽǰǩ" integer, +"" number +); diff --git a/code/web/task_schedule/src/views/data/bi/BiDataUploadView.vue b/code/web/task_schedule/src/views/data/bi/BiDataUploadView.vue index 40b7de0..1bc4552 100644 --- a/code/web/task_schedule/src/views/data/bi/BiDataUploadView.vue +++ b/code/web/task_schedule/src/views/data/bi/BiDataUploadView.vue @@ -111,7 +111,11 @@ export default { }, { reportTypeCode: 2, - reportTypeName: "部门车非渗透率续保率", + reportTypeName: "部门车非渗透率", + }, + { + reportTypeCode: 3, + reportTypeName: "当月个车续保率跟踪报表【机构】", },], sheetIndex: 0, firstRow: 2, diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/ImportBIArchievementDataMapper.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/ImportBIArchievementDataMapper.java index 4790398..d87f316 100644 --- a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/ImportBIArchievementDataMapper.java +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/ImportBIArchievementDataMapper.java @@ -2,16 +2,17 @@ * @Author: Kane * @Date: 2023-10-11 16:47:59 * @LastEditors: Kane - * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/ImportArchievementDataMapper.java + * @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; -import com.cpic.xim.mybatis.pojo.BIDepartmentArchievementRecord; public interface ImportBIArchievementDataMapper { @@ -19,11 +20,15 @@ public interface ImportBIArchievementDataMapper public void insertTelsalerRenewalRateDataToDB( BITelsalerRenewalRateRecord record ); - public void insertDepartmentAttachingRenewalRateDataToDB(BIDepartmentArchievementRecord record); + public void insertDepartmentAttachingRateDataToDB(BIDepartmentAttachingRateRecord record); + public void insertDepartmentRenewalRateDataToDB(BIDepartmentRenewalRateRecord record); + public void cleanTelsalerAttachingRateData(); public void cleanTelsalerRenewalRateData(); - public void cleanDepartmentAttachingRenewalRateData(); + public void cleanDepartmentAttachingRateData(); + + public void cleanDepartmentRenewalRateData(); } \ No newline at end of file diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentArchievementRecord.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentAttachingRateRecord.java similarity index 97% rename from code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentArchievementRecord.java rename to code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentAttachingRateRecord.java index e8924f7..be5146c 100644 --- a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentArchievementRecord.java +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentAttachingRateRecord.java @@ -9,7 +9,7 @@ */ package com.cpic.xim.mybatis.pojo; -public class BIDepartmentArchievementRecord +public class BIDepartmentAttachingRateRecord { // 部门 private String departmentName; @@ -36,7 +36,7 @@ public class BIDepartmentArchievementRecord // 客均保费环比上月 private double premiumPerCustomerChange; - public BIDepartmentArchievementRecord( String departmentName, double departmentObject, + public BIDepartmentAttachingRateRecord( String departmentName, double departmentObject, double objectGap, double motoPremium, double motoPremiumProPortion, double nomotoPremium, double attachingRate, double attachingRateChange, double customerHandleRate, double customerHandleRateChange, double premiumPerCustomer, @@ -110,7 +110,7 @@ public class BIDepartmentArchievementRecord return false; if ( getClass() != obj.getClass() ) return false; - BIDepartmentArchievementRecord other = (BIDepartmentArchievementRecord) obj; + BIDepartmentAttachingRateRecord other = (BIDepartmentAttachingRateRecord) obj; if ( departmentName == null ) { if ( other.departmentName != null ) diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentRenewalRateRecord.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentRenewalRateRecord.java new file mode 100644 index 0000000..38f3a8c --- /dev/null +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/BIDepartmentRenewalRateRecord.java @@ -0,0 +1,214 @@ +/* + * @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 [责任部门=" + 责任部门 + ", 机构目标值=" + 机构目标值 + ", 到期数全月=" + + 到期数全月 + ", 序时到期数占比=" + 序时到期数占比 + ", 个车续保率序时=" + 个车续保率序时 + ", 个车续保率全月=" + 个车续保率全月 + + ", 环比昨日=" + 环比昨日 + ", 环比上月=" + 环比上月 + ", 平均提前签单天数=" + 平均提前签单天数 + ", 环比=" + 环比 + + "]"; + } +} diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIExcelData.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIExcelData.java index 4c0ecaf..2bd3894 100644 --- a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIExcelData.java +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIExcelData.java @@ -21,7 +21,8 @@ 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.BIDepartmentArchievementRecord; +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; @@ -41,10 +42,14 @@ public final class ImportBIExcelData { "责任人", "机构目标值1(%)", "到期数-全月", "序时到期数占比(%)", "个车续保率(序时)(%)", "个车续保率(全月)(%)", "环比昨日(%)", "环比上月(%)"}; - private static String[] DepartmentArchievementExcelTitle = new String[] + private static String[] DepartmentAttachingRateExcelTitle = new String[] { "部门", "目标值-机构", "目标差距", "车险保费(万)", "车险保费占比", "非车保费(万)", "当月保费渗透率", "保费渗透率环比上月", "当月客户渗透率", "客户渗透率环比上月", "当月车非客均保费", "客均保费环比上月"}; + private static String[] DepartmentRenewalRateExcelTitle = new String[] + { "责任部门", "机构目标值1(%)", "到期数-全月", "序时到期数占比(%)", "个车续保率(序时)(%)", "个车续保率(全月)(%)", "环比昨日(%)", + "环比上月(%)", "平均提前签单天数", "环比",}; + /** * 用于通过对比标题行判断excel文件格式的函数。 * @param sheet @@ -134,7 +139,7 @@ public final class ImportBIExcelData // 先验证格式,不对就抛出错误 if ( !checkExcelFormat( sheet, null, 0, TelsalerAttachingRateExcelTitle, 0 ) ) { - throw new InvalidFormatException("Excel文件格式错误,请检查报表内容!" ); + throw new InvalidFormatException( "Excel文件格式错误,请检查报表内容!" ); } for ( Row row : sheet ) @@ -172,9 +177,11 @@ public final class ImportBIExcelData // 当月客户渗透率 double customerHandleRateCell = MyPOIUtils.getNumbericCellValue( row, 7 ) * 100; // 客户渗透率环比上月 - double customerHandleRateChangeCell = MyPOIUtils.getNumbericCellValue( row, 8 ) * 100; + double customerHandleRateChangeCell = + MyPOIUtils.getNumbericCellValue( row, 8 ) * 100; // 当月车非客均保费 - double noMotoPremiumPerCustomerCell = MyPOIUtils.getNumbericCellValue( row, 9 ) * 100; + double noMotoPremiumPerCustomerCell = + MyPOIUtils.getNumbericCellValue( row, 9 ) * 100; // 客均保费环比上月 double noMotoPremiumPerCustomerChangeCell = MyPOIUtils.getNumbericCellValue( row, 10 ) * 100; @@ -242,9 +249,9 @@ public final class ImportBIExcelData sheet = wb.getSheetAt( sheetIndex ); int rowIndex = 0; - if (!checkExcelFormat( sheet, null, 0, TelSalerRenewalRateExcelTitle, 0 )) + if ( !checkExcelFormat( sheet, null, 0, TelSalerRenewalRateExcelTitle, 0 ) ) { - throw new InvalidFormatException("格式错误,请检查报表内容!"); + throw new InvalidFormatException( "格式错误,请检查报表内容!" ); } for ( Row row : sheet ) @@ -305,10 +312,20 @@ public final class ImportBIExcelData return records; } - public static ArrayList importBIDepartmentArchievementRecords( - String filePath, int sheetIndex, int firstRow ) throws IOException, InvalidFormatException + /** + * 读取BI机构当月个车续保率跟踪表 + * @param filePath + * @param sheetIndex + * @param firstRow + * @return + * @throws IOException + * @throws InvalidFormatException + */ + public static ArrayList importBIDepartmentAttachingRateRecordsFromXlsx( + String filePath, int sheetIndex, int firstRow ) + throws IOException, InvalidFormatException { - ArrayList records = new ArrayList<>( 5 ); + ArrayList records = new ArrayList<>( 5 ); Workbook wb = null; @@ -319,9 +336,9 @@ public final class ImportBIExcelData Sheet sheet = wb.getSheetAt( sheetIndex ); int rowIndex = 0; - if (!checkExcelFormat( sheet, null, 0, DepartmentArchievementExcelTitle, 0 )) + if ( !checkExcelFormat( sheet, null, 0, DepartmentAttachingRateExcelTitle, 0 ) ) { - throw new InvalidFormatException("Excel文件格式错误,请检查报表内容!"); + throw new InvalidFormatException( "Excel文件格式错误,请检查报表内容!" ); } for ( Row row : sheet ) @@ -351,11 +368,13 @@ public final class ImportBIExcelData double attachingRate = MyPOIUtils.getNumbericCellValue( row, 6 ) * 100; double attachingRateChange = MyPOIUtils.getNumbericCellValue( row, 7 ) * 100; double customerHandleRate = MyPOIUtils.getNumbericCellValue( row, 8 ) * 100; - double customerHandleRateChange = MyPOIUtils.getNumbericCellValue( row, 9 ) * 100; + double customerHandleRateChange = + MyPOIUtils.getNumbericCellValue( row, 9 ) * 100; double premiumPerCustomer = MyPOIUtils.getNumbericCellValue( row, 10 ) * 100; - double premiumPerCustomerChange = MyPOIUtils.getNumbericCellValue( row, 11 ) * 100; + double premiumPerCustomerChange = + MyPOIUtils.getNumbericCellValue( row, 11 ) * 100; - BIDepartmentArchievementRecord record = new BIDepartmentArchievementRecord( + BIDepartmentAttachingRateRecord record = new BIDepartmentAttachingRateRecord( departmentName, departmentObject, objectGap, motoPremium, motoPremiumProPortion, nomotoPremium, attachingRate, attachingRateChange, customerHandleRate, customerHandleRateChange, @@ -390,4 +409,84 @@ public final class ImportBIExcelData return records; } + + public static ArrayList importBIDepartmentRenewalRateRecordsFromXlsx( + String filePath, int sheetIndex, int firstRow ) + throws IOException, InvalidFormatException + { + ArrayList 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; + } } diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataController.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataController.java index e7d5312..dd3e180 100644 --- a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataController.java +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataController.java @@ -23,7 +23,8 @@ 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.BIDepartmentArchievementRecord; +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; @@ -57,14 +58,18 @@ public class ImportBIDataController { importedCount = importBITeslsalerRenewalRate( filePath, sheetIndex, firstRow ); } - else if ( type == ReportType.DepartmentAttachingRenewalRateReport ) + else if ( type == ReportType.DepartmentAttachingRateReport ) { - importedCount = importBIDepartmentArchievement( filePath, sheetIndex, firstRow ); + importedCount = importBIDepartmentAttachingRate( filePath, sheetIndex, firstRow ); + } + else if ( type == ReportType.DepartmentRenewalRateReport ) + { + importedCount = importBIDepartmentRenewalRate( filePath, sheetIndex, firstRow ); } - response.setImportedCount(importedCount); - response.setSuccess(true); - response.setMessage("导入成功"); + response.setImportedCount( importedCount ); + response.setSuccess( true ); + response.setMessage( "导入成功" ); } catch ( IOException error ) { @@ -103,9 +108,8 @@ public class ImportBIDataController try { - ArrayList records = - ImportBIExcelData.importBITelsalerAttachingRateRecordFromXlsx( filePath, - sheetIndex, firstRow ); + ArrayList records = ImportBIExcelData + .importBITelsalerAttachingRateRecordFromXlsx( filePath, sheetIndex, firstRow ); session = MybatisUtils.getSqlSessionBatch(); ImportBIArchievementDataMapper mapper = @@ -134,8 +138,8 @@ public class ImportBIDataController return importedCount; } - private static int importBITeslsalerRenewalRate( String filePath, int sheetIndex, - int firstRow ) throws PersistenceException, IOException, InvalidFormatException + private static int importBITeslsalerRenewalRate( String filePath, int sheetIndex, int firstRow ) + throws PersistenceException, IOException, InvalidFormatException { ArrayList records = null; SqlSession session = null; @@ -174,26 +178,26 @@ public class ImportBIDataController return importedCount; } - private static int importBIDepartmentArchievement( String filePath, int sheetIndex, + private static int importBIDepartmentAttachingRate( String filePath, int sheetIndex, int firstRow ) throws PersistenceException, IOException, InvalidFormatException { - ArrayList records = null; + ArrayList records = null; SqlSession session = null; ImportBIArchievementDataMapper mapper = null; int importedCount = 0; try { - records = ImportBIExcelData.importBIDepartmentArchievementRecords( filePath, sheetIndex, - firstRow ); + records = ImportBIExcelData.importBIDepartmentAttachingRateRecordsFromXlsx( filePath, + sheetIndex, firstRow ); session = MybatisUtils.getSqlSessionBatch(); mapper = session.getMapper( ImportBIArchievementDataMapper.class ); - mapper.cleanDepartmentAttachingRenewalRateData(); + mapper.cleanDepartmentAttachingRateData(); - for ( BIDepartmentArchievementRecord record : records ) + for ( BIDepartmentAttachingRateRecord record : records ) { - mapper.insertDepartmentAttachingRenewalRateDataToDB( record ); + mapper.insertDepartmentAttachingRateDataToDB( record ); importedCount++; } @@ -205,6 +209,47 @@ public class ImportBIDataController { session.rollback(); } + + throw error; + } + + return importedCount; + } + + private static int importBIDepartmentRenewalRate( String filePath, int sheetIndex, int firstRow ) + throws PersistenceException, IOException, InvalidFormatException + { + + ArrayList 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; diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataRequest.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataRequest.java index 538fea2..85d7322 100644 --- a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataRequest.java +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataRequest.java @@ -16,7 +16,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class ImportBIDataRequest { public enum ReportType { - TelsalerAttachingRateReport, TelsalerRenewalRateReport, DepartmentAttachingRenewalRateReport + TelsalerAttachingRateReport, TelsalerRenewalRateReport, DepartmentAttachingRateReport, DepartmentRenewalRateReport }; // 导入文件的路径 diff --git a/code/后端/desktop_archievement_backend/src/main/resources/mybatis/mapper/ImportBIArchievementDataMapper.xml b/code/后端/desktop_archievement_backend/src/main/resources/mybatis/mapper/ImportBIArchievementDataMapper.xml index 48c820a..c3287cc 100644 --- a/code/后端/desktop_archievement_backend/src/main/resources/mybatis/mapper/ImportBIArchievementDataMapper.xml +++ b/code/后端/desktop_archievement_backend/src/main/resources/mybatis/mapper/ImportBIArchievementDataMapper.xml @@ -16,7 +16,7 @@ #{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月}) - + insert into BI部门渗透率续保率统计表 ( 部门,"目标值-机构",目标差距,"车险保费", 车险保费占比,"非车保费",当月保费渗透率,保费渗透率环比上月,当月客户渗透率, 客户渗透率环比上月,当月车非客均保费,客均保费环比上月) @@ -25,13 +25,25 @@ #{customerHandleRate},#{customerHandleRateChange},#{premiumPerCustomer},#{premiumPerCustomerChange} ) + + insert into BI机构当月个车续保率跟踪表( "责任部门","机构目标值1(%)","到期数-全月" ,"序时到期数占比(%)","个车续保率(序时)(%)", + "个车续保率(全月)(%)","环比昨日(%)","环比上月(%)","平均提前签单天数","环比") + values (#{责任部门},#{机构目标值},#{到期数全月},#{序时到期数占比}, + #{个车续保率序时},#{个车续保率全月},#{环比昨日},#{环比上月}, + #{平均提前签单天数},#{环比}) + + - + call telsale_bi_utils.清理BI部门渗透率跟踪表() + + + \ No newline at end of file diff --git a/code/后端/desktop_archievement_backend/src/test/java/com/cpic/xim/DesktopArchievement/test/BatchInsertTest.java b/code/后端/desktop_archievement_backend/src/test/java/com/cpic/xim/DesktopArchievement/test/BatchInsertTest.java index 0eac61e..af1f4b2 100644 --- a/code/后端/desktop_archievement_backend/src/test/java/com/cpic/xim/DesktopArchievement/test/BatchInsertTest.java +++ b/code/后端/desktop_archievement_backend/src/test/java/com/cpic/xim/DesktopArchievement/test/BatchInsertTest.java @@ -109,22 +109,22 @@ public class BatchInsertTest String filePath = "D:/develop/cpicxim/deskop_task_schedule/数据/测试用/BI部门渗透率续保率.xlsx"; String sheetName = "部门"; - ArrayList records = null; + ArrayList records = null; SqlSession session = null; ImportBIArchievementDataMapper mapper = null; try { records = - ImportBIExcelData.importBIDepartmentArchievementRecords( filePath, 0, 1 ); + ImportBIExcelData.importBIDepartmentAttachingRateRecordsFromXlsx( filePath, 0, 1 ); session = MybatisUtils.getSqlSessionBatch(); mapper = session.getMapper( ImportBIArchievementDataMapper.class ); - mapper.cleanDepartmentAttachingRenewalRateData(); + mapper.cleanDepartmentAttachingRateData(); - for ( BIDepartmentArchievementRecord record : records ) + for ( BIDepartmentAttachingRateRecord record : records ) { - mapper.insertDepartmentAttachingRenewalRateDataToDB( record ); + mapper.insertDepartmentAttachingRateDataToDB( record ); } session.commit(); diff --git a/数据/测试用/当月个车续保率跟踪报表【机构】.xlsx b/数据/测试用/当月个车续保率跟踪报表【机构】.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4d5ae889f03474c99360786e2e41a41c22581806 GIT binary patch literal 6057 zcmaJ_1z1$=wr0qo2N)!!afT2WO1eS1yHk*cp&L|kNQY*S=FlOCAc#^@iV8@J64G5F z;T`iy z`hlJfa0{LQH`llND(;vt(D`8hgp=zRkRlmY4EGysjwL|ST(@z+;~CKR&}l4sxmbmV zDc<|K;|AlmhZfiRrksiKHFk;V_5oF|stOXV1UEx3&F32ko*tS`e<`$)s$a90m{)og zuPP~AJtX>>FtQR0k{ScdPZ4H=2;3Z%Q>e)B2G|Nx&k|6E;6B+f7o4;|2iBNRnM-bN zC-`*RBR)a1Ins@TL)lDsZ~`%B;PnDz9_qR5>{E+C7MF0a*owPD0Kn>{yTo|o&@^jw%#lm z=S_^pr}X04GM&o`$!m_WiInp|qv6z+;~ubT1VigLY^P;S+VH^(fs*CBz@d#(s+h2! zxuK**tC?S=2Vi1Lpo=>KrD(bdFlhYX;7sEVeY6NtfP`1#Ycpv?w zV^lhHc=C%QeMh5;oTg4E=>nuAtG8t+U$1&DDC4qphqZ(j;g`B2UzZngvfRLWpxidm zHW`VT5lzuMy(WT(H2r1?X<|Jtx#JdGb)bctCoukjrvGjWu5Z`uW9lr(#k;@|8;0EY zn#5#@WsIAMV7#|r;L-KzhYC423LO| z8cDASy7)i}J7J3b9dqll3LlYC!2C^FX{M4H;rFg`jjGb~d1H&ie97f)Z|fEkIbO)r z%uXbNm4y*W-wdS~C)U}-JM`oU$SA~zi|C;(-Zn{&5w28+w`NUQIY}&qTTFuy1tQkHuUk^+XKdljaen8) zqhf~I^J$yDHy|&j8IEEcntXPq^Q$v@3QlUeCrANYt&WF^be$?kY_r@P7Ux)Hq`V zS0LO1)4lR>jv6UTl$^?|#Td235Qx_DxbKT@;^OLIf}92oHJW+8cklAK_FckmgrRCY zc=VVh3ob6+4%duOp6bC5@ULPx9D9En2i-39=@ z6-G&fEJ+s=2xI4E)aD#d5MLki*m{BR5b&_}Q3*E^XYpWp$&3Fn&5FnDSWNuG9$d`_ zxQd$}$peITgQSv-vdX)my6I|(Rgsp0B*DdJPtG3nM$`$-gL(tw4Wp59F9OTS-L{Mk zk>>q83vte~yVXZH#l%D+7idrMfS#R`w*t_9#r#x(8-q__FL0#$`EEh5rRfBcZOtQqCY){jzjwb~Xv`EGk=8n+{i z3>Z-!%X%sbJOk{4h60jIMDe8aKPKyWX0|7|w6d>yJxVzQM~uVk(;9y)o%ueK1Ahv& zWG?#*HrIxZYa_!f@Uag}A3*o;WciLcdWhIyW~0c#>7nmADwMv@TLPb*W^i%sa?eDq zIFT@b-w^ec=&bvfQYw_=Fawhyr}f3;gFL2#l09duh&yH#R{)z)1HUz3}n zCpyh^KprI1 zD3f}zV=}%dJq4gXgRQmzsa&s5++OyxsYYLw#<72&x|8s;D7cdWd-mB~>ab-49+HE^ zuBlZQdyynhHyRgB&oDF9%>FYIF?H#A{iPYG1qzM_;y!_G9dcTF=xt)<$;aUN_~356u4FMoO^c@3Ci>ylmeR_+M(Czv3M{?Jsj|=eX3S6k8DtLRId#v?;I%EiaU<x4C3-LMnA8}Y?`W;onxIlw zcudi^T2qTu|0V!#rbooj_C`^;%iFGyE|2Z9O8@WvT&KiWwf!jlEvgWGNRy#~!ryl# z>0h<&@8RuY>*3*Y)sU#<*J_xu)V(_wl-;v%!^cps2{r7`V#X8H{++&f{`WGnRm6jU z2ofEiak+Y6p^FO3C2YDaT?BzK<%~0?9c| z@c{1|Q8R+r-SuiTSZ1(}Pq0bqRjYbz@~Zm>gLl3h9ox~4(~*;M&^lGpf|WAQLBUvc zXXUxU+T6lH;$^Y8wozO6E)d1(`wzNPOehuXv1Hk#o!;_%v2RtSv77RVyT!Gv((&%o zP1oeMnhkM{6{0MG@pp6uC=Z#f+ec7b5o5WZEc%1bIlnZDIh-d5`_6sYg|#j|)Zv*t zA|mevnBU#_>+R z)GdMLzHzLTeD;C1-g^7!@?3IGAUbz$FXXM z6+c^pU(|fk8WFmul66bwlmo<#*D?=5!UXt6L4C`~>I^W*i zxyhhYsaQe5i756-_y|GXyqkT)Aqnc%r!!Wx8q04>?_h?!01Y-n{d1@ii$fCj8RZ_` zpp#H|-Nv`e z37$DtP|6#UzStYV*_bH)RLaL%t-+J%+r ztN>rbtb=`t8^tJm=FxTI3G;M(v6>_pxGvJX-Bee~cMz9KniLDg`*R0%^6B^tHIMLP zs4iLDFQw5jb?1^GrtY}-mkv$T!5gy7#LtNoa&1cir5dITEY5K@dezEY8uCEYOC!q< zsnACZ(&4VOp@eYk6ONv7jvfR4%4qq#Kq?oC92>QdZ&G+41=*QEhG61hFUSSTJ9@t4 zMYJG@zuI2b&~*~`_%M-6MZ_M>ggQ^_j5IZWDJ7M4(WUkN5W}qsf-qT0Q7l7)n-aL!oET6L_Mn&`reI1ECIUQu1HGFN>e^iA+=c>Ikjzj zY7$}e1-gubyM7isA}TlBexxhbb>8g9mK-Z(a~Q`bM&s4ZeaOl2%&$PR+p*A$#wpeg z7dUEsjNsc%A;c5}0hqgiqcU=Mwhw)2ta9$bV15=fK>fWG$D6Ig8U8vwGJEvVq<3+N zwY>X?4($fGC_|l40tlEQ5Xwr%Hm$OpdiQ&i#}E@%no5EcAFF)Ykhtp4^dcW=!trj4J>>aUoUmny>NvKaqUly@Ss?&!Q>?5eog%glO2T$>v=c?Nw z?{F3)IB>!}wPkCF@720lXHc;NX;tNd?EzK%9mY49b)$H6-bF!5v$Wh*Q%=f0(d<;; z$%u4^Ya^*?+L;KQWSAk8UVT~SHp4^`g-q$MpttqoV7Fp=lD=qS;Ui^j3*N^72H(f= z3l{N%?ohU^0hv|iHSX%`Q}I?aZ?&@lnR17P9MMFq7@*`aJChYo>)1_P%tMGI5@-u`hO?VL0#W(C5nU5-Ltp6i?oyTvB{n z;D&cdvd$b4`9dLX74k=oSFq~k_|5f>*goW@SDM=B^$8xe&=2AJXE#2;3&ZDAOD4bexj z!ASfhNC|&*PGL)E1O6-+)=xTDsPZ58H{ewR{sZVN!Vi6s&{F754`ydn|FkXlaX z=$olVDK1sm-VBa+NksJuB$#pNN_dy-V8{nuar8Foy7j!OXAYin{v^+$2{W|Q(juHo z53H+!*~tF(M&e%3j&xQJ?;v$Ag=PcI>2_?O%sd#DN4TsM+HIb>Eyr*ibPoxEB-csw zg83ZXZzv3N@6^fbMt((UYW8Ls_fVv;kth?-FUz{bSIN&l&u2gYZkNl0PjNV5)ipvs2?TIT@OdY~`>OAx#>Z7LTI{d@s+D)9)t#1a>4K&_h2ZiJ55^ z>GnvIM1e;IGG4xX-unP*L#N(#7jW^Y%A zKAMgWaC=B+F{{@K?ON1VqW4A3ueEHyN+$ECGzm?n!!4T%K8vbI>27tRGgXKb8#=LcvDLuPeb+GYWLn!?qviBcR^^ULl0i&7X zgWVY|V&g>?RS7rlr{)H3wngo2J)&Y_2Z`|3gH5e{jKLG4n66X&(icAddu>6LmoKNK zYg%FkGA%52gfmA2js;N?+kU>y$^M={;mtuJpWF45eVv6+o4HStN6&&zrfnCKAHI3= zrY`K)tk36NvMvV1z|dj*Cq(==_=EonfB5PSp#d7G{eUtf6+~|;?)CWjl1?Nj3X6Qf z*Pjm3kTdz(i{r_NSR|%go}ZHVSyuDY@!*M~JNNM%e3BlB_A0L@a-`S7&(D1%7Xu9F z9fIvzJ0Qc%CRzeP>G}Ii2w-vKj3&eP z7epQN%4xjnGbYkBV9o7Bms^w%5j-JoGE`%4vTkQeDGg%e;loHShn)Fi^o9*B=T1{M!e zLuwp}ig7IuWK2z3bsnXnwk2#Ge~g&^RFBcp3;8vpTakA+dZIzK<1f?*zyxFb=0mR& zbys}of6M>Fj%us@HgLt~U1zhd_`Kf|iC*#=yZ5K!b>8TT?D{Pzw4Z-cUw>*}XH2fR zrQhO;bxr$!nWjJ0uhSM+w90R(M>CfHAIb8kh3muN6}|CWoN@lL@E@|{Pu1&#&einz zTa?hfgk!aZ!@<2;j{yC7gibaI<<;B&0DevTF#rGn literal 0 HcmV?d00001