|
@@ -0,0 +1,214 @@
|
|
|
+package cn.cslg.pas.service;
|
|
|
+
|
|
|
+import cn.cslg.pas.common.model.dto.AsInvalidReasonHistoryDTO;
|
|
|
+import cn.cslg.pas.common.model.dto.FMSDeleteFileDTO;
|
|
|
+import cn.cslg.pas.common.model.dto.PatentDTO;
|
|
|
+import cn.cslg.pas.common.model.dto.SearchHistoryDTO;
|
|
|
+import cn.cslg.pas.common.model.vo.AsInvalidReasonHistoryVO;
|
|
|
+import cn.cslg.pas.common.model.vo.SystemFile;
|
|
|
+import cn.cslg.pas.common.utils.Response;
|
|
|
+import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
|
|
|
+import cn.cslg.pas.common.utils.SecurityUtils.SecurityUtils;
|
|
|
+import cn.cslg.pas.domain.AsInvalidReasonHistory;
|
|
|
+import cn.cslg.pas.domain.WebTask;
|
|
|
+import cn.cslg.pas.domain.asso.AssoInvalidReasonHistoryFile;
|
|
|
+import cn.cslg.pas.mapper.AsInvalidReasonHistoryMapper;
|
|
|
+import cn.cslg.pas.mapper.WebTaskMapper;
|
|
|
+import cn.cslg.pas.service.asso.AssoInvalidReasonHistoryFileService;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+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 org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author 李仁杰
|
|
|
+ * @description
|
|
|
+ * @createDate 2023-08-14 18:51:06
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
|
|
|
+public class AsInvalidReasonHistoryService extends ServiceImpl<AsInvalidReasonHistoryMapper, AsInvalidReasonHistory> {
|
|
|
+ private final FileManagerService fileManagerService;
|
|
|
+ private final AssoInvalidReasonHistoryFileService assoInvalidReasonHistoryFileService;
|
|
|
+ private final LoginUtils loginUtils;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加无效证据历史
|
|
|
+ *
|
|
|
+ * @param historyDTO
|
|
|
+ * @param files
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String addOrUpdateHistory(AsInvalidReasonHistoryDTO historyDTO, List<MultipartFile> files) throws IOException {
|
|
|
+ //添加或更新无效证据历史
|
|
|
+ AsInvalidReasonHistory history = new AsInvalidReasonHistory();
|
|
|
+ BeanUtils.copyProperties(historyDTO, history);
|
|
|
+ if (historyDTO.getId() == null) {
|
|
|
+ history.setCreateId(loginUtils.getId());
|
|
|
+ }
|
|
|
+ history.insertOrUpdate();
|
|
|
+ //当是更新时
|
|
|
+ if (historyDTO.getId() != null) {
|
|
|
+ //获得不需要删除的文件id
|
|
|
+ List<Integer> notInIds = new ArrayList<>();
|
|
|
+ if (historyDTO.getFiles() != null && historyDTO.getFiles().size() > 0) {
|
|
|
+ notInIds = historyDTO.getFiles().stream().map(SystemFile::getId).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ //根据无效历史id和ids删除历史和文件关联
|
|
|
+ LambdaQueryWrapper<AssoInvalidReasonHistoryFile> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(AssoInvalidReasonHistoryFile::getHistoryId, historyDTO.getId());
|
|
|
+ if (notInIds.size() != 0) {
|
|
|
+ queryWrapper.notIn(AssoInvalidReasonHistoryFile::getFileId, notInIds);
|
|
|
+ }
|
|
|
+ //删除远程文件
|
|
|
+ List<AssoInvalidReasonHistoryFile> assoFiles = assoInvalidReasonHistoryFileService.list(queryWrapper);
|
|
|
+ List<Integer> deleteIds = assoFiles.stream().map(AssoInvalidReasonHistoryFile::getFileId).collect(Collectors.toList());
|
|
|
+ if(deleteIds.size()!=0){
|
|
|
+ FMSDeleteFileDTO fmsDeleteFileDTO = new FMSDeleteFileDTO();
|
|
|
+ fmsDeleteFileDTO.setIds(deleteIds);
|
|
|
+ fmsDeleteFileDTO.setType(2);
|
|
|
+ fileManagerService.deleteFileFromFMS(fmsDeleteFileDTO);
|
|
|
+ }
|
|
|
+ assoInvalidReasonHistoryFileService.remove(queryWrapper);
|
|
|
+ }
|
|
|
+ //上传附件到文件系统
|
|
|
+ if (files != null && files.size() > 0) {
|
|
|
+ String res = fileManagerService.uploadFile(files, 1);
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(res);
|
|
|
+ List<Integer> fileIds = JSONArray.parseArray(jsonObject.get("data").toString(), Integer.class);
|
|
|
+ //保存和对象关联
|
|
|
+ List<AssoInvalidReasonHistoryFile> assoFiles = new ArrayList<>();
|
|
|
+ fileIds.forEach(item -> {
|
|
|
+ AssoInvalidReasonHistoryFile assoFile = new AssoInvalidReasonHistoryFile();
|
|
|
+ assoFile.setFileId(item);
|
|
|
+ assoFile.setHistoryId(history.getId());
|
|
|
+ assoFiles.add(assoFile);
|
|
|
+ });
|
|
|
+ //批量保存
|
|
|
+ assoInvalidReasonHistoryFileService.saveBatch(assoFiles);
|
|
|
+ }
|
|
|
+ return Response.success("保存成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String deleteHistory(List<Integer> ids) throws IOException {
|
|
|
+ //校验ids
|
|
|
+ if (ids == null || ids.size() == 0) {
|
|
|
+ return Response.error("请至少选择一个无效历史进行删除");
|
|
|
+ }
|
|
|
+ //根据ids从文件和无效历史关联表里获得文件id
|
|
|
+ LambdaQueryWrapper<AssoInvalidReasonHistoryFile> fileWrapper = new LambdaQueryWrapper<>();
|
|
|
+ fileWrapper.in(AssoInvalidReasonHistoryFile::getHistoryId, ids);
|
|
|
+ List<AssoInvalidReasonHistoryFile> files = assoInvalidReasonHistoryFileService.list(fileWrapper);
|
|
|
+ //提取出文件id
|
|
|
+ List<Integer> fileIds = files.stream().map(AssoInvalidReasonHistoryFile::getFileId).collect(Collectors.toList());
|
|
|
+ //根据文件id删除文件
|
|
|
+ FMSDeleteFileDTO fmsDeleteFileDTO = new FMSDeleteFileDTO();
|
|
|
+ fmsDeleteFileDTO.setIds(fileIds);
|
|
|
+ fmsDeleteFileDTO.setType(2);
|
|
|
+ fileManagerService.deleteFileFromFMS(fmsDeleteFileDTO);
|
|
|
+ //删除文件无效历史关联
|
|
|
+ assoInvalidReasonHistoryFileService.remove(fileWrapper);
|
|
|
+ //删除无效历史
|
|
|
+ this.removeByIds(ids);
|
|
|
+ return Response.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询无效历史
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String queryHistory(SearchHistoryDTO searchHistoryDTO) throws IOException {
|
|
|
+ IPage<AsInvalidReasonHistoryVO> pageList = new Page<>();
|
|
|
+ //校验专利号
|
|
|
+ if (searchHistoryDTO == null || searchHistoryDTO.getPatentNo() == null) {
|
|
|
+ return Response.error("无专利号");
|
|
|
+ }
|
|
|
+ String patentNo = searchHistoryDTO.getPatentNo();
|
|
|
+ Long size = searchHistoryDTO.getSize();
|
|
|
+ Long current = searchHistoryDTO.getCurrent();
|
|
|
+ //根据ids从文件和无效历史关联表里获得文件id
|
|
|
+ LambdaQueryWrapper<AsInvalidReasonHistory> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.eq(AsInvalidReasonHistory::getPatentNo, patentNo);
|
|
|
+ wrapper.orderByDesc(AsInvalidReasonHistory::getCreateTime);
|
|
|
+ //分页
|
|
|
+ List<AsInvalidReasonHistory> histories = this.page(new Page<>(current, size), wrapper).getRecords();
|
|
|
+ List<AsInvalidReasonHistoryVO> vos = this.historyData(histories);
|
|
|
+ Long count = this.count(wrapper);
|
|
|
+ pageList.setRecords(vos);
|
|
|
+ pageList.setCurrent(current);
|
|
|
+ pageList.setTotal(count);
|
|
|
+ pageList.setSize(size);
|
|
|
+ return Response.success(pageList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String updateHistory(AsInvalidReasonHistoryDTO historyDTO, List<MultipartFile> files) throws IOException {
|
|
|
+
|
|
|
+ return Response.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 装载数据
|
|
|
+ *
|
|
|
+ * @param histories
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<AsInvalidReasonHistoryVO> historyData(List<AsInvalidReasonHistory> histories) throws IOException {
|
|
|
+ List<AsInvalidReasonHistoryVO> vos = new ArrayList<>();
|
|
|
+ if (histories == null || histories.size() == 0) {
|
|
|
+ return vos;
|
|
|
+ }
|
|
|
+ //查询出所有的无效证据id
|
|
|
+ List<Integer> ids = histories.stream().map(AsInvalidReasonHistory::getId).collect(Collectors.toList());
|
|
|
+ //根据无效历史id查询关联的文件id
|
|
|
+ LambdaQueryWrapper<AssoInvalidReasonHistoryFile> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.in(AssoInvalidReasonHistoryFile::getHistoryId, ids);
|
|
|
+ List<AssoInvalidReasonHistoryFile> files = assoInvalidReasonHistoryFileService.list(wrapper);
|
|
|
+ List<Integer> fileIds = files.stream().map(AssoInvalidReasonHistoryFile::getFileId).collect(Collectors.toList());
|
|
|
+ List<SystemFile> systemFiles = new ArrayList<>();
|
|
|
+ if (fileIds.size() > 0) {
|
|
|
+ String res = fileManagerService.getSystemFileFromFMS(fileIds);
|
|
|
+ systemFiles = JSONArray.parseArray(res, SystemFile.class);
|
|
|
+ }
|
|
|
+ //遍历装载
|
|
|
+ for (AsInvalidReasonHistory history : histories) {
|
|
|
+ AsInvalidReasonHistoryVO vo = new AsInvalidReasonHistoryVO();
|
|
|
+ BeanUtils.copyProperties(history, vo);
|
|
|
+//获得当前无效证据的文件id列表
|
|
|
+ List<Integer> partFileIds = files.stream().filter(item -> item.getHistoryId().equals(history.getId())).map(AssoInvalidReasonHistoryFile::getFileId).collect(Collectors.toList());
|
|
|
+ //装载附件列表
|
|
|
+ List<SystemFile> partSystemFiles = new ArrayList<>();
|
|
|
+ if (partFileIds.size() > 0) {
|
|
|
+ partSystemFiles = systemFiles.stream().filter(item -> partFileIds.contains(item.getId())).collect(Collectors.toList());
|
|
|
+ partSystemFiles.forEach(item->{
|
|
|
+ String[] suffix =item.getFileName().split("\\.");
|
|
|
+ if(suffix.length>0) {
|
|
|
+ item.setSuffix(suffix[suffix.length - 1]);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ });
|
|
|
+ vo.setFiles(partSystemFiles);
|
|
|
+ }
|
|
|
+ vos.add(vo);
|
|
|
+ }
|
|
|
+ return vos;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|