Bladeren bron

修复导入

叶凌辰 1 jaar geleden
bovenliggende
commit
790a7a60e0

+ 12 - 4
src/main/java/com/ruoyi/project/VRdemo/controller/DataIoController.java

@@ -197,11 +197,19 @@ public class DataIoController extends BaseController {
     @PreAuthorize("@ss.hasAnyRoles('admin,company')")
     @PostMapping("/import/press")
     public AjaxResult importPressData(MultipartFile file, boolean updateSupport) throws IOException {
-
+        // 初始化监听器以处理导入逻辑
         PressImportListener dataImportListener = new PressImportListener(DataExcelMapper);
-        // 创建EasyExcel读取器4
-        EasyExcel.read(file.getInputStream(), Press.class, dataImportListener).sheet().headRowNumber(1).doRead();
+
+        // 使用EasyExcel读取Excel文件内容
+        EasyExcel.read(file.getInputStream(), Press.class, dataImportListener)
+                .sheet() // 默认读取第一个sheet
+                .headRowNumber(1) // 指定表头所在行数
+                .doRead(); // 执行读取操作
+
+        // 调用服务层方法进行数据导入处理
         String message = pressService.importPress(dataImportListener.getDataList(), updateSupport);
-        return success(message);
+
+        // 返回成功响应,携带导入结果信息
+        return AjaxResult.success(message);
     }
 }

+ 0 - 26
src/main/java/com/ruoyi/project/VRdemo/controller/SearchController.java

@@ -1,26 +0,0 @@
-package com.ruoyi.project.VRdemo.controller;
-
-import com.ruoyi.framework.aspectj.lang.annotation.Anonymous;
-import com.ruoyi.project.VRdemo.domain.Press;
-import com.ruoyi.project.VRdemo.domain.SearchData;
-import com.ruoyi.project.VRdemo.service.ISearchService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/vr/search")
-public class SearchController {
-
-    @Autowired
-    private ISearchService ISearchService;
-
-    // 高级检索功能接口
-    @Anonymous
-    @PostMapping("/SearchDatabases")
-    public List<Press> SearchDatabases(@RequestBody List<SearchData> searchData) {
-        String query = ISearchService.analyticParameter(searchData);
-        return ISearchService.ExecuteSearchSql(query);
-    }
-}

+ 68 - 62
src/main/java/com/ruoyi/project/VRdemo/domain/Press.java

@@ -4,15 +4,18 @@ import java.util.Date;
 
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.format.DateTimeFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.framework.web.domain.BaseEntity;
 
+import static org.apache.xmlbeans.XmlBeans.getTitle;
+
 /**
  * press对象 vr_press
- * 
+ *
  * @author ruoyi
  * @date 2024-01-19
  */
@@ -36,10 +39,14 @@ public class Press extends BaseEntity
     @ExcelProperty("刊名")
     private String pressTitle;
 
+    /** 年份 */
+    @JsonFormat(pattern = "yyyy")
+    @ExcelProperty("年份")
+    private Date date;
+
     /** 刊期 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
     @ExcelProperty("刊期")
-    private Date issue;
+    private String issue;
 
     /** 起止页 */
     @ExcelProperty("起止页")
@@ -57,104 +64,103 @@ public class Press extends BaseEntity
     @ExcelProperty("地区")
     private String area;
 
-    public void setPressId(Long pressId) 
-    {
+    public Long getPressId() {
+        return pressId;
+    }
+
+    public void setPressId(Long pressId) {
         this.pressId = pressId;
     }
 
-    public Long getPressId() 
-    {
-        return pressId;
+    public String getTitle() {
+        return title;
     }
-    public void setTitle(String title) 
-    {
+
+    public void setTitle(String title) {
         this.title = title;
     }
 
-    public String getTitle() 
-    {
-        return title;
+    public String getAuthor() {
+        return author;
     }
-    public void setAuthor(String author) 
-    {
+
+    public void setAuthor(String author) {
         this.author = author;
     }
 
-    public String getAuthor() 
-    {
-        return author;
+    public String getPressTitle() {
+        return pressTitle;
     }
-    public void setPressTitle(String pressTitle) 
-    {
+
+    public void setPressTitle(String pressTitle) {
         this.pressTitle = pressTitle;
     }
 
-    public String getPressTitle() 
-    {
-        return pressTitle;
+    public Date getDate() {
+        return date;
     }
-    public void setIssue(Date issue) 
-    {
-        this.issue = issue;
+
+    public void setDate(Date date) {
+        this.date = date;
     }
 
-    public Date getIssue() 
-    {
+    public String getIssue() {
         return issue;
     }
-    public void setPages(String pages) 
-    {
-        this.pages = pages;
+
+    public void setIssue(String issue) {
+        this.issue = issue;
     }
 
-    public String getPages() 
-    {
+    public String getPages() {
         return pages;
     }
-    public void setKeyword(String keyword) 
-    {
-        this.keyword = keyword;
+
+    public void setPages(String pages) {
+        this.pages = pages;
     }
 
-    public String getKeyword() 
-    {
+    public String getKeyword() {
         return keyword;
     }
-    public void setClassify(String classify) 
-    {
-        this.classify = classify;
+
+    public void setKeyword(String keyword) {
+        this.keyword = keyword;
     }
 
-    public String getClassify() 
-    {
+    public String getClassify() {
         return classify;
     }
-    public void setArea(String area) 
-    {
-        this.area = area;
+
+    public void setClassify(String classify) {
+        this.classify = classify;
     }
 
-    public String getArea() 
-    {
+    public String getArea() {
         return area;
     }
 
+    public void setArea(String area) {
+        this.area = area;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("pressId", getPressId())
-            .append("title", getTitle())
-            .append("author", getAuthor())
-            .append("pressTitle", getPressTitle())
-            .append("issue", getIssue())
-            .append("pages", getPages())
-            .append("keyword", getKeyword())
-            .append("classify", getClassify())
-            .append("area", getArea())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .toString();
+                .append("pressId", getPressId())
+                .append("title", getTitle())
+                .append("author", getAuthor())
+                .append("pressTitle", getPressTitle())
+                .append("date", getDate())
+                .append("issue", getIssue())
+                .append("pages", getPages())
+                .append("keyword", getKeyword())
+                .append("classify", getClassify())
+                .append("area", getArea())
+                .append("createBy", getCreateBy())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateTime", getUpdateTime())
+                .toString();
     }
 }

+ 0 - 61
src/main/java/com/ruoyi/project/VRdemo/domain/SearchData.java

@@ -1,61 +0,0 @@
-package com.ruoyi.project.VRdemo.domain;
-
-
-public class SearchData {
-    private int index;
-    private String field_name;
-    private String query_concat;
-    private String query_style;
-    private String text;
-
-    public int getIndex() {
-        return index;
-    }
-
-    public void setIndex(int index) {
-        this.index = index;
-    }
-
-    public String getField_name() {
-        return field_name;
-    }
-
-    public void setField_name(String field_name) {
-        this.field_name = field_name;
-    }
-
-    public String getQuery_concat() {
-        return query_concat;
-    }
-
-    public void setQuery_concat(String query_concat) {
-        this.query_concat = query_concat;
-    }
-
-    public String getQuery_style() {
-        return query_style;
-    }
-
-    public void setQuery_style(String query_style) {
-        this.query_style = query_style;
-    }
-
-    public String getText() {
-        return text;
-    }
-
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    @Override
-    public String toString() {
-        return "SearchData{" +
-                "index=" + index +
-                ", field_name='" + field_name + '\'' +
-                ", query_concat='" + query_concat + '\'' +
-                ", query_style='" + query_style + '\'' +
-                ", text='" + text + '\'' +
-                '}';
-    }
-}

+ 0 - 18
src/main/java/com/ruoyi/project/VRdemo/mapper/SearchDataMapper.java

@@ -1,18 +0,0 @@
-package com.ruoyi.project.VRdemo.mapper;
-
-import com.ruoyi.project.VRdemo.domain.Press;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
-
-import java.util.List;
-
-@Mapper
-public interface SearchDataMapper {
-
-    /**
-     * 查询press列表
-     */
-    @Select("${SqlString}")
-    public List<Press> ExecuteSearchSql(String SqlString);
-
-}

+ 0 - 14
src/main/java/com/ruoyi/project/VRdemo/service/ISearchService.java

@@ -1,14 +0,0 @@
-package com.ruoyi.project.VRdemo.service;
-
-import com.ruoyi.project.VRdemo.domain.Press;
-import com.ruoyi.project.VRdemo.domain.SearchData;
-import java.util.List;
-
-public interface ISearchService {
-
-    // 解析JSON数据 获取查询语句
-    String analyticParameter(List<SearchData> searchData);
-
-    // 获取检索数据
-    List<Press> ExecuteSearchSql(String SqlString);
-}

+ 21 - 1
src/main/java/com/ruoyi/project/VRdemo/service/impl/PressServiceImpl.java

@@ -1,6 +1,8 @@
 package com.ruoyi.project.VRdemo.service.impl;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import com.ruoyi.common.exception.ServiceException;
@@ -119,11 +121,13 @@ public class PressServiceImpl implements IPressService
         if (StringUtils.isNull(pressList) || pressList.size() == 0) {
             throw new ServiceException("导入用户数据不能为空!");
         }
+
         List<Press> batchDataList = new ArrayList<>();
         int successNum = 0;
         int failureNum = 0;
         StringBuilder successMsg = new StringBuilder();
         StringBuilder failureMsg = new StringBuilder();
+
         // 遍历用户数据列表,逐条处理数据
         for (Press press : pressList) {
             try {
@@ -132,6 +136,22 @@ public class PressServiceImpl implements IPressService
                 if (StringUtils.isEmpty(press.getTitle())) {
                     throw new ServiceException("模板标题不能为空!");
                 }
+
+                // 分开时间和刊期
+                String dateAndIssue = press.getIssue();
+
+                String dateStr = dateAndIssue.substring(0, dateAndIssue.indexOf("(")).trim();
+                SimpleDateFormat ft = new SimpleDateFormat("yyyy");
+                Date date = ft.parse(dateStr);
+
+                String issue = dateAndIssue.substring(dateAndIssue.indexOf("(") + 1 ,dateAndIssue.indexOf(")")).trim();
+
+                System.out.println(dateStr+"+++++"+issue);
+
+                press.setDate(date);
+                press.setIssue(issue);
+
+
                 // 如果更新支持,检查数据库中是否存在相同的记录,如果存在,则进行更新操作
                 // 判断数据库中是否存在相同标题的记录
                 Press existingPress = null;
@@ -155,6 +175,7 @@ public class PressServiceImpl implements IPressService
                     }
                     // 判断是否达到BATCH_COUNT,或者已经是最后一个数据
                     if (batchDataList.size() >= BATCH_COUNT || pressList.indexOf(press) == pressList.size() - 1) {
+                        System.out.println( "batchDataList size: " + batchDataList);
                         // 执行批量插入操作
                         dataExcelMapper.insertPressDataList(batchDataList);
                         successNum += batchDataList.size();
@@ -180,7 +201,6 @@ public class PressServiceImpl implements IPressService
         } else {
             // 若全部数据导入成功,则返回成功导入的信息
             successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:\n");
-
         }
         return successMsg.toString();
     }

+ 0 - 124
src/main/java/com/ruoyi/project/VRdemo/service/impl/SearchServiceImpl.java

@@ -1,124 +0,0 @@
-package com.ruoyi.project.VRdemo.service.impl;
-
-import com.ruoyi.project.VRdemo.domain.Press;
-import com.ruoyi.project.VRdemo.domain.SearchData;
-import com.ruoyi.project.VRdemo.mapper.SearchDataMapper;
-import com.ruoyi.project.VRdemo.service.ISearchService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-@Service
-public class SearchServiceImpl implements ISearchService {
-
-    @Autowired
-    private SearchDataMapper searchDataMapper;
-
-    @Override
-    public String analyticParameter(List<SearchData> searchData) {
-        // 按照index排序
-        searchData.sort(Comparator.comparingInt(SearchData::getIndex));
-        StringBuilder sql = new StringBuilder("SELECT * FROM vr_press WHERE ");
-
-        int searchDataSize = searchData.size();
-        for (int i = 0; i < searchDataSize; i++) {
-            SearchData query = searchData.get(i);
-            // 添加条件连接符
-            if(i != 0){
-                sql.append(" ").append(query.getQuery_concat()).append(" ");
-            }
-            // 单项查询
-            if(searchDataSize == 1){
-                sql.append(parseLogicOperators(query.getField_name(),query.getText()));
-                return sql.toString();
-            }
-            // 添加查询条件
-            sql.append(handleQueryCondition(query));
-        }
-
-        return sql.toString();
-    }
-
-    /**
-     * 处理单个查询条件并返回对应的SQL片段。
-     * @param query 查询数据对象
-     * @return SQL片段
-     */
-    private String handleQueryCondition(SearchData query) {
-        String text = query.getText();
-        switch (query.getQuery_style()) {
-            case "precise":
-                return query.getField_name() + " = '" + text + "'";
-            case "fuzzy":
-                return query.getField_name() + " LIKE '%" + text + "%'";
-            default:
-                throw new IllegalArgumentException("Unsupported query style: " + query.getQuery_style());
-        }
-    }
-
-    /**
-     * 解析单项查询逻辑运算符并返回转换后的字符串。
-     * @param text 输入字符串
-     * @return 转换后的字符串
-     */
-    public StringBuilder parseLogicOperators(String fieldName, String text) {
-
-        List<String> protectedContents = new ArrayList<>(); // 用于存储双引号内的内容
-        String placeholder = "TEMP_PLUS_PLACEHOLDER"; // 占位符
-
-        // 使用Pattern和Matcher来查找并处理双引号内的内容
-        Pattern pattern = Pattern.compile("\"([^\"]*)\"");
-        Matcher matcher = pattern.matcher(text);
-        StringBuffer sb = new StringBuffer();
-        while (matcher.find()) {
-            String contentInsideQuotes = matcher.group(1); // 获取双引号内的内容
-            protectedContents.add(contentInsideQuotes); // 保存内容
-            matcher.appendReplacement(sb, placeholder); // 替换为占位符
-        }
-        matcher.appendTail(sb);
-        text = sb.toString();
-
-        // 替换逻辑运算符
-        text = text.replace("*", "AND")
-                   .replace("+", "OR")
-                   .replace("-", "NOT");
-
-        // 恢复双引号内的内容
-        for (String protectedContent : protectedContents) {
-            text = text.replaceFirst("TEMP_PLUS_PLACEHOLDER", protectedContent);
-        }
-
-        // 使用正则表达式拆分条件,并保留括号和逻辑运算符
-        List<String> conditions = new ArrayList<>();
-        Matcher conditionMatcher = Pattern.compile("\\(|\\)|\\bAND\\b|\\bOR\\b|\\bNOT\\b|[^\\s()]+").matcher(text);
-        while (conditionMatcher.find()) {
-            String match = conditionMatcher.group();
-            if (!match.trim().isEmpty()) {
-                conditions.add(match.trim());
-            }
-        }
-
-        // 构建SQL条件
-        StringBuilder condition = new StringBuilder();
-        for (String item : conditions) {
-            boolean isLogicalOperatorOrBracket = "AND".equals(item) || "OR".equals(item) || "NOT".equals(item) || "(".equals(item) || ")".equals(item);
-            if (isLogicalOperatorOrBracket) {
-                condition.append(" ").append(item).append(" ");
-            } else {
-                condition.append(fieldName).append(" LIKE '%").append(item).append("%'");
-            }
-        }
-
-        return condition;
-    }
-
-
-    // 执行查询
-    public List<Press> ExecuteSearchSql(String SqlString) {
-        return searchDataMapper.ExecuteSearchSql(SqlString);
-    }
-
-}

+ 2 - 2
src/main/resources/application-druid.yml

@@ -12,7 +12,7 @@ spring:
   # redis 配置
   redis:
     # 地址
-    host: 110.41.60.208
+    host: 39.101.199.16
     # 密码
     password: lizhixian
 
@@ -21,7 +21,7 @@ spring:
     druid:
       # 主库数据源
       master:
-        url: jdbc:mysql://110.41.60.208:3306/vrone-xmg?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://39.101.199.16:3306/vr-one?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: lizhixian
 

+ 2 - 2
src/main/resources/mybatis/VRdemo/DataExcelMapper.xml

@@ -191,10 +191,10 @@
     </update>
 
     <insert id="insertPressDataList" parameterType="java.util.List">
-        INSERT INTO vr_press (title, author, press_title, issue, pages, keyword, classify,area,create_by,create_time)
+        INSERT INTO vr_press (title, author, press_title, issue, date, pages, keyword, classify,area,create_by,create_time)
         VALUES
         <foreach collection="list" item="item" separator=",">
-            (#{item.title}, #{item.author}, #{item.pressTitle}, #{item.issue}, #{item.pages}, #{item.keyword}, #{item.classify}, #{item.area}, #{item.createBy}, #{item.createTime})
+            (#{item.title}, #{item.author}, #{item.pressTitle}, #{item.issue}, #{item.date}, #{item.pages}, #{item.keyword}, #{item.classify}, #{item.area}, #{item.createBy}, #{item.createTime})
         </foreach>
     </insert>
 </mapper>