Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/main'

Sakana 1 settimana fa
parent
commit
addfeb0dd1
36 ha cambiato i file con 710 aggiunte e 137 eliminazioni
  1. 17 7
      edu-travel-adapter/edu-travel-adapter-upload/src/main/java/edu/travel/adapter/service/upload/UploadAdapter.java
  2. 26 7
      edu-travel-api/edu-travel-api-admin/src/main/java/edu/travel/controller/UploadController.java
  3. 10 4
      edu-travel-common/edu-travel-common-datasource/src/main/java/edu/travel/config/FieldMetaObjectHandler.java
  4. 0 4
      edu-travel-common/edu-travel-common-openfeign/pom.xml
  5. 14 1
      edu-travel-common/edu-travel-common-resp/src/main/java/edu/travel/rpc/RPCBaseResponse.java
  6. 19 0
      edu-travel-common/edu-travel-common-resp/src/main/java/edu/travel/rpc/RPCPageResponse.java
  7. 7 16
      edu-travel-common/edu-travel-common-upload/src/main/java/edu/travel/upload/obs/HuaweiOBSUtils.java
  8. 15 7
      edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/upload/UploadRemoteController.java
  9. 51 0
      edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/upload/dto/EduFileBlobDTO.java
  10. 46 0
      edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/upload/dto/EduFileDTO.java
  11. 15 13
      edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/web/HappyEntryController.java
  12. 4 1
      edu-travel-service/edu-travel-service-upload/pom.xml
  13. 1 1
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/UploadApplication.java
  14. 1 1
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/MyAccessDeniedHandler.java
  15. 1 1
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/MyAuthenticationEntryPoint.java
  16. 1 1
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/ResourceServerConfig.java
  17. 1 1
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/TokenConfig.java
  18. 22 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/UploadThreadPoolExecutors.java
  19. 1 1
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/WebSecurityConfig.java
  20. 1 1
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/WebServerFactoryConfigs.java
  21. 52 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/entity/EduFile.java
  22. 58 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/entity/EduFileBlob.java
  23. 1 1
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/filter/TokenAuthenticationFilter.java
  24. 7 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/mapper/EduFileBlobMapper.java
  25. 7 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/mapper/EduFileMapper.java
  26. 12 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/service/EduFileBlobService.java
  27. 9 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/service/EduFileService.java
  28. 28 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/service/impl/EduFileBlobServiceImpl.java
  29. 22 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/service/impl/EduFileServiceImpl.java
  30. 141 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/web/UploadController.java
  31. 0 69
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/web/UploadController.java
  32. 33 0
      edu-travel-service/edu-travel-service-upload/src/main/resources/bootstrap-dev.yml
  33. 27 0
      edu-travel-service/edu-travel-service-upload/src/main/resources/bootstrap-prod.yml
  34. 9 0
      edu-travel-service/edu-travel-service-upload/src/main/resources/bootstrap.yml
  35. 26 0
      edu-travel-service/edu-travel-service-upload/src/main/resources/mapper/EduFileBlobMapper.xml
  36. 25 0
      edu-travel-service/edu-travel-service-upload/src/main/resources/mapper/EduFileMapper.xml

+ 17 - 7
edu-travel-adapter/edu-travel-adapter-upload/src/main/java/edu/travel/adapter/service/upload/UploadAdapter.java

@@ -1,17 +1,27 @@
 package edu.travel.adapter.service.upload;
 
 import edu.travel.adapter.annotation.AdapterAnnotation;
-import edu.travel.remote.UploadRemoteController;
+import edu.travel.remote.upload.UploadRemoteController;
+import edu.travel.remote.upload.dto.EduFileBlobDTO;
+import edu.travel.remote.upload.dto.EduFileDTO;
 import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
+
 @Component
 public class UploadAdapter  {
     @Autowired
     private UploadRemoteController uploadRemoteController;
     @AdapterAnnotation
+    public RPCBaseResponse<String> initializeUpload(){
+        RPCBaseResponse rpcBaseResponse = uploadRemoteController.initializeUpload();
+        return rpcBaseResponse;
+    }
+    @AdapterAnnotation
     public RPCBaseResponse exitsFile(String md5) {
         RPCBaseResponse rpcBaseResponse = uploadRemoteController.exitsFile(md5);
         return rpcBaseResponse;
@@ -22,18 +32,18 @@ public class UploadAdapter  {
         return rpcBaseResponse;
     }
     @AdapterAnnotation
-    public RPCBaseResponse uploadBigFile(MultipartFile file) {
-        RPCBaseResponse rpcBaseResponse = uploadRemoteController.uploadBigFile(file);
+    public RPCBaseResponse uploadBigFile(EduFileBlobDTO dto, MultipartFile file) throws IOException {
+        RPCBaseResponse rpcBaseResponse = uploadRemoteController.uploadBigFile(dto,file);
         return rpcBaseResponse;
     }
     @AdapterAnnotation
-    public RPCBaseResponse mergeFile(String json) {
-        RPCBaseResponse rpcBaseResponse = uploadRemoteController.mergeFile(json);
+    public RPCBaseResponse mergeFile(EduFileDTO eduFileDTO) {
+        RPCBaseResponse rpcBaseResponse = uploadRemoteController.mergeFile(eduFileDTO);
         return rpcBaseResponse;
     }
     @AdapterAnnotation
-    public RPCBaseResponse uploadFile(MultipartFile file) {
-        RPCBaseResponse rpcBaseResponse = uploadRemoteController.uploadFile(file);
+    public RPCBaseResponse uploadFile(EduFileDTO eduFile,MultipartFile file) {
+        RPCBaseResponse rpcBaseResponse = uploadRemoteController.uploadFile(eduFile,file);
         return rpcBaseResponse;
     }
 }

+ 26 - 7
edu-travel-api/edu-travel-api-admin/src/main/java/edu/travel/controller/UploadController.java

@@ -1,10 +1,13 @@
 package edu.travel.controller;
 
 import edu.travel.adapter.service.upload.UploadAdapter;
+import edu.travel.remote.upload.dto.EduFileBlobDTO;
+import edu.travel.remote.upload.dto.EduFileDTO;
 import edu.travel.resp.BaseResponse;
 import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -12,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
+
 @RestController
 @RequestMapping("/upload")
 public class UploadController  {
@@ -19,6 +24,20 @@ public class UploadController  {
     private UploadAdapter uploadAdapter;
     /**
      * 文件是否存在
+     * @param
+     * @return
+     */
+    @GetMapping("/init")
+    @PreAuthorize("permitAll()")
+    public BaseResponse initializeUpload() {
+        RPCBaseResponse<String> stringRPCBaseResponse = uploadAdapter.initializeUpload();
+        return new BaseResponse(HttpStatus.OK.value(), "success", stringRPCBaseResponse.getData());
+
+    }
+
+
+    /**
+     * 文件是否存在
      * @param md5
      * @return
      */
@@ -58,8 +77,8 @@ public class UploadController  {
      */
     @PostMapping(value = "/uploadBlob")
     @PreAuthorize("permitAll()")
-    public BaseResponse uploadBigFile(MultipartFile file) {
-        RPCBaseResponse rpcBaseResponse = uploadAdapter.uploadBigFile(file);
+    public BaseResponse uploadBigFile(EduFileBlobDTO dto, MultipartFile file) throws IOException {
+        RPCBaseResponse rpcBaseResponse = uploadAdapter.uploadBigFile(dto,file);
         if (rpcBaseResponse != null) {
             if (rpcBaseResponse.getCode() == HttpStatus.OK.value()){
                 return new BaseResponse(HttpStatus.OK.value(),"success",rpcBaseResponse.getData());
@@ -70,13 +89,13 @@ public class UploadController  {
     }
     /**
      * 合并大文件
-     * @param json
+     * @param eduFileDTO
      * @return
      */
     @PostMapping(value = "/mergeFile")
     @PreAuthorize("permitAll()")
-    public BaseResponse mergeFile(String json) {
-        RPCBaseResponse rpcBaseResponse = uploadAdapter.mergeFile(json);
+    public BaseResponse mergeFile(EduFileDTO eduFileDTO) {
+        RPCBaseResponse rpcBaseResponse = uploadAdapter.mergeFile(eduFileDTO);
         if (rpcBaseResponse != null) {
             if (rpcBaseResponse.getCode() == HttpStatus.OK.value()){
                 return new BaseResponse(HttpStatus.OK.value(),"success",rpcBaseResponse.getData());
@@ -92,8 +111,8 @@ public class UploadController  {
      */
     @PostMapping(value = "/upload")
     @PreAuthorize("permitAll()")
-    public BaseResponse uploadFile(MultipartFile file) {
-        RPCBaseResponse rpcBaseResponse = uploadAdapter.uploadFile(file);
+    public BaseResponse uploadFile(EduFileDTO eduFile,MultipartFile file) {
+        RPCBaseResponse rpcBaseResponse = uploadAdapter.uploadFile(eduFile,file);
         if (rpcBaseResponse != null) {
             if (rpcBaseResponse.getCode() == HttpStatus.OK.value()){
                 return new BaseResponse(HttpStatus.OK.value(),"success",rpcBaseResponse.getData());

+ 10 - 4
edu-travel-common/edu-travel-common-datasource/src/main/java/edu/travel/config/FieldMetaObjectHandler.java

@@ -31,12 +31,18 @@ public class FieldMetaObjectHandler implements MetaObjectHandler {
     public void insertFill(MetaObject metaObject) {
         HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
         Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-        if (authentication == null) return;
         Object principal = authentication.getPrincipal();
-        String jsonString = JSON.toJSONString(principal);
-        JSONObject jsonObject = JSON.parseObject(jsonString);
+        Long userId = null;
+
+        if (!(principal instanceof String && "anonymousUser".equals(principal))) {
+            //走登录用户
+            String jsonString = JSON.toJSONString(principal);
+            JSONObject jsonObject = JSON.parseObject(jsonString);
+            userId = jsonObject.getLong("id");
+        }
+
         if (metaObject.hasSetter(CREATE_USER_ID)) {
-            this.strictInsertFill(metaObject, CREATE_USER_ID, String.class, jsonObject.getLong("id").toString());
+            this.strictInsertFill(metaObject, CREATE_USER_ID, String.class, userId != null ? userId.toString() : "");
         }
         if (metaObject.hasSetter(CREATE_TIME)) {
             this.strictInsertFill(metaObject, CREATE_TIME, Date.class, new Date());

+ 0 - 4
edu-travel-common/edu-travel-common-openfeign/pom.xml

@@ -26,10 +26,6 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-        <dependency>
-            <groupId>io.github.openfeign</groupId>
-            <artifactId>feign-httpclient</artifactId>
-        </dependency>
         <!-- 或使用 OkHttp -->
         <dependency>
             <groupId>io.github.openfeign</groupId>

+ 14 - 1
edu-travel-common/edu-travel-common-resp/src/main/java/edu/travel/rpc/RPCBaseResponse.java

@@ -14,7 +14,8 @@ public class RPCBaseResponse<T> implements Serializable {
     private String msg;
     private T data;
 
-
+    public <T> RPCBaseResponse(int i, String message, T data, int total, int currentPage, int pageSize) {
+    }
     public static <T> RPCBaseResponse<T> success(T data) {
         return new RPCBaseResponse<>(200, "success", data);
     }
@@ -27,4 +28,16 @@ public class RPCBaseResponse<T> implements Serializable {
     public static <T> RPCBaseResponse<T> success(String message,T data) {
         return new RPCBaseResponse<>(200, message, data);
     }
+    public static <T> RPCBaseResponse<T> error(T data) {
+        return new RPCBaseResponse<>(200, "success", data);
+    }
+    public static <T> RPCBaseResponse<T> error() {
+        return new RPCBaseResponse<>(500, "error",null);
+    }
+    public static <T> RPCBaseResponse<T> error(String message) {
+        return new RPCBaseResponse<>(500, message, null);
+    }
+    public static <T> RPCBaseResponse<T> error(String message,T data) {
+        return new RPCBaseResponse<>(500, message, data);
+    }
 }

+ 19 - 0
edu-travel-common/edu-travel-common-resp/src/main/java/edu/travel/rpc/RPCPageResponse.java

@@ -4,6 +4,8 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
+
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
@@ -11,4 +13,21 @@ public class RPCPageResponse<T> extends RPCBaseResponse<T> {
     private int total;
     private int  currentPage;
     private int pageSize;
+
+    public <T> RPCPageResponse(int i, String message, T data, int total, int currentPage, int pageSize) {
+    }
+
+    public static <T> RPCBaseResponse<T> success(T data) {
+        return null;
+    }
+    public static <T> RPCBaseResponse<T> success() {
+        return new RPCBaseResponse<>(200, "success",null);
+    }
+    public static <T> RPCBaseResponse<T> success(String message) {
+        return new RPCBaseResponse<>(200, message, null);
+    }
+    public static <T> RPCPageResponse<T> success(String message,T data,int total,int currentPage,int pageSize) {
+        return new RPCPageResponse<>(200, message, data,total,currentPage,pageSize);
+    }
+
 }

+ 7 - 16
edu-travel-common/edu-travel-common-upload/src/main/java/edu/travel/upload/obs/HuaweiOBSUtils.java

@@ -1,9 +1,13 @@
 package edu.travel.upload.obs;
 
+
+import com.aliyun.oss.ServiceException;
 import com.obs.services.ObsClient;
 import com.obs.services.exception.ObsException;
-import com.obs.services.internal.ServiceException;
-import com.obs.services.model.*;
+import com.obs.services.model.HttpMethodEnum;
+import com.obs.services.model.ObsObject;
+import com.obs.services.model.TemporarySignatureRequest;
+import com.obs.services.model.TemporarySignatureResponse;
 import edu.travel.upload.obs.property.ObsProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -27,20 +31,7 @@ public class HuaweiOBSUtils {
     private ObsClient obsClient;
     @Autowired
     private ObsProperties obsProperties;
-    //注意这里传进来的参数是处理后的图片 base64 参数,处理方法只需要调用 api,这里不做过多解释,可以上网查询转换方法,另外是指定的文件名称和bucket名称,上传后的文件将是以该 fileName 存在于该bucket 内
-    //此方法是用于上传文件,内部调用了 obs 的含有 MD5 参数校验的api方法
-    public void uploadPic(String base64, String fileName) {
-        byte[] bytes = Base64.getDecoder().decode(base64);
-        ObjectMetadata meta = new ObjectMetadata();
-        // 设置MD5校验。
-        String md5 = toBase64String(calculateMd5(bytes));
-        meta.setContentMd5(md5);
-        try (InputStream inputStream = new ByteArrayInputStream(bytes)) {
-            PutObjectResult result = obsClient.putObject(obsProperties.getBucketName(), fileName, inputStream,meta);
-        } catch (Exception e) {
-            log.error("Upload failed: ", e);
-        }
-    }
+   
 
     // 计算 MD5 值的方法
     private static byte[] calculateMd5(byte[] data) {

+ 15 - 7
edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/UploadRemoteController.java → edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/upload/UploadRemoteController.java

@@ -1,5 +1,7 @@
-package edu.travel.remote;
+package edu.travel.remote.upload;
 
+import edu.travel.remote.upload.dto.EduFileBlobDTO;
+import edu.travel.remote.upload.dto.EduFileDTO;
 import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -8,15 +10,21 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.List;
+
 @FeignClient(name = "upload",path = "/upload")
 public interface UploadRemoteController {
+    @PostMapping("/init")
+    public RPCBaseResponse<String> initializeUpload();
     /**
      * 文件是否存在
      * @param md5
      * @return
      */
     @GetMapping("/exits/md5")
-    RPCBaseResponse exitsFile(@RequestParam("md5") String md5);
+    RPCBaseResponse<Serializable> exitsFile(@RequestParam("md5") String md5);
 
     /**
      * 上传过哪些分片
@@ -24,7 +32,7 @@ public interface UploadRemoteController {
      * @return
      */
     @GetMapping("/exits/blob")
-    RPCBaseResponse exitsBlob(@RequestParam("md5") String md5);
+    RPCBaseResponse<List<Integer>> exitsBlob(@RequestParam("md5") String md5);
 
     /**
      * 上传大文件分片
@@ -32,15 +40,15 @@ public interface UploadRemoteController {
      * @return
      */
     @PostMapping(value = "/uploadBlob",headers = {"content-type=multipart/form-data"})
-    RPCBaseResponse uploadBigFile(@RequestParam("file") MultipartFile file);
+    RPCBaseResponse uploadBigFile(EduFileBlobDTO dto,  MultipartFile file) throws IOException;
 
     /**
      * 合并大文件
-     * @param json
+     * @param eduFileDTO
      * @return
      */
     @PostMapping(value = "/mergeFile")
-    RPCBaseResponse mergeFile(@RequestBody String json);
+    RPCBaseResponse mergeFile(@RequestBody EduFileDTO eduFileDTO);
 
     /**
      * 上传小文件
@@ -48,5 +56,5 @@ public interface UploadRemoteController {
      * @return
      */
     @PostMapping(value = "/upload",headers = {"content-type=multipart/form-data"})
-    RPCBaseResponse uploadFile(@RequestParam("file") MultipartFile file);
+    RPCBaseResponse uploadFile(EduFileDTO eduFile,MultipartFile file);
 }

+ 51 - 0
edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/upload/dto/EduFileBlobDTO.java

@@ -0,0 +1,51 @@
+package edu.travel.remote.upload.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import edu.travel.entity.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class EduFileBlobDTO extends BaseEntity {
+    private Long id;
+
+    /**
+     * 分片名字
+     */
+    private String blobName;
+
+    /**
+     * 传了第几片
+     */
+    private Integer blobNum;
+
+    /**
+     * 分片地址
+     */
+    private String blobPath;
+
+    /**
+     * 分片md5
+     */
+    private String blobMd5;
+
+    /**
+     * 文件md5
+     */
+    private String fileMd5;
+
+    /**
+     * 总共多少片
+     */
+    private Integer totalCount;
+
+    private String uploadId;
+
+
+}

+ 46 - 0
edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/upload/dto/EduFileDTO.java

@@ -0,0 +1,46 @@
+package edu.travel.remote.upload.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import edu.travel.entity.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class EduFileDTO extends BaseEntity {
+    private Long id;
+
+    /**
+     * 文件md5
+     */
+    private String fileMd5;
+
+    /**
+     * 文件名
+     */
+    private String fileName;
+
+    /**
+     * 文件系统名
+     */
+    private String fileSysName;
+
+    /**
+     * 文件路径
+     */
+    private String filePath;
+
+    /**
+     * 文件类型
+     */
+    private String fileType;
+
+
+    private String uploadId;
+
+}

+ 15 - 13
edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/web/HappyEntryController.java

@@ -8,6 +8,8 @@ import edu.travel.education.service.impl.HappyEntryServiceImpl;
 import edu.travel.education.vo.HappyEntryVo;
 import edu.travel.resp.BaseResponse;
 import edu.travel.resp.PageResponse;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.rpc.RPCPageResponse;
 import edu.travel.web.BaseController;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -35,10 +37,10 @@ public class HappyEntryController extends BaseController<HappyEntry> {
      * @return
      */
     @PostMapping("/addHappyEntry")
-//    @PreAuthorize("permitAll()")
-    public BaseResponse<HappyEntryVo> addHappyEntry(@RequestBody AddHappyEntryDto happyEntryDto){
+    @PreAuthorize("permitAll()")
+    public RPCBaseResponse<HappyEntryVo> addHappyEntry(@RequestBody AddHappyEntryDto happyEntryDto){
         HappyEntryVo vo = happyEntryService.addHappyEntry(happyEntryDto);
-        return new BaseResponse<>(200,"success",vo);
+        return new RPCBaseResponse<>(200,"success",vo);
     }
 
     /**
@@ -48,9 +50,9 @@ public class HappyEntryController extends BaseController<HappyEntry> {
      */
    @GetMapping("/getHappyEntryById")
    @PreAuthorize("hasRole('超级管理员')")
-    public BaseResponse<HappyEntryVo> getHappyEntryById(Long id){
+    public RPCBaseResponse<HappyEntryVo> getHappyEntryById(Long id){
         HappyEntryVo vo = happyEntryService.getHappyEntryById(id);
-        return new BaseResponse<>(200,"success",vo);
+        return new RPCBaseResponse<>(200,"success",vo);
     }
 
     /**
@@ -60,9 +62,9 @@ public class HappyEntryController extends BaseController<HappyEntry> {
      */
     @PostMapping("/UpdateHappyEntryById")
     @PreAuthorize("hasRole('超级管理员')")
-    public BaseResponse<HappyEntryVo> UpdateHappyEntryById(@RequestBody HappyEntryDto happyEntryDto){
+    public RPCBaseResponse<HappyEntryVo> UpdateHappyEntryById(@RequestBody HappyEntryDto happyEntryDto){
         HappyEntryVo vo = happyEntryService.UpdateHappyEntryById(happyEntryDto);
-        return new BaseResponse<>(200,"success",vo);
+        return new RPCBaseResponse<>(200,"success",vo);
     }
 
     /**
@@ -72,11 +74,11 @@ public class HappyEntryController extends BaseController<HappyEntry> {
      */
     @PostMapping("/deleteHappyEntryById")
     @PreAuthorize("hasRole('超级管理员')")
-    public BaseResponse<HappyEntryVo> deleteHappyEntryById(@RequestParam Long id){
+    public RPCBaseResponse<HappyEntryVo> deleteHappyEntryById(@RequestParam Long id){
         Set<Long> set = new HashSet<>();
         set.add(id);
         happyEntryService.deleteHappyEntryByIds(set);
-        return new BaseResponse<>(200,"success",null);
+        return new RPCBaseResponse<>(200,"success",null);
     }
 
     /**
@@ -86,10 +88,10 @@ public class HappyEntryController extends BaseController<HappyEntry> {
      */
     @PostMapping("/deleteHappyEntryByIds")
     @PreAuthorize("hasRole('超级管理员')")
-    public BaseResponse<HappyEntryVo> deleteHappyEntryById(@RequestBody List<Long> ids){
+    public RPCBaseResponse<HappyEntryVo> deleteHappyEntryById(@RequestBody List<Long> ids){
         Set<Long> set = new HashSet<Long>(ids);
         happyEntryService.deleteHappyEntryByIds(set);
-        return new BaseResponse<>(200,"success",null);
+        return new RPCBaseResponse<>(200,"success",null);
     }
 
     /**
@@ -98,10 +100,10 @@ public class HappyEntryController extends BaseController<HappyEntry> {
      */
     @GetMapping("/listPageHappyEntry")
     @PreAuthorize("hasRole('超级管理员')")
-    public BaseResponse<List<HappyEntryVo>> listPageHappyEntry( HappyEntryDto happyEntryDto){
+    public RPCPageResponse<List<HappyEntryVo>> listPageHappyEntry(HappyEntryDto happyEntryDto){
         IPage<HappyEntry> page = happyEntryService.listPageHappyEntry(happyEntryDto);
         List<HappyEntryVo> happyEntryVos = BeanUtil.copyToList(page.getRecords(), HappyEntryVo.class);
-        return  PageResponse.out(200,"success",happyEntryVos,(int) page.getTotal(),(int)page.getSize());
+        return  RPCPageResponse.success("200",happyEntryVos,(int) page.getTotal(),(int)page.getSize(),(int)page.getCurrent());
     }
 
 }

+ 4 - 1
edu-travel-service/edu-travel-service-upload/pom.xml

@@ -42,7 +42,10 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-oauth2</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>com.huaweicloud</groupId>
+            <artifactId>esdk-obs-java</artifactId>
+        </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>

+ 1 - 1
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/UploadApplication.java

@@ -11,7 +11,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
 @EnableDiscoveryClient
 @EnableFeignClients
 @EnableRedisCache
-@MapperScan("edu.travel.mapper")
+@MapperScan("edu.travel.upload.mapper")
 public class UploadApplication
 {
     public static void main( String[] args )

+ 1 - 1
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/config/MyAccessDeniedHandler.java → edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/MyAccessDeniedHandler.java

@@ -1,4 +1,4 @@
-package edu.travel.config;
+package edu.travel.upload.config;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.security.access.AccessDeniedException;

+ 1 - 1
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/config/MyAuthenticationEntryPoint.java → edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/MyAuthenticationEntryPoint.java

@@ -1,4 +1,4 @@
-package edu.travel.config;
+package edu.travel.upload.config;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.security.core.AuthenticationException;

+ 1 - 1
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/config/ResourceServerConfig.java → edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/ResourceServerConfig.java

@@ -1,4 +1,4 @@
-package edu.travel.config;
+package edu.travel.upload.config;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;

+ 1 - 1
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/config/TokenConfig.java → edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/TokenConfig.java

@@ -1,4 +1,4 @@
-package edu.travel.config;
+package edu.travel.upload.config;
 
 import edu.travel.RSAUtill;
 import org.springframework.beans.factory.annotation.Value;

+ 22 - 0
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/UploadThreadPoolExecutors.java

@@ -0,0 +1,22 @@
+package edu.travel.upload.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+public class UploadThreadPoolExecutors {
+    @Bean
+    public ThreadPoolExecutor threadPoolExecutor() {
+        return new ThreadPoolExecutor(4, 8, 2000, TimeUnit.MINUTES, new ArrayBlockingQueue<Runnable>(1000), new RejectedExecutionHandler() {
+            @Override
+            public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
+
+            }
+        });
+    }
+}

+ 1 - 1
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/config/WebSecurityConfig.java → edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/WebSecurityConfig.java

@@ -1,4 +1,4 @@
-package edu.travel.config;
+package edu.travel.upload.config;
 
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

+ 1 - 1
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/config/WebServerFactoryConfigs.java → edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/config/WebServerFactoryConfigs.java

@@ -1,4 +1,4 @@
-package edu.travel.config;
+package edu.travel.upload.config;
 
 import org.apache.catalina.connector.Connector;
 import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;

+ 52 - 0
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/entity/EduFile.java

@@ -0,0 +1,52 @@
+package edu.travel.upload.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+
+import edu.travel.entity.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "edu.edu_file")
+public class EduFile extends BaseEntity {
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 文件md5
+     */
+    @TableField(value = "file_md5")
+    private String fileMd5;
+
+    /**
+     * 文件名
+     */
+    @TableField(value = "file_name")
+    private String fileName;
+
+    /**
+     * 文件系统名
+     */
+    @TableField(value = "file_sys_name")
+    private String fileSysName;
+
+    /**
+     * 文件路径
+     */
+    @TableField(value = "file_path")
+    private String filePath;
+
+    /**
+     * 文件类型
+     */
+    @TableField(value = "file_type")
+    private String fileType;
+
+}

+ 58 - 0
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/entity/EduFileBlob.java

@@ -0,0 +1,58 @@
+package edu.travel.upload.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+
+import edu.travel.entity.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "edu.edu_file_blob")
+public class EduFileBlob extends BaseEntity {
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 分片名字
+     */
+    @TableField(value = "blob_name")
+    private String blobName;
+
+    /**
+     * 传了第几片
+     */
+    @TableField(value = "blob_num")
+    private Integer blobNum;
+
+    /**
+     * 分片地址
+     */
+    @TableField(value = "blob_path")
+    private String blobPath;
+
+    /**
+     * 分片md5
+     */
+    @TableField(value = "blob_md5")
+    private String blobMd5;
+
+    /**
+     * 文件md5
+     */
+    @TableField(value = "file_md5")
+    private String fileMd5;
+
+    /**
+     * 总共多少片
+     */
+    @TableField(value = "total_count")
+    private Integer totalCount;
+
+}

+ 1 - 1
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/filter/TokenAuthenticationFilter.java → edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/filter/TokenAuthenticationFilter.java

@@ -1,4 +1,4 @@
-package edu.travel.filter;
+package edu.travel.upload.filter;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;

+ 7 - 0
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/mapper/EduFileBlobMapper.java

@@ -0,0 +1,7 @@
+package edu.travel.upload.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import edu.travel.upload.entity.EduFileBlob;
+
+public interface EduFileBlobMapper extends BaseMapper<EduFileBlob> {
+}

+ 7 - 0
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/mapper/EduFileMapper.java

@@ -0,0 +1,7 @@
+package edu.travel.upload.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import edu.travel.upload.entity.EduFile;
+
+public interface EduFileMapper extends BaseMapper<EduFile> {
+}

+ 12 - 0
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/service/EduFileBlobService.java

@@ -0,0 +1,12 @@
+package edu.travel.upload.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.upload.entity.EduFileBlob;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface EduFileBlobService extends IService<EduFileBlob> {
+    RPCBaseResponse<List<Integer>> exitsBlob(String md5);
+}

+ 9 - 0
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/service/EduFileService.java

@@ -0,0 +1,9 @@
+package edu.travel.upload.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.upload.entity.EduFile;
+
+public interface EduFileService extends IService<EduFile> {
+    RPCBaseResponse exitsFile(String md5);
+}

+ 28 - 0
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/service/impl/EduFileBlobServiceImpl.java

@@ -0,0 +1,28 @@
+package edu.travel.upload.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import edu.travel.entity.EduTenantPO;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.upload.entity.EduFileBlob;
+import edu.travel.upload.mapper.EduFileBlobMapper;
+import edu.travel.upload.service.EduFileBlobService;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Service;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Service
+public class EduFileBlobServiceImpl extends ServiceImpl<EduFileBlobMapper, EduFileBlob> implements EduFileBlobService {
+    @Override
+    public RPCBaseResponse<List<Integer>> exitsBlob(String md5) {
+        List<EduFileBlob> list = list(new LambdaQueryWrapper<EduFileBlob>().eq(EduFileBlob::getFileMd5, md5));
+        Set<Integer> blobNums = list.stream().map(EduFileBlob::getBlobNum).collect(Collectors.toSet());
+        List<Integer> integerArrayList = new ArrayList<>(blobNums);
+        return RPCBaseResponse.success(integerArrayList);
+    }
+}

+ 22 - 0
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/service/impl/EduFileServiceImpl.java

@@ -0,0 +1,22 @@
+package edu.travel.upload.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.upload.entity.EduFile;
+import edu.travel.upload.mapper.EduFileMapper;
+import edu.travel.upload.service.EduFileService;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+
+@Service
+public class EduFileServiceImpl extends ServiceImpl<EduFileMapper, EduFile> implements EduFileService {
+    @Override
+    public RPCBaseResponse exitsFile(String md5) {
+        EduFile one = getOne(new LambdaQueryWrapper<EduFile>().eq(EduFile::getFileMd5, md5));
+        if (one == null) {
+            return RPCBaseResponse.success();
+        }
+        return RPCBaseResponse.success(one.getId());
+    }
+}

+ 141 - 0
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/web/UploadController.java

@@ -0,0 +1,141 @@
+package edu.travel.upload.web;
+
+import com.obs.services.ObsClient;
+import com.obs.services.model.*;
+import edu.travel.remote.upload.UploadRemoteController;
+import edu.travel.remote.upload.dto.EduFileBlobDTO;
+import edu.travel.remote.upload.dto.EduFileDTO;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.upload.entity.EduFile;
+import edu.travel.upload.entity.EduFileBlob;
+import edu.travel.upload.obs.property.ObsProperties;
+import edu.travel.upload.service.EduFileBlobService;
+import edu.travel.upload.service.EduFileService;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@RestController
+@RequestMapping("/upload")
+public class UploadController implements UploadRemoteController {
+    @Autowired
+    private EduFileService eduFileService;
+    @Autowired
+    private EduFileBlobService eduFileBlobService;
+    @Autowired
+    private ObsClient obsClient;
+    @Autowired
+    private ObsProperties obsProperties;
+    Logger logger = LoggerFactory.getLogger(UploadController.class);
+
+    @Override
+    @PostMapping("/init")
+    public RPCBaseResponse<String> initializeUpload() {
+        String uploadId = UUID.randomUUID().toString()+System.currentTimeMillis();
+        return RPCBaseResponse.success(uploadId);
+    }
+
+    /**
+     * 文件是否存在
+     * @param md5
+     * @return
+     */
+    @Override
+    @GetMapping("/exits/md5")
+    @PreAuthorize("permitAll()")
+    public RPCBaseResponse<Serializable> exitsFile(@RequestParam("md5") String md5) {
+        return eduFileService.exitsFile(md5);
+    }
+    /**
+     * 上传过哪些分片
+     * @param md5
+     * @return
+     */
+    @Override
+    @GetMapping("/exits/blob")
+    @PreAuthorize("permitAll()")
+    public RPCBaseResponse<List<Integer>> exitsBlob(@RequestParam("md5") String md5) {
+        return eduFileBlobService.exitsBlob(md5);
+    }
+    /**
+     * 上传大文件分片
+     * @param file
+     * @return
+     */
+    @Override
+    @PostMapping(value = "/uploadBlob",headers = {"content-type=multipart/form-data"})
+    @PreAuthorize("permitAll()")
+    public RPCBaseResponse uploadBigFile(EduFileBlobDTO eduFileBlob, MultipartFile file) throws IOException {
+        EduFileBlob fileBlob = new EduFileBlob();
+        BeanUtils.copyProperties(eduFileBlob, fileBlob);
+        boolean exists = obsClient.headBucket(obsProperties.getBucketName());
+        if (!exists) {
+            // 若不存在,则创建桶
+            HeaderResponse response = obsClient.createBucket(obsProperties.getBucketName());
+            logger.info("创建桶成功" + response.getRequestId());
+        }
+        obsClient.putObject(obsProperties.getBucketName(),"/service/chunk/"+eduFileBlob.getUploadId()+"/"+fileBlob.getBlobNum(),file.getInputStream());
+        boolean save = eduFileBlobService.save(fileBlob);
+        if (save){
+            return RPCBaseResponse.success();
+        }
+        return RPCBaseResponse.error();
+
+    }
+    /**
+     * 合并大文件
+     * @param eduFileDTO
+     * @return
+     */
+    @Override
+    @PostMapping(value = "/mergeFile")
+    @PreAuthorize("permitAll()")
+    public RPCBaseResponse mergeFile(EduFileDTO eduFileDTO) {
+        CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(obsProperties.getBucketName(),
+                "/service/chunk/"+eduFileDTO.getUploadId(), eduFileDTO.getUploadId(), null);
+        CompleteMultipartUploadResult completeMultipartUploadResult = obsClient.completeMultipartUpload(completeMultipartUploadRequest);
+        String objectUrl = completeMultipartUploadResult.getObjectUrl();
+        EduFile eduFile = new EduFile();
+        BeanUtils.copyProperties(eduFileDTO, eduFile);
+        eduFile.setFilePath(objectUrl);
+        boolean save = eduFileService.save(eduFile);
+        if (save){
+            return RPCBaseResponse.success();
+        }
+        return RPCBaseResponse.error();
+    }
+    /**
+     * 上传小文件
+     * @param file
+     * @return
+     */
+    @Override
+    @PostMapping(value = "/upload",headers = {"content-type=multipart/form-data"})
+    @PreAuthorize("permitAll()")
+    public RPCBaseResponse uploadFile(EduFileDTO eduFile,MultipartFile file) {
+        PutObjectResult putObjectResult = obsClient.putObject(obsProperties.getBucketName(), "/service/chunk/" + eduFile.getUploadId() + "/" + file.getOriginalFilename(), file.getInputStream());
+        String objectUrl = putObjectResult.getObjectUrl();
+        EduFile files = new EduFile();
+        BeanUtils.copyProperties(files, eduFile);
+        eduFile.setFilePath(objectUrl);
+        boolean save = eduFileService.save(files);
+        if (save){
+            return RPCBaseResponse.success();
+        }
+        return RPCBaseResponse.error();
+    }
+}

+ 0 - 69
edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/web/UploadController.java

@@ -1,69 +0,0 @@
-package edu.travel.web;
-
-import edu.travel.remote.UploadRemoteController;
-import edu.travel.rpc.RPCBaseResponse;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-@RestController
-@RequestMapping("/upload")
-public class UploadController implements UploadRemoteController {
-    /**
-     * 文件是否存在
-     * @param md5
-     * @return
-     */
-    @Override
-    @GetMapping("/exits/md5")
-    @PreAuthorize("permitAll()")
-    public RPCBaseResponse exitsFile(String md5) {
-        return null;
-    }
-    /**
-     * 上传过哪些分片
-     * @param md5
-     * @return
-     */
-    @Override
-    @GetMapping("/exits/blob")
-    @PreAuthorize("permitAll()")
-    public RPCBaseResponse exitsBlob(String md5) {
-        return null;
-    }
-    /**
-     * 上传大文件分片
-     * @param file
-     * @return
-     */
-    @Override
-    @PostMapping(value = "/uploadBlob",headers = {"content-type=multipart/form-data"})
-    @PreAuthorize("permitAll()")
-    public RPCBaseResponse uploadBigFile(MultipartFile file) {
-        return null;
-    }
-    /**
-     * 合并大文件
-     * @param json
-     * @return
-     */
-    @Override
-    @PostMapping(value = "/mergeFile")
-    @PreAuthorize("permitAll()")
-    public RPCBaseResponse mergeFile(String json) {
-        return null;
-    }
-    /**
-     * 上传小文件
-     * @param file
-     * @return
-     */
-    @Override
-    @PostMapping(value = "/upload",headers = {"content-type=multipart/form-data"})
-    @PreAuthorize("permitAll()")
-    public RPCBaseResponse uploadFile(MultipartFile file) {
-        return null;
-    }
-}

+ 33 - 0
edu-travel-service/edu-travel-service-upload/src/main/resources/bootstrap-dev.yml

@@ -0,0 +1,33 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        server-addr: localhost:8848,localhost:8849,localhost:8858
+        namespace: edu-@env@
+      config:
+        file-extension: yaml
+        server-addr: localhost:8848,localhost:8849,localhost:8858
+        refresh-enabled: true
+        namespace: edu-@env@
+        shared-configs:
+          - data-id: mybatis-config-dev.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+          - data-id: reids-config-dev.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+          - data-id: datasource-config-dev.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+          - data-id: system-config-dev.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+          - data-id: zipkin.yml
+            group: DEFAULT_GROUP
+            refresh: true
+          - data-id: seata.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+          - data-id: sentinel_tenant.yaml
+            group: DEFAULT_GROUP
+            refresh: true

+ 27 - 0
edu-travel-service/edu-travel-service-upload/src/main/resources/bootstrap-prod.yml

@@ -0,0 +1,27 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        server-addr: localhost:8848,localhost:8849,localhost:8858
+        namespace: edu-@env@
+      config:
+        file-extension: yaml
+        server-addr: localhost:8848,localhost:8849,localhost:8858
+        refresh-enabled: true
+        namespace: edu-@env@
+        shared-configs:
+          - data-id: mybatis-config-dev.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+          - data-id: reids-config-dev.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+          - data-id: datasource-config-dev.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+          - data-id: system-config-dev.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+          - data-id: zipkin.yml
+            group: DEFAULT_GROUP
+            refresh: true

+ 9 - 0
edu-travel-service/edu-travel-service-upload/src/main/resources/bootstrap.yml

@@ -0,0 +1,9 @@
+server:
+  port: 10005
+spring:
+  application:
+    name: upload-@env@
+  profiles:
+    active: @env@
+  main:
+    allow-bean-definition-overriding: true

+ 26 - 0
edu-travel-service/edu-travel-service-upload/src/main/resources/mapper/EduFileBlobMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="edu.travel.upload.mapper.EduFileBlobMapper">
+  <resultMap id="BaseResultMap" type="edu.travel.upload.entity.EduFileBlob">
+    <!--@mbg.generated-->
+    <!--@Table edu.edu_file_blob-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="blob_name" jdbcType="VARCHAR" property="blobName" />
+    <result column="blob_num" jdbcType="INTEGER" property="blobNum" />
+    <result column="blob_path" jdbcType="VARCHAR" property="blobPath" />
+    <result column="blob_md5" jdbcType="VARCHAR" property="blobMd5" />
+    <result column="file_md5" jdbcType="VARCHAR" property="fileMd5" />
+    <result column="total_count" jdbcType="INTEGER" property="totalCount" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="create_user_id" jdbcType="VARCHAR" property="createUserId" />
+    <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
+    <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
+    <result column="project" jdbcType="VARCHAR" property="project" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, blob_name, blob_num, blob_path, blob_md5, file_md5, total_count, update_time, 
+    create_time, create_user_id, update_user_id, delete_flag, project
+  </sql>
+</mapper>

+ 25 - 0
edu-travel-service/edu-travel-service-upload/src/main/resources/mapper/EduFileMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="edu.travel.upload.mapper.EduFileMapper">
+  <resultMap id="BaseResultMap" type="edu.travel.upload.entity.EduFile">
+    <!--@mbg.generated-->
+    <!--@Table edu.edu_file-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="file_md5" jdbcType="VARCHAR" property="fileMd5" />
+    <result column="file_name" jdbcType="VARCHAR" property="fileName" />
+    <result column="file_sys_name" jdbcType="VARCHAR" property="fileSysName" />
+    <result column="file_path" jdbcType="VARCHAR" property="filePath" />
+    <result column="file_type" jdbcType="VARCHAR" property="fileType" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="create_user_id" jdbcType="VARCHAR" property="createUserId" />
+    <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
+    <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
+    <result column="project" jdbcType="VARCHAR" property="project" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, file_md5, file_name, file_sys_name, file_path, file_type, update_time, create_time, 
+    create_user_id, update_user_id, delete_flag, project
+  </sql>
+</mapper>