Ver Fonte

试验-规范文件-规范更新接口开发

LHB há 2 meses atrás
pai
commit
8c87dd7e9e

+ 13 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/PrivateStandardController.java

@@ -195,5 +195,18 @@ public class PrivateStandardController {
         boolean b = this.privateStandardService.deleteFile(id);
         return R.data(b);
     }
+
+    /**
+     * 规范更新
+     * @param id 规范文件id
+     */
+    @ApiOperation(value = "规范更新")
+    @GetMapping("/standardUpdate")
+    @ApiImplicitParam(name = "id", value = "规范文件id", required = true)
+    public R<Boolean> standardUpdate(Long id) {
+        boolean b = this.privateStandardService.standardUpdate(id);
+        return R.data(b);
+    }
+
 }
 

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/PrivateStandardService.java

@@ -23,4 +23,6 @@ public interface PrivateStandardService extends IService<PrivateStandard> {
     boolean deleteFile(Long id);
 
     boolean updateTypeByTwo(List<PrivateStandardDTO> data, List<Long> delIds, List<Long> delFileIds, MultipartFile[] files);
+
+    boolean standardUpdate(Long id);
 }

+ 126 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/PrivateStandardServiceImpl.java

@@ -1,14 +1,14 @@
 package org.springblade.business.service.impl;
 
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.ReflectUtil;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.business.entity.StandardFile;
+import org.springblade.business.entity.*;
 import org.springblade.business.service.StandardFileService;
 import org.springblade.business.dto.PrivateStandardDTO;
-import org.springblade.business.entity.PrivateStandard;
-import org.springblade.business.entity.StandardInfo;
 import org.springblade.business.mapper.StandardInfoJoinMapper;
 import org.springblade.business.mapper.StandardInfoMapper;
 import org.springblade.business.mapper.StandardInfoPrivateJoinMapper;
@@ -27,10 +27,17 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author LHB
@@ -288,6 +295,122 @@ public class PrivateStandardServiceImpl extends ServiceImpl<PrivateStandardMappe
             throw new ServiceException("更新失败");
         }
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean standardUpdate(Long id) {
+        BladeUser user = SecureUtil.getUser();
+        //获取当前规范文件信息
+        PrivateStandard privateStandard = baseMapper.selectById(id);
+
+
+        //获取信息
+        List<StandardInfo> standardInfos = standardInfoMapper.selectList(Wrappers.<StandardInfo>lambdaQuery()
+                .eq(StandardInfo::getStandardId, id)
+                .eq(StandardInfo::getIsDeleted, 0));
+        List<Long> infoIds = standardInfos.stream().filter(f -> f.getType() == 2).map(StandardInfo::getId).collect(Collectors.toList());
+
+        //获取绑定信息
+        List<StandardInfoJoin> standardInfoJoins = standardInfoJoinMapper.selectList(Wrappers.<StandardInfoJoin>lambdaQuery()
+                .in(StandardInfoJoin::getStandardInfoLeftId, infoIds));
+
+        //获取绑定表单信息
+        List<StandardInfoPrivateJoin> standardInfoPrivateJoins = standardInfoPrivateJoinMapper.selectList(Wrappers.<StandardInfoPrivateJoin>lambdaQuery()
+                .in(StandardInfoPrivateJoin::getStandardInfoId, infoIds));
+
+        //获取文件信息
+        List<StandardFile> standardFiles = standardFileService.list(Wrappers.<StandardFile>lambdaQuery()
+                .eq(StandardFile::getStandardId, id)
+                .eq(StandardFile::getIsDeleted, 0));
+
+
+        //复制数据
+
+        //新规范文件id
+        Long newId = SnowFlakeUtil.getId();
+
+        privateStandard.setId(newId);
+        if (privateStandard.getStatus() == 2) {
+            privateStandard.setName(privateStandard.getName().replace("-已过期",""));
+            privateStandard.setStatus(1);
+        }
+        privateStandard.setCreateTime(LocalDateTime.now());
+        privateStandard.setCreateUser(user.getUserId());
+
+        //修改之前的规则为过期
+        baseMapper.updateStatus(privateStandard.getParentId());
+
+        baseMapper.insert(privateStandard);
+
+        //旧id与新id的映射关系
+        Map<Long, Long> map = new HashMap<>();
+        standardInfos.forEach(f -> {
+            Long newInfoId = SnowFlakeUtil.getId();
+            map.put(f.getId(),newInfoId);
+        });
+        standardInfos.forEach(f -> {
+            f.setId(map.get(f.getId()));
+            f.setParentId(map.get(f.getParentId())==null?0:map.get(f.getParentId()));
+            f.setStandardId(newId);
+            f.setCreateTime(DateTime.now());
+            f.setCreateUser(user.getUserId());
+            standardInfoMapper.insert(f);
+        });
+
+
+        standardInfoJoins.forEach(f -> {
+            f.setId(SnowFlakeUtil.getId());
+            f.setStandardInfoLeftId(map.get(f.getStandardInfoLeftId()));
+            f.setStandardInfoRightId(map.get(f.getStandardInfoRightId()));
+            f.setCreateTime(DateTime.now());
+            f.setCreateUser(user.getUserId());
+            standardInfoJoinMapper.insert(f);
+        });
+
+        standardInfoPrivateJoins.forEach(f -> {
+            f.setId(SnowFlakeUtil.getId());
+            f.setStandardInfoId(map.get(f.getStandardInfoId()));
+            f.setCreateTime(DateTime.now());
+            f.setCreateUser(user.getUserId());
+            standardInfoPrivateJoinMapper.insert(f);
+        });
+
+
+
+        //文件集合
+        List<String> urls = new ArrayList<>();
+        try {
+            for (StandardFile f : standardFiles) {
+                f.setId(SnowFlakeUtil.getId());
+                f.setStandardId(newId);
+                f.setCreateTime(DateTime.now());
+                f.setCreateUser(user.getUserId());
+                if(StringUtils.isNotEmpty(f.getStandardFileUrl())){
+                    URL urlFile = new URL(f.getStandardFileUrl());
+                    InputStream inputStream = urlFile.openStream();
+                    String originalFilename = "standard/" + f.getId() + "|" + f.getFileName();
+                    MockMultipartFile multipartFile = new MockMultipartFile("file", originalFilename, "application/pdf", inputStream);
+                    //Oss上传 传特殊文件名 在oss中做特殊路径处理
+                    BladeFile bladeFile = newIOSSClient.uploadFileByInputStream(multipartFile);
+                    if (bladeFile == null) {
+                        throw new ServiceException("Oss异常");
+                    }
+                    f.setStandardFileUrl(bladeFile.getLink());
+                    urls.add(bladeFile.getLink());
+                }
+            }
+        } catch (Exception e) {
+            for (String url : urls) {
+                String pdfName = url.split("upload")[1];
+                this.newIOSSClient.removeFile("upload" + pdfName);
+            }
+            e.printStackTrace();
+            throw new ServiceException("Oss异常");
+        }
+
+        standardFileService.saveBatch(standardFiles);
+        return true;
+    }
 }