소스 검색

1.新增【雨水任务单资料导入】功能
2.新增【暂无法预处理确认单资料导入】功能

hs 2 년 전
부모
커밋
aad9309ae4

+ 7 - 0
DataCheck/pom.xml

@@ -39,6 +39,13 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <!--Java读取word中的表格数据-->
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
+            <version>4.1.2</version>
+        </dependency>
 
     </dependencies>
     <build>

+ 107 - 44
DataCheck/src/main/java/com/tofly/dataCheck/controller/RecordManagerController.java

@@ -5,6 +5,7 @@
 package com.tofly.dataCheck.controller;
 
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.tofly.common.core.entity.ResultRespone;
@@ -12,15 +13,26 @@ import com.tofly.common.core.util.StringUtil;
 import com.tofly.common.log.annotation.ToFlyAppLog;
 import com.tofly.common.oauth.util.SecurityUtils;
 import com.tofly.dataCheck.config.FileTableEnum;
+import com.tofly.dataCheck.em.FileSuffixEnum;
+import com.tofly.dataCheck.em.FileTypeEnum;
 import com.tofly.dataCheck.entity.*;
+import com.tofly.dataCheck.excel.entity.SpecialFileExcel;
+import com.tofly.dataCheck.excel.entity.TaskDataExcel;
+import com.tofly.dataCheck.excel.listener.SpecialFileListener;
+import com.tofly.dataCheck.excel.listener.TaskDataListener;
 import com.tofly.dataCheck.service.DetectDataService;
 import com.tofly.dataCheck.service.RecordManagerService;
+import com.tofly.dataCheck.service.SpecialFileDataService;
 import com.tofly.dataCheck.service.ToflyFileService;
+import com.tofly.dataCheck.utils.ReadWordDataUtils;
+import com.tofly.service.CommonFileService;
 import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.ModelAttribute;
 
+import java.io.InputStream;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
@@ -41,11 +53,15 @@ public class RecordManagerController {
 
     private final DetectDataService detectDataService;
 
+    private final SpecialFileDataService specialFileDataService;
+
+    private final CommonFileService commonFileService;
+
 
     /**
      * 分页查询
      *
-     * @param page          分页对象
+     * @param page             分页对象
      * @param recordManagerDto
      * @return
      */
@@ -67,8 +83,8 @@ public class RecordManagerController {
     public ResultRespone getRecordImportPage(Page page, @ModelAttribute RecordManager recordManager) {
         return ResultRespone.success(recordManagerService.page(page, Wrappers.query(recordManager)
                 .isNotNull("file_count")
-                .ge(recordManager.getStartTime()!=null,"CREATE_TIME", recordManager.getStartTime())
-        .le(recordManager.getEndTime()!=null,"CREATE_TIME",recordManager.getEndTime())));
+                .ge(recordManager.getStartTime() != null, "CREATE_TIME", recordManager.getStartTime())
+                .le(recordManager.getEndTime() != null, "CREATE_TIME", recordManager.getEndTime())));
     }
 
 
@@ -185,76 +201,123 @@ public class RecordManagerController {
         if (save) {
             List<ToflyFile> toflyFiles = recordManager.getToflyFiles();
             if (CollUtil.isNotEmpty(toflyFiles)) {
-                RecorManagerImportResult recorManagerImportResult=new RecorManagerImportResult();
-                int fileCount=toflyFiles.size();
-                AtomicInteger checkFileCount= new AtomicInteger();
-                AtomicInteger checkFailedCount= new AtomicInteger();
-                List<String> checkFailedNames=new ArrayList<>();
+                RecorManagerImportResult recorManagerImportResult = new RecorManagerImportResult();
+                int fileCount = toflyFiles.size();
+                AtomicInteger checkFileCount = new AtomicInteger();
+                AtomicInteger checkFailedCount = new AtomicInteger();
+                List<String> checkFailedNames = new ArrayList<>();
                 //获得探测数据来定位档案归类
                 List<DetectDataVo> detectDataVos = detectDataService.detectGroupData();
-                if(CollUtil.isNotEmpty(detectDataVos)){
-                    List<String> roadNames=new ArrayList<>();
-                    List<String> testingZones=new ArrayList<>();
-                    List<String> areas=new ArrayList<>();
-                    detectDataVos.forEach(d->{
-                        if(StringUtil.isNotEmpty(d.getRoadName())) {
+                if (CollUtil.isNotEmpty(detectDataVos)) {
+                    List<String> roadNames = new ArrayList<>();
+                    List<String> testingZones = new ArrayList<>();
+                    List<String> areas = new ArrayList<>();
+
+                    for (DetectDataVo d : detectDataVos) {
+                        if (StringUtil.isNotEmpty(d.getRoadName())) {
                             roadNames.add(d.getRoadName());
                         }
-                        if(StringUtil.isNotEmpty(d.getTestingZone())) {
+                        if (StringUtil.isNotEmpty(d.getTestingZone())) {
                             testingZones.add(d.getTestingZone());
                         }
-                        if(StringUtil.isNotEmpty(d.getArea())) {
+                        if (StringUtil.isNotEmpty(d.getArea())) {
                             areas.add(d.getArea());
                         }
-                    });
+                    }
+
+                    if (CollUtil.isNotEmpty(testingZones)) {
+                        testingZones = testingZones.stream().distinct().collect(Collectors.toList());
+                    }
+                    if (CollUtil.isNotEmpty(areas)) {
+                        areas = areas.stream().distinct().collect(Collectors.toList());
+                    }
+
+                    List<String> finalTestingZones = testingZones;
+                    List<String> finalAreas = areas;
                     toflyFiles.forEach(d -> {
                         d.setSourceId(recordManager.getId());
                         d.setTableName(FileTableEnum.RECORD_MANAGER.getTableName());
                         d.setCreateUser(SecurityUtils.getUserId());
                         d.setCreateTime(new Date());
                         String fileName = d.getFileName();
-                        if(StringUtil.isNotEmpty(fileName)){
-                            String subFileName=null;
-                            if(fileName.contains(".")){
+                        if (StringUtil.isNotEmpty(fileName)) {
+                            String subFileName = null;
+                            if (fileName.contains(".")) {
                                 subFileName = fileName.substring(0, fileName.indexOf("."));
-                            }else{
-                                subFileName=fileName;
+                            } else {
+                                subFileName = fileName;
                             }
-                            Boolean flag=false;
+                            Boolean flag = false;
                             //固定文件名是用-分隔的,例如污水水位确认单-青羊区-404.pdf
                             String[] split = subFileName.split("-");
-                            String linkName=null;
-                            if(null!=split){
+                            String roadName = null;
+                            String tzName = null;
+                            String areaName = null;
+                            String linkName = null;
+                            if (null != split) {
                                 List<String> strings = Arrays.asList(split);
-                                for(int i=strings.size()-1;i<strings.size();i--){
-                                    if(roadNames.contains(strings.get(i))){
-                                        linkName=strings.get(i);
-                                        flag=true;
-                                        break;
-                                    }else if(testingZones.contains(strings.get(i))){
-                                        linkName=strings.get(i);
-                                        flag=true;
-                                        break;
-                                    }else if(areas.contains(strings.get(i))){
-                                        linkName=strings.get(i);
-                                        flag=true;
-                                        break;
-                                    }else{
+                                for (int i = strings.size() - 1; i < strings.size(); i--) {
+                                    if (roadNames.contains(strings.get(i))) {
+                                        roadName = strings.get(i);
                                         break;
                                     }
+                                    if (finalTestingZones.contains(strings.get(i))) {
+                                        tzName = strings.get(i);
+                                    }
+                                    if (finalAreas.contains(strings.get(i))) {
+                                        areaName = strings.get(i);
+                                    }
                                 }
                             }
-                            if(flag){
+
+                            if (StringUtil.isNotEmpty(roadName)) {
+                                linkName = roadName;
+                                flag = true;
+                            } else if (StringUtil.isNotEmpty(tzName)) {
+                                linkName = tzName;
+                                flag = true;
+                            } else if (StringUtil.isNotEmpty(areaName)) {
+                                linkName = areaName;
+                                flag = true;
+                            }
+
+                            if (flag) {
                                 checkFileCount.getAndIncrement();
                                 d.setLinkName(linkName);
-                                toflyFileService.save(d);
-                            }else{
+                                boolean save1 = toflyFileService.save(d);
+                                if (save1) {
+                                    if (recordManager.getFileType().equals(FileTypeEnum.RIAN.getCode())
+                                            && (fileName.contains(FileSuffixEnum.XLS.getCode()) || fileName.contains(FileSuffixEnum.XLSX.getCode()))) {
+                                        //解析excel保存数据
+                                        try {
+                                            final InputStream inputStream = commonFileService.downFile(d.getFileId());
+                                            EasyExcel.read(inputStream, SpecialFileExcel.class, new SpecialFileListener(specialFileDataService, subFileName)).sheet().doRead();
+                                        } catch (Exception e) {
+                                            e.printStackTrace();
+                                        }
+                                    }
+
+                                    if (recordManager.getFileType().equals(FileTypeEnum.HANDLE.getCode())
+                                            && (fileName.contains(FileSuffixEnum.DOC.getCode()) || fileName.contains(FileSuffixEnum.DOCX.getCode()))) {
+                                        //解析excel保存数据
+                                        try {
+                                            final InputStream inputStream = commonFileService.downFile(d.getFileId());
+                                            List<SpecialFileData> wordData = ReadWordDataUtils.getWordData(fileName, inputStream);
+                                            if (CollUtil.isNotEmpty(wordData)) {
+                                                specialFileDataService.insertBatch(wordData);
+                                            }
+                                        } catch (Exception e) {
+                                            e.printStackTrace();
+                                        }
+                                    }
+                                }
+                            } else {
                                 checkFailedNames.add(fileName);
                                 checkFailedCount.getAndIncrement();
                             }
                         }
                     });
-                    recordManager.setFileCount(fileCount+"");
+                    recordManager.setFileCount(fileCount + "");
                     recordManager.setCheckFailedCount(checkFailedCount.toString());
                     recordManager.setCheckFileCount(checkFileCount.toString());
                     recordManagerService.updateById(recordManager);
@@ -263,7 +326,7 @@ public class RecordManagerController {
                     recorManagerImportResult.setCheckFileCount(checkFileCount.get());
                     recorManagerImportResult.setFiles(checkFailedNames);
                     return ResultRespone.success(recorManagerImportResult);
-                }else{
+                } else {
                     return ResultRespone.failed("探测数据为空");
                 }
             }

+ 15 - 0
DataCheck/src/main/java/com/tofly/dataCheck/em/FileSuffixEnum.java

@@ -0,0 +1,15 @@
+package com.tofly.dataCheck.em;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum FileSuffixEnum {
+
+    XLS("xls"),XLSX("xlsx"),
+    DOC("doc"),DOCX("docx");
+
+    private String code;
+
+}

+ 14 - 0
DataCheck/src/main/java/com/tofly/dataCheck/em/FileTypeEnum.java

@@ -0,0 +1,14 @@
+package com.tofly.dataCheck.em;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum FileTypeEnum {
+
+    RIAN("ysrw"),HANDLE("wfcl");
+
+    private String code;
+
+}

+ 67 - 0
DataCheck/src/main/java/com/tofly/dataCheck/entity/SpecialFileData.java

@@ -0,0 +1,67 @@
+package com.tofly.dataCheck.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author hs
+ * @date Fri Nov 11 00:00:00 CST 2022 特殊资料数据文件存储
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "TF_YWPN_SPECIAL_FILE_DATA_W", resultMap = "specialFileDataMap")
+@KeySequence("TF_YWPN_SPECIAL_FILE_DATA_W")
+@ApiModel
+public class SpecialFileData extends Model<SpecialFileData> {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.INPUT)
+    @ApiModelProperty(value = "主键id")
+    private Long id;
+    /**
+     * 序号
+     */
+    @ApiModelProperty(value = "序号")
+    private String no;
+
+    /**
+     * 起点编码
+     */
+    @ApiModelProperty(value = "起点编码")
+    private String startCode;
+    /**
+     * 终点编码
+     */
+    @ApiModelProperty(value = "终点编码")
+    private String endCode;
+
+    /**
+     * 文件名
+     */
+    @ApiModelProperty(value = "文件名")
+    private String fileName;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "CREATE_TIME",fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /**
+     * 类型
+     */
+    @ApiModelProperty(value = "0:雨水任务单 1:暂无法预处理数据")
+    private Integer type;
+
+}

+ 22 - 0
DataCheck/src/main/java/com/tofly/dataCheck/excel/entity/SpecialFileExcel.java

@@ -0,0 +1,22 @@
+package com.tofly.dataCheck.excel.entity;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode
+public class SpecialFileExcel {
+    private static final long serialVersionUID = 1L;
+
+    @ExcelProperty(value = "序号",index = 0)
+    private String no;
+
+    @ExcelProperty(value = "管段起始井号",index = 1)
+    private String startCode;
+
+    @ExcelProperty(value = "管段终点井号",index = 2)
+    private String endCode;
+
+
+}

+ 105 - 0
DataCheck/src/main/java/com/tofly/dataCheck/excel/listener/SpecialFileListener.java

@@ -0,0 +1,105 @@
+package com.tofly.dataCheck.excel.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.metadata.data.ReadCellData;
+import com.alibaba.excel.read.listener.ReadListener;
+import com.alibaba.excel.util.ListUtils;
+import com.alibaba.fastjson.JSON;
+import com.tofly.common.core.util.StringUtil;
+import com.tofly.dataCheck.config.ImportStatusEnum;
+import com.tofly.dataCheck.entity.Batchinfo;
+import com.tofly.dataCheck.entity.CheckData;
+import com.tofly.dataCheck.entity.Monitorsettle;
+import com.tofly.dataCheck.entity.SpecialFileData;
+import com.tofly.dataCheck.excel.entity.CheckDataExcel;
+import com.tofly.dataCheck.excel.entity.SpecialFileExcel;
+import com.tofly.dataCheck.service.BatchinfoService;
+import com.tofly.dataCheck.service.CheckDataService;
+import com.tofly.dataCheck.service.SpecialFileDataService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+@Slf4j
+@Transactional
+public class SpecialFileListener extends AnalysisEventListener<SpecialFileExcel> implements ReadListener<SpecialFileExcel> {
+
+
+    private static final int BATCH_COUNT = 5000;
+    /**
+     * 缓存的数据
+     */
+    private List<SpecialFileData> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
+
+    private SpecialFileDataService specialFileDataService;
+
+    private String fileName;
+
+    public SpecialFileListener(SpecialFileDataService specialFileDataService,String fileName) {
+        this.specialFileDataService = specialFileDataService;
+        this.fileName=fileName;
+    }
+
+
+    @Override
+    public void invoke(SpecialFileExcel data, AnalysisContext analysisContext) {
+        final Integer rowIndex = analysisContext.readRowHolder().getRowIndex();
+        final ReadCellData cell =(ReadCellData)analysisContext.readRowHolder().getCellMap().get(0);
+        log.info(cell.getStringValue());
+        if(rowIndex < 3 ){
+            log.info("不解析该数据:{}", JSON.toJSONString(data));
+        }else{
+            //转换模板对象
+            SpecialFileData specialFileData=new SpecialFileData();
+            BeanUtil.copyProperties(data, specialFileData, true);
+            specialFileData.setType(0);
+            specialFileData.setFileName(fileName);
+            specialFileData.setCreateTime(new Date());
+            if(StringUtil.isNotEmpty(specialFileData.getStartCode()) && StringUtil.isNotEmpty(specialFileData.getEndCode())){
+                if(specialFileData.getStartCode().compareTo(specialFileData.getEndCode())>0){
+                    specialFileData.setStartCode(data.getEndCode());
+                    specialFileData.setEndCode(data.getStartCode());
+                }
+                cachedDataList.add(specialFileData);
+            }
+//        log.info("解析到一条数据:{}", JSON.toJSONString(taskData));
+            // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
+            if (cachedDataList.size() >= BATCH_COUNT) {
+                saveData();
+                // 存储完成清理 list
+                cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
+            }
+        }
+
+    }
+
+    /**
+     * 所有数据解析完成了 都会来调用
+     *
+     * @param context
+     */
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        // 这里也要保存数据,确保最后遗留的数据也存储到数据库
+        saveData();
+//        log.info("所有数据解析完成!");
+    }
+
+    /**
+     * 加上存储数据库
+     */
+    private void saveData() {
+//        log.info("{}条数据,开始存储数据库!", cachedDataList.size());
+        if(CollUtil.isNotEmpty(cachedDataList)){
+            specialFileDataService.insertBatch(cachedDataList);
+        }
+//        log.info("存储数据库成功!");
+    }
+}

+ 25 - 0
DataCheck/src/main/java/com/tofly/dataCheck/mapper/SpecialFileDataMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Author: wangjian
+ * 生成mapper
+ */
+package com.tofly.dataCheck.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.tofly.dataCheck.entity.CheckData;
+import com.tofly.dataCheck.entity.SpecialFileData;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author hs
+ * @date Fri Nov 11 00:00:00 CST 2022
+ */
+public interface SpecialFileDataMapper extends BaseMapper<SpecialFileData> {
+
+    int insertBatch(@Param("datas") List<SpecialFileData> datas);
+
+
+}

+ 27 - 0
DataCheck/src/main/java/com/tofly/dataCheck/service/SpecialFileDataService.java

@@ -0,0 +1,27 @@
+/*
+ * Author: wangjian
+ * 生成Service
+ */
+package com.tofly.dataCheck.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.tofly.dataCheck.entity.CheckData;
+import com.tofly.dataCheck.entity.SpecialFileData;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 
+ *
+ * @author hs
+ * @date Fri Nov 11 00:00:00 CST 2022
+ */
+public interface SpecialFileDataService extends IService<SpecialFileData> {
+
+    int insertBatch(List<SpecialFileData> datas);
+
+
+
+}

+ 41 - 0
DataCheck/src/main/java/com/tofly/dataCheck/service/impl/SpecialFileDataServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ * Author: wangjian
+ * 生成ServiceImpl
+ */
+package com.tofly.dataCheck.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.tofly.dataCheck.entity.CheckData;
+import com.tofly.dataCheck.entity.SpecialFileData;
+import com.tofly.dataCheck.mapper.CheckDataMapper;
+import com.tofly.dataCheck.mapper.SpecialFileDataMapper;
+import com.tofly.dataCheck.service.CheckDataService;
+import com.tofly.dataCheck.service.HandleDataService;
+import com.tofly.dataCheck.service.MonitorsettleService;
+import com.tofly.dataCheck.service.SpecialFileDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 
+ *
+ * @author hs
+ * @date Fri Nov 11 00:00:00 CST 2022
+ */
+@Service("specialFileDataService")
+public class SpecialFileDataServiceImpl extends ServiceImpl<SpecialFileDataMapper, SpecialFileData> implements SpecialFileDataService {
+
+    @Override
+    @Transactional
+    public int insertBatch(List<SpecialFileData> datas) {
+        return this.baseMapper.insertBatch(datas);
+    }
+
+
+}

+ 160 - 0
DataCheck/src/main/java/com/tofly/dataCheck/utils/ReadWordDataUtils.java

@@ -0,0 +1,160 @@
+package com.tofly.dataCheck.utils;
+
+import com.tofly.common.core.util.StringUtil;
+import com.tofly.dataCheck.entity.SpecialFileData;
+import org.apache.poi.hwpf.HWPFDocument;
+import org.apache.poi.hwpf.usermodel.*;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+import org.apache.poi.xwpf.usermodel.XWPFTableCell;
+import org.apache.poi.xwpf.usermodel.XWPFTableRow;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+public class ReadWordDataUtils {
+
+    public static List<SpecialFileData> getWordData(String filePath,InputStream in) {
+
+        List<SpecialFileData> resultList = new ArrayList<>();
+        try {
+            // 处理docx格式 即office2007以后版本
+            if (filePath.toLowerCase().endsWith("docx")) {
+                //word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后
+                XWPFDocument xwpf = new XWPFDocument(in);//得到word文档的信息
+                Iterator<XWPFTable> it = xwpf.getTablesIterator();//得到word中的表格
+                // 设置需要读取的表格  set是设置需要读取的第几个表格,total是文件中表格的总数
+                int set = 1, total = 2;
+                int num = set;
+                // 迭代文档中的表格
+                // 如果有多个表格只读取需要的一个 set是设置需要读取的第几个表格,total是文件中表格的总数
+                for (int i = 0; i < set - 1; i++) {
+                    it.hasNext();
+                    it.next();
+                }
+                while (it.hasNext()) {
+                    XWPFTable table = it.next();
+                    List<XWPFTableRow> rows = table.getRows();
+                    //读取每一行数据
+                    for (int i = 0; i < rows.size(); i++) {
+                        XWPFTableRow row = rows.get(i);
+                        if(i>=2){
+                            SpecialFileData specialFileData=new SpecialFileData();
+                            //读取每一列数据
+                            List<XWPFTableCell> cells = row.getTableCells();
+                            for (int j = 0; j < cells.size(); j++) {
+                                if(j<=1){
+                                    XWPFTableCell cell = cells.get(j);
+                                    String text = cell.getText();
+                                    if(j==0){
+                                        specialFileData.setNo(text);
+                                    }else{
+                                        if(text.contains("-")){
+                                            String[] noArr = text.split("-");
+                                            if(noArr!=null && noArr.length>1){
+                                                if(noArr[0].compareTo(noArr[1])< 0){
+                                                    specialFileData.setStartCode(noArr[0]);
+                                                    specialFileData.setEndCode(noArr[1]);
+                                                }else{
+                                                    specialFileData.setStartCode(noArr[1]);
+                                                    specialFileData.setEndCode(noArr[0]);
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            if(StringUtil.isNotEmpty(specialFileData.getNo()) && StringUtil.isNotEmpty(specialFileData.getStartCode())
+                                    && StringUtil.isNotEmpty(specialFileData.getEndCode())){
+                                specialFileData.setFileName(filePath.substring(0, filePath.indexOf(".")));
+                                specialFileData.setCreateTime(new Date());
+                                specialFileData.setType(1);
+                                resultList.add(specialFileData);
+                            }
+                        }
+                    }
+                    // 过滤多余的表格
+                    while (num < total) {
+                        it.hasNext();
+                        it.next();
+                        num += 1;
+                    }
+                }
+            } else {
+                // 处理doc格式 即office2003版本
+                POIFSFileSystem pfs = new POIFSFileSystem(in);
+                HWPFDocument hwpf = new HWPFDocument(pfs);
+                Range range = hwpf.getRange();//得到文档的读取范围
+                TableIterator it = new TableIterator(range);
+                // 迭代文档中的表格
+                // 如果有多个表格只读取需要的一个 set是设置需要读取的第几个表格,total是文件中表格的总数
+                int set = 1, total = 2;
+                int num = total;
+                for (int i = 0; i < set - 1; i++) {
+                    it.hasNext();
+                    it.next();
+                }
+                while (it.hasNext()) {
+                    Table tb = (Table) it.next();
+                    //迭代行,默认从0开始,可以依据需要设置i的值,改变起始行数,也可设置读取到那行,只需修改循环的判断条件即可
+                    for (int i = 0; i < tb.numRows(); i++) {
+                        TableRow tr = tb.getRow(i);
+                        if(i>=2) {
+                            SpecialFileData specialFileData=new SpecialFileData();
+                            //迭代列,默认从0开始
+//                        for (int j = 0; j < tr.numCells(); j++) {
+                            for (int j = 0; j < tr.numCells() - 1; j++) {
+                                TableCell td = tr.getCell(j);//取得单元格
+                                //取得单元格的内容
+                                for (int k = 0; k < td.numParagraphs(); k++) {
+                                    if(k<=1){
+                                        Paragraph para = td.getParagraph(k);
+                                        String s = para.text();
+                                        if(j==0){
+                                            specialFileData.setNo(s);
+                                        }else{
+                                            if(s.contains("-")){
+                                                String[] noArr = s.split("-");
+                                                if(noArr!=null && noArr.length>1){
+                                                    if(noArr[0].compareTo(noArr[1])< 0){
+                                                        specialFileData.setStartCode(noArr[0]);
+                                                        specialFileData.setEndCode(noArr[1]);
+                                                    }else{
+                                                        specialFileData.setStartCode(noArr[1]);
+                                                        specialFileData.setEndCode(noArr[0]);
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            if(StringUtil.isNotEmpty(specialFileData.getNo()) && StringUtil.isNotEmpty(specialFileData.getStartCode())
+                                    && StringUtil.isNotEmpty(specialFileData.getEndCode())){
+                                specialFileData.setFileName(filePath.substring(0, filePath.indexOf(".")));
+                                specialFileData.setCreateTime(new Date());
+                                specialFileData.setType(1);
+                                resultList.add(specialFileData);
+                            }
+                        }
+                    }
+                    // 过滤多余的表格
+                    while (num < total) {
+                        it.hasNext();
+                        it.next();
+                        num += 1;
+                    }
+                }
+            }
+
+        } catch (
+                Exception e) {
+            e.printStackTrace();
+        }
+        return resultList;
+    }
+}

+ 6 - 3
DataCheck/src/main/resources/bootstrap-home.yml

@@ -5,7 +5,7 @@ spring:
         # nacos配置中心指定空间
         namespace: tofly-whatInfo-dev
         # nacos部署IP
-        server-addr: 192.168.137.117:8848
+        server-addr: 192.168.2.235:8848
 
         # 配置后缀
         file-extension: yaml
@@ -21,14 +21,17 @@ spring:
 
       discovery:
         namespace: tofly-whatInfo-dev
-        server-addr: 192.168.137.117:8848
+        server-addr: 192.168.2.235:8848
   application:
     # 该应用在nacos配置中的名称
 #    name: tofly-sxgk-xy
-    name: tofly-datacheck
+    name: tofly-datacheck-hs
 
 
 logging:
   level:
     com.alibaba.nacos.client.config.impl: WARN
 
+
+
+

+ 1 - 1
DataCheck/src/main/resources/bootstrap.yml

@@ -1,5 +1,5 @@
 spring:
   profiles:
-    active: dev
+    active: home
 logging:
   level: DEBUG

+ 39 - 0
DataCheck/src/main/resources/mapper/SpecialFileDataMapper.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.tofly.dataCheck.mapper.SpecialFileDataMapper">
+
+    <resultMap id="specialFileDataMap" type="com.tofly.dataCheck.entity.SpecialFileData">
+        <id property="id" column="id"/>
+        <result property="no" column="no"/>
+        <result property="startCode" column="start_code"/>
+        <result property="endCode" column="end_code"/>
+        <result property="fileName" column="file_name"/>
+        <result property="createTime" column="create_time"/>
+        <result property="type" column="type"/>
+    </resultMap>
+
+    <insert id="insertBatch" parameterType="java.util.List">
+        INSERT INTO `TF_YWPN_SPECIAL_FILE_DATA_W` (
+        `no`,
+        `start_code`,
+        `end_code`,
+        `file_name`,
+        `create_time`,
+        `type`
+        )
+        VALUES
+        <foreach collection="datas" item="data" index="index" separator=",">
+            (
+            #{data.no},
+            #{data.startCode},
+            #{data.endCode},
+            #{data.fileName},
+            #{data.createTime},
+            #{data.type}
+            )
+        </foreach>
+    </insert>
+
+
+</mapper>