Browse Source

批量上传功能调整 2022-7-25

沈永艺 3 năm trước cách đây
mục cha
commit
355e258f3a

+ 16 - 15
PAS/src/main/java/cn/cslg/pas/common/utils/DataProcessHandler.java

@@ -195,9 +195,10 @@ class ProcessDataFactory {
     }
 
     public static void main(String[] args) {
-        IProcessData iProcessData = new PatSnapPatentAffairHandler();
-        String a = "2021-10-15 | CHANGE IN THE NAME OR TITLE OF A PATENT HOLDER | CN | 2020-07-21 | +PATENT GRANT | CN";
-        String b = (String) iProcessData.processData(a, null);
+        IProcessData iProcessData = new TimeHandler();
+
+        Integer b = (Integer) iProcessData.processData("2022/01/01 00:00:00", null);
+        System.out.println(b);
 
         IProcessData incoPatPatentAffairHandler = new IncoPatPatentAffairHandler();
         String c = "法律状态公告日:20191015;\n" +
@@ -211,18 +212,18 @@ class ProcessDataFactory {
                 "描述信息:授权;\n";
         String d = (String) incoPatPatentAffairHandler.processData(c, null);
 
-        List<KeyValueVO> lst = JsonUtils.jsonToList(b, KeyValueVO.class);
-        KeyValueVO flag;
-        for (int i = 0; i < Objects.requireNonNull(lst).size() - 1; i++) {
-            for (int j = 0; j < lst.size() - i - 1; j++) {
-                if (DateUtils.strToDate(lst.get(j).getInpadocData().get(0).getContent()).compareTo(DateUtils.strToDate(lst.get(j + 1).getInpadocData().get(0).getContent())) < 0) {
-                    flag = lst.get(j);
-                    lst.set(j, lst.get(j + 1));
-                    lst.set(j + 1, flag);
-                }
-            }
-        }
-        System.out.println(lst);
+//        List<KeyValueVO> lst = JsonUtils.jsonToList(b, KeyValueVO.class);
+//        KeyValueVO flag;
+//        for (int i = 0; i < Objects.requireNonNull(lst).size() - 1; i++) {
+//            for (int j = 0; j < lst.size() - i - 1; j++) {
+//                if (DateUtils.strToDate(lst.get(j).getInpadocData().get(0).getContent()).compareTo(DateUtils.strToDate(lst.get(j + 1).getInpadocData().get(0).getContent())) < 0) {
+//                    flag = lst.get(j);
+//                    lst.set(j, lst.get(j + 1));
+//                    lst.set(j + 1, flag);
+//                }
+//            }
+//        }
+//        System.out.println(lst);
 
     }
 

+ 5 - 1
PAS/src/main/java/cn/cslg/pas/common/utils/ExcelUtils.java

@@ -10,6 +10,7 @@ import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.*;
 import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
 
+import java.awt.*;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -101,7 +102,10 @@ public class ExcelUtils {
                 List<XSSFShape> shapes = drawing.getShapes();
                 for (XSSFShape shape : shapes) {
                     XSSFPicture picture = (XSSFPicture) shape;
-                    XSSFClientAnchor anchor = picture.getPreferredSize();
+                    Dimension d = picture.getImageDimension();
+                    //解决图片空指针报错问题 lig  2021-06-03
+                    XSSFClientAnchor anchor = (XSSFClientAnchor) shape.getAnchor();
+                    //XSSFClientAnchor anchor = picture.getPreferredSize();
                     CTMarker marker = anchor.getFrom();
                     String key = String.valueOf(marker.getRow());
                     map.put(key, picture.getPictureData());

+ 62 - 0
PAS/src/main/java/cn/cslg/pas/domain/ImportErrorLog.java

@@ -0,0 +1,62 @@
+package cn.cslg.pas.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 批量上传失败日志表
+ *
+ * @author 沈永艺
+ * @since 2022-7-23
+ */
+@Data
+@TableName("OS_IMPORT_ERROR_LOG")
+@Accessors(chain = true)
+public class ImportErrorLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 专利号
+     */
+    @TableField(value = "PATENT_NO")
+    private String patentNo;
+
+    /**
+     * 错误信息
+     */
+    @TableField(value = "MISTAKE_MESSAGE")
+    private String mistakeMessage;
+
+    /**
+     * 操作人ID
+     */
+    @TableField(value = "CREATE_USER_ID")
+    private Integer createUserId;
+
+    /**
+     * 记录时间
+     */
+    @TableField(value = "CREATE_TIME")
+    private String createTime;
+
+    /**
+     * 专题库ID
+     */
+    @TableField(value = "PROJECT_ID")
+    private Integer projectId;
+
+    /**
+     * 专利ID
+     */
+    @TableField(value = "PATENT_ID")
+    private Integer patentId;
+}

+ 13 - 0
PAS/src/main/java/cn/cslg/pas/mapper/ImportErrorLogMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.ImportErrorLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 批量上传失败日志 Mapper 接口
+ *
+ * @author 沈永艺
+ * @since 2022-7-23
+ */
+public interface ImportErrorLogMapper extends BaseMapper<ImportErrorLog> {
+}

+ 22 - 0
PAS/src/main/java/cn/cslg/pas/service/ImportErrorLogService.java

@@ -0,0 +1,22 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.domain.Area;
+import cn.cslg.pas.domain.ImportErrorLog;
+import cn.cslg.pas.mapper.ImportErrorLogMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+/**
+ * 批量上传失败日志 服务实现类
+ *
+ * @author 沈永艺
+ * @since 2022-7-23
+ */
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class ImportErrorLogService extends ServiceImpl<ImportErrorLogMapper, ImportErrorLog> {
+
+}

+ 90 - 69
PAS/src/main/java/cn/cslg/pas/service/UploadPatentBatchService.java

@@ -9,6 +9,7 @@ import cn.cslg.pas.common.model.vo.UploadParamsVO;
 import cn.cslg.pas.common.model.vo.UploadSettingVO;
 import cn.cslg.pas.common.utils.*;
 import cn.cslg.pas.domain.*;
+import cn.cslg.pas.mapper.ImportErrorLogMapper;
 import cn.hutool.extra.spring.SpringUtil;
 import lombok.RequiredArgsConstructor;
 import org.apache.poi.ss.usermodel.PictureData;
@@ -18,10 +19,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -46,9 +45,10 @@ public class UploadPatentBatchService {
     private final PatentLabelService patentLabelService;
     private final PatentClassNumberLinkService patentClassNumberLinkService;
     private final PatentAffairService patentAffairService;
+    private final ImportErrorLogMapper importErrorLogMapper;
+    private static int FLAG = 0;
 
     @Async("singleThreadAsyncTaskExecutor")
-    @Transactional(rollbackFor = Exception.class)
     public void uploadPatentBatch(TaskParams params, ProjectImportPatentVO projectImportPatentVO) {
         Integer total = params.getRowList().size();
         try {
@@ -87,6 +87,7 @@ public class UploadPatentBatchService {
                 //将装配对象中的数据保存到数据库
                 dataToDB(params, uploadParamsVO, projectImportPatentVO);
 
+                //通过WebSocket 在每一次循环结束后 向前端发送完成进度
                 WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
                         .setTaskId(params.getTaskId())
                         .setProjectId(projectImportPatentVO.getProjectId())
@@ -99,6 +100,7 @@ public class UploadPatentBatchService {
                         .setUrl("")
                         .setTotal(total), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), params.getUserId());
             }
+
             SpringUtil.getBean(ProjectService.class).setImportPatentTaskStatus(2, params.getTaskId());
             WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
                     .setTaskId(params.getTaskId())
@@ -113,9 +115,12 @@ public class UploadPatentBatchService {
                     .setTotal(total), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), params.getUserId());
         } catch (Exception e) {
             e.printStackTrace();
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             SpringUtil.getBean(ProjectService.class).setImportPatentTaskStatus(3, params.getTaskId());
-            WebSocketServer.sendInfo(Response.error(ResponseEnum.PATENT_IMPORT_TASK_ERROR), params.getUserId());
+            if (FLAG > 0) {
+                int successCount = total - FLAG;
+                WebSocketServer.sendInfo(Response.error("部分数据上传成功" + "\n" + "成功条数:" + successCount + "失败条数:" + FLAG), params.getUserId());
+            }
+            FLAG = 0;
         }
     }
 
@@ -125,67 +130,84 @@ public class UploadPatentBatchService {
      * @name 数据库交互
      * @description 将装配完毕的VO类向数据库中不同的表进行添加或修改操作
      */
-    private void dataToDB(TaskParams params, UploadParamsVO uploadParamsVO, ProjectImportPatentVO projectImportPatentVO) {
-        //专利信息 OS_PATENT
-        if (uploadParamsVO.getPatent() != null) {
-            List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Collections.singletonList(Constants.PATENT_SIMPLE_STATUS));
-            Integer simpleStatus = Integer.parseInt(systemDictList.stream()
-                    .filter(systemDict -> systemDict.getType().equals(Constants.PATENT_SIMPLE_STATUS) && systemDict.getLabel().equals(uploadParamsVO.getPatentSimpleStatus()))
-                    .findFirst()
-                    .orElse(new SystemDict()).getValue());
-            uploadParamsVO.getPatent().setSimpleStatus(simpleStatus);
-            uploadParamsVO.getPatent().updateById();
-        }
-        //权利要求 OS_PATENT_RIGHT
-        patentRightBusiness(uploadParamsVO);
-        //说明书(文本) OS_PATENT_INSTRUCTION_TEXT
-        if (uploadParamsVO.getPatentInstructionText() != null) {
-            patentInstructionTextBusiness(uploadParamsVO);
-        }
-        //代理人 OS_PATENT_AGENT
-        if (uploadParamsVO.getPatentAgentList() != null) {
-            patentAgentBusiness(uploadParamsVO);
-        }
-        //质押质权人 OS_PATENT_PLEDGE
-        if (uploadParamsVO.getPatentPledgeList() != null) {
-            patentPledgeBusiness(uploadParamsVO);
-        }
-        //许可人 OS_PATENT_LICENSOR
-        if (uploadParamsVO.getPatentLicensorList() != null) {
-            patentLicensorBusiness(uploadParamsVO);
-        }
-        //简单同族 OS_PATENT_SIMPLEFAMILY
-        patentSimplyFamilyBusiness(uploadParamsVO);
-        //发明人 OS_PATENT_INVENTOR
-        patentInventorBusiness(uploadParamsVO);
-        //申请人/权利人 OS_APPLICATION_ATTR
-        //权利人
-        //patentCurrentApplicationBusiness(uploadParamsVO);
-        //申请人
-        //patentOriginalApplicationBusiness(uploadParamsVO);
-        //专题库关联专利信息 OS_THEMATIC_PID
-        if (uploadParamsVO.getPatent() != null) {
-            patentThematicPidBusiness(uploadParamsVO, projectImportPatentVO);
-        }
-        //标引内容关联专利信息 OS_PATENT_FIELD_PATENT_LINK
-        if (uploadParamsVO.getPatent() != null) {
-            patentProjectFieldPatentLinkBusiness(uploadParamsVO, projectImportPatentVO);
-        }
-        //文件夹管理 OS_PORTFOLIO_LINK
-        if (uploadParamsVO.getPatent() != null) {
-            patentProjectFolderPatentLinkBusiness(uploadParamsVO, projectImportPatentVO);
-        }
-        //标签 OS_PATENT_LABEL
-        if (uploadParamsVO.getPatentLabelList() != null) {
-            patentLabelBusiness(uploadParamsVO, projectImportPatentVO);
-        }
-        //分类号关联 OS_PATENT_TYPENO
-        patentTypeNoBusiness(uploadParamsVO);
-        //事务信息 OS_PATENT_AFFAIR
-        patentAffairBusiness(uploadParamsVO);
-        //自定义字段
-        if (uploadParamsVO.getKey() != null && uploadParamsVO.getFieldList() != null) {
-            patentFieldBusiness(params, uploadParamsVO, projectImportPatentVO);
+    @Transactional(rollbackFor = Exception.class)
+    public void dataToDB(TaskParams params, UploadParamsVO uploadParamsVO, ProjectImportPatentVO projectImportPatentVO) {
+        try {
+            //专利信息 OS_PATENT
+            if (uploadParamsVO.getPatent() != null) {
+                List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Collections.singletonList(Constants.PATENT_SIMPLE_STATUS));
+                Integer simpleStatus = Integer.parseInt(systemDictList.stream()
+                        .filter(systemDict -> systemDict.getType().equals(Constants.PATENT_SIMPLE_STATUS) && systemDict.getLabel().equals(uploadParamsVO.getPatentSimpleStatus()))
+                        .findFirst()
+                        .orElse(new SystemDict()).getValue());
+                uploadParamsVO.getPatent().setSimpleStatus(simpleStatus);
+                uploadParamsVO.getPatent().updateById();
+            }
+            //权利要求 OS_PATENT_RIGHT
+            patentRightBusiness(uploadParamsVO);
+            //说明书(文本) OS_PATENT_INSTRUCTION_TEXT
+            if (uploadParamsVO.getPatentInstructionText() != null) {
+                patentInstructionTextBusiness(uploadParamsVO);
+            }
+            //代理人 OS_PATENT_AGENT
+            if (uploadParamsVO.getPatentAgentList() != null) {
+                patentAgentBusiness(uploadParamsVO);
+            }
+            //质押质权人 OS_PATENT_PLEDGE
+            if (uploadParamsVO.getPatentPledgeList() != null) {
+                patentPledgeBusiness(uploadParamsVO);
+            }
+            //许可人 OS_PATENT_LICENSOR
+            if (uploadParamsVO.getPatentLicensorList() != null) {
+                patentLicensorBusiness(uploadParamsVO);
+            }
+            //简单同族 OS_PATENT_SIMPLEFAMILY
+            patentSimplyFamilyBusiness(uploadParamsVO);
+            //发明人 OS_PATENT_INVENTOR
+            patentInventorBusiness(uploadParamsVO);
+            //申请人/权利人 OS_APPLICATION_ATTR
+            //权利人
+            //patentCurrentApplicationBusiness(uploadParamsVO);
+            //申请人
+            //patentOriginalApplicationBusiness(uploadParamsVO);
+            //专题库关联专利信息 OS_THEMATIC_PID
+            if (uploadParamsVO.getPatent() != null) {
+                patentThematicPidBusiness(uploadParamsVO, projectImportPatentVO);
+            }
+            //标引内容关联专利信息 OS_PATENT_FIELD_PATENT_LINK
+            if (uploadParamsVO.getPatent() != null) {
+                patentProjectFieldPatentLinkBusiness(uploadParamsVO, projectImportPatentVO);
+            }
+            //文件夹管理 OS_PORTFOLIO_LINK
+            if (uploadParamsVO.getPatent() != null) {
+                patentProjectFolderPatentLinkBusiness(uploadParamsVO, projectImportPatentVO);
+            }
+            //标签 OS_PATENT_LABEL
+            if (uploadParamsVO.getPatentLabelList() != null) {
+                patentLabelBusiness(uploadParamsVO, projectImportPatentVO);
+            }
+            //分类号关联 OS_PATENT_TYPENO
+            patentTypeNoBusiness(uploadParamsVO);
+            //事务信息 OS_PATENT_AFFAIR
+            patentAffairBusiness(uploadParamsVO);
+            //自定义字段
+            if (uploadParamsVO.getKey() != null && uploadParamsVO.getFieldList() != null) {
+                patentFieldBusiness(params, uploadParamsVO, projectImportPatentVO);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (uploadParamsVO.getPatent() != null) {
+                ImportErrorLog importErrorLog = new ImportErrorLog();
+                importErrorLog.setPatentId(uploadParamsVO.getPatent().getId())
+                        .setPatentNo(uploadParamsVO.getPatent().getPatentNo())
+                        .setCreateTime(new SimpleDateFormat("yyyy-MM-dd 24HI:mm:ss").format(new Date()))
+                        .setCreateUserId(Integer.parseInt(params.getUserId()))
+                        .setMistakeMessage(e.getMessage())
+                        .setProjectId(params.getProjectId());
+                importErrorLogMapper.insert(importErrorLog);
+                FLAG += 1;
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            }
         }
     }
 
@@ -388,4 +410,3 @@ public class UploadPatentBatchService {
     }
 
 }
-

+ 2 - 2
PAS/src/main/resources/application-test.yml

@@ -1,12 +1,12 @@
 spring:
   redis:
-    host: 47.101.137.223
+    host: 172.27.247.174
     port: 6379
     database: 4
     password: Xx0GWxdWQJxx6Swe
     timeout: 1000
   datasource:
-    url: jdbc:mysql://47.101.137.223:3306/pas?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
+    url: jdbc:mysql://172.27.247.174:3306/pas?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
     username: root
     password: TU5x6IeBi7rl
     driver-class-name: com.mysql.cj.jdbc.Driver