From cb1c08fff4f2c5362ce21867c0f7e248daa3b3b9 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Fri, 13 Oct 2023 18:33:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90bi=E6=8A=A5=E8=A1=A8=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E7=9A=84controller=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...portBIData.java => ImportBIExcelData.java} | 20 +- .../ImportTelsalerArchievementController.java | 65 ------ .../dataimport/bi/ImportBIDataController.java | 188 ++++++++++++++++++ .../dataimport/bi/ImportBIDataRequest.java | 127 ++++++++++++ .../dataimport/bi/ImportBIDataResponse.java | 78 ++++++++ .../test/BatchInsertTest.java | 8 +- 6 files changed, 407 insertions(+), 79 deletions(-) rename code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/{ImportBIData.java => ImportBIExcelData.java} (94%) delete mode 100644 code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/TelsalerArchievement/ImportTelsalerArchievementController.java create mode 100644 code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataController.java create mode 100644 code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataRequest.java create mode 100644 code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataResponse.java diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIData.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIExcelData.java similarity index 94% rename from code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIData.java rename to code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIExcelData.java index 635840e..510417b 100644 --- a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIData.java +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIExcelData.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2023-10-08 15:02:15 * @LastEditors: Kane - * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/TelsalerArchievementData.java + * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/utils/data/ImportBIData.java * @Description: 坐席业绩相关的数据操作方法。 * * Copyright (c) ${2023} by Kane, All Rights Reserved. @@ -26,9 +26,9 @@ import com.cpic.xim.utils.poi.MyPOIUtils; /** * 坐席业绩相关的数据操作方法。 */ -public class ImportBIData +public class ImportBIExcelData { - private static Logger logger = LoggerFactory.getLogger( ImportBIData.class ); + private static Logger logger = LoggerFactory.getLogger( ImportBIExcelData.class ); /** * 从excel文件读取坐席的车非渗透率数据 @@ -39,7 +39,7 @@ public class ImportBIData * @throws InvalidFormatException excel单元格格式错误时抛出 */ public static ArrayList importBITelsalerAttachingRateRecordFromXlsx( - String filePath, LocalDate summaryDate, boolean hasCaptionRow ) + String filePath, int SheetIndex, boolean hasCaptionRow ) throws IOException, InvalidFormatException { ArrayList records = new ArrayList<>( 200 ); @@ -50,7 +50,7 @@ public class ImportBIData try { wb = WorkbookFactory.create( new File( filePath ) ); - sheet = wb.getSheet( "经办" ); + sheet = wb.getSheetAt(SheetIndex); for ( Row row : sheet ) { @@ -95,7 +95,7 @@ public class ImportBIData MyPOIUtils.getNumbericCellValue( row, 10 ); BITelsalerAttachingRateRecord record = new BITelsalerAttachingRateRecord( - summaryDate, name, motoPremium, nomotoPremium, motoPremiumProPortion, + LocalDate.now(), name, motoPremium, nomotoPremium, motoPremiumProPortion, attachingRate, attachingRateChange, customerHandleRateCell, customerHandleRateChangeCell, noMotoPremiumPerCustomerCell, noMotoPremiumPerCustomerChangeCell ); @@ -143,7 +143,7 @@ public class ImportBIData * @return */ public static ArrayList importBITelsalerRenewalRateFromXlsx( - String filePath, String sheetName, boolean hasCaptionRow, LocalDate summaryDate ) + String filePath, int sheetIndex, boolean hasCaptionRow, LocalDate summaryDate ) throws IOException { ArrayList records = new ArrayList<>( 200 ); @@ -154,7 +154,7 @@ public class ImportBIData try { wb = WorkbookFactory.create( new File( filePath ) ); - sheet = wb.getSheet( sheetName ); + sheet = wb.getSheetAt( sheetIndex ); int rowIndex = 0; for ( Row row : sheet ) @@ -215,7 +215,7 @@ public class ImportBIData } public static ArrayList importBIDepartmentArchievementRecords( - String filePath, String sheetName, boolean hasCaptionRow ) throws IOException + String filePath, int sheetIndex, boolean hasCaptionRow ) throws IOException { ArrayList records = new ArrayList<>( 5 ); @@ -225,7 +225,7 @@ public class ImportBIData { wb = WorkbookFactory.create( new File( filePath ) ); - Sheet sheet = wb.getSheet( sheetName ); + Sheet sheet = wb.getSheetAt( sheetIndex ); int rowIndex = 0; for ( Row row : sheet ) diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/TelsalerArchievement/ImportTelsalerArchievementController.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/TelsalerArchievement/ImportTelsalerArchievementController.java deleted file mode 100644 index 39a793a..0000000 --- a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/TelsalerArchievement/ImportTelsalerArchievementController.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * @Author: Kane - * @Date: 2023-10-12 00:34:39 - * @LastEditors: Kane - * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/TelsalerArchievement/ImportTelsalerArchievementController.java - * @Description: - * - * Copyright (c) ${2023} by Kane, All Rights Reserved. - */ -package com.cpic.xim.web.controllers.dataimport.TelsalerArchievement; - -import java.io.IOException; -import java.util.ArrayList; -import org.apache.ibatis.session.SqlSession; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import com.cpic.xim.mybatis.mapper.ImportBIArchievementDataMapper; -import com.cpic.xim.mybatis.pojo.BITelsalerAttachingRateRecord; -import com.cpic.xim.mybatis.utils.MybatisUtils; -import com.cpic.xim.utils.data.ImportBIData; - -@Controller -@RequestMapping(method=RequestMethod.POST, path="/import_telsaler_archievement") -public class ImportTelsalerArchievementController -{ - void importTelsalerAttachingRate() - { - String filePath = "D:\\develop\\cpicxim\\desktop_task_schedule\\数据\\测试用\\坐席车非渗透.xlsx"; - SqlSession session = null; - - try - { - ArrayList records = ImportBIData.importBITelsalerAttachingRateRecordFromXlsx( filePath, null, - true ); - session = MybatisUtils.getSqlSessionBatch(); - ImportBIArchievementDataMapper mapper = session.getMapper( ImportBIArchievementDataMapper.class ); - - for ( BITelsalerAttachingRateRecord record : records ) - { - mapper.insertTelsalerAttachingRateDataToDB(record); - } - - session.commit(); - - assert( true ); - } - catch ( IOException error ) - { - assert (false); - } - catch ( InvalidFormatException error ) - { - assert (false); - } - catch (Exception error) - { - if ( session != null) - { - session.rollback(); - } - } - } -} \ No newline at end of file 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 new file mode 100644 index 0000000..aaeb74e --- /dev/null +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataController.java @@ -0,0 +1,188 @@ +/* + * @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.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +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.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 = "" ) + @ResponseBody + public static ImportBIDataResponse importBIData( @RequestParam ImportBIDataRequest request ) + { + ImportBIDataResponse response = new ImportBIDataResponse(); + String filePath = request.getFilePath(); + ReportType type = request.getReportType(); + boolean hasCaption = request.isHasCaption(); + int sheetIndex = request.getSheetIndex(); + + try + { + if ( type == ReportType.TelsalerAttachingRateReport ) + { + importBITelsalerAttachingRate( filePath, sheetIndex, hasCaption ); + } + else if ( type == ReportType.TelsalerRenewalRateReport ) + { + importBITeslsalerRenewalRate( filePath, sheetIndex, hasCaption ); + } + else if ( type == ReportType.DepartmentAttachingRenewalRateReport ) + { + importBIDepartmentArchievement( filePath, sheetIndex, hasCaption ); + } + } + catch ( IOException error ) + { + String message = ""; + response.setSuccess( false ); + response.setMessage( message ); + } + catch ( InvalidFormatException error ) + { + String message = ""; + response.setSuccess( false ); + response.setMessage( message ); + } + catch ( PersistenceException error ) + { + String message = ""; + response.setSuccess( false ); + response.setMessage( message ); + } + + return response; + } + + private static void importBITelsalerAttachingRate( String filePath, int sheetIndex, + boolean hasCaption ) throws PersistenceException, IOException, InvalidFormatException + { + SqlSession session = null; + + try + { + ArrayList records = + ImportBIExcelData.importBITelsalerAttachingRateRecordFromXlsx( filePath, + sheetIndex, hasCaption ); + + session = MybatisUtils.getSqlSessionBatch(); + ImportBIArchievementDataMapper mapper = + session.getMapper( ImportBIArchievementDataMapper.class ); + + mapper.cleanTelsalerAttachingRateData(); + + for ( BITelsalerAttachingRateRecord record : records ) + { + mapper.insertTelsalerAttachingRateDataToDB( record ); + } + + session.commit(); + } + catch ( Exception error ) + { + if ( session != null ) + { + session.rollback(); + } + + throw error; + } + } + + private static void importBITeslsalerRenewalRate( String filePath, int sheetIndex, + boolean hasCaption ) throws PersistenceException, IOException, InvalidFormatException + { + ArrayList records = null; + SqlSession session = null; + ImportBIArchievementDataMapper mapper = null; + + try + { + records = ImportBIExcelData.importBITelsalerRenewalRateFromXlsx( filePath, sheetIndex, + hasCaption, LocalDate.now() ); + + session = MybatisUtils.getSqlSessionBatch(); + mapper = session.getMapper( ImportBIArchievementDataMapper.class ); + + // 清理数据 + mapper.cleanTelsalerRenewalRateData(); + + for ( BITelsalerRenewalRateRecord record : records ) + { + mapper.insertTelsalerRenewalRateDataToDB( record ); + } + + session.commit(); + } + catch ( Exception error ) + { + if ( session != null ) + { + session.rollback(); + } + + throw error; + } + } + + private static void importBIDepartmentArchievement( String filePath, int sheetIndex, + boolean hasCaption ) throws PersistenceException, IOException, InvalidFormatException + { + ArrayList records = null; + SqlSession session = null; + ImportBIArchievementDataMapper mapper = null; + + try + { + records = ImportBIExcelData.importBIDepartmentArchievementRecords( filePath, sheetIndex, + hasCaption ); + session = MybatisUtils.getSqlSessionBatch(); + mapper = session.getMapper( ImportBIArchievementDataMapper.class ); + + mapper.cleanDepartmentAttachingRenewalRateData(); + + for ( BIDepartmentArchievementRecord record : records ) + { + mapper.insertDepartmentAttachingRenewalRateDataToDB( record ); + } + + session.commit(); + } + catch ( Exception error ) + { + if ( session != null ) + { + session.rollback(); + } + } + } +} 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 new file mode 100644 index 0000000..0391263 --- /dev/null +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataRequest.java @@ -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, DepartmentAttachingRenewalRateReport + }; + + // 导入文件的路径 + @JsonProperty( "filePath" ) + private String filePath; + + // 报表名称 + @JsonProperty( "reportType" ) + private ReportType reportType; + + // 是否有标题行 + @JsonProperty( "hasCaption" ) + private boolean hasCaption; + + // sheet索引 + @JsonProperty( "sheetIndex" ) + private int sheetIndex; + + public ImportBIDataRequest() + {} + + public boolean isHasCaption() + { + return hasCaption; + } + + public void setHasCaption( boolean hasCaption ) + { + this.hasCaption = hasCaption; + } + + 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 + (hasCaption ? 1231 : 1237); + 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 ( hasCaption != other.hasCaption ) + return false; + if ( sheetIndex != other.sheetIndex ) + return false; + return true; + } + + @Override + public String toString() + { + return "ImportBIDataRequest [filePath=" + filePath + ", reportType=" + reportType + + ", hasCaption=" + hasCaption + ", sheetIndex=" + sheetIndex + "]"; + } + + +} diff --git a/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataResponse.java b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataResponse.java new file mode 100644 index 0000000..a46749c --- /dev/null +++ b/code/后端/desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/dataimport/bi/ImportBIDataResponse.java @@ -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; + } +} 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 d70e421..8be8fd7 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 @@ -15,7 +15,7 @@ import org.junit.Test; import com.cpic.xim.mybatis.mapper.ImportBIArchievementDataMapper; import com.cpic.xim.mybatis.pojo.*; import com.cpic.xim.mybatis.utils.MybatisUtils; -import com.cpic.xim.utils.data.ImportBIData; +import com.cpic.xim.utils.data.ImportBIExcelData; import java.util.ArrayList; public class BatchInsertTest @@ -30,7 +30,7 @@ public class BatchInsertTest try { - records = ImportBIData.importBITelsalerAttachingRateRecordFromXlsx( filePath, null, + records = ImportBIExcelData.importBITelsalerAttachingRateRecordFromXlsx( filePath, 0, true ); session = MybatisUtils.getSqlSessionBatch(); mapper = session.getMapper( ImportBIArchievementDataMapper.class ); @@ -73,7 +73,7 @@ public class BatchInsertTest try { - records = ImportBIData.importBITelsalerRenewalRateFromXlsx( filePath, sheetName, true, + records = ImportBIExcelData.importBITelsalerRenewalRateFromXlsx( filePath, 0, true, null ); session = MybatisUtils.getSqlSessionBatch(); @@ -116,7 +116,7 @@ public class BatchInsertTest try { records = - ImportBIData.importBIDepartmentArchievementRecords( filePath, sheetName, true ); + ImportBIExcelData.importBIDepartmentArchievementRecords( filePath, 0, true ); session = MybatisUtils.getSqlSessionBatch(); mapper = session.getMapper( ImportBIArchievementDataMapper.class );