فهرست منبع

fix-[thesis]:解析thesis答辩时间,修改导入逻辑

seeseele 9 ماه پیش
والد
کامیت
4a380fddbd

+ 42 - 6
src/main/java/com/ruoyi/project/VRdemo/domain/imData/ThesisImData.java

@@ -2,10 +2,13 @@ package com.ruoyi.project.VRdemo.domain.imData;
 
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
-import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.excel.DataConverter;
 import com.ruoyi.project.VRdemo.domain.Thesis;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Date;
 
 public class ThesisImData implements BaseImData<ThesisImData, Thesis> {
@@ -28,17 +31,50 @@ public class ThesisImData implements BaseImData<ThesisImData, Thesis> {
     @ExcelProperty("关键词")
     private String keyword;
 
-    @JsonFormat(pattern = "yyyy")
+    //    @JsonFormat(pattern = "yyyy")
     @ExcelProperty("答辩时间")
-    private Date replyTime;
+    private String replyTime;
 
     @ExcelProperty("学位")
     private String degree;
 
+    private static Date getDate(String replyTime) {
+        Date finalDate;
+        try {
+            // 根据输入字符串的长度选择合适的日期格式
+            SimpleDateFormat sdfInput;
+            if (replyTime.contains(".")) {
+                sdfInput = new SimpleDateFormat("yyyy.M");
+            } else {
+                sdfInput = new SimpleDateFormat("yyyy");
+            }
+
+            // 设置lenient为false以进行严格的解析
+            sdfInput.setLenient(false);
+            // 解析日期字符串
+            Date date = sdfInput.parse(replyTime);
+            // 创建Calendar实例并设置年份和月份
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            // 设置日期为每个月的第一天
+            calendar.set(Calendar.DAY_OF_MONTH, 1);
+            // 获取最终的日期
+            finalDate = calendar.getTime();
+        } catch (ParseException e) {
+            throw new RuntimeException("无法解析日期字符串: " + replyTime, e);
+        }
+        return finalDate;
+    }
+
     @ExcelIgnore
     DataConverter<ThesisImData, Thesis> converter = new DataConverter<>() {
         @Override
         protected Thesis convert(ThesisImData thesisImData) {
+            Date finalDate = null;
+            if (!StringUtils.isEmpty(thesisImData.getReplyTime())) {
+                finalDate = getDate(thesisImData.getReplyTime());
+            }
+
             Thesis thesis = new Thesis();
             thesis.setId(thesisImData.getId());
             thesis.setName(thesisImData.getName());
@@ -46,7 +82,7 @@ public class ThesisImData implements BaseImData<ThesisImData, Thesis> {
             thesis.setMajor(thesisImData.getMajor());
             thesis.setTitle(thesisImData.getTitle());
             thesis.setKeyword(thesisImData.getKeyword());
-            thesis.setReplyTime(thesisImData.getReplyTime());
+            thesis.setReplyTime(finalDate);
             thesis.setDegree(thesisImData.getDegree());
             return thesis;
         }
@@ -73,11 +109,11 @@ public class ThesisImData implements BaseImData<ThesisImData, Thesis> {
         this.name = name;
     }
 
-    public Date getReplyTime() {
+    public String getReplyTime() {
         return replyTime;
     }
 
-    public void setReplyTime(Date replyTime) {
+    public void setReplyTime(String replyTime) {
         this.replyTime = replyTime;
     }
 

+ 11 - 5
src/main/java/com/ruoyi/project/VRdemo/service/impl/BulkImportService.java

@@ -20,6 +20,9 @@ public abstract class BulkImportService<T> {
     // 单次导入批次列表
     private final List<T> batchDataList = new ArrayList<>();
 
+    // 导入数据列表
+    private  List<T> toBeImportedList;
+
     private int successNum = 0;    // 成功消息数
     // 成功消息详情
     private final StringBuilder successMsg = new StringBuilder();
@@ -42,6 +45,8 @@ public abstract class BulkImportService<T> {
         //导入list校验
         validateData(dataList);
 
+        toBeImportedList = dataList;
+
         for (T item : dataList) {
             try {
                 // 进行导入操作
@@ -94,11 +99,12 @@ public abstract class BulkImportService<T> {
             return;
         }
 
+        Long i = 0L;
         if (updateSupport) {
-            Long i = checkExistingItem(item);
-            if (i != 0) {
-                handleUpdate(item, i); // 更新数据
-            }
+            i = checkExistingItem(item);
+        }
+        if (i != 0L) {
+            handleUpdate(item, i); // 更新数据
         } else {
             batchDataList.add(item); // 导入列表插入数据
 
@@ -134,7 +140,7 @@ public abstract class BulkImportService<T> {
 
     // 判断是否为最后一个数据方法
     protected boolean isLastItem(T item) {
-        return batchDataList.indexOf(item) == batchDataList.size() - 1;
+        return toBeImportedList.indexOf(item) == toBeImportedList.size() - 1;
     }
 
     /**