Kaynağa Gözat

转档模块:上传文件接口

tangxiangan 2 yıl önce
ebeveyn
işleme
cc3d956d31

+ 2 - 0
backend-common/src/main/java/constant/CommonConstant.java

@@ -27,6 +27,8 @@ public interface CommonConstant {
 
     String CODE_OK = "ok";
 
+    String SUCCESS_CODE = "200";
+
     String AUTH_TOKEN = "x-auth-token";
 
     String STRING_PNG = "png";

+ 20 - 11
backend-core/src/main/java/cn/kdan/pdf/backend/core/client/ComPdfKitClient.java

@@ -5,21 +5,26 @@ import cn.kdan.pdf.backend.core.pojo.comPdfKit.ComPdfKitOauthData;
 import cn.kdan.pdf.backend.core.pojo.comPdfKit.ComPdfKitResponse;
 import cn.kdan.pdf.backend.core.pojo.comPdfKit.CreateTaskResult;
 import cn.kdan.pdf.backend.core.pojo.comPdfKit.UploadFileResult;
+import constant.CommonConstant;
 import exception.BackendRuntimeException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.web.client.RestTemplateBuilder;
 import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.core.io.FileSystemResource;
 import org.springframework.http.*;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.client.RestTemplate;
+import org.springframework.web.multipart.MultipartFile;
 import utils.JsonUtils;
 import utils.RedisUtils;
 
 import java.io.File;
+import java.io.IOException;
 import java.time.Duration;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Objects;
 
 /**
  * Created with IDEA
@@ -141,26 +146,30 @@ public class ComPdfKitClient {
      */
     public UploadFileResult uploadFile(File file, String taskId, String password) {
         String url = address.concat(ComPdfKitConstant.API_V1_UPLOAD_FILE);
-        Map<String, Object> param = new HashMap<>(3);
-        param.put("file", file);
-        param.put("taskId", taskId);
-        param.put("password", password);
-        ResponseEntity<UploadFileResult> response;
+        MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();;
+        FileSystemResource fs = new FileSystemResource(file);
+        param.add("file", fs);
+        param.add("taskId", taskId);
+        param.add("password", password);
+        HttpHeaders headers = basicHeaders() ;
+        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
+        ResponseEntity<ComPdfKitResponse<UploadFileResult>> response;
+        ParameterizedTypeReference<ComPdfKitResponse<UploadFileResult>> typeRef = new ParameterizedTypeReference<ComPdfKitResponse<UploadFileResult>>() {};
         try {
             response = restTemplate.exchange(
                     url,
                     HttpMethod.POST,
-                    new HttpEntity<>(JsonUtils.getJsonString(param), basicHeaders()),
-                    UploadFileResult.class
+                    new HttpEntity<>(param, headers),
+                    typeRef
             );
         } catch (Exception e) {
             log.error(ComPdfKitConstant.EXCEPTION_MSG_UPLOAD_FILE_FAIL + "{}", e.getMessage());
             throw new BackendRuntimeException(ComPdfKitConstant.EXCEPTION_MSG_UPLOAD_FILE_FAIL + e.getMessage());
         }
-        if (response.getStatusCode() != HttpStatus.OK) {
-            throw new BackendRuntimeException(ComPdfKitConstant.EXCEPTION_MSG_UPLOAD_FILE_FAIL);
+        if (response.getStatusCode() != HttpStatus.OK || ObjectUtils.isEmpty(response.getBody()) || !CommonConstant.SUCCESS_CODE.equals(response.getBody().getCode()) || ObjectUtils.isEmpty(response.getBody())) {
+            throw new BackendRuntimeException(ComPdfKitConstant.EXCEPTION_MSG_UPLOAD_FILE_FAIL+ response.getBody().getMsg());
         }
-        return response.getBody();
+        return response.getBody().getData();
     }
 
     public static class ComPdfKitClientBuilder {

+ 4 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/constant/MissionFilesConstant.java

@@ -7,4 +7,8 @@ public interface MissionFilesConstant {
 
     String RETURN_MSG_DELETE_FILE_SUCCESS = "删除转档记录成功";
 
+    String RETURN_MSG_UPLOAD_FILE_SUCCESS = "上传文件成功";
+
+    String EXCEPTION_MSG_FILE_NOT_EXIST = "转档文件记录不存在";
+
 }

+ 16 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/MissionFilesController.java

@@ -9,10 +9,14 @@ import com.github.pagehelper.PageInfo;
 import constant.CommonConstant;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 import pojo.ResultMap;
 
 import java.util.List;
 
+/**
+ * @author tangxiangan
+ */
 @RestController
 @RequestMapping("/missionFile")
 public class MissionFilesController {
@@ -46,4 +50,16 @@ public class MissionFilesController {
         return new ResultMap<>(CommonConstant.SUCCESS, MissionFilesConstant.RETURN_MSG_DELETE_FILE_SUCCESS, missionFilesService.delete(ids));
     }
 
+
+    /**
+     * 上传文件
+     *
+     * @param file 文件
+     * @param missionFileId 文件id
+     * @return Boolean
+     */
+    @PostMapping("upload")
+    public ResultMap<Boolean> upload(@RequestParam(value="file") MultipartFile file,@RequestParam String missionFileId) {
+        return new ResultMap<>(CommonConstant.SUCCESS, MissionFilesConstant.RETURN_MSG_UPLOAD_FILE_SUCCESS, missionFilesService.upload(file,missionFileId));
+    }
 }

+ 9 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/mapper/ext/ExtMissionFilesMapper.java

@@ -6,7 +6,16 @@ import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
+/**
+ * @author tangxiangan
+ */
 public interface ExtMissionFilesMapper extends MissionFilesMapper {
 
+    /**
+     * 获取用户对应转档记录
+     *
+     * @param memberId 用户id
+     * @return List
+     */
     List<MissionFilePojo> getMissionFileListWithConvertType(@Param("memberId") String memberId);
 }

+ 2 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/pojo/MissionFilePojo.java

@@ -73,4 +73,6 @@ public class MissionFilePojo {
     private String inputType;
 
     private String outputType;
+
+    private String saasTaskId;
 }

+ 18 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/MissionFilesService.java

@@ -4,6 +4,7 @@ package cn.kdan.pdf.backend.core.service;
 import cn.kdan.pdf.backend.core.model.MissionFiles;
 import cn.kdan.pdf.backend.core.pojo.MissionFilePojo;
 import com.github.pagehelper.PageInfo;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -39,4 +40,21 @@ public interface MissionFilesService {
      * @param missionFile 文件对象
      */
     void insert(MissionFiles missionFile);
+
+    /**
+     * 上传文件
+     *
+     * @param file 文件
+     * @param missionFileId  文件id
+     * @return Boolean
+     */
+    Boolean upload(MultipartFile file, String missionFileId);
+
+    /**
+     * 根据id获取转档文件记录
+     *
+     * @param missionFileId missionFileId
+     * @return MissionFiles
+     */
+    MissionFiles getById(String missionFileId);
 }

+ 32 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MissionFileServiceImpl.java

@@ -1,15 +1,25 @@
 package cn.kdan.pdf.backend.core.service.impl;
 
+import cn.kdan.pdf.backend.core.client.ComPdfKitClient;
+import cn.kdan.pdf.backend.core.constant.MissionFilesConstant;
 import cn.kdan.pdf.backend.core.mapper.ext.ExtMissionFilesMapper;
 import cn.kdan.pdf.backend.core.model.MissionFiles;
 import cn.kdan.pdf.backend.core.model.MissionFilesExample;
 import cn.kdan.pdf.backend.core.pojo.MissionFilePojo;
+import cn.kdan.pdf.backend.core.pojo.comPdfKit.UploadFileResult;
 import cn.kdan.pdf.backend.core.service.MissionFilesService;
+import cn.kdan.pdf.backend.core.utils.ComPdfKitUtils;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import exception.BackendRuntimeException;
+import jodd.typeconverter.impl.FileConverter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.multipart.MultipartFile;
+import utils.FileUtils;
 
+import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
 
@@ -20,7 +30,8 @@ import java.util.List;
 public class MissionFileServiceImpl implements MissionFilesService {
     @Autowired
     private ExtMissionFilesMapper missionFilesMapper;
-
+    @Resource
+    ComPdfKitUtils comPdfKitUtils;
     @Override
     public PageInfo<MissionFilePojo> page(Integer page, Integer pageSize, String memberId) {
         PageHelper.startPage(page, pageSize);
@@ -42,4 +53,24 @@ public class MissionFileServiceImpl implements MissionFilesService {
     public void insert(MissionFiles missionFile) {
         missionFilesMapper.insert(missionFile);
     }
+
+    @Override
+    public Boolean upload(MultipartFile file, String missionFileId) {
+        ComPdfKitClient client = comPdfKitUtils.getComPdfKitClient();
+        MissionFiles missionFile = getById(missionFileId);
+        UploadFileResult result = client.uploadFile(FileUtils.transferToFile(file),missionFile.getSaasTaskId(),"");
+        missionFile.setProcessId(result.getFileKey());
+        missionFile.setTraceResult(result.getFileUrl());
+        missionFilesMapper.updateByPrimaryKeySelective(missionFile);
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public MissionFiles getById(String missionFileId) {
+        MissionFiles missionFile = missionFilesMapper.selectByPrimaryKey(missionFileId);
+        if(ObjectUtils.isEmpty(missionFile)){
+            throw new BackendRuntimeException(MissionFilesConstant.EXCEPTION_MSG_FILE_NOT_EXIST);
+        }
+        return missionFile;
+    }
 }

+ 36 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MissionServiceImpl.java

@@ -92,6 +92,7 @@ public class MissionServiceImpl implements MissionService {
             missionFile.setCreatedAt(new Date());
             missionFile.setUpdatedAt(new Date());
             ConvertTypes convertType = convertTypesMap.get(executeType);
+            missionFile.setConvertTypeId(convertType.getId());
             Integer filePrice = SubscriberTypeEnum.yes.value().equals(memberInfo.getSubscriberType()) ? convertType.getSpPrice() : convertType.getPrice();
             //根据转换类型获取saas任务id
             missionFile.setPrice(filePrice);
@@ -119,6 +120,15 @@ public class MissionServiceImpl implements MissionService {
         return pojo;
     }
 
+
+    /**
+     * 根据用户的会员状态对用户进行预扣费,最后返回一次任务总耗券数
+     *
+     * @param paramList paramList
+     * @param memberInfo memberInfo
+     * @param convertTypesMap convertTypesMap
+     * @return  totalPrice
+     */
     private int handleConsumePoint(List<MissionCreateParam> paramList, MemberInfo memberInfo, Map<String, ConvertTypes> convertTypesMap) {
         int totalPrice = 0 ;
         //如果不是会员,则对用户进行预扣券操作
@@ -136,6 +146,13 @@ public class MissionServiceImpl implements MissionService {
         return totalPrice;
     }
 
+    /**
+     * 获取总耗券数
+     * @param paramList paramList
+     * @param subscriberType subscriberType
+     * @param convertTypesMap convertTypesMap
+     * @return 获取总耗券数
+     */
     private int getTotalPrice(List<MissionCreateParam> paramList, Integer subscriberType, Map<String, ConvertTypes> convertTypesMap) {
         int totalPrice = 0;
         for (MissionCreateParam param : paramList) {
@@ -147,6 +164,13 @@ public class MissionServiceImpl implements MissionService {
         return totalPrice;
     }
 
+    /**
+     * 根据不同的转档类型调佣saas生成不同的任务,最后生成一个<转档类型,saasTaskId>形式的map方便取用
+     *
+     * @param paramList paramList
+     * @param client client
+     * @return Map
+     */
     private Map<String,String> handleFileType (List<MissionCreateParam> paramList, ComPdfKitClient client) {
         Map<String,String> map = new HashMap<>();
         paramList.forEach(item->{
@@ -159,10 +183,22 @@ public class MissionServiceImpl implements MissionService {
         return map;
     }
 
+    /**
+     * 获取用户转档类型 (pdf/docx)
+     *
+     * @param inPut 输入
+     * @param outPut 输出
+     * @return String
+     */
     private String getExecuteType (String inPut,String outPut) {
         return inPut.concat(CommonConstant.STRING_VIRGULE).concat(outPut);
     }
 
+    /**
+     *  查询出所有的转档类型,放到
+     *
+     * @return Map
+     */
     private Map<String,ConvertTypes> getConvertTypeMap () {
         Map<String,ConvertTypes> map = new HashMap<>();
        List<ConvertTypes> list =  convertFileService.getAllConvertType();