Kaynağa Gözat

9/27 novelty

xiexiang 1 yıl önce
ebeveyn
işleme
41cee1d5d6

+ 44 - 0
src/main/java/cn/cslg/pas/common/dto/NoveltyProjectDTO/NoveltyRetrieveRecordDTO.java

@@ -0,0 +1,44 @@
+package cn.cslg.pas.common.dto.NoveltyProjectDTO;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 检索记录
+ */
+@Data
+public class NoveltyRetrieveRecordDTO {
+
+    private Integer id;
+
+    /**
+     * 检索式
+     */
+    private String conditions;
+
+    /**
+     * 数据库类型
+     */
+    private String dbType;
+
+    /**
+     * 检索时间
+     */
+    private Date retrieveTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 总条数
+     */
+    private Integer totalNum;
+
+    /**
+     * 前端配置
+     */
+    private String searchSetting;
+}

+ 15 - 0
src/main/java/cn/cslg/pas/common/dto/NoveltyProjectDTO/QuerySearchRecordDTO.java

@@ -0,0 +1,15 @@
+package cn.cslg.pas.common.dto.NoveltyProjectDTO;
+
+import lombok.Data;
+
+/**
+ * 查询检索记录
+ * @Author xiexiang
+ * @Date 2024/9/27
+ */
+@Data
+public class QuerySearchRecordDTO {
+    private Integer projectId;
+    private Long size;
+    private Long current;
+}

+ 4 - 1
src/main/java/cn/cslg/pas/common/dto/NoveltyProjectDTO/QueryTemplateDTO.java

@@ -9,5 +9,8 @@ import lombok.Data;
  */
 @Data
 public class QueryTemplateDTO {
-    private Integer projectId;
+    /**
+     * 模板id
+     */
+    private Integer templateId;
 }

+ 3 - 0
src/main/java/cn/cslg/pas/common/dto/QuerySearchRecordDTO.java

@@ -2,6 +2,9 @@ package cn.cslg.pas.common.dto;
 
 import lombok.Data;
 
+/**
+ * 查询检索记录DTO
+ */
 @Data
 public class QuerySearchRecordDTO {
     private Integer projectId;

+ 28 - 1
src/main/java/cn/cslg/pas/common/vo/NoveltyProjectVO/QueryTemplateVO.java

@@ -2,6 +2,8 @@ package cn.cslg.pas.common.vo.NoveltyProjectVO;
 
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 查询查新检索报告模板返回VO
  * @Author xiexiang
@@ -17,5 +19,30 @@ public class QueryTemplateVO {
     /**
      * 模板名称
      */
-    private String name;
+    private String templateName;
+
+    /**
+     * 模板路径
+     */
+    private String templatePath;
+
+    /**
+     * 创建人id
+     */
+    private String createId;
+
+    /**
+     * 创建人名称
+     */
+    private String createName;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 配置信息
+     */
+    private String configMessage;
 }

+ 81 - 0
src/main/java/cn/cslg/pas/common/vo/NoveltyProjectVO/RetrieveRecordVO.java

@@ -0,0 +1,81 @@
+package cn.cslg.pas.common.vo.NoveltyProjectVO;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 检索记录VO
+ * @author xx
+ * 2024/9/27
+ */
+@Data
+public class RetrieveRecordVO {
+    /**
+     * 检索记录id
+     */
+    private Integer id;
+
+    /**
+     * 检索式
+     */
+    private String conditions;
+
+    /**
+     * 数据库类型
+     */
+    private String dbType;
+
+
+    private Integer searchType;
+
+    /**
+     * 租户
+     */
+    private Integer tenantId;
+
+    /**
+     * 总条数
+     */
+    private Integer totalNum;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 创建人id
+     */
+    private String createId;
+
+    /**
+     * 创建人名称
+     */
+    private String createName;
+
+    /**
+     * 检索时间
+     */
+    private Date retrieveTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+
+    /**
+     * 是否手动更新
+     */
+    private Boolean ifBySystem;
+
+    /**
+     * 前端配置
+     */
+    private String searchSetting;
+
+}

+ 50 - 3
src/main/java/cn/cslg/pas/controller/NoveltyProjectController.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.*;
+import cn.cslg.pas.common.dto.NoveltyProjectDTO.NoveltyRetrieveRecordDTO;
 import cn.cslg.pas.common.dto.NoveltyProjectDTO.QueryTemplateDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.Response;
@@ -11,6 +12,8 @@ import cn.cslg.pas.common.vo.TechnicalCaseVO;
 import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.service.business.NoveltyProjectService;
 import cn.cslg.pas.service.business.TechnicalCaseService;
+import cn.cslg.pas.service.novelty.NoveltyReportTemplateService;
+import cn.cslg.pas.service.novelty.SearchRecordService;
 import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -18,6 +21,9 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.io.IOException;
+import java.util.List;
+
 @RequestMapping(Constants.API_XiaoSHI + "/noveltyProject")
 @RestController
 public class NoveltyProjectController {
@@ -28,6 +34,12 @@ public class NoveltyProjectController {
     @Autowired
     private TechnicalCaseService technicalCaseService;
 
+    @Autowired
+    private NoveltyReportTemplateService noveltyReportTemplateService;
+
+    @Autowired
+    private SearchRecordService searchRecordService;
+
     @Operation(summary = "添加查新检索报告")
     @PostMapping("/addNoveltyProject")
     public Response addNoveltyProject(@RequestBody AddNoveltyProjectDTO noveltyProjectDTO) throws Exception {
@@ -112,9 +124,44 @@ public class NoveltyProjectController {
 
     @Operation(summary = "查询查新检索报告模板")
     @PostMapping("/queryTemplate")
-    public Response queryTemplate(@RequestBody QueryTemplateDTO queryTemplateDTO) {
+    public Response queryTemplate(@RequestBody QueryTemplateDTO queryTemplateDTO) throws IOException {
+        List<QueryTemplateVO> queryTemplateVOS = noveltyReportTemplateService.queryTemplate(queryTemplateDTO);
+        Records records = new Records();
+        records.setData(queryTemplateVOS);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "查询检索记录")
+    @PostMapping("/querySearchRecord")
+    public Response querySearchRecord(@RequestBody QuerySearchRecordDTO querySearchRecordDTO) throws IOException {
+        Records records = searchRecordService.querySearchRecord(querySearchRecordDTO);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "添加检索记录")
+    @PostMapping("/addSearchRecord")
+    public Response addSearchRecord(@RequestBody NoveltyRetrieveRecordDTO noveltyRetrieveRecordDTO){
+        Integer id = searchRecordService.addSearchRecord(noveltyRetrieveRecordDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
 
-        QueryTemplateVO queryTemplateVO = new QueryTemplateVO();
-        return Response.success(queryTemplateVO);
+    @Operation(summary = "修改检索记录")
+    @PostMapping("/updateSearchRecord")
+    public Response updateSearchRecord(@RequestBody NoveltyRetrieveRecordDTO noveltyRetrieveRecordDTO){
+        Integer id = searchRecordService.updateSearchRecord(noveltyRetrieveRecordDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "删除检索记录")
+    @PostMapping("/deleteSearchRecord")
+    public Response deleteSearchRecord(@RequestBody List<Integer> retrieveIds){
+        List<Integer> ids = searchRecordService.deleteSearchRecord(retrieveIds);
+        Records records =new Records();
+        records.setData(ids);
+        return Response.success(records);
     }
 }

+ 10 - 2
src/main/java/cn/cslg/pas/domain/business/RetrieveRecord.java

@@ -13,7 +13,7 @@ import java.util.Date;
  * 2023/7/8
  */
 @Data
-@TableName(value ="retrieve_record")
+@TableName(value = "retrieve_record")
 public class RetrieveRecord extends BaseEntity<RetrieveRecord> {
 
     /**
@@ -21,15 +21,23 @@ public class RetrieveRecord extends BaseEntity<RetrieveRecord> {
      */
     @TableField(value = "conditions")
     private String conditions;
+
+    /**
+     * 数据库类型
+     */
     @TableField(value = "db_type")
     private String dbType;
+
+
     @TableField(value = "search_type")
     private Integer searchType;
+
     /**
      * 租户
      */
     @TableField(value = "tenant_id")
     private Integer tenantId;
+
     /**
      * 总条数
      */
@@ -71,6 +79,6 @@ public class RetrieveRecord extends BaseEntity<RetrieveRecord> {
      * 前端配置
      */
     @TableField(value = "search_setting")
-    private Boolean searchSetting;
+    private String searchSetting;
 
 }

+ 41 - 0
src/main/java/cn/cslg/pas/domain/business/novelty/NoveltyReportTemplate.java

@@ -0,0 +1,41 @@
+package cn.cslg.pas.domain.business.novelty;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 查新检索报告模板
+ * @Author xiexiang
+ * @Date 2024/9/26
+ */
+@TableName(value ="novelty_report_template")
+@Data
+public class NoveltyReportTemplate extends BaseEntity<NoveltyReportTemplate> {
+    /**
+     * 模板名称
+     */
+    private String templateName;
+
+    /**
+     * 模板路径
+     */
+    private String templatePath;
+
+    /**
+     * 创建人id
+     */
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 配置信息
+     */
+    private String configMessage;
+}

+ 14 - 0
src/main/java/cn/cslg/pas/mapper/novelty/NoveltyReportTemplateMapper.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.mapper.novelty;
+
+import cn.cslg.pas.domain.business.novelty.NoveltyReportTemplate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 查新检索报告模板
+ * @Author xiexiang
+ * @Date 2024/9/26
+ */
+@Mapper
+public interface NoveltyReportTemplateMapper extends BaseMapper<NoveltyReportTemplate> {
+}

+ 80 - 0
src/main/java/cn/cslg/pas/service/novelty/NoveltyReportTemplateService.java

@@ -0,0 +1,80 @@
+package cn.cslg.pas.service.novelty;
+
+import cn.cslg.pas.common.dto.NoveltyProjectDTO.QueryTemplateDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.vo.NoveltyProjectVO.QueryTemplateVO;
+import cn.cslg.pas.domain.business.novelty.NoveltyReportTemplate;
+import cn.cslg.pas.mapper.novelty.NoveltyReportTemplateMapper;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 查新检索报告模板
+ * @Author xiexiang
+ * @Date 2024/9/26
+ */
+@Service
+public class NoveltyReportTemplateService extends ServiceImpl<NoveltyReportTemplateMapper, NoveltyReportTemplate> {
+    @Autowired
+    private PermissionService permissionService;
+
+    public List<QueryTemplateVO> queryTemplate(QueryTemplateDTO queryTemplateDTO) throws IOException {
+        List<QueryTemplateVO> queryTemplateVOS = new ArrayList<>();
+        List<NoveltyReportTemplate> noveltyReportTemplates = new ArrayList<>();
+        if (queryTemplateDTO.getTemplateId() != null) {
+            NoveltyReportTemplate noveltyReportTemplate = this.getById(queryTemplateDTO.getTemplateId());
+            noveltyReportTemplates.add(noveltyReportTemplate);
+        } else {
+            noveltyReportTemplates = this.list();
+        }
+        if (!noveltyReportTemplates.isEmpty()) {
+            queryTemplateVOS = this.loadTemplateVOS(noveltyReportTemplates);
+        }
+        return queryTemplateVOS;
+    }
+
+    private List<QueryTemplateVO> loadTemplateVOS(List<NoveltyReportTemplate> noveltyReportTemplates) throws IOException {
+        List<QueryTemplateVO> queryTemplateVOS = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(noveltyReportTemplates)) {
+            List<String> createIds = new ArrayList<>();
+            List<Personnel> personnels = new ArrayList<>();
+
+            noveltyReportTemplates.forEach(item -> {
+                if (item.getCreateId() != null) {
+                    createIds.add(item.getCreateId());
+                }
+            });
+
+            //查询创建人名称
+            if (!CollectionUtils.isEmpty(createIds)) {
+                String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+                JSONObject jsonObject = JSON.parseObject(res);
+                personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+            }
+
+            for (NoveltyReportTemplate noveltyReportTemplate : noveltyReportTemplates) {
+                QueryTemplateVO queryTemplateVO = new QueryTemplateVO();
+                BeanUtils.copyProperties(noveltyReportTemplate, queryTemplateVO);
+                //装载人员信息
+                Personnel personnel = personnels.stream().filter(item -> item.getId().equals(noveltyReportTemplate.getCreateId())).findFirst().orElse(null);
+                if (personnel != null) {
+                    queryTemplateVO.setCreateName(personnel.getPersonnelName());
+                }
+                queryTemplateVOS.add(queryTemplateVO);
+            }
+
+        }
+        return queryTemplateVOS;
+    }
+}

+ 182 - 0
src/main/java/cn/cslg/pas/service/novelty/SearchRecordService.java

@@ -0,0 +1,182 @@
+package cn.cslg.pas.service.novelty;
+
+import cn.cslg.pas.common.dto.*;
+import cn.cslg.pas.common.dto.NoveltyProjectDTO.NoveltyRetrieveRecordDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.vo.NoveltyProjectVO.QueryTemplateVO;
+import cn.cslg.pas.common.vo.NoveltyProjectVO.RetrieveRecordVO;
+import cn.cslg.pas.domain.business.RetrieveRecord;
+import cn.cslg.pas.domain.business.novelty.AssoRetrieveRecordProject;
+import cn.cslg.pas.domain.business.novelty.NoveltyReportTemplate;
+import cn.cslg.pas.mapper.RetrieveRecordMapper;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.experimental.Accessors;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 检索记录
+ * @Author xiexiang
+ * @Date 2024/9/27
+ */
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class SearchRecordService extends ServiceImpl<RetrieveRecordMapper, RetrieveRecord> {
+    private final CacheUtils cacheUtils;
+    private final LoginUtils loginUtils;
+
+    @Autowired
+    private AssoRetrieveRecordProjectService assoRetrieveRecordProjectService;
+
+    @Autowired
+    private PermissionService permissionService;
+
+    /**
+     * 查询检索记录
+     *
+     * @return
+     */
+    public Records querySearchRecord(QuerySearchRecordDTO querySearchRecordDTO) throws IOException {
+        Records records = new Records();
+        Long total = null;
+        List<RetrieveRecord> retrieveRecordList = new ArrayList<>();
+        List<RetrieveRecordVO> retrieveRecordVOS = new ArrayList<>();
+        if (querySearchRecordDTO.getProjectId() != null) {
+            LambdaQueryWrapper<AssoRetrieveRecordProject> assoQueryWrapper = new LambdaQueryWrapper<>();
+            assoQueryWrapper.eq(AssoRetrieveRecordProject::getProjectId, querySearchRecordDTO.getProjectId());
+            List<AssoRetrieveRecordProject> assoRetrieveRecordProjects = assoRetrieveRecordProjectService.list();
+
+            if (!assoRetrieveRecordProjects.isEmpty()) {
+                List<Integer> retrieveIds = assoRetrieveRecordProjects.stream()
+                        .map(AssoRetrieveRecordProject::getRetrieveRecordId)
+                        .collect(Collectors.toList());
+                LambdaQueryWrapper<RetrieveRecord> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.in(RetrieveRecord::getId, retrieveIds)
+                        .orderByDesc(RetrieveRecord::getRetrieveTime)
+                        .orderByDesc(RetrieveRecord::getCreateTime);
+                IPage<RetrieveRecord> retrieveRecords = this.page(new Page<>(querySearchRecordDTO.getCurrent(), querySearchRecordDTO.getSize()), queryWrapper);
+                retrieveRecordList = retrieveRecords.getRecords();
+                if (!retrieveRecordList.isEmpty()) {
+                    retrieveRecordVOS = this.loadRetrieveRecords(retrieveRecordList);
+                }
+                total = retrieveRecords.getTotal();
+            }
+        }
+        records.setData(retrieveRecordVOS);
+        records.setCurrent(querySearchRecordDTO.getCurrent());
+        records.setSize(querySearchRecordDTO.getSize());
+        records.setTotal(total);
+        return records;
+    }
+
+    /**
+     * 装载检索记录返回VO
+     * @param retrieveRecordList
+     */
+    private List<RetrieveRecordVO> loadRetrieveRecords(List<RetrieveRecord> retrieveRecordList) throws IOException {
+        List<RetrieveRecordVO> retrieveRecordVOS = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(retrieveRecordList)) {
+            List<String> createIds = new ArrayList<>();
+            List<Personnel> personnels = new ArrayList<>();
+
+            retrieveRecordList.forEach(item -> {
+                if (item.getCreateId() != null) {
+                    createIds.add(item.getCreateId());
+                }
+            });
+
+            //查询创建人名称
+            if (!CollectionUtils.isEmpty(createIds)) {
+                String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+                JSONObject jsonObject = JSON.parseObject(res);
+                personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+            }
+
+            for (RetrieveRecord retrieveRecord : retrieveRecordList) {
+                RetrieveRecordVO retrieveRecordVO = new RetrieveRecordVO();
+                BeanUtils.copyProperties(retrieveRecord, retrieveRecordVO);
+                //装载人员信息
+                Personnel personnel = personnels.stream().filter(item -> item.getId().equals(retrieveRecord.getCreateId())).findFirst().orElse(null);
+                if (personnel != null) {
+                    retrieveRecordVO.setCreateName(personnel.getPersonnelName());
+                }
+                retrieveRecordVOS.add(retrieveRecordVO);
+            }
+
+        }
+        return retrieveRecordVOS;
+    }
+
+
+    /**
+     * 新增检索记录
+     *
+     * @param noveltyRetrieveRecordDTO
+     */
+    public Integer addSearchRecord(NoveltyRetrieveRecordDTO noveltyRetrieveRecordDTO) {
+        RetrieveRecord retrieveRecord = new RetrieveRecord();
+        BeanUtils.copyProperties(noveltyRetrieveRecordDTO, retrieveRecord);
+
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        retrieveRecord.setCreateId(personnelVO.getId());
+        retrieveRecord.setTenantId(personnelVO.getTenantId());
+
+        retrieveRecord.setIfBySystem(true);
+        retrieveRecord.insert();
+        return retrieveRecord.getId();
+    }
+
+    /**
+     * 更新检索记录表
+     *
+     * @param noveltyRetrieveRecordDTO
+     * @return
+     */
+    public Integer updateSearchRecord(NoveltyRetrieveRecordDTO noveltyRetrieveRecordDTO) {
+        Integer id = noveltyRetrieveRecordDTO.getId();
+        //根据传入对象的id查询出实体类
+        RetrieveRecord retrieveRecord = this.getById(id);
+        BeanUtils.copyProperties(noveltyRetrieveRecordDTO, retrieveRecord);
+        retrieveRecord.setUpdateTime(new Date());
+        retrieveRecord.updateById();
+        return retrieveRecord.getId();
+    }
+
+    /**
+     * 删除检索记录
+     *
+     * @return
+     */
+    public List<Integer> deleteSearchRecord(List<Integer> retrieveIds) {
+        if (!retrieveIds.isEmpty()) {
+            //删除关联关系
+            LambdaQueryWrapper<AssoRetrieveRecordProject> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(AssoRetrieveRecordProject::getRetrieveRecordId, retrieveIds);
+            assoRetrieveRecordProjectService.remove(queryWrapper);
+            //删除记录
+            this.removeBatchByIds(retrieveIds);
+        }
+        return retrieveIds;
+    }
+
+}