baiying пре 1 месец
родитељ
комит
e2df5754f6

+ 27 - 0
src/main/java/net/yaoyi/gulop/member/auth/controller/SignContractController.java

@@ -3,6 +3,8 @@ package net.yaoyi.gulop.member.auth.controller;
 
 import com.ancun.netsign.model.ContractInput;
 import com.ancun.netsign.model.ContractUserInput;
+import com.ancun.netsign.model.FileUploadInput;
+import com.ancun.netsign.model.FileUrlInput;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import net.yaoyi.gulop.member.auth.service.GigConfigService;
@@ -10,7 +12,9 @@ import net.yaoyi.gulop.member.auth.util.CommonResult;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
 import java.util.List;
 import java.util.Map;
 
@@ -67,6 +71,28 @@ public class SignContractController {
         return gigConfigService.addSigner(request);
     }
 
+    @PostMapping("/uploadFileByUrl")
+    public CommonResult uploadFileByUrl(@RequestBody FileUrlInput urlInput){
+        return gigConfigService.uploadFileByUrl(urlInput);
+    }
+
+    @GetMapping("/getFileUploadInput")
+    public CommonResult getFileUploadInput(@RequestParam String url) throws IOException, NoSuchAlgorithmException {
+        return gigConfigService.getFileUploadInput(url);
+    }
+
+    @PostMapping("/getUploadFileUrl")
+    public CommonResult getUploadFileUrl(@RequestBody FileUploadInput uploadInput){
+        return gigConfigService.getUploadFileUrl(uploadInput);
+    }
+
+    @PostMapping("/uploadFile")
+    public CommonResult uploadFile(@RequestParam String url, @RequestParam String fileUrl) throws Exception {
+        File file = new File(fileUrl);
+
+        return gigConfigService.uploadFile(url,fileUrl);
+    }
+
     //查看合同信息(同步合同信息和状态)
     @PostMapping("/sign-check")
     public CommonResult signCheck(@RequestBody Map<String, String> request) {
@@ -90,6 +116,7 @@ public class SignContractController {
     }
 
 
+
     //下载报告
     @PostMapping("/report-down")
     public CommonResult getReportDown(@RequestBody Map<String, Long> request) {

+ 12 - 0
src/main/java/net/yaoyi/gulop/member/auth/service/GigConfigService.java

@@ -3,11 +3,15 @@ package net.yaoyi.gulop.member.auth.service;
 
 import com.ancun.netsign.model.ContractInput;
 import com.ancun.netsign.model.ContractUserInput;
+import com.ancun.netsign.model.FileUploadInput;
+import com.ancun.netsign.model.FileUrlInput;
 import net.yaoyi.gulop.member.auth.entity.GigConfig;
 import net.yaoyi.gulop.member.auth.util.CommonResult;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
 import java.util.List;
 
 public interface GigConfigService {
@@ -22,6 +26,14 @@ public interface GigConfigService {
 
     CommonResult addSigner(List<ContractUserInput> contractUserInputs);
 
+    CommonResult uploadFileByUrl(FileUrlInput urlInput);
+
+    CommonResult getUploadFileUrl(FileUploadInput uploadInput);
+
+    CommonResult uploadFile(String url, String fileUrl) throws Exception;
+
+    CommonResult getFileUploadInput(String url) throws IOException, NoSuchAlgorithmException;
+
     CommonResult signCheck(Long contractId, long userId);
 
     List<GigConfig>  getReportList();

+ 84 - 0
src/main/java/net/yaoyi/gulop/member/auth/service/impl/GigConfigServiceImpl.java

@@ -17,8 +17,11 @@ import net.yaoyi.gulop.member.auth.util.RemoteFileUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.function.Function;
@@ -361,6 +364,65 @@ public class GigConfigServiceImpl implements GigConfigService {
         return CommonResult.ok(apiRespBody);
     }
 
+    @Override
+    public CommonResult uploadFileByUrl(FileUrlInput urlInput){
+        UmsExtConfig config = getConfig();
+        NetSignClient netSignClient = new NetSignClient("https://prev.asign.cn/", config.getExtId(), config.getExtSecret());
+
+        ApiRespBody<String> apiRespBody = netSignClient.uploadFileByUrl(urlInput);
+
+        return CommonResult.ok(apiRespBody);
+    }
+
+    @Override
+    public CommonResult getUploadFileUrl(FileUploadInput uploadInput){
+        UmsExtConfig config = getConfig();
+        NetSignClient netSignClient = new NetSignClient("https://prev.asign.cn/", config.getExtId(), config.getExtSecret());
+
+        ApiRespBody<FileUploadOutput> apiRespBody = netSignClient.getUploadFileUrl(uploadInput);
+
+        return CommonResult.ok(apiRespBody);
+    }
+
+    @Override
+    public CommonResult getFileUploadInput(String url) throws IOException, NoSuchAlgorithmException {
+        FileDto fileDto = RemoteFileUtils.fromUrl(url);
+
+        FileUploadInput uploadInput = new FileUploadInput();
+        // 根据给定的字符串,截取文件的扩展名
+        String extension = fileDto.getFileName() == null ? "" : fileDto.getFileName().substring(fileDto.getFileName().lastIndexOf(".")+1);
+        uploadInput.setFilename(fileDto.getFileName());
+        uploadInput.setExtension(extension);
+        uploadInput.setFilesize((long)fileDto.getFileInputStream().available());
+        uploadInput.setFileType(1);
+        uploadInput.setContentMd5(getContentMD5(fileDto.getFileInputStream()));
+
+
+        return CommonResult.ok(uploadInput);
+    }
+
+    @Override
+    public CommonResult uploadFile(String url, String fileUrl) throws Exception {
+        UmsExtConfig config = getConfig();
+        NetSignClient netSignClient = new NetSignClient("https://prev.asign.cn/", config.getExtId(), config.getExtSecret());
+
+        File file = RemoteFileUtils.downloadFileFromUrl(fileUrl);
+
+        ApiRespBody<Void> apiRespBody = null;
+
+        try {
+            apiRespBody = netSignClient.uploadFile(url, file);
+        }catch (Exception e){
+            throw new Exception(e);
+        }finally {
+            if(file.exists()){
+                file.delete();
+            }
+        }
+
+        return CommonResult.ok(apiRespBody);
+    }
+
     //同步状态
     public CommonResult signCheck(Long contractId, long userId){
 
@@ -624,4 +686,26 @@ public class GigConfigServiceImpl implements GigConfigService {
         return  null;
 
     }
+
+    /**
+     * 计算文件的ContentMD5
+     * @return String contentMd5
+     */
+    public static String getContentMD5(InputStream inputStream) throws IOException, NoSuchAlgorithmException {
+        byte[] bytes = getMD5Bytes(inputStream);
+        return Base64.getEncoder().encodeToString(bytes);
+    }
+    /**
+     * 获取文件MD5二进制数组
+     * @return byte[]
+     */
+    public static byte[]  getMD5Bytes(InputStream inputStream) throws IOException, NoSuchAlgorithmException {
+        MessageDigest md5 = MessageDigest.getInstance("MD5");
+        byte[] buffer = new byte[1024];
+        int length;
+        while((length = inputStream.read(buffer, 0, 1024)) != -1) {
+            md5.update(buffer, 0, length);
+        }
+        return md5.digest();
+    }
 }

+ 28 - 0
src/main/java/net/yaoyi/gulop/member/auth/util/RemoteFileUtils.java

@@ -1,6 +1,9 @@
 package net.yaoyi.gulop.member.auth.util;
 
 import com.ancun.netsign.model.FileDto;
+
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
@@ -34,6 +37,31 @@ public class RemoteFileUtils {
         return fileDto;
     }
 
+    public static File downloadFileFromUrl(String url) throws IOException {
+        FileDto fileDto = fromUrl(url);
+
+        String extension = fileDto.getFileName() == null ? "" : fileDto.getFileName().substring(fileDto.getFileName().lastIndexOf("."));
+        String fileNameNoExtension = fileDto.getFileName() == null ? "" : fileDto.getFileName().substring(0, fileDto.getFileName().lastIndexOf("."));
+
+//        File directory = new File(System.getProperty("java.io.tmpdir"));
+//        File file = new File(directory, fileDto.getFileName());
+        File file = File.createTempFile(fileNameNoExtension,extension);
+
+//        if (file.exists()) {
+//            boolean deleted = file.delete();
+//        }
+
+        try(FileOutputStream fos = new FileOutputStream(file)){
+            byte[] buffer = new byte[1024];
+            int bytesRead;
+            while ((bytesRead = fileDto.getFileInputStream().read(buffer)) != -1) {
+                fos.write(buffer, 0, bytesRead);
+            }
+        }
+
+        return file;
+    }
+
     private static String extractFileNameFromUrl(URL url) {
         String path = url.getPath();
         // 移除查询参数