xiexiang 1 年之前
父節點
當前提交
cec878fdf9

+ 46 - 0
src/main/java/cn/cslg/pas/common/dto/business/ReferencesDTO.java

@@ -0,0 +1,46 @@
+
+package cn.cslg.pas.common.dto.business;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 报告文档
+ * @Author xiexiang
+ * @Date 2023/12/19
+ */
+@Data
+public class ReferencesDTO {
+    /**
+     * 报告/专题库id
+     */
+    private Integer projectId;
+
+    /**
+     * 路径
+     */
+    private String fileGuid;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 参考资料名称
+     */
+    private String referencesName;
+
+    /**
+     * 创建人id
+     */
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 49 - 0
src/main/java/cn/cslg/pas/common/dto/business/ReferencesUpdateDTO.java

@@ -0,0 +1,49 @@
+
+package cn.cslg.pas.common.dto.business;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 报告文档
+ * @Author xiexiang
+ * @Date 2023/12/19
+ */
+@Data
+public class ReferencesUpdateDTO {
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 报告/专题库id
+     */
+    private Integer projectId;
+
+    /**
+     * 路径
+     */
+    private String fileGuid;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 参考资料名称
+     */
+    private String referencesName;
+
+    /**
+     * 创建人id
+     */
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 1 - 0
src/main/java/cn/cslg/pas/common/dto/business/TortTaskDTO.java

@@ -55,6 +55,7 @@ public class TortTaskDTO {
      * 抄送人
      */
     public List<CCPerson> ccPeople;
+
     /**
      * 备注
      */

+ 51 - 0
src/main/java/cn/cslg/pas/common/vo/business/ReferencesVO.java

@@ -0,0 +1,51 @@
+
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 报告文档
+ * @Author xiexiang
+ * @Date 2023/12/19
+ */
+@Data
+public class ReferencesVO {
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 报告/专题库id
+     */
+    private Integer projectId;
+
+    /**
+     * 路径
+     */
+    private String fileGuid;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 参考资料名称
+     */
+    private String referencesName;
+
+    /**
+     * 创建人id
+     */
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    private String type;
+}

+ 33 - 0
src/main/java/cn/cslg/pas/controller/ReferencesController.java

@@ -0,0 +1,33 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.business.PatentDigProjectTaskDTO;
+import cn.cslg.pas.common.dto.business.ReferencesDTO;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.service.business.ReferencesService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/12/19
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/references")
+@RestController
+public class ReferencesController {
+    @Autowired
+    private ReferencesService referencesService;
+
+    @Operation(summary = "上传报告文档")
+    @PostMapping("/addReferences")
+    public Response addReferences(@RequestBody ReferencesDTO referencesDTO) throws Exception {
+        Integer id = referencesService.add(referencesDTO);
+        return Response.success(id);
+    }
+}

+ 53 - 0
src/main/java/cn/cslg/pas/domain/business/References.java

@@ -0,0 +1,53 @@
+package cn.cslg.pas.domain.business;
+
+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;
+
+/**
+ * 报告文档
+ * @Author xiexiang
+ * @Date 2023/12/19
+ */
+@Data
+@TableName("references")
+public class References extends BaseEntity<References> {
+    /**
+     * 报告/专题库id
+     */
+    @TableField(value = "project_id")
+    private Integer projectId;
+
+    /**
+     * 路径
+     */
+    @TableField(value = "file_guid")
+    private String fileGuid;
+
+    /**
+     * 备注
+     */
+    @TableField(value = "remark")
+    private String remark;
+
+    /**
+     * 参考资料名称
+     */
+    @TableField(value = "references_name")
+    private String referencesName;
+
+    /**
+     * 创建人id
+     */
+    @TableField(value = "create_id")
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private Date createTime;
+}

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

@@ -0,0 +1,14 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.References;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/12/19
+ */
+@Repository
+public interface ReferencesMapper extends BaseMapper<References> {
+}

+ 5 - 5
src/main/java/cn/cslg/pas/service/MailSendService.java

@@ -26,7 +26,7 @@ public class MailSendService {
     private RabbitMQUtils rabbitMQUtils;
 
     //发送协同邮件
-    public String sendSynery(String personId, Boolean ifInner, Integer projectId, Integer taskId, Integer reportType) {
+    public String sendSynery(String personId, Boolean ifInner, Integer projectId, Integer taskId, Integer reportType, String code) {
         Map<String, Object> map = new LinkedHashMap<>();
         map.put("title", "任务通知");
         String name = "";
@@ -60,7 +60,7 @@ public class MailSendService {
                 map.put("value1", personName);
                 map.put("email", email);
                 map.put("img", "/logo.png");
-                map.put("value2", "111");
+                map.put("value2", code);
                 map.put("value3", url + "/identificationCode");
             }
         }
@@ -69,7 +69,7 @@ public class MailSendService {
     }
 
     //发送邮件给抄送人
-    public void sentToCCMail(String personId, Boolean ifInner, String syneryName) {
+    public void sentToCCMail(String personId, Boolean ifInner, String createPersonName) {
         Map<String, Object> map = new LinkedHashMap<>();
         map.put("title", "任务通知");
         //判断是否为内部人员
@@ -86,7 +86,7 @@ public class MailSendService {
                 map.put("value1", personnels.get(0).getPersonnelName());
                 map.put("email", personnels.get(0).getPersonnelEmail());
                 map.put("img", "/logo.png");
-                map.put("value2", syneryName);
+                map.put("value2", createPersonName);
                 rabbitMQUtils.sendEmailMessage(map);
 
             }
@@ -101,7 +101,7 @@ public class MailSendService {
                 String email = matcher.group(0);
                 email = email.replace("<", "");
                 email = email.replace(">", "");
-                map.put("value1", syneryName);
+                map.put("value1", createPersonName);
                 map.put("email", email);
                 map.put("img", "/logo.png");
                 map.put("value2", personName);

+ 28 - 21
src/main/java/cn/cslg/pas/service/business/FTOCompareRecordService.java

@@ -73,6 +73,9 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
     @Autowired
     private SystemDictService systemDictService;
 
+    @Autowired
+    private PatentSplitMessageService patentSplitMessageService;
+
     /**
      * 查询FTO对比结果VO
      * @param getFeatureSplitDTO
@@ -451,9 +454,10 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
         try {
             List<PatentRightVo> patentRightVos = new ArrayList<>();
             //根据专利号和报告id查询权要
+            Integer lastTaskId = this.getLastTaskId(projectId, patentNo);
             List<RePatentClaim> patentRights = featureService.getRightListByNo(patentNo);
             LambdaQueryWrapper<Feature> wrapper = new LambdaQueryWrapper<>();
-            wrapper.eq(Feature::getProjectTaskId, taskId)
+            wrapper.eq(Feature::getProjectTaskId, lastTaskId)
                     .eq(Feature::getPatentNo, patentNo);
             List<Feature> allFeatures = featureService.list(wrapper);
             patentRightVos = featureService.loadPatentRightVO(patentRights, allFeatures, projectId, patentNo);
@@ -462,7 +466,7 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
             if (type == 1) {//查询协同前后对比结果
                 tortRightVOS = this.loadBeforeAndAfter(taskId, patentNo, patentRightVos);
             } else if (type == 2) {//发起人的查询
-                tortRightVOS = this.loadTortRightVOS2(taskId, patentRightVos);
+                tortRightVOS = this.loadTortRightVOS2(taskId, patentNo, projectId, patentRightVos);
             }
             tortCompareRecordVO.setTortRightVOS(tortRightVOS);
         } catch (Exception e) {
@@ -556,20 +560,23 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
      * @param patentRightVos
      * @return
      */
-    public List<TortRightVO> loadTortRightVOS2(Integer taskId, List<PatentRightVo> patentRightVos) {
+    public List<TortRightVO> loadTortRightVOS2(Integer taskId, String patentNo, Integer projectId, List<PatentRightVo> patentRightVos) {
         if (patentRightVos != null && !patentRightVos.isEmpty()) {
             //新建权要层信息
             List<TortRightVO> tortRightVOS = new ArrayList<>();
             //遍历装载权要层信息
+            Integer lastTaskId = this.getLastTaskId(projectId, patentNo);
             patentRightVos.forEach(item -> {
                 TortRightVO tortRightVO = new TortRightVO();
                 BeanUtils.copyProperties(item, tortRightVO);
                 //新建特征与侵权分析对比结果VOS
                 List<Feature> features = item.getFeatures();
                 LambdaQueryWrapper<FTOCompareRecord> queryWrapper = new LambdaQueryWrapper<>();
-                queryWrapper.eq(FTOCompareRecord::getProjectTaskId, taskId);
+                queryWrapper
+                        .eq(FTOCompareRecord::getCompareFileNumber, patentNo)
+                        .eq(FTOCompareRecord::getProjectId, projectId);
                 List<FTOCompareRecord> ftoCompareRecords = this.list(queryWrapper);
-                List<TortVO> tortVOS = this.loadTortVO2(features, ftoCompareRecords);
+                List<TortVO> tortVOS = this.loadTortVO2(taskId, lastTaskId, features, ftoCompareRecords);
                 tortRightVO.setTortVOS(tortVOS);
                 tortRightVOS.add(tortRightVO);
             });
@@ -587,7 +594,7 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
      * @param ftoCompareRecords
      * @return
      */
-    public List<TortVO> loadTortVO2(List<Feature> features, List<FTOCompareRecord> ftoCompareRecords) {
+    public List<TortVO> loadTortVO2(Integer taskId, Integer lastTaskId, List<Feature> features, List<FTOCompareRecord> ftoCompareRecords) {
         List<TortVO> tortVOS = new ArrayList<>();
         for (Feature feature : features) {
             //新建特征与侵权分析对比结果VO
@@ -602,7 +609,7 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
                 // 原始数据应该是ifOriginal为true的数据
                 FTOCompareRecord originalRecord = ftoCompareRecords
                         .stream()
-                        .filter(item -> item.getFeatureId() != null && item.getFeatureId().equals(feature.getId()) && item.getIfOriginal().equals(true))
+                        .filter(item -> item.getFeatureId() != null && item.getProjectTaskId() != null && item.getProjectTaskId().equals(taskId) && item.getFeatureId().equals(feature.getId()) && item.getIfOriginal().equals(true))
                         .findFirst()
                         .orElse(null);
                 if (originalRecord != null) {
@@ -610,7 +617,7 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
                 } else {
                     FTOCompareRecord record = ftoCompareRecords
                             .stream()
-                            .filter(item -> item.getFeatureId() != null && item.getFeatureId().equals(feature.getId()) && item.getIfFinal().equals(true))
+                            .filter(item -> item.getFeatureId() != null && item.getProjectTaskId() != null && item.getProjectTaskId().equals(taskId) && item.getFeatureId().equals(feature.getId()) && item.getIfFinal().equals(true))
                             .findFirst()
                             .orElse(null);
                     if (record != null) {
@@ -620,7 +627,7 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
                 //协同人处理的数据
                 FTOCompareRecord currentRecord = ftoCompareRecords
                         .stream()
-                        .filter(item -> item.getFeatureId() != null && item.getFeatureId().equals(feature.getId()) && item.getIfOriginal().equals(false) && item.getIfFinal().equals(false))
+                        .filter(item -> item.getFeatureId() != null && item.getProjectTaskId() != null && item.getProjectTaskId().equals(taskId) && item.getFeatureId().equals(feature.getId()) && item.getIfOriginal().equals(false) && item.getIfFinal().equals(false))
                         .findFirst()
                         .orElse(null);
                 if (currentRecord != null) {
@@ -629,7 +636,7 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
                 //最终数据
                 FTOCompareRecord finalRecord = ftoCompareRecords
                         .stream()
-                        .filter(item -> item.getFeatureId() != null && item.getFeatureId().equals(feature.getId()) && item.getIfFinal().equals(true))
+                        .filter(item -> item.getFeatureId() != null && item.getProjectTaskId() != null && item.getProjectTaskId().equals(lastTaskId) && item.getFeatureId().equals(feature.getId()) && item.getIfFinal().equals(true))
                         .findFirst()
                         .orElse(null);
                 if (finalRecord != null) {
@@ -672,9 +679,11 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
             throw new UnLoginException("未登录");
         }
         try {
+            Integer lastTaskId = this.getLastTaskId(projectId, patentNo);
             //首先是根据projectId,以及ifOriginal为false、ifFinal为true这几个条件删除表中的最终数据(最开始的数据)
             LambdaQueryWrapper<FTOCompareRecord> removeWrapper = new LambdaQueryWrapper<>();
-            removeWrapper.eq(FTOCompareRecord::getProjectTaskId, taskId)
+            removeWrapper.eq(FTOCompareRecord::getProjectId, projectId)
+                    .eq(FTOCompareRecord::getProjectTaskId, lastTaskId)
                     .eq(FTOCompareRecord::getCompareFileNumber, patentNo)
                     .eq(FTOCompareRecord::getIfOriginal, false)
                     .eq(FTOCompareRecord::getIfFinal, true);
@@ -689,7 +698,7 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
                         tortFinal.setFeatureId(item.getFeatureId());
                         tortFinal.setProjectId(projectId);
                         tortFinal.setCompareFileNumber(patentNo);
-                        tortFinal.setProjectTaskId(taskId);
+                        tortFinal.setProjectTaskId(lastTaskId);
                         tortFinal.setCompareResult(item.getCompareResult());
                         tortFinal.setCompareDescription(item.getCompareDescription());
                         tortFinal.setTargetDescription(item.getTargetDescription());
@@ -914,17 +923,15 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
      */
     public Integer getLastTaskId(Integer projectId, String patentNo){
         //根据报告id和专利号查询最新的对比结果的任务id
-        LambdaQueryWrapper<FTOCompareRecord> queryWrapper = new LambdaQueryWrapper<>();
+        LambdaQueryWrapper<PatentSplitMessage> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper
-                .eq(FTOCompareRecord::getProjectId, projectId)
-                .eq(FTOCompareRecord::getCompareFileNumber, patentNo)
-                .eq(FTOCompareRecord::getIfOriginal, false)
-                .eq(FTOCompareRecord::getIfFinal, true)
-                .orderByDesc(FTOCompareRecord::getCreateTime);
-        List<FTOCompareRecord> ftoCompareRecords = this.list(queryWrapper);
+                .eq(PatentSplitMessage::getProjectId, projectId)
+                .eq(PatentSplitMessage::getPatentNo, patentNo)
+                .orderByDesc(PatentSplitMessage::getCreateTime);
+        List<PatentSplitMessage> patentSplitMessages = patentSplitMessageService.list(queryWrapper);
         Integer lastTaskId = null;
-        if (!ftoCompareRecords.isEmpty()) {
-            lastTaskId = ftoCompareRecords.get(0).getProjectTaskId();
+        if (!patentSplitMessages.isEmpty()) {
+            lastTaskId = patentSplitMessages.get(0).getTaskId();
         }
         return lastTaskId;
     }

+ 45 - 20
src/main/java/cn/cslg/pas/service/business/ProjectTaskService.java

@@ -21,6 +21,7 @@ import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.mapper.ProjectTaskMapper;
 import cn.cslg.pas.service.AssoTaskFieldService;
+import cn.cslg.pas.service.MailSendService;
 import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.common.FileManagerService;
@@ -109,10 +110,14 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
     @Autowired
     private AssoTaskFieldService assoTaskFieldService;
 
-
     @Autowired
     private FTOCompareRecordService ftoCompareRecordService;
 
+    @Autowired
+    private TaskCodeService taskCodeService;
+
+    @Autowired
+    private MailSendService mailSendService;
 
     /**
      * 项目开卷审核任务
@@ -295,6 +300,7 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
             Personnel personnel2 = personnels2.stream().filter(item -> item.getId().equals(projectTaskVO.getHandler())).findFirst().orElse(null);
             if (personnel != null) {
                 projectTaskVO.setCreateName(personnel.getPersonnelName());
+            } else if (personnel2 != null) {
                 projectTaskVO.setHandlerName(personnel2.getPersonnelName());
             } else {
                 throw new XiaoShiException("未获取到当前登陆人信息");
@@ -1019,31 +1025,55 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
         projectTask.setStatus(2);
         projectTask.insert();
         Integer taskId = projectTask.getId();
-        //2.保存任务和人员关联表信息
-        if (taskId != null) {
-            List<CCPerson> ccPeople = tortTaskDTO.getCcPeople();
-            this.addTaskAndCCPeople(personnelVO.getId(), taskId, ccPeople);
-        } else {
-            throw new XiaoShiException("创建任务失败,未读取到任务id");
-        }
-
-        //3.compareLiterature入库
+        //2.compareLiterature入库
         List<String> patentNos = tortTaskDTO.getPatentNos();
         if (!patentNos.isEmpty()) {
             try {
-                this.addCompareLiteratureByNos(patentNos, taskId, projectId);
-                //4.从侵权分析中获得对比结果,并复制保存
+                this.addCompareLiteratureByNosToEs(patentNos, taskId, projectId);
+                //3.从侵权分析中获得对比结果,并复制保存
                 ftoCompareRecordService.copyFTOCompareRecords(tortTaskDTO.getProjectId(), taskId, personnelVO.getId(), patentNos);
             } catch (Exception e) {
                 throw new XiaoShiException(e.toString());
             }
         }
-        //5.发送邮件通知协同人和抄送人
-        //TODO
+        //4.保存任务和人员关联表信息
+        if (taskId != null) {
+            List<CCPerson> ccPeople = tortTaskDTO.getCcPeople();
+            this.addTaskAndCCPeople(personnelVO.getId(), taskId, ccPeople);
+            //发送给抄送人
+            for (CCPerson item : ccPeople) {
+                mailSendService.sentToCCMail(item.getPersonId(), item.getIfInner(), personnelVO.getId());
+            }
+        } else {
+            throw new XiaoShiException("创建任务失败,未读取到任务id");
+        }
+        //5.发送邮件通知协同人
+        //获取code码
+        String code = taskCodeService.addTaskCode(taskId);
+        Boolean ifInner = true;
+        if (tortTaskDTO.getHandlerType() == 0) {
+            ifInner = true;
+        } else {
+            ifInner = false;
+        }
+        LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportProject::getProjectId, projectId);
+        ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
+        Integer reportType = null;
+        if (reportProject != null) {
+            reportType = reportProject.getReportType();
+        }
+        mailSendService.sendSynery(projectTask.getHandler(), ifInner, projectId, taskId, reportType, code);
         return projectTask.getId();
     }
 
-
+    /**
+     * 添加任务与专利关联到ES
+     * @param patentNos
+     * @param taskId
+     * @param projectId
+     * @throws Exception
+     */
     private void addCompareLiteratureByNosToEs(List<String> patentNos, Integer taskId, Integer projectId) throws Exception {
         if (patentNos == null || patentNos.size() == 0) {
             return;
@@ -1073,11 +1103,8 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
                         } catch (Exception e) {
                         }
                     }
-
                 }
-
             });
-
         }
     }
 
@@ -1108,8 +1135,6 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
                 assoTaskField.setProjectId(projectId);
                 assoTaskFields.add(assoTaskField);
             });
-
-
         }
         assoTaskFieldService.saveBatch(assoTaskFields);
     }

+ 110 - 0
src/main/java/cn/cslg/pas/service/business/ReferencesService.java

@@ -0,0 +1,110 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.business.ReferencesDTO;
+import cn.cslg.pas.common.dto.business.ReferencesUpdateDTO;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.model.cronModel.SystemFile;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.vo.business.ReferencesVO;
+import cn.cslg.pas.domain.business.References;
+import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.ReferencesMapper;
+import cn.cslg.pas.service.common.FileManagerService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/12/19
+ */
+@Slf4j
+@Service
+public class ReferencesService extends ServiceImpl<ReferencesMapper, References> {
+    @Autowired
+    private CacheUtils cacheUtils;
+
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Autowired
+    private FileManagerService fileManagerService;
+
+    /**
+     * 上传报告文档
+     * @param referencesDTO
+     * @return
+     */
+    public Integer add(ReferencesDTO referencesDTO){
+        if (referencesDTO != null) {
+            References references = new References();
+            BeanUtils.copyProperties(referencesDTO, references);
+            //获取登录人信息
+            PersonnelVO personnelVO = new PersonnelVO();
+            try {
+                personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            } catch (Exception e) {
+                throw new UnLoginException("未登录");
+            }
+            references.setCreateId(personnelVO.getId());
+            references.insert();
+            return references.getId();
+        } else {
+            throw new XiaoShiException("入参为空");
+        }
+    }
+
+    public Integer update(ReferencesUpdateDTO referencesUpdateDTO){
+        if (referencesUpdateDTO != null) {
+            Integer id = referencesUpdateDTO.getId();
+            References references = this.getById(id);
+            BeanUtils.copyProperties(referencesUpdateDTO, references);
+            references.updateById();
+            return references.getId();
+        } else {
+            throw new XiaoShiException("入参为空");
+        }
+    }
+
+    public void delete(List<Integer> ids){
+        this.removeBatchByIds(ids);
+    }
+
+    public List<ReferencesVO> query(Integer projectId){
+        List<ReferencesVO> referencesVOS = new ArrayList<>();
+        LambdaQueryWrapper<References> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(References::getProjectId, projectId);
+        List<References> references = this.list(queryWrapper);
+        if (!references.isEmpty()) {
+            List<String> fileGuids = references.stream().map(References::getFileGuid).collect(Collectors.toList());
+            if (fileGuids.size() != 0) {
+                try {
+                    String res = fileManagerService.getSystemFileFromFMS(fileGuids);
+                    List<SystemFile> systemFiles = JSONObject.parseArray(res, SystemFile.class);
+                    references.forEach(item -> {
+                        ReferencesVO referencesVO = new ReferencesVO();
+                        BeanUtils.copyProperties(item, referencesVO);
+                        SystemFile systemFile = systemFiles.stream().filter(file -> file.getGuid() != null && file.getGuid().equals(item.getFileGuid())).findFirst().orElse(null);
+                        if (systemFile != null) {
+                            referencesVO.setType(systemFile.getType());
+                        }
+                        referencesVOS.add(referencesVO);
+                    });
+                } catch (Exception e) {
+                    throw new XiaoShiException("查询文件信息错误");
+                }
+            }
+        }
+        return referencesVOS;
+    }
+}