Forráskód Böngészése

修改——1,修改导入时,文档中的默认字符类型的分别处理。

zhouhaijun 6 napja
szülő
commit
69334b44c3

+ 1 - 1
src/main/java/com/bootdo/datas/controller/GyDataImportController.java

@@ -256,7 +256,7 @@ public class GyDataImportController {
         } catch (BDException e){
             return R.error(e.getMessage());
         } catch (Exception e) {
-            e.printStackTrace();
+            log.error(e.toString());
             return R.error("导入失败");
         }
     }

+ 109 - 52
src/main/java/com/bootdo/datas/service/impl/GyDataServiceImpl.java

@@ -19,6 +19,7 @@ import com.bootdo.system.domain.RoleDO;
 import com.bootdo.system.domain.UserDO;
 import com.bootdo.system.service.RoleService;
 import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellType;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -262,7 +263,7 @@ public class GyDataServiceImpl implements GyDataService {
                 userCity = sysCity;
             }
         }
-
+        log.info("===========1=============");
         //判断是哪种格式的
         Row firstRow = xssfSheet.getRow(0);
         Cell firstRowCell = firstRow.getCell(0);
@@ -272,10 +273,13 @@ public class GyDataServiceImpl implements GyDataService {
         } else {
             beginDataRowIndex = 4;
         }
+        log.info("===========2=============");
 
         if(xssfSheet.getLastRowNum() < beginDataRowIndex){ //getLastRowNum返回最后一行的索引,即 比行总数小1
             throw new BDException("excel文件无数据");
         }
+        log.info("===========3=============");
+        log.info("===========3=============");
         // 遍历
         for (int i = beginDataRowIndex; i <= xssfSheet.getLastRowNum(); i++) {
             log.info("userProvince: {}, i: {}", userProvince, i);
@@ -287,6 +291,7 @@ public class GyDataServiceImpl implements GyDataService {
             if(row.getLastCellNum()<52){ //getLastCellNum返回的是最后一列的列数,即 等于总列数
                 throw new BDException("excel文件列数不正确");
             }
+            log.info("===========4============="+i);
             //所属省份
             String dataProvince = row.getCell(18).getStringCellValue();
             String dataCity = row.getCell(19).getStringCellValue();
@@ -297,6 +302,7 @@ public class GyDataServiceImpl implements GyDataService {
                 otherProvince++;
                 continue;
             }
+            log.info("===========5============="+i);
 
             if (StringUtils.isEmpty(dataCity) || (!StringUtils.isEmpty(userCity)) && !dataCity.equals(userCity)) {
                 log.info("当前用户地市: {}, 当前数据地市: {}, 数据名称: {}", userCity, dataCity, row.getCell(1).getStringCellValue());
@@ -304,17 +310,26 @@ public class GyDataServiceImpl implements GyDataService {
                 continue;
             }
 
+            log.info("===========6============="+i);
 
             // 企业单位
             GyUnitDO gyUnitDO = new GyUnitDO();
             // 数据信息
             GyDataDO gyDataDO = new GyDataDO();
 
+            //代码报错:java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell
+            //GyUnitDO tmpGyUnitDO = gyUnitDao.getGyUnitByCreditCode(row.getCell(17).getStringCellValue());
+
+            //获取单元格的字符出信息
+            String creditCode = this.getCellValue_String(row,17);
+            log.info("===========6.5============creditCode="+creditCode);
+            // 使用获取到的信用代码
+            GyUnitDO tmpGyUnitDO = gyUnitDao.getGyUnitByCreditCode(creditCode);
 
-            GyUnitDO tmpGyUnitDO = gyUnitDao.getGyUnitByCreditCode(row.getCell(17).getStringCellValue());
             //判断是否已经在gu_unit表中添加企业信息
             if (ObjectUtils.isEmpty(tmpGyUnitDO) ) {
                 //没有添加企业信息,   需要进行企业信息的添加,审核状态为【未审核】
+                log.info("===========7============="+i);
                 try {
                     this.createGyUnitDO(gyUnitDO, row);
                     gyUnitDO.setCreateTime(new Date());
@@ -327,15 +342,18 @@ public class GyDataServiceImpl implements GyDataService {
                 unitNoAudit++;
                 break;
             } else {
+                log.info("===========8============="+i);
                 if ( !"1".equals(tmpGyUnitDO.getAuditStatus()) ){
                     unitNoAudit++;
                     break;
                 }
             }
 
+            log.info("===========9============="+i);
             //无数据导出
-            if ("/".equals(row.getCell(1).getStringCellValue()) && row.getCell(16).getStringCellValue() !=null && !"/".equals(row.getCell(16).getStringCellValue())) {
+            if ("/".equals(this.getCellValue_String(row,1)) && this.getCellValue_String(row,16) !=null && !"/".equals(row.getCell(16).getStringCellValue())) {
 
+                log.info("===========10============="+i);
                 int count = gyUnitDao.getGyUnit(this.createGyUnitDO(gyUnitDO,row));
                 if (count == 0) {
                     try {
@@ -350,57 +368,63 @@ public class GyDataServiceImpl implements GyDataService {
                 break;
             }
 
-            gyDataDO.setDataName(row.getCell(1).getStringCellValue());//数据名称
-            gyDataDO.setDataTypeBase(row.getCell(2).getStringCellValue());//数据分类分级规范
-            gyDataDO.setDataTypeOne(row.getCell(3).getStringCellValue());//数据一级类别
-            gyDataDO.setDataTypeTwo(row.getCell(4).getStringCellValue());//数据二级类别
-            gyDataDO.setDataTypeThree(row.getCell(5)==null?null:row.getCell(5).getStringCellValue());//数据三级类别
-            gyDataDO.setDataTypeFour(row.getCell(6)==null?null:row.getCell(6).getStringCellValue());//数据四级类别
-            gyDataDO.setDataLevel(row.getCell(7).getStringCellValue());//数据级别
-            gyDataDO.setDataCarrier(row.getCell(8).getStringCellValue());//数据载体
-            gyDataDO.setDataSource(row.getCell(9).getStringCellValue());//数据来源
+            gyDataDO.setDataName(this.getCellValue_String(row,1));//数据名称
+            gyDataDO.setDataTypeBase(this.getCellValue_String(row,2));//数据分类分级规范
+            gyDataDO.setDataTypeOne(this.getCellValue_String(row,3));//数据一级类别
+            gyDataDO.setDataTypeTwo(this.getCellValue_String(row,4));//数据二级类别
+            gyDataDO.setDataTypeThree(row.getCell(5)==null?null:this.getCellValue_String(row,5));//数据三级类别
+            gyDataDO.setDataTypeFour(row.getCell(6)==null?null:this.getCellValue_String(row,6));//数据四级类别
+            gyDataDO.setDataLevel(this.getCellValue_String(row,7));//数据级别
+            gyDataDO.setDataCarrier(this.getCellValue_String(row,8));//数据载体
+            gyDataDO.setDataSource(this.getCellValue_String(row,9));//数据来源
             gyDataDO.setDataNumGb(row.getCell(10).getNumericCellValue());//数据数量(非电子数据)
             gyDataDO.setDataNum((int) row.getCell(11).getNumericCellValue());//数据数量(电子数据)
-            gyDataDO.setDataScope(row.getCell(12).getStringCellValue());//覆盖类型
-            gyDataDO.setDataProportion(row.getCell(13).getStringCellValue());//覆盖占比
-            gyDataDO.setDataPrecision(row.getCell(14).getStringCellValue());//数据精度
-            gyDataDO.setDataPrecisionDes(row.getCell(15).getStringCellValue());//数据精度描述
+            gyDataDO.setDataScope(this.getCellValue_String(row,12));//覆盖类型
+            gyDataDO.setDataProportion(this.getCellValue_String(row,13));//覆盖占比
+            gyDataDO.setDataPrecision(this.getCellValue_String(row,14));//数据精度
+            gyDataDO.setDataPrecisionDes(this.getCellValue_String(row,15));//数据精度描述
 
+            log.info("===========11============="+i);
             //添加企业信息
             gyUnitList.add(this.createGyUnitDO(gyUnitDO,row));
 
-            gyDataDO.setDataHandleType(row.getCell(26).getStringCellValue());//数据处理方式
-            gyDataDO.setDataResult(row.getCell(27).getStringCellValue());//数据目的
-            gyDataDO.setIsAlgorithmHandle(row.getCell(28).getStringCellValue());//是否涉及算法处理
-            gyDataDO.setIsCross(row.getCell(29).getStringCellValue());//是否出境
-            gyDataDO.setCrossAcceptName(row.getCell(30).getStringCellValue());//跨境接收方名称
-            gyDataDO.setDataCrossType(row.getCell(31).getStringCellValue());//出境方式
-            gyDataDO.setIsSecurityAss(row.getCell(32).getStringCellValue());//是否安全评估
-            gyDataDO.setAssessResult(row.getCell(33).getStringCellValue());//评估结果
-            gyDataDO.setIsCrossMain(row.getCell(34).getStringCellValue());//是否对外共享
-            gyDataDO.setCrossmainAcceptName(row.getCell(35).getStringCellValue());//数据对外共享接收方
-            gyDataDO.setDataCrossmainType(row.getCell(36).getStringCellValue());//数据对外共享方式
-            gyDataDO.setIsForeignData(row.getCell(37).getStringCellValue());//是否为涉外数据
-            gyDataDO.setIsCrossmainFlow(row.getCell(38).getStringCellValue());//是否涉及跨主体流动
-            gyDataDO.setInfoSystemName(row.getCell(39).getStringCellValue());//信息系统名称
-            gyDataDO.setInfoSystemIpAddress(row.getCell(40).getStringCellValue());//信息系统ip地址
-            gyDataDO.setInfoSystemDomainName(row.getCell(41).getStringCellValue());//信息系统域名
-            gyDataDO.setInfoSystemType(row.getCell(42).getStringCellValue());//信息系统类型
-            gyDataDO.setSecurityCognizance(row.getCell(43).getStringCellValue());//网络安全等级保护认定情况
-            gyDataDO.setComSecurityCognizance(row.getCell(44).getStringCellValue());//通信网络安全防护定级备案情况
-            gyDataDO.setIsKetSystem(row.getCell(45).getStringCellValue());//是否为关键信息基础设施
-            gyDataDO.setIsKeydataAss(row.getCell(46).getStringCellValue());//是否开展重要数据安全风险评估
-            gyDataDO.setAssessOrg(row.getCell(47).getStringCellValue());//评估机构
-            gyDataDO.setAssessBase(row.getCell(48).getStringCellValue());//评估依据的规范
-            gyDataDO.setAssessTime(row.getCell(49).getStringCellValue());//评估时间
-            gyDataDO.setDataAssessResult(row.getCell(50).getStringCellValue());//重要数据安全风险评估结论
-            gyDataDO.setDataDesc(row.getCell(51).getStringCellValue());//备注
+            gyDataDO.setDataHandleType(this.getCellValue_String(row,26));//数据处理方式
+            gyDataDO.setDataResult(this.getCellValue_String(row,27));//数据目的
+            gyDataDO.setIsAlgorithmHandle(this.getCellValue_String(row,28));//是否涉及算法处理
+            gyDataDO.setIsCross(this.getCellValue_String(row,29));//是否出境
+            gyDataDO.setCrossAcceptName(this.getCellValue_String(row,30));//跨境接收方名称
+            gyDataDO.setDataCrossType(this.getCellValue_String(row,31));//出境方式
+            gyDataDO.setIsSecurityAss(this.getCellValue_String(row,32));//是否安全评估
+            gyDataDO.setAssessResult(this.getCellValue_String(row,33));//评估结果
+            gyDataDO.setIsCrossMain(this.getCellValue_String(row,34));//是否对外共享
+            gyDataDO.setCrossmainAcceptName(this.getCellValue_String(row,35));//数据对外共享接收方
+            gyDataDO.setDataCrossmainType(this.getCellValue_String(row,36));//数据对外共享方式
+            gyDataDO.setIsForeignData(this.getCellValue_String(row,37));//是否为涉外数据
+            gyDataDO.setIsCrossmainFlow(this.getCellValue_String(row,38));//是否涉及跨主体流动
+            gyDataDO.setInfoSystemName(this.getCellValue_String(row,39));//信息系统名称
+            gyDataDO.setInfoSystemIpAddress(this.getCellValue_String(row,40));//信息系统ip地址
+            gyDataDO.setInfoSystemDomainName(this.getCellValue_String(row,41));//信息系统域名
+            gyDataDO.setInfoSystemType(this.getCellValue_String(row,42));//信息系统类型
+            gyDataDO.setSecurityCognizance(this.getCellValue_String(row,43));//网络安全等级保护认定情况
+            gyDataDO.setComSecurityCognizance(this.getCellValue_String(row,44));//通信网络安全防护定级备案情况
+            gyDataDO.setIsKetSystem(this.getCellValue_String(row,45));//是否为关键信息基础设施
+            gyDataDO.setIsKeydataAss(this.getCellValue_String(row,46));//是否开展重要数据安全风险评估
+            gyDataDO.setAssessOrg(this.getCellValue_String(row,47));//评估机构
+            gyDataDO.setAssessBase(this.getCellValue_String(row,48));//评估依据的规范
+            gyDataDO.setAssessTime(this.getCellValue_String(row,49));//评估时间
+            gyDataDO.setDataAssessResult(this.getCellValue_String(row,50));//重要数据安全风险评估结论
+            gyDataDO.setDataDesc(this.getCellValue_String(row,51));//备注
+            log.info("===========12============="+i);
 
             gyDataDO.setGyUnitId(gyUnitDO.getCreditCode());//关联填报企业
+
+            log.info("===========12.1============="+i+"===type=="+type);
             if (type == 1) { //导入列表导入
+                log.info("===========13============="+i);
                 gyDataDO.setSendVerify("0");// 送审状态 0:未送审 1:已送审
                 gyDataDO.setDataStatus("0"); // 状态 0:待审核 1:删除 2:已上报 3:通过审核 4:驳回
                 gyDataDO.setDeleteStatus("0"); // 状态 0:正常 1:删除
+                log.info("===========14============="+i+"===deployType===="+deployType);
                 if("1".equals(deployType)){ //市级单独部署
                     gyDataDO.setAuditStage("1");
                 } else if("2".equals(deployType)){ //省级单独部署
@@ -433,6 +457,7 @@ public class GyDataServiceImpl implements GyDataService {
 
                 }
             } else { //上报到省级导入
+                log.info("===========15============="+i);
                 gyDataDO.setSendVerify("1");// 送审状态 0:未送审 1:已送审
                 gyDataDO.setDataStatus("3"); // 状态 0:待审核 1:删除 2:已上报 3:通过审核 4:驳回
                 gyDataDO.setDeleteStatus("0"); // 状态 0:正常 1:删除
@@ -460,6 +485,7 @@ public class GyDataServiceImpl implements GyDataService {
             params.put("gyUnitId", gyDataDO.getGyUnitId());// 单位
             //判断数据是否已经上传过
             List<GyDataImportDTO> listInfo = gyDataDao.listId(params);
+            log.info("============16=======listInfo======"+listInfo);
             if (listInfo !=null && listInfo.size()>0) {
                 GyDataImportDTO gyDataImportDTO = listInfo.get(0);
                 if("3".equals(gyDataImportDTO.getDataStatus())){ //审核通过数据不导入
@@ -524,18 +550,49 @@ public class GyDataServiceImpl implements GyDataService {
         return result;
     }
 
+    //获取单元格的字符出信息
+    private String getCellValue_String(Row row,int i) {
+        // 获取单元格
+        Cell cell = row.getCell(i);
+        String result = null;
+
+        if (cell != null) {
+            // 根据 POI 3.17 版本的单元格类型常量处理
+            switch (cell.getCellType()) {
+                case Cell.CELL_TYPE_STRING:
+                    result = cell.getStringCellValue();
+                    break;
+                case Cell.CELL_TYPE_NUMERIC:
+                    // 数值类型转换为字符串
+                    result = String.valueOf(cell.getNumericCellValue());
+                    // 处理小数点后为0的情况(如12345.0 -> 12345)
+                    if (result.endsWith(".0")) {
+                        result = result.substring(0, result.length() - 2);
+                    }
+                    break;
+                case Cell.CELL_TYPE_BLANK:
+                    result = "";
+                    break;
+                default:
+                    // 处理公式、布尔等其他类型
+                    result = String.valueOf(cell);
+            }
+        }
+        return result;
+    }
+
 
     private GyUnitDO createGyUnitDO(GyUnitDO gyUnitDO, Row row){
-        gyUnitDO.setReporterUnit(row.getCell(16).getStringCellValue());// 数据处理者名称
-        gyUnitDO.setCreditCode(row.getCell(17).getStringCellValue());// 统一社会信用代码(机构代码 )
-        gyUnitDO.setUnitProvince(row.getCell(18).getStringCellValue());//所在地区(省)
-        gyUnitDO.setUnitCity(row.getCell(19).getStringCellValue());//所在地区(市)
-        gyUnitDO.setUnitCharacter(row.getCell(20).getStringCellValue());//数据处理者性质
-        gyUnitDO.setIndustryTypeOne(row.getCell(21).getStringCellValue());//所属行业
-        gyUnitDO.setIndustryTypeTwo(row.getCell(22).getStringCellValue());//主营业务范围
-        gyUnitDO.setDataSecurityMan(row.getCell(23).getStringCellValue());//数据安全负责人姓名
-        gyUnitDO.setDataSecurityOffice(row.getCell(24).getStringCellValue());//数据安全负责人职务
-        gyUnitDO.setDataSecurityWay(row.getCell(25).getStringCellValue());//数据安全负责人联系方式
+        gyUnitDO.setReporterUnit(this.getCellValue_String(row,16));// 数据处理者名称
+        gyUnitDO.setCreditCode(this.getCellValue_String(row,17));// 统一社会信用代码(机构代码 )
+        gyUnitDO.setUnitProvince(this.getCellValue_String(row,18));//所在地区(省)
+        gyUnitDO.setUnitCity(this.getCellValue_String(row,19));//所在地区(市)
+        gyUnitDO.setUnitCharacter(this.getCellValue_String(row,20));//数据处理者性质
+        gyUnitDO.setIndustryTypeOne(this.getCellValue_String(row,21));//所属行业
+        gyUnitDO.setIndustryTypeTwo(this.getCellValue_String(row,22));//主营业务范围
+        gyUnitDO.setDataSecurityMan(this.getCellValue_String(row,23));//数据安全负责人姓名
+        gyUnitDO.setDataSecurityOffice(this.getCellValue_String(row,24));//数据安全负责人职务
+        gyUnitDO.setDataSecurityWay(this.getCellValue_String(row,25));//数据安全负责人联系方式
         return gyUnitDO;
     }