Bladeren bron

Merge remote-tracking branch 'origin/main'

classic_blue 1 dag geleden
bovenliggende
commit
bd5c39934b
50 gewijzigde bestanden met toevoegingen van 1142 en 371 verwijderingen
  1. 5 0
      edu-travel-adapter/edu-travel-adapter-upload/src/main/java/edu/travel/adapter/service/upload/UploadAdapter.java
  2. 27 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopCategoryRemoteController.java
  3. 22 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopParametersRemoteController.java
  4. 11 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopProductParametersRemoteController.java
  5. 0 6
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopProductSkuRemoteController.java
  6. 18 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopReviewRemoteController.java
  7. 14 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopUnitRemoteController.java
  8. 0 4
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/InsertProductSpecDto.java
  9. 19 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ParametersDto.java
  10. 39 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ShopParametersDto.java
  11. 45 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ShopProductParametersDto.java
  12. 65 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ShopUnitDto.java
  13. 19 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/SpecDto.java
  14. 21 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ParametersVo.java
  15. 12 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopParametersVo.java
  16. 44 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopProductParametersVo.java
  17. 71 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopUnitVo.java
  18. 15 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SpecVo.java
  19. 4 0
      edu-travel-remote/edu-travel-remote-tenant/pom.xml
  20. 12 1
      edu-travel-remote/edu-travel-remote-tenant/src/main/java/edu/travel/remote/feign/mode/romote/ShopBannerRemoteController.java
  21. 11 0
      edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/upload/UploadRemoteController.java
  22. 33 0
      edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/upload/vo/FileVo.java
  23. 4 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/BaseConstant.java
  24. 1 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/RedisKey.java
  25. 10 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopParameters.java
  26. 5 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopParametersService.java
  27. 0 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSkuService.java
  28. 7 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopSpecService.java
  29. 21 5
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopParametersServiceImpl.java
  30. 12 5
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductServiceImpl.java
  31. 33 5
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopSpecServiceImpl.java
  32. 1 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopOpinionTypeController.java
  33. 180 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopParametersController.java
  34. 4 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductController.java
  35. 93 10
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductParametersController.java
  36. 0 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSkuController.java
  37. 30 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopSpecController.java
  38. 122 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopUnitController.java
  39. 2 1
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopParametersMapper.xml
  40. 26 0
      edu-travel-service/edu-travel-service-upload/src/main/java/edu/travel/upload/web/UploadController.java
  41. 49 39
      edu-travel-service/edu-travel-service-ws/pom.xml
  42. 0 32
      edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/MyAccessDeniedHandler.java
  43. 0 31
      edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/MyAuthenticationEntryPoint.java
  44. 0 39
      edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/ResourceServerConfig.java
  45. 0 48
      edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/TokenConfig.java
  46. 0 21
      edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/WebSecurityConfig.java
  47. 0 23
      edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/WebServerFactoryConfigs.java
  48. 0 61
      edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/filter/TokenAuthenticationFilter.java
  49. 12 0
      edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/handle/TravelMessageHandler.java
  50. 23 23
      edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/interceptor/SystemMessageInterceptor.java

+ 5 - 0
edu-travel-adapter/edu-travel-adapter-upload/src/main/java/edu/travel/adapter/service/upload/UploadAdapter.java

@@ -6,6 +6,7 @@ import edu.travel.remote.upload.UploadRemoteController;
 import edu.travel.remote.upload.dto.EduFileBlobDTO;
 import edu.travel.remote.upload.dto.EduFileDTO;
 import edu.travel.remote.upload.vo.EduFileVo;
+import edu.travel.remote.upload.vo.FileVo;
 import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -50,6 +51,10 @@ public class UploadAdapter  {
         return rpcBaseResponse;
     }
     @AdapterAnnotation
+    public RPCBaseResponse<FileVo> uploadFilePath(EduFileDTO eduFileDTO, MultipartFile file) throws IOException {
+        return uploadRemoteController.uploadFilePath(JSON.toJSONString(eduFileDTO),file);
+    }
+    @AdapterAnnotation
     public RPCBaseResponse<EduFileVo> getFormId(@RequestParam("id") String id) {
         return uploadRemoteController.getFormId(id);
     }

+ 27 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopCategoryRemoteController.java

@@ -1,10 +1,37 @@
 package edu.travel.remote.commodity;
 
 import edu.travel.remote.base.RemoteBaseController;
+import edu.travel.remote.dto.BaseDto;
 import edu.travel.remote.dto.ShopCategoryDto;
+import edu.travel.remote.dto.ShopTypeDto;
 import edu.travel.remote.vo.ShopCategoryVo;
+import edu.travel.remote.vo.ShopTypeVo;
+import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.concurrent.ExecutionException;
 
 @FeignClient(name="commodity",path = "/shopCategory")
 public interface ShopCategoryRemoteController extends RemoteBaseController<ShopCategoryVo, ShopCategoryDto> {
+    @GetMapping("/getShopType")
+    public RPCBaseResponse<List<ShopTypeVo>> getShopType(ShopTypeDto param) throws ExecutionException;
+    @GetMapping("/getLevelToShopType")
+    public RPCBaseResponse<List<ShopTypeVo>> getLevelToShopType(BaseDto param) throws ExecutionException;
+    @PostMapping("/uploadIcon")
+    public RPCBaseResponse<String> uploadIcon(MultipartFile file);
+    @PostMapping("/updateTargetFormId")
+    public RPCBaseResponse<ShopCategoryVo> updateTargetFormId(ShopCategoryDto entity);
+    @PostMapping("/saveFormTarget")
+    public RPCBaseResponse<ShopCategoryVo> saveFormTarget(@RequestBody ShopCategoryDto entity);
+    /**
+     * 树形结构
+     * @return
+     */
+    @GetMapping("/getAllForm")
+    public RPCBaseResponse<List<ShopCategoryVo>> getAllForm();
 }

+ 22 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopParametersRemoteController.java

@@ -0,0 +1,22 @@
+package edu.travel.remote.commodity;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.remote.base.RemoteBaseController;
+import edu.travel.remote.dto.ProductSpecDto;
+import edu.travel.remote.dto.ShopParametersDto;
+import edu.travel.remote.vo.ShopParametersVo;
+import edu.travel.rpc.RPCBaseResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import java.util.List;
+
+@FeignClient(name="commodity",path = "/shopParameters")
+public interface ShopParametersRemoteController extends RemoteBaseController<ShopParametersVo, ShopParametersDto> {
+    @GetMapping("getShopParameters")
+    public RPCBaseResponse<Page<ShopParametersVo>> getShopParameters(ProductSpecDto param);
+    @GetMapping("/getFormId")
+    public RPCBaseResponse<ShopParametersVo> getFormId(String id);
+    @GetMapping("/getAllForm")
+    public RPCBaseResponse<List<ShopParametersVo>> getAllForm();
+}

+ 11 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopProductParametersRemoteController.java

@@ -0,0 +1,11 @@
+package edu.travel.remote.commodity;
+
+import edu.travel.remote.base.RemoteBaseController;
+import edu.travel.remote.dto.ShopProductParametersDto;
+import edu.travel.remote.vo.ShopProductParametersVo;
+import org.springframework.cloud.openfeign.FeignClient;
+
+@FeignClient(name="commodity",path = "/shopProductParameters")
+public interface ShopProductParametersRemoteController extends RemoteBaseController<ShopProductParametersVo, ShopProductParametersDto> {
+
+}

+ 0 - 6
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopProductSkuRemoteController.java

@@ -1,12 +1,6 @@
 package edu.travel.remote.commodity;
 
-import edu.travel.remote.vo.ProductSkuVo;
-import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-
-import java.util.List;
-
 
 @FeignClient(name="commodity",path = "/shopProductSku")
 public interface ShopProductSkuRemoteController {

+ 18 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopReviewRemoteController.java

@@ -1,10 +1,28 @@
 package edu.travel.remote.commodity;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.remote.base.RemoteBaseController;
+import edu.travel.remote.dto.AddReviewDto;
+import edu.travel.remote.dto.ProductSpecDto;
 import edu.travel.remote.dto.ShopReviewDto;
 import edu.travel.remote.vo.ShopReviewVo;
+import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
 
 @FeignClient(name="commodity",path = "/shopReview")
 public interface ShopReviewRemoteController extends RemoteBaseController<ShopReviewVo, ShopReviewDto> {
+    @GetMapping("/getShopReview")
+    public RPCBaseResponse<Page<ShopReviewVo>> getShopReview(ProductSpecDto params);
+    @PostMapping("/addReview")
+    public RPCBaseResponse<String> addReview(@RequestBody AddReviewDto params);
+    @PostMapping("/uploadReviewImage")
+    public RPCBaseResponse<String> uploadReviewImage(MultipartFile file);
+    @PostMapping("/uploadReviewImages")
+    public RPCBaseResponse<String> uploadReviewImages(List<MultipartFile> files);
 }

+ 14 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopUnitRemoteController.java

@@ -0,0 +1,14 @@
+package edu.travel.remote.commodity;
+
+import edu.travel.remote.base.RemoteBaseController;
+import edu.travel.remote.dto.ShopUnitDto;
+import edu.travel.remote.vo.ShopUnitVo;
+import edu.travel.rpc.RPCBaseResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@FeignClient(name="commodity",path = "/shopUnit")
+public interface ShopUnitRemoteController extends RemoteBaseController<ShopUnitVo, ShopUnitDto> {
+    @GetMapping("/getFormId")
+    public RPCBaseResponse<ShopUnitVo> getFormId(String id);
+}

+ 0 - 4
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/InsertProductSpecDto.java

@@ -22,10 +22,6 @@ public class InsertProductSpecDto {
      */
     private String specName;
     /**
-     * 权重
-     */
-    private Integer sortOrder;
-    /**
      * 规格值
      */
     private List<SpecValueDto> specValues;

+ 19 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ParametersDto.java

@@ -0,0 +1,19 @@
+package edu.travel.remote.dto;
+
+import lombok.Data;
+
+@Data
+public class ParametersDto {
+
+    /**国家Id*/
+    private String countryId;
+
+    private Integer currentPage = 1;
+
+    private Integer pageSize = 10;
+    /**
+     * 是否必填参数  0 是 1 否
+     */
+    private String isNecessary;
+
+}

+ 39 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ShopParametersDto.java

@@ -0,0 +1,39 @@
+package edu.travel.remote.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
+@TableName(value = "shop_parameters")
+public class ShopParametersDto extends BaseEntity {
+    /**
+     * 商品参数ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 商品参数名称
+     */
+    @TableField(value = "parameters_name")
+    private String parametersName;
+
+    /**
+     * 是否是必须参数 0是 1否
+     */
+    @TableField(value = "is_necessary")
+    private Integer isNecessary;
+
+
+}

+ 45 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ShopProductParametersDto.java

@@ -0,0 +1,45 @@
+package edu.travel.remote.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 edu.travel.po.PagePO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 商品参数值
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "shop_product_parameters")
+public class ShopProductParametersDto extends PagePO {
+    /**
+     * 商品参数值ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 商品ID
+     */
+    @TableField(value = "product_id")
+    private Long productId;
+
+    /**
+     * 参数ID
+     */
+    @TableField(value = "parameters_id")
+    private Long parametersId;
+
+    /**
+     * 参数值
+     */
+    @TableField(value = "parameters_value")
+    private String parametersValue;
+
+}

+ 65 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ShopUnitDto.java

@@ -0,0 +1,65 @@
+package edu.travel.remote.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.po.PagePO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * 计件单位表
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "shop_unit")
+public class ShopUnitDto extends PagePO{
+    /**
+     * 计件单位id
+     */
+    private Long id;
+
+    /**
+     * 单位名
+     */
+    private String unitName;
+
+    /**
+     * 国家id
+     */
+    private Long countryId;
+
+    /**
+     * 项目code
+     */
+    private String project;
+
+    /**
+     * 创建人
+     */
+    private String createUserId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    private String updateUserId;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 删除状态
+     */
+    private Integer deleteFlag;
+}

+ 19 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/SpecDto.java

@@ -0,0 +1,19 @@
+package edu.travel.remote.dto;
+
+import lombok.Data;
+
+@Data
+public class SpecDto {
+    /**
+     * 规格id
+     */
+    private String specId;
+    /**
+     * 规格值
+     */
+    private String specName;
+    /**
+     * 国家Id
+     */
+    private String countryId;
+}

+ 21 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ParametersVo.java

@@ -0,0 +1,21 @@
+package edu.travel.remote.vo;
+
+import lombok.Data;
+
+@Data
+public class ParametersVo {
+    /**
+     * 商品参数ID
+     */
+    private String id;
+
+    /**
+     * 商品参数名称
+     */
+    private String parametersName;
+
+    /**
+     * 是否是必须参数 0是 1否
+     */
+    private String isNecessary;
+}

+ 12 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopParametersVo.java

@@ -1,9 +1,12 @@
 package edu.travel.remote.vo;
 
+import edu.travel.entity.BaseEntity;
 import lombok.Data;
 
+import java.util.Map;
+
 @Data
-public class ShopParametersVo {
+public class ShopParametersVo extends BaseEntity {
     /**
      * 商品参数ID
      */
@@ -27,4 +30,12 @@ public class ShopParametersVo {
      * 是否是必须参数 0是 1否
      */
     private Integer isNecessary;
+    /**
+     * 国家id
+     */
+    private Long countryId;
+    /**
+     * Map
+     */
+    private Map<String,Object> map;
 }

+ 44 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopProductParametersVo.java

@@ -0,0 +1,44 @@
+package edu.travel.remote.vo;
+
+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
+@TableName(value = "shop_product_parameters")
+public class ShopProductParametersVo extends BaseEntity {
+    /**
+     * 商品参数值ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 商品ID
+     */
+    @TableField(value = "product_id")
+    private Long productId;
+
+    /**
+     * 参数ID
+     */
+    @TableField(value = "parameters_id")
+    private Long parametersId;
+
+    /**
+     * 参数值
+     */
+    @TableField(value = "parameters_value")
+    private String parametersValue;
+
+}

+ 71 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopUnitVo.java

@@ -0,0 +1,71 @@
+package edu.travel.remote.vo;
+
+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;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 计件单位表
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "shop_unit")
+public class ShopUnitVo extends BaseEntity {
+    /**
+     * 计件单位id
+     */
+    private Long id;
+
+    /**
+     * 单位名
+     */
+    private String unitName;
+
+    /**
+     * 国家id
+     */
+    private Long countryId;
+
+    /**
+     * 项目code
+     */
+    private String project;
+
+    /**
+     * 创建人
+     */
+    private String createUserId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    private String updateUserId;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 删除状态
+     */
+    private Integer deleteFlag;
+
+    /**
+     * map
+     */
+    private Map<String,Object> map;
+}

+ 15 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SpecVo.java

@@ -0,0 +1,15 @@
+package edu.travel.remote.vo;
+
+import lombok.Data;
+
+@Data
+public class SpecVo {
+    /**
+     * 规格id
+     */
+    private String id;
+    /**
+     * 规格值
+     */
+    private String specName;
+}

+ 4 - 0
edu-travel-remote/edu-travel-remote-tenant/pom.xml

@@ -57,5 +57,9 @@
             <version>1.0-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-core</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 12 - 1
edu-travel-remote/edu-travel-remote-tenant/src/main/java/edu/travel/remote/feign/mode/romote/ShopBannerRemoteController.java

@@ -1,11 +1,14 @@
 package edu.travel.remote.feign.mode.romote;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import edu.travel.remote.base.RemoteBaseController;
 import edu.travel.remote.feign.mode.dto.tenant.BannerDto;
 import edu.travel.remote.feign.mode.vo.banner.BannerVo;
 import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -15,4 +18,12 @@ import static edu.travel.rpc.RPCBaseResponse.success;
 public interface ShopBannerRemoteController extends RemoteBaseController<BannerVo, BannerDto> {
     @GetMapping("/getBanner")
     public RPCBaseResponse<List<BannerVo>> getBanner(BannerDto banner);
-}
+    @GetMapping("/getBannerAllPage")
+    public RPCBaseResponse<IPage<BannerVo>> getBannerAllPage(BannerDto banner);
+    @PostMapping("/saveBannerCountry")
+    public RPCBaseResponse<BannerVo> saveBannerCountry (BannerDto banner);
+    @PostMapping("/updateBannerCountry")
+    public RPCBaseResponse<BannerVo> updateBannerCountry(BannerDto banner);
+    @PostMapping("/uploadBannerImage")
+    public RPCBaseResponse<String> uploadBannerImage(MultipartFile file);
+    }

+ 11 - 0
edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/upload/UploadRemoteController.java

@@ -4,6 +4,7 @@ import edu.travel.remote.base.RemoteBaseController;
 import edu.travel.remote.upload.dto.EduFileBlobDTO;
 import edu.travel.remote.upload.dto.EduFileDTO;
 import edu.travel.remote.upload.vo.EduFileVo;
+import edu.travel.remote.upload.vo.FileVo;
 import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
@@ -63,4 +64,14 @@ public interface UploadRemoteController extends RemoteBaseController<EduFileVo,
      */
     @GetMapping("/getFormId")
     RPCBaseResponse<EduFileVo> getFormId(@RequestParam("id")String id);
+
+    /**
+     * 上传小文件
+     * @param
+     * @return
+     */
+    @PostMapping(value = "/uploadFilePath",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    RPCBaseResponse<FileVo> uploadFilePath(@RequestParam("eduFileDTO") String dto, @RequestPart("file") MultipartFile file) throws IOException;
+
+
 }

+ 33 - 0
edu-travel-remote/edu-travel-remote-upload/src/main/java/edu/travel/remote/upload/vo/FileVo.java

@@ -0,0 +1,33 @@
+package edu.travel.remote.upload.vo;
+
+import lombok.Data;
+
+@Data
+public class FileVo {
+    private String id;
+
+    /**
+     * 文件md5
+     */
+    private String fileMd5;
+
+    /**
+     * 文件名
+     */
+    private String fileName;
+
+    /**
+     * 文件系统名
+     */
+    private String fileSysName;
+
+    /**
+     * 文件路径
+     */
+    private String filePath;
+
+    /**
+     * 文件类型
+     */
+    private String fileType;
+}

+ 4 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/BaseConstant.java

@@ -25,6 +25,10 @@ public class BaseConstant {
     public static final Integer BASIC_IS_DEFAULT_YES_NO = 1;
 
     /**
+     * 返回数据 code
+     */
+    public static final Integer SUCCESS_CODE = 200;
+    /**
      * 商品文件上传图片类型
      */
     private static final Set<String> PRODUCT_IMAGE_TYPES = new HashSet<>(

+ 1 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/RedisKey.java

@@ -9,9 +9,7 @@ public interface RedisKey {
    String PRODUCT_HOT_TYPE = BASH +"product:hot:type";
     /**热门二级商品类型*/
    String PRODUCT_TO_HOT_TYPE = BASH +"product:to:hot:type";
-    /**
-     * 加上国家
-     */
+    /**加上国家*/
 
 
     String PRODUCT_ORDER = BASH +"product:order";

+ 10 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopParameters.java

@@ -36,6 +36,15 @@ public class ShopParameters extends BaseEntity {
      */
     @TableField(value = "is_necessary")
     private Integer isNecessary;
+    /**
+     * 国家id
+     */
+    @TableField(value = "country_id")
+    private Long countryId;
 
-
+    /**
+     * 国家ID
+     */
+    @TableField(value = "country_id")
+    private Long countryId;
 }

+ 5 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopParametersService.java

@@ -3,11 +3,16 @@ package edu.travel.commodity.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopParameters;
 import com.baomidou.mybatisplus.extension.service.IService;
+import edu.travel.remote.dto.ParametersDto;
 import edu.travel.remote.dto.ProductSpecDto;
+import edu.travel.remote.vo.ParametersVo;
 import edu.travel.remote.vo.ShopParametersVo;
 
 public interface ShopParametersService extends IService<ShopParameters>{
 
 
     Page<ShopParametersVo> getShopParameters(ProductSpecDto param);
+
+    Page<ParametersVo> getAllParameters(ParametersDto param);
+
 }

+ 0 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSkuService.java

@@ -17,7 +17,6 @@ public interface ShopProductSkuService extends IService<ShopProductSku>{
 
     Map<String, List<ShopSkuSpecValueVo>> getSkuValuesById(Set<String> skuId);
 
-
     void shopProductSku(AddShopOrderDto params);
 
     boolean insertProductSku(List<InsertProductSpecDto> specs,List<InsertProductSkuDto> skus, ShopProduct id);

+ 7 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopSpecService.java

@@ -1,10 +1,17 @@
 package edu.travel.commodity.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopSpec;
 import com.baomidou.mybatisplus.extension.service.IService;
+import edu.travel.remote.dto.SpecDto;
+import edu.travel.remote.vo.SpecVo;
 
 
 public interface ShopSpecService extends IService<ShopSpec>{
 
 
+    Page<SpecVo> getShopSpec(Long countryId,Integer currentPage, Integer pageSize);
+
+
+    void insertOrUpdate(SpecDto specDto);
 }

+ 21 - 5
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopParametersServiceImpl.java

@@ -1,6 +1,8 @@
 package edu.travel.commodity.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.commodity.entity.ShopParameters;
@@ -8,9 +10,10 @@ import edu.travel.commodity.entity.ShopProductParameters;
 import edu.travel.commodity.mapper.ShopParametersMapper;
 import edu.travel.commodity.service.ShopParametersService;
 import edu.travel.commodity.service.ShopProductParametersService;
-import edu.travel.commodity.service.ShopProductService;
 import edu.travel.commodity.utils.PageUtil;
+import edu.travel.remote.dto.ParametersDto;
 import edu.travel.remote.dto.ProductSpecDto;
+import edu.travel.remote.vo.ParametersVo;
 import edu.travel.remote.vo.ShopParametersVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -24,12 +27,12 @@ import java.util.stream.Collectors;
 public class ShopParametersServiceImpl extends ServiceImpl<ShopParametersMapper, ShopParameters> implements ShopParametersService {
     @Autowired
     private ShopProductParametersService shopProductParametersService;
-    @Autowired
-    private ShopProductService shopProductService;
+
     @Override
     public Page<ShopParametersVo> getShopParameters(ProductSpecDto param) {
-        Page<ShopProductParameters> page = shopProductParametersService.lambdaQuery().eq(ShopProductParameters::getProductId, param.getProductId())
-                .page(new Page<>(param.getCurrentPage(), param.getPageSize()));
+        LambdaQueryWrapper<ShopProductParameters> query = Wrappers.<ShopProductParameters>lambdaQuery().eq(ShopProductParameters::getProductId, param.getProductId());
+
+        Page<ShopProductParameters> page = shopProductParametersService.page(new Page<>(param.getCurrentPage(), param.getPageSize()), query);
         //分页获取参数值和参数ID
         Page<ShopParametersVo> pageEntity = PageUtil.toPageEntity(page, ShopParametersVo.class);
         List<ShopParametersVo> list = pageEntity.getRecords();
@@ -54,4 +57,17 @@ public class ShopParametersServiceImpl extends ServiceImpl<ShopParametersMapper,
         }
         return pageEntity;
     }
+
+    @Override
+    public Page<ParametersVo> getAllParameters(ParametersDto param) {
+        LambdaQueryWrapper<ShopParameters> query = Wrappers.<ShopParameters>lambdaQuery().
+                eq(ShopParameters::getCountryId, param.getCountryId());
+        if(param.getIsNecessary().equals("0")){
+            query.eq(ShopParameters::getIsNecessary, param.getIsNecessary());
+        }
+        Page<ShopParameters> page = this.page(new Page<>(param.getCurrentPage(), param.getPageSize()),query);
+        return PageUtil.toPageEntity(page, ParametersVo.class);
+    }
+
+
 }

+ 12 - 5
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductServiceImpl.java

@@ -3,26 +3,28 @@ package edu.travel.commodity.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.commodity.constant.BaseConstant;
 import edu.travel.commodity.entity.ShopProduct;
+import edu.travel.commodity.entity.ShopSpec;
 import edu.travel.commodity.mapper.ShopProductMapper;
+import edu.travel.commodity.mapper.ShopSpecMapper;
 import edu.travel.commodity.service.*;
 import edu.travel.commodity.utils.ObjectUtils;
 import edu.travel.commodity.utils.PageUtil;
-import edu.travel.remote.dto.GetProductByTypeDto;
-import edu.travel.remote.dto.InsertProductDto;
-import edu.travel.remote.dto.SearchProductDto;
-import edu.travel.remote.dto.FIleDto;
+import edu.travel.remote.dto.*;
 import edu.travel.remote.vo.ShopProductVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class ShopProductServiceImpl extends ServiceImpl<ShopProductMapper, ShopProduct> implements ShopProductService {
@@ -38,6 +40,9 @@ public class ShopProductServiceImpl extends ServiceImpl<ShopProductMapper, ShopP
     @Autowired
     private ShopProductParametersService shopProductParametersService;
 
+    @Autowired
+    private ShopSpecService shopSpecService;
+
     @Override
     public Page<ShopProductVo> getHotProduct(GetProductByTypeDto type) {
         LambdaQueryWrapper<ShopProduct> query = Wrappers.<ShopProduct>lambdaQuery()
@@ -68,8 +73,10 @@ public class ShopProductServiceImpl extends ServiceImpl<ShopProductMapper, ShopP
         bean.setMainImageUrl(imageList.get(0).getFilePath());
         //保存商品
         this.save(bean);
+        List<InsertProductSpecDto> specs = params.getSpecs();
+
         //保存商品规格和规格值
-        boolean b1 = shopProductSpecService.insertProductSpec(params.getSpecs(), bean);
+        boolean b1 = shopProductSpecService.insertProductSpec(specs, bean);
 
         //保存商品图片
         boolean b2 = shopProductImageService.saveProductImage(bean.getId(), imageList);

+ 33 - 5
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopSpecServiceImpl.java

@@ -1,18 +1,46 @@
 package edu.travel.commodity.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import edu.travel.commodity.entity.ShopProduct;
 import edu.travel.commodity.entity.ShopSpec;
 import edu.travel.commodity.mapper.ShopSpecMapper;
 import edu.travel.commodity.service.ShopSpecService;
-import edu.travel.remote.dto.InsertProductSpecDto;
+import edu.travel.commodity.utils.PageUtil;
+import edu.travel.remote.dto.SpecDto;
+import edu.travel.remote.vo.SpecVo;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
 
 @Service
 public class ShopSpecServiceImpl extends ServiceImpl<ShopSpecMapper, ShopSpec> implements ShopSpecService {
 
 
+    @Override
+    public Page<SpecVo> getShopSpec(Long countryId,Integer currentPage, Integer pageSize) {
+        LambdaQueryWrapper<ShopSpec> query = Wrappers.<ShopSpec>lambdaQuery()
+                .eq(ShopSpec::getCountryId, countryId).orderByDesc(ShopSpec::getCreateTime);
+        Page<ShopSpec> page = this.page(new Page<>(currentPage, pageSize), query);
+        return PageUtil.toPageEntity(page, SpecVo.class);
+    }
+
+    @Override
+    public void insertOrUpdate(SpecDto specDto) {
+        ShopSpec spec = getById(specDto.getSpecId());
+        if(spec==null){
+            LambdaQueryWrapper<ShopSpec> query =
+                    Wrappers.<ShopSpec>lambdaQuery().eq(ShopSpec::getSpecName, specDto)
+                            .eq(ShopSpec::getCountryId,specDto.getCountryId());
+            ShopSpec one = getOne(query);
+            if(one!=null){
+                throw new RuntimeException("规格名称已存在");
+            }
+            ShopSpec bean = BeanUtil.toBean(specDto, ShopSpec.class);
+            save(bean);
+            return;
+        }
+        spec.setSpecName(specDto.getSpecName());
+        updateById(spec);
+    }
 }

+ 1 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopOpinionTypeController.java

@@ -24,7 +24,7 @@ import java.util.List;
 * @author xxxxx
 */
 @RestController
-@RequestMapping("/shop_opinion_type")
+@RequestMapping("/shopOpinionType")
 public class ShopOpinionTypeController extends BaseController<ShopOpinionType> implements ShopOpinionTypeRemoteController {
 /**
 * 服务对象

+ 180 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopParametersController.java

@@ -1,15 +1,33 @@
 package edu.travel.commodity.web;
 
+import com.alibaba.nacos.shaded.com.google.common.base.Objects;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.adapter.service.country.CountryAdapter;
+import edu.travel.commodity.constant.BaseConstant;
+import edu.travel.commodity.entity.ShopParameters;
 import edu.travel.commodity.service.ShopParametersService;
+import edu.travel.entity.BaseEntity;
+import edu.travel.remote.commodity.ShopParametersRemoteController;
+import edu.travel.remote.dto.ParametersDto;
 import edu.travel.remote.dto.ProductSpecDto;
+import edu.travel.remote.dto.ShopParametersDto;
+import edu.travel.remote.vo.ParametersVo;
 import edu.travel.resp.BaseResponse;
 import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.remote.vo.ShopParametersVo;
+import edu.travel.vo.BaseCountryServeVo;
+import edu.travel.vo.BaseCountryVo;
+import edu.travel.web.BaseController;
+import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import static edu.travel.rpc.RPCBaseResponse.success;
 
 /**
@@ -19,12 +37,14 @@ import static edu.travel.rpc.RPCBaseResponse.success;
 */
 @RestController
 @RequestMapping("/shopParameters")
-public class ShopParametersController {
+public class ShopParametersController extends BaseController<ShopParameters> implements ShopParametersRemoteController{
 /**
 * 服务对象
 */
     @Autowired
     private ShopParametersService shopParametersService;
+    @Autowired
+    private CountryAdapter countryAdapter;
 
     /**
      *  获取商品参数
@@ -35,4 +55,163 @@ public class ShopParametersController {
     public RPCBaseResponse<Page<ShopParametersVo>> getShopParameters(ProductSpecDto param){
         return success(shopParametersService.getShopParameters(param));
     }
+    /**
+     * 获取参数
+     */
+    @GetMapping("getAllParameters")
+    public RPCBaseResponse<Page<ParametersVo>> getAllParameters(ParametersDto param){
+        return success(shopParametersService.getAllParameters(param));
+    }
+
+
+
+
+    /**
+     * 通过id获取商品参数(连表-服务国家)
+     * @param id
+     * @return
+     */
+    @Override
+    @GetMapping("/getFormId")
+    public RPCBaseResponse<ShopParametersVo> getFormId(String id) {
+        RPCBaseResponse<ShopParameters> parametersRPCBaseResponse = super.getId(id);
+        if (!Objects.equal(parametersRPCBaseResponse.getCode(), BaseConstant.SUCCESS_CODE))
+        {
+            return RPCBaseResponse.error(parametersRPCBaseResponse.getMsg());
+        }
+        ShopParameters shopParameters = parametersRPCBaseResponse.getData();
+
+        //提取countryID
+        Long countryId = shopParameters.getCountryId();
+
+        //调用方法获取国家信息
+        RPCBaseResponse<BaseCountryServeVo> countryInfoResponse = countryAdapter.getFormId(countryId.toString());
+        if (!Objects.equal(countryInfoResponse.getCode(), BaseConstant.SUCCESS_CODE))
+        {
+            return RPCBaseResponse.error(countryInfoResponse.getMsg());
+        }
+        BaseCountryServeVo countryInfo = countryInfoResponse.getData();
+        //创建返回对象
+        ShopParametersVo shopParametersVo = new ShopParametersVo();
+        BeanUtils.copyProperties(shopParameters, shopParametersVo);
+        //存入map
+        Map<String, Object> map = new HashMap<>();
+        map.put("countryData", countryInfo);
+        shopParametersVo.setMap(map);
+
+        return RPCBaseResponse.success(shopParametersVo);
+    }
+
+    /**
+     * 更新参数信息
+     * @param entity
+     * @return
+     */
+    @Override
+    @PostMapping("/updateFormId")
+    public RPCBaseResponse<ShopParametersVo> updateTargetFormId(@RequestBody ShopParametersDto entity) {
+        ShopParameters shopParameters = new ShopParameters();
+        BeanUtils.copyProperties(entity, shopParameters);
+        RPCBaseResponse<ShopParameters> countryRPCBaseResponse = super.updateTargetById(shopParameters);
+        RPCBaseResponse<ShopParametersVo> shopParametersVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(countryRPCBaseResponse, shopParametersVoRPCBaseResponse);
+        return shopParametersVoRPCBaseResponse;
+    }
+
+    /**
+     * 新增商品参数信息
+     * @param entity
+     * @return
+     */
+    @Override
+    @PostMapping("/saveFormTarget")
+    public RPCBaseResponse<ShopParametersVo> saveFormTarget(ShopParametersDto entity) {
+        ShopParameters shopParameters = new ShopParameters();
+        BeanUtils.copyProperties(entity, shopParameters);
+        RPCBaseResponse<ShopParameters> countryRPCBaseResponse = super.saveTarget(shopParameters);
+        RPCBaseResponse<ShopParametersVo> shopParametersVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(countryRPCBaseResponse, shopParametersVoRPCBaseResponse);
+        return shopParametersVoRPCBaseResponse;
+    }
+
+    /**
+     * 删除商品参数信息
+     * @param ids
+     * @return
+     */
+    @Override
+    @PostMapping("/deleteTargetFormId")
+    public RPCBaseResponse<ShopParametersVo> deleteTargetFormId(List<String> ids) {
+        RPCBaseResponse<ShopParameters> countryRPCBaseResponse = super.deleteTargetById(ids);
+        RPCBaseResponse<ShopParametersVo> shopParametersVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(countryRPCBaseResponse, shopParametersVoRPCBaseResponse);
+        return shopParametersVoRPCBaseResponse;
+    }
+
+    /**
+     * 获取所有商品参数信息
+     * @return
+     */
+    @Override
+    @GetMapping("/getAllForm")
+    public RPCBaseResponse<List<ShopParametersVo>> getAllForm() {
+        // Step 1: 获取所有 ShopParameters 数据
+        RPCBaseResponse<List<ShopParameters>> countryRPCBaseResponse = super.listAll();
+
+        // Step 2: 创建一个用于存储每个 ShopParametersVo 的映射
+        Map<Long, ShopParametersVo> parametersMap = new HashMap<>();
+        List<ShopParametersVo> result = new ArrayList<>();
+
+        // Step 3: 创建一个 Map,用于存储 countryId 对应的数据
+        Map<Long, BaseCountryVo> countryDataMap = new HashMap<>();
+
+        // Step 4: 将所有 ShopParameters 转换为 ShopParametersVo,并存储在 map 中
+        if (countryRPCBaseResponse.getData() != null) {
+            for (ShopParameters parameters : countryRPCBaseResponse.getData()) {
+                ShopParametersVo parametersVo = new ShopParametersVo();
+                BeanUtils.copyProperties(parameters, parametersVo);
+                parametersMap.put(parameters.getId(), parametersVo);
+
+                // Step 5: 利用 countryId 查找相关数据并存储到 countryDataMap 中
+                if (parameters.getCountryId() != null) {
+                    RPCBaseResponse<BaseCountryServeVo> countryResponse = countryAdapter.getFormId(parameters.getCountryId().toString());
+
+                    // 确保 countryResponse 不为 null,并提取数据
+                    if (countryResponse != null && countryResponse.getData() != null) {
+                        BaseCountryServeVo serveVo = countryResponse.getData();
+                        BaseCountryVo countryData = convertToBaseCountryVo(serveVo); // 进行转换
+                        countryDataMap.put(parameters.getCountryId(), countryData);
+                    }
+                }
+            }
+
+            // Step 6: 将国家数据添加到 ShopParametersVo 中
+            for (ShopParametersVo parametersVo : parametersMap.values()) {
+                if (countryDataMap.containsKey(parametersVo.getCountryId())) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("countryData", countryDataMap.get(parametersVo.getCountryId()));
+                    parametersVo.setMap(map);
+                }
+                result.add(parametersVo); // Adding to result list
+            }
+        }
+
+        // Step 7: 创建返回的 RPCBaseResponse
+        RPCBaseResponse<List<ShopParametersVo>> shopParametersVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(countryRPCBaseResponse, shopParametersVoRPCBaseResponse);
+        shopParametersVoRPCBaseResponse.setData(result); // 设置结果数据
+
+        return shopParametersVoRPCBaseResponse;
+    }
+
+    // 实现 BaseCountryServeVo 到 BaseCountryVo 的转换方法
+    private BaseCountryVo convertToBaseCountryVo(BaseCountryServeVo serveVo) {
+        BaseCountryVo countryVo = new BaseCountryVo();
+        countryVo.setId(serveVo.getId());
+        countryVo.setCountryNameZh(serveVo.getCountryNameZh());
+        countryVo.setCountryNameEn(serveVo.getCountryNameEn());
+        countryVo.setAreaCode(serveVo.getAreaCode());
+        return countryVo;
+    }
+
 }

+ 4 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductController.java

@@ -16,6 +16,7 @@ import edu.travel.remote.dto.GetProductByTypeDto;
 import edu.travel.remote.dto.InsertProductDto;
 import edu.travel.remote.dto.SearchProductDto;
 import edu.travel.remote.upload.dto.EduFileDTO;
+import edu.travel.remote.upload.vo.FileVo;
 import edu.travel.resp.BaseResponse;
 import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.remote.vo.ShopProductVo;
@@ -76,7 +77,7 @@ public class ShopProductController extends BaseController<ShopProduct> {
      */
 
     @PostMapping("/uploadProductImage")
-    public RPCBaseResponse<String> searchProduct(MultipartFile file) throws IOException {
+    public RPCBaseResponse<FileVo> uploadProductImage(MultipartFile file) throws IOException {
         if (file == null || file.isEmpty()) {
             return error();
         }
@@ -97,8 +98,8 @@ public class ShopProductController extends BaseController<ShopProduct> {
                 eduFileDTO.setFileName(filename);
                 eduFileDTO.setFileSysName(IdUtil.fastSimpleUUID()+ DateUtil.format(new Date(),"yyyyMMddHHmmss") +"."+fileType);
                 eduFileDTO.setFileMd5(FIleUtil.calculateFileMd5(file.getBytes()));
-                RPCBaseResponse rpcBaseResponse = uploadAdapter.uploadFile(eduFileDTO, file);
-                return success(rpcBaseResponse.getData().toString());
+                RPCBaseResponse<FileVo> fileVoRPCBaseResponse = uploadAdapter.uploadFilePath(eduFileDTO, file);
+                return success("success",fileVoRPCBaseResponse.getData());
             }
         } catch (Exception e) {
             e.printStackTrace();

+ 93 - 10
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductParametersController.java

@@ -2,24 +2,107 @@ package edu.travel.commodity.web;
 
 import edu.travel.commodity.entity.ShopProductParameters;
 import edu.travel.commodity.service.ShopProductParametersService;
+import edu.travel.remote.commodity.ShopProductParametersRemoteController;
+import edu.travel.remote.dto.ShopProductParametersDto;
+import edu.travel.remote.vo.ShopProductParametersVo;
+import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
-import org.springframework.web.bind.annotation.*;
-
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+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 java.util.List;
 
 /**
-* 商品参数值(shop_product_parameters)表控制层
-*
-* @author xxxxx
-*/
+ * 商品参数值(shop_product_parameters)表控制层
+ */
 @RestController
 @RequestMapping("/shop_product_parameters")
-public class ShopProductParametersController  extends BaseController<ShopProductParameters> {
-/**
-* 服务对象
-*/
+public class ShopProductParametersController extends BaseController<ShopProductParameters> implements ShopProductParametersRemoteController {
+    /**
+     * 服务对象
+     */
     @Autowired
     private ShopProductParametersService shopProductParametersService;
 
+    /**
+     * 通过id查找商品参数值
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    @GetMapping("/getFormId")
+    public RPCBaseResponse<ShopProductParametersVo> getFormId(String id) {
+        RPCBaseResponse<ShopProductParameters> shopProductParametersRPCBaseResponse = super.getId(id);
+        RPCBaseResponse<ShopProductParametersVo> shopProductParametersVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopProductParametersRPCBaseResponse, shopProductParametersVoRPCBaseResponse);
+        return shopProductParametersVoRPCBaseResponse;
+    }
+
+    /**
+     * 更新商品参数值
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    @PostMapping("/updateTargetFormId")
+    public RPCBaseResponse<ShopProductParametersVo> updateTargetFormId(ShopProductParametersDto entity) {
+        ShopProductParameters shopProductParameters = new ShopProductParameters();
+        BeanUtils.copyProperties(entity, shopProductParameters);
+        RPCBaseResponse<ShopProductParameters> shopProductParametersRPCBaseResponse = super.updateTargetById(shopProductParameters);
+        RPCBaseResponse<ShopProductParametersVo> shopProductParametersVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopProductParametersRPCBaseResponse, shopProductParametersVoRPCBaseResponse);
+        return shopProductParametersVoRPCBaseResponse;
+    }
+
+    /**
+     * 新增商品参数值
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    @PostMapping("/saveFormTarget")
+    public RPCBaseResponse<ShopProductParametersVo> saveFormTarget(ShopProductParametersDto entity) {
+        ShopProductParameters shopProductParameters = new ShopProductParameters();
+        BeanUtils.copyProperties(entity, shopProductParameters);
+        RPCBaseResponse<ShopProductParameters> shopProductParametersRPCBaseResponse = super.saveTarget(shopProductParameters);
+        RPCBaseResponse<ShopProductParametersVo> shopProductParametersVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopProductParametersRPCBaseResponse, shopProductParametersVoRPCBaseResponse);
+        return shopProductParametersVoRPCBaseResponse;
+    }
+
+    /**
+     * 删除商品参数值
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    @PostMapping("/deleteTargetFormId")
+    public RPCBaseResponse<ShopProductParametersVo> deleteTargetFormId(List<String> ids) {
+        RPCBaseResponse<ShopProductParameters> shopProductParametersRPCBaseResponse = super.deleteTargetById(ids);
+        RPCBaseResponse<ShopProductParametersVo> shopProductParametersVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopProductParametersRPCBaseResponse, shopProductParametersVoRPCBaseResponse);
+        return shopProductParametersVoRPCBaseResponse;
+    }
 
+    /**
+     * 获取所有商品参数值
+     *
+     * @return
+     */
+    @Override
+    @GetMapping("/getAllForm")
+    public RPCBaseResponse<List<ShopProductParametersVo>> getAllForm() {
+        RPCBaseResponse<List<ShopProductParameters>> shopProductParametersRPCBaseResponse = super.listAll();
+        RPCBaseResponse<List<ShopProductParametersVo>> shopProductParametersVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopProductParametersRPCBaseResponse, shopProductParametersVoRPCBaseResponse);
+        return shopProductParametersVoRPCBaseResponse;
+    }
 }

+ 0 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSkuController.java

@@ -1,13 +1,10 @@
 package edu.travel.commodity.web;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopProductSku;
 import edu.travel.commodity.service.ShopProductSkuService;
 import edu.travel.remote.commodity.ShopProductSkuRemoteController;
 import edu.travel.remote.dto.AddShopOrderDto;
-import edu.travel.remote.dto.GetOrderItemInfoByOrderNumDto;
 import edu.travel.remote.dto.PayShopOrderDto;
-import edu.travel.remote.vo.OrderItemVo;
 import edu.travel.remote.vo.ShopSkuSpecValueVo;
 import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;

+ 30 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopSpecController.java

@@ -1,17 +1,23 @@
 package edu.travel.commodity.web;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.service.ShopSpecService;
+import edu.travel.remote.dto.SpecDto;
+import edu.travel.remote.vo.SpecVo;
+import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
+import static edu.travel.rpc.RPCBaseResponse.success;
+
 /**
 * 规格表(shop_spec)表控制层
 *
 * @author xxxxx
 */
 @RestController
-@RequestMapping("/shop_spec")
+@RequestMapping("/shopSpec")
 public class ShopSpecController {
 /**
 * 服务对象
@@ -19,4 +25,27 @@ public class ShopSpecController {
     @Autowired
     private ShopSpecService shopSpecService;
 
+
+    /**
+     *  分页查询规格
+     * @param currentPage
+     * @param pageSize
+     * @return {@link RPCBaseResponse }<{@link Page }<{@link SpecVo }>>
+     */
+
+    @GetMapping("/getShopSpec")
+    public RPCBaseResponse<Page<SpecVo>> getShopSpec(@RequestParam("countryId")Long countryId, @RequestParam("currentPage")Integer currentPage,@RequestParam("pgeSize")Integer pageSize){
+        return success(shopSpecService.getShopSpec(countryId,currentPage,pageSize));
+    }
+
+    /**
+     *  修改/新增规格
+     * @return {@link RPCBaseResponse }<{@link Page }<{@link SpecVo }>>
+     */
+
+    @PostMapping("/insertOrUpdate")
+    public RPCBaseResponse<Page<SpecVo>> insertOrUpdate(@RequestBody SpecDto specDto){
+        shopSpecService.insertOrUpdate(specDto);
+        return success();
+    }
 }

+ 122 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopUnitController.java

@@ -1,17 +1,137 @@
 package edu.travel.commodity.web;
+import edu.travel.adapter.service.country.CountryAdapter;
+import edu.travel.commodity.constant.BaseConstant;
 import edu.travel.commodity.entity.ShopUnit;
+import edu.travel.remote.commodity.ShopUnitRemoteController;
+import edu.travel.remote.dto.ShopUnitDto;
+import edu.travel.remote.vo.ShopUnitVo;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.vo.BaseCountryServeVo;
+import edu.travel.vo.BaseCountryVo;
+import edu.travel.web.BaseController;
+import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
 /**
 * 计件单位表(shop_unit)表控制层
 *
 * @author xxxxx
 */
 @RestController
-@RequestMapping("/shop_unit")
-public class ShopUnitController {
+@RequestMapping("/shopUnit")
+public class ShopUnitController extends BaseController<ShopUnit> implements ShopUnitRemoteController {
+    @Autowired
+    private CountryAdapter countryAdapter;
+    /**
+     * 通过id查找货币单位(连表)
+     * @param id
+     * @return
+     */
+    @Override
+    @GetMapping("/getFormId")
+    public RPCBaseResponse<ShopUnitVo> getFormId(String id) {
+        // Step 1: 获取 ShopUnit 数据
+        RPCBaseResponse<ShopUnit> shopUnitRPCBaseResponse = super.getId(id);
+
+        // Step 2: 检查响应是否成功
+        if (!Objects.equals(shopUnitRPCBaseResponse.getCode(), BaseConstant.SUCCESS_CODE)) {
+            return RPCBaseResponse.error(shopUnitRPCBaseResponse.getMsg());
+        }
+
+        // 获取 ShopUnit 对象
+        ShopUnit shopUnit = shopUnitRPCBaseResponse.getData();
+
+        // Step 3: 提取 countryId
+        Long countryId = shopUnit.getCountryId();
+
+        // Step 4: 调用 countryAdapter 获取国家信息
+        RPCBaseResponse<BaseCountryServeVo> countryInfoResponse = countryAdapter.getFormId(countryId.toString());
+
+        // Step 5: 检查国家信息的响应
+        if (!Objects.equals(countryInfoResponse.getCode(), BaseConstant.SUCCESS_CODE)) {
+            return RPCBaseResponse.error(countryInfoResponse.getMsg());
+        }
+
+        // 获取国家信息
+        BaseCountryServeVo countryInfo = countryInfoResponse.getData();
+
+        // Step 6: 创建 ShopUnitVo 对象
+        ShopUnitVo shopUnitVo = new ShopUnitVo();
+        BeanUtils.copyProperties(shopUnit, shopUnitVo);
+
+        // Step 7: 将国家信息放入 map 中
+        Map<String, Object> map = new HashMap<>();
+        map.put("countryInfo", countryInfo);
+        shopUnitVo.setMap(map);
+
+        // Step 8: 返回成功的响应
+        return RPCBaseResponse.success(shopUnitVo);
+    }
+
+
+    /**
+     * 更新货币单位
+     * @param entity
+     * @return
+     */
+    @Override
+    @PostMapping("/updateTargetFormId")
+    public RPCBaseResponse<ShopUnitVo> updateTargetFormId(ShopUnitDto entity) {
+        ShopUnit shopUnit = new ShopUnit();
+        BeanUtils.copyProperties(entity, shopUnit);
+        RPCBaseResponse<ShopUnit> shopUnitRPCBaseResponse = super.updateTargetById(shopUnit);
+        RPCBaseResponse<ShopUnitVo> shopUnitVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopUnitRPCBaseResponse, shopUnitVoRPCBaseResponse);
+        return shopUnitVoRPCBaseResponse;
+    }
+
+    /**
+     * 新增货币单位
+     * @param entity
+     * @return
+     */
+    @Override
+    @PostMapping("/saveFormTarget")
+    public RPCBaseResponse<ShopUnitVo> saveFormTarget(ShopUnitDto entity) {
+        ShopUnit shopUnit = new ShopUnit();
+        BeanUtils.copyProperties(entity, shopUnit);
+        RPCBaseResponse<ShopUnit> shopUnitRPCBaseResponse = super.saveTarget(shopUnit);
+        RPCBaseResponse<ShopUnitVo> shopUnitVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopUnitRPCBaseResponse, shopUnitVoRPCBaseResponse);
+        return shopUnitVoRPCBaseResponse;
+    }
 
+    /**
+     * 删除货币单位
+     * @param ids
+     * @return
+     */
+    @Override
+    @PostMapping("/deleteFormTarget")
+    public RPCBaseResponse<ShopUnitVo> deleteTargetFormId(List<String> ids) {
+        RPCBaseResponse<ShopUnit> shopUnitRPCBaseResponse = super.deleteTargetById(ids);
+        RPCBaseResponse<ShopUnitVo> shopUnitVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopUnitRPCBaseResponse, shopUnitVoRPCBaseResponse);
+        return shopUnitVoRPCBaseResponse;
+    }
 
+    /**
+     * 获取所有货币单位
+     * @return
+     */
+    @Override
+    @GetMapping("/getAllForm")
+    public RPCBaseResponse<List<ShopUnitVo>> getAllForm() {
+        RPCBaseResponse<List<ShopUnit>> shopUnitRPCBaseResponse = super.listAll();
+        RPCBaseResponse<List<ShopUnitVo>> shopUnitVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopUnitRPCBaseResponse, shopUnitVoRPCBaseResponse);
+        return shopUnitVoRPCBaseResponse;
+    }
 }

+ 2 - 1
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopParametersMapper.xml

@@ -13,10 +13,11 @@
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
     <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
     <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
+    <result column="country_id" jdbcType="BIGINT" property="countryId" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, parameters_name, is_necessary, project, create_time, create_user_id,
-    update_time, update_user_id, delete_flag
+    update_time, update_user_id, delete_flag,country_id
   </sql>
 </mapper>

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

@@ -1,5 +1,6 @@
 package edu.travel.upload.web;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSON;
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -9,6 +10,7 @@ import edu.travel.remote.upload.UploadRemoteController;
 import edu.travel.remote.upload.dto.EduFileBlobDTO;
 import edu.travel.remote.upload.dto.EduFileDTO;
 import edu.travel.remote.upload.vo.EduFileVo;
+import edu.travel.remote.upload.vo.FileVo;
 import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.upload.config.MD5Calculator;
 import edu.travel.upload.entity.EduFile;
@@ -157,6 +159,30 @@ public class UploadController extends BaseController<EduFile> implements UploadR
     }
 
     /**
+     * 上传小文件
+     * @param
+     * @return
+     */
+    @Override
+    @PostMapping(value = "/uploadFilePath",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    @PreAuthorize("permitAll()")
+    public RPCBaseResponse<FileVo> uploadFilePath(@RequestParam("eduFileDTO") String dto, @RequestPart("file") MultipartFile file) throws IOException {
+        EduFileDTO eduFileDTO = JSON.parseObject(dto, EduFileDTO.class);
+        PutObjectResult putObjectResult = obsClient.putObject(obsProperties.getBucketName(), "/service/chunk/" + eduFileDTO.getUploadId() + "/" + file.getOriginalFilename(), file.getInputStream());
+        String objectUrl = putObjectResult.getObjectUrl();
+        EduFile files = new EduFile();
+        BeanUtils.copyProperties(eduFileDTO, files);
+        files.setFilePath(objectUrl);
+
+        boolean save = eduFileService.save(files);
+        if (save){
+            return RPCBaseResponse.success(BeanUtil.toBean(files,FileVo.class));
+        }
+        return RPCBaseResponse.error();
+    }
+
+
+    /**
      * 通过id上传文件
      * @param id
      * @return

+ 49 - 39
edu-travel-service/edu-travel-service-ws/pom.xml

@@ -34,18 +34,18 @@
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-zipkin</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-security</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-oauth2</artifactId>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-zipkin</artifactId>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-security</artifactId>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-oauth2</artifactId>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
@@ -75,33 +75,37 @@
             <artifactId>fastjson</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.alibaba.csp</groupId>
-            <artifactId>sentinel-transport-simple-http</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba.csp</groupId>
-            <artifactId>sentinel-annotation-aspectj</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba.csp</groupId>
-            <artifactId>sentinel-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba.cloud</groupId>
-            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba.cloud</groupId>
-            <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba.csp</groupId>
-            <artifactId>sentinel-datasource-nacos</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba.csp</groupId>
-            <artifactId>sentinel-web-servlet</artifactId>
-        </dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba.csp</groupId>-->
+<!--            <artifactId>sentinel-transport-simple-http</artifactId>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba.csp</groupId>-->
+<!--            <artifactId>sentinel-annotation-aspectj</artifactId>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba.csp</groupId>-->
+<!--            <artifactId>sentinel-core</artifactId>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba.csp</groupId>-->
+<!--            <artifactId>sentinel-datasource-nacos</artifactId>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba.csp</groupId>-->
+<!--            <artifactId>sentinel-web-servlet</artifactId>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>edu.travel</groupId>
             <artifactId>edu-travel-common-util</artifactId>
@@ -121,6 +125,12 @@
             <groupId>edu.travel</groupId>
             <artifactId>edu-travel-common-datasource</artifactId>
             <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>io.seata</groupId>
+                    <artifactId>seata-spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>edu.travel</groupId>

+ 0 - 32
edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/MyAccessDeniedHandler.java

@@ -1,32 +0,0 @@
-package edu.travel.ws.config;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.security.access.AccessDeniedException;
-import org.springframework.security.web.access.AccessDeniedHandler;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-public class MyAccessDeniedHandler  implements AccessDeniedHandler {
-    @Override
-    public void handle(HttpServletRequest req, HttpServletResponse resp, AccessDeniedException e) throws IOException, ServletException {
-        resp.setContentType("application/json;charset=UTF-8");
-        Map map = new HashMap();
-        map.put("code", "450");
-        map.put("message", e.getMessage());
-        map.put("path", req.getServletPath());
-        map.put("timestamp", String.valueOf(System.currentTimeMillis()));
-        resp.setContentType("application/json");
-        resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
-        try {
-            ObjectMapper mapper = new ObjectMapper();
-            mapper.writeValue(resp.getOutputStream(), map);
-        } catch (Exception ex) {
-            throw new ServletException();
-        }
-    }
-}

+ 0 - 31
edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/MyAuthenticationEntryPoint.java

@@ -1,31 +0,0 @@
-package edu.travel.ws.config;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.AuthenticationEntryPoint;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-public class MyAuthenticationEntryPoint implements AuthenticationEntryPoint {
-    @Override
-    public void commence(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {
-        Map map = new HashMap();
-        map.put("code", "451");
-        map.put("message", "无权限访问");
-        map.put("path", httpServletRequest.getServletPath());
-        map.put("timestamp", String.valueOf(System.currentTimeMillis()));
-        httpServletResponse.setContentType("application/json");
-        httpServletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
-        try {
-            ObjectMapper mapper = new ObjectMapper();
-            mapper.writeValue(httpServletResponse.getOutputStream(), map);
-        } catch (Exception ex) {
-            throw new ServletException();
-        }
-    }
-}

+ 0 - 39
edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/ResourceServerConfig.java

@@ -1,39 +0,0 @@
-package edu.travel.ws.config;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.http.SessionCreationPolicy;
-import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
-import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
-import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
-import org.springframework.security.oauth2.provider.token.TokenStore;
-
-@Configuration
-@EnableResourceServer
-public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
-    private static  final String RESOURCE_ID = "admin";
-
-    @Autowired
-    private TokenStore tokenStore;
-
-    @Override
-    public void configure(ResourceServerSecurityConfigurer resources) {
-        resources.resourceId(RESOURCE_ID)//资源 id
-                .tokenStore(tokenStore)
-                .authenticationEntryPoint(new MyAuthenticationEntryPoint())
-                .accessDeniedHandler(new MyAccessDeniedHandler())
-//                .tokenServices(tokenService())//验证令牌的服务
-                .stateless(true);
-    }
-
-    @Override
-    public void configure(HttpSecurity http) throws Exception {
-
-        http
-                .authorizeRequests()
-                .antMatchers("/**").permitAll()
-                .and().csrf().disable()
-                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
-    }
-}

+ 0 - 48
edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/TokenConfig.java

@@ -1,48 +0,0 @@
-package edu.travel.ws.config;
-
-import edu.travel.RSAUtill;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.crypto.password.NoOpPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.security.oauth2.provider.token.TokenStore;
-import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
-import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
-
-import java.security.PrivateKey;
-
-@Configuration
-public class TokenConfig {
-    @Value("${OAUTH_KEY}")
-    private String key;
-    @Value("${PRIVATE_KEY}")
-    private String privateKey;
-    @Bean
-    public PasswordEncoder passwordEncoder(){
-        return NoOpPasswordEncoder.getInstance();
-    }
-    @Bean
-    public TokenStore tokenStore() {
-        //JWT令牌存储方案
-        return new JwtTokenStore(accessTokenConverter());
-    }
-
-    @Bean
-    public JwtAccessTokenConverter accessTokenConverter() {
-        try {
-            PrivateKey privateKeyFromString = RSAUtill.getPrivateKeyFromString(privateKey);
-            String decrypt = RSAUtill.decrypt(key, privateKeyFromString);
-            JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
-            //对称秘钥,资源服务器使用该秘钥来验证
-//        converter.setKeyPair(keyPair());
-            converter.setSigningKey(decrypt);
-            return converter;
-
-        }catch (Exception e){
-            e.printStackTrace();
-            return null;
-        }
-
-    }
-}

+ 0 - 21
edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/WebSecurityConfig.java

@@ -1,21 +0,0 @@
-package edu.travel.ws.config;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-
-@Configuration
-@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
-public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
-    //安全拦截机制(最重要)
-    @Override
-    protected void configure(HttpSecurity http) throws Exception {
-        http.csrf().disable()
-                .authorizeRequests()
-                .anyRequest().authenticated()
-        ;
-
-
-    }
-}

+ 0 - 23
edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/config/WebServerFactoryConfigs.java

@@ -1,23 +0,0 @@
-package edu.travel.ws.config;
-
-import org.apache.catalina.connector.Connector;
-import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
-import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
-import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class WebServerFactoryConfigs {
-    @Bean
-    public ConfigurableServletWebServerFactory webServerFactory() {
-        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
-        factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
-            @Override
-            public void customize(Connector connector) {
-                connector.setProperty("relaxedQueryChars", "|{}[]");
-            }
-        });
-        return factory;
-    }
-}

+ 0 - 61
edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/filter/TokenAuthenticationFilter.java

@@ -1,61 +0,0 @@
-package edu.travel.ws.filter;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import edu.travel.EncryptUtil;
-import edu.travel.entity.EduTenantPO;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.authority.AuthorityUtils;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
-import org.springframework.stereotype.Component;
-import org.springframework.web.filter.OncePerRequestFilter;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-@Component
-public class TokenAuthenticationFilter extends OncePerRequestFilter {
-    @Autowired
-    private RedisTemplate redisTemplate;
-    @Override
-    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
-        String token = httpServletRequest.getHeader("token");
-//token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYWRtaW4iXSwiZXhwIjoxNzQwMjAyNTcyLCJ1c2VyX25hbWUiOiIxNTk5ODk1NzA3NCIsImp0aSI6IjM0M2JjNGUzLTk5ZjMtNGE4Zi1iMmIxLTI1ZjRkMzBmNmJmYyIsImNsaWVudF9pZCI6ImFkbWluIiwic2NvcGUiOlsic2VydmVyIl19.MYoFq8gg832DQMX-wVMLN0JlIaWeuQZvl1z1NUNFspQ";
-        if (StringUtils.isNotBlank(token)){
-            String json = EncryptUtil.decodeUTF8StringBase64(token);
-            //将token转成json对象
-            JSONObject jsonObject = JSON.parseObject(json);
-            //用户身份信息
-            String username  = jsonObject.getString("principal");
-            Object object = redisTemplate.opsForValue().get(username + "_info");
-            if (object == null){
-                JSONObject resultObject = new JSONObject();
-                resultObject.put("code",401);
-                resultObject.put("msg","not found user");
-                resultObject.put("data",null);
-                httpServletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
-                httpServletResponse.setContentType("application/json;charset=utf-8");
-                httpServletResponse.getWriter().write(resultObject.toJSONString());
-                return;
-            }
-            EduTenantPO eduTenant = JSON.parseObject(object.toString(), EduTenantPO.class);
-            //用户权限
-            JSONArray authoritiesArray = jsonObject.getJSONArray("authorities");
-            String[] authorities = authoritiesArray.toArray(new String[authoritiesArray.size()]);
-            //将用户信息和权限填充 到用户身份token对象中
-            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(eduTenant, null, AuthorityUtils.createAuthorityList(authorities));
-            authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpServletRequest));
-            //将authenticationToken填充到安全上下文
-            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
-        }
-        filterChain.doFilter(httpServletRequest,httpServletResponse);
-    }
-}

+ 12 - 0
edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/handle/TravelMessageHandler.java

@@ -1,12 +1,24 @@
 package edu.travel.ws.handle;
 
 import org.springframework.context.ApplicationContext;
+import org.springframework.web.socket.WebSocketSession;
 import org.springframework.web.socket.handler.AbstractWebSocketHandler;
 
+
 public class TravelMessageHandler extends AbstractWebSocketHandler {
     private ApplicationContext applicationContext;
 
     public TravelMessageHandler(ApplicationContext applicationContext) {
         this.applicationContext = applicationContext;
     }
+
+    /**
+     * 连接时调用方法
+     * @param session
+     * @throws Exception
+     */
+    @Override
+    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
+        System.out.println("============================================");
+    }
 }

+ 23 - 23
edu-travel-service/edu-travel-service-ws/src/main/java/edu/travel/ws/interceptor/SystemMessageInterceptor.java

@@ -11,10 +11,10 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.server.ServerHttpRequest;
 import org.springframework.http.server.ServerHttpResponse;
 import org.springframework.http.server.ServletServerHttpRequest;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.authority.AuthorityUtils;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
+//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+//import org.springframework.security.core.authority.AuthorityUtils;
+//import org.springframework.security.core.context.SecurityContextHolder;
+//import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
 import org.springframework.web.socket.WebSocketHandler;
 import org.springframework.web.socket.server.HandshakeInterceptor;
 
@@ -27,29 +27,29 @@ public class SystemMessageInterceptor implements HandshakeInterceptor {
     }
     @Override
     public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
-        RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);
+        RedisTemplate redisTemplate = applicationContext.getBean("redisTemplate",RedisTemplate.class);
         if (request instanceof ServletServerHttpRequest){
-            ServletServerHttpRequest httpRequest = (ServletServerHttpRequest) request;
-            String token = httpRequest.getServletRequest().getParameter("token");
-            if (StringUtils.isBlank(token)){
-                return false;
-            }
-            String json = EncryptUtil.decodeUTF8StringBase64(token);
-            //将token转成json对象
-            JSONObject jsonObject = JSON.parseObject(json);
-            //用户身份信息
-            String username  = jsonObject.getString("principal");
-            Object object = redisTemplate.opsForValue().get(username + "_info");
-            EduTenantPO eduTenant = JSON.parseObject(object.toString(), EduTenantPO.class);
+//            ServletServerHttpRequest httpRequest = (ServletServerHttpRequest) request;
+//            String token = httpRequest.getServletRequest().getParameter("token");
+//            if (StringUtils.isBlank(token)){
+//                return false;
+//            }
+//            String json = EncryptUtil.decodeUTF8StringBase64(token);
+//            将token转成json对象
+//            JSONObject jsonObject = JSON.parseObject(json);
+//            用户身份信息
+//            String username  = jsonObject.getString("principal");
+//            Object object = redisTemplate.opsForValue().get(username + "_info");
+//            EduTenantPO eduTenant = JSON.parseObject(object.toString(), EduTenantPO.class);
             //用户权限
-            JSONArray authoritiesArray = jsonObject.getJSONArray("authorities");
-            String[] authorities = authoritiesArray.toArray(new String[authoritiesArray.size()]);
+//            JSONArray authoritiesArray = jsonObject.getJSONArray("authorities");
+//            String[] authorities = authoritiesArray.toArray(new String[authoritiesArray.size()]);
             //将用户信息和权限填充 到用户身份token对象中
-            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(eduTenant, null, AuthorityUtils.createAuthorityList(authorities));
-            authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpRequest.getServletRequest()));
+//            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(eduTenant, null, AuthorityUtils.createAuthorityList(authorities));
+//            authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpRequest.getServletRequest()));
             //将authenticationToken填充到安全上下文
-            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
-            attributes.put("user", eduTenant);
+//            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+            attributes.put("user", ((ServletServerHttpRequest) request).getServletRequest().getParameter("token"));
             return true;
         }
         return false;