浏览代码

Merge remote-tracking branch 'origin/master'

Valley 1 年之前
父节点
当前提交
02043ea026
共有 82 个文件被更改,包括 2183 次插入174 次删除
  1. 4 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/FavoriteDTO.java
  2. 10 4
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantDTO.java
  3. 18 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/OmsOrderDTO.java
  4. 2 1
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/OmsOrderItemDTO.java
  5. 48 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/PlatformProfitRatioDTO.java
  6. 57 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/ProfitRatioConfigDTO.java
  7. 32 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/RegionDTO.java
  8. 25 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/TeamDTO.java
  9. 43 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/TeamDetailsDTO.java
  10. 29 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/AddProfitRatioConfigParams.java
  11. 32 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EditPlatformProfitRatioParam.java
  12. 32 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EditProfitRatioConfigParams.java
  13. 2 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/FavoritePagingParam.java
  14. 4 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/GoodsQueryParam.java
  15. 28 8
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantModifyParam.java
  16. 19 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantRankParam.java
  17. 5 13
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/OmsCartItemModifyParam.java
  18. 13 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryPlatformProfitRatioParam.java
  19. 14 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryProfitRatioConfigParam.java
  20. 17 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/TeamInvitePageParam.java
  21. 30 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/UserInviteParams.java
  22. 10 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/CommonService.java
  23. 6 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/FavoriteService.java
  24. 7 3
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/IOmsOrderService.java
  25. 11 6
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/MerchantService.java
  26. 8 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/OmsCartItemService.java
  27. 13 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/PlatformProfitRatioService.java
  28. 20 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/ProfitRatioConfigService.java
  29. 12 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/UserInviteService.java
  30. 88 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/util/DateTimeUtils.java
  31. 6 5
      vehicle-server/pom.xml
  32. 1 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/FavoriteMapper.java
  33. 16 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/MerchantMapper.java
  34. 5 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderMapper.java
  35. 22 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/PlatformProfitRatioMapper.java
  36. 16 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/ProfitRatioConfigMapper.java
  37. 15 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/RegionMapper.java
  38. 18 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/UserInviteMapper.java
  39. 9 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/UserProfitRatioMapper.java
  40. 18 7
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java
  41. 9 9
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrder.java
  42. 2 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrderItem.java
  43. 63 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/PlatformProfitRatio.java
  44. 47 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/ProfitRatioConfig.java
  45. 28 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Region.java
  46. 51 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/UserInvite.java
  47. 63 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/UserProfitRatio.java
  48. 7 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/IOmsOrderItemService.java
  49. 8 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/IOmsOrderService.java
  50. 13 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantService.java
  51. 6 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/PayService.java
  52. 6 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/PlatformProfitRatioService.java
  53. 10 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/ProfitRatioConfigService.java
  54. 27 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CommonServiceImpl.java
  55. 0 4
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicCommentServiceImpl.java
  56. 4 13
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicContentServiceImpl.java
  57. 25 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/FavoriteServiceImpl.java
  58. 2 4
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/HotMerchantServiceImpl.java
  59. 1 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/IncomeRecordServiceImpl.java
  60. 0 7
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantAuthServiceImpl.java
  61. 78 4
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java
  62. 39 26
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsCartItemServiceImpl.java
  63. 6 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderItemServiceImpl.java
  64. 75 44
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java
  65. 251 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PayServiceImpl.java
  66. 104 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PlatformProfitRatioServiceImpl.java
  67. 98 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ProfitRatioConfigServiceImpl.java
  68. 22 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ReservationServiceImpl.java
  69. 1 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserCouponServiceImpl.java
  70. 145 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserInviteServiceImpl.java
  71. 26 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/task/PlatformProfitRatioTask.java
  72. 5 1
      vehicle-server/src/main/resources/application-dev.yml
  73. 1 1
      vehicle-server/src/main/resources/mapper/FavoriteMapper.xml
  74. 2 2
      vehicle-server/src/main/resources/mapper/GoodsMapper.xml
  75. 33 0
      vehicle-server/src/main/resources/mapper/MerchantMapper.xml
  76. 12 1
      vehicle-server/src/main/resources/mapper/OmsOrderMapper.xml
  77. 33 0
      vehicle-server/src/main/resources/mapper/PlatformProfitRatioMapper.xml
  78. 24 0
      vehicle-server/src/main/resources/mapper/ProfitRatioConfigMapper.xml
  79. 19 0
      vehicle-server/src/main/resources/mapper/RegionMapper.xml
  80. 47 0
      vehicle-server/src/main/resources/mapper/UserInviteMapper.xml
  81. 二进制
      vehicle-server/src/main/resources/payUtils/10012951683.pfx
  82. 25 0
      vehicle-server/src/main/resources/payUtils/CFCA_sandbox.cer

+ 4 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/FavoriteDTO.java

@@ -49,4 +49,8 @@ public class FavoriteDTO implements Serializable {
      * 商家信息
      */
     private MerchantDTO merchant;
+    /**
+     * 商品信息
+     */
+    private GoodsDTO goods;
 }

+ 10 - 4
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantDTO.java

@@ -1,9 +1,5 @@
 package com.chelvc.cloud.vehicle.api.dto;
 
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
 import com.chelvc.cloud.vehicle.api.constant.MerchantStatus;
 import com.chelvc.framework.common.model.File;
 import lombok.AllArgsConstructor;
@@ -11,6 +7,10 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.SuperBuilder;
 
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 商家信息
  *
@@ -121,4 +121,10 @@ public class MerchantDTO implements Serializable {
      * 商家是否被收藏
      */
     private boolean favorites = false;
+
+    /**
+     * 所属地区
+     */
+    private Integer region;
+
 }

+ 18 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/OmsOrderDTO.java

@@ -10,6 +10,7 @@ import lombok.experimental.SuperBuilder;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 订单对象 oms_order
@@ -155,4 +156,21 @@ public class OmsOrderDTO implements Serializable
     /** 评价时间 */
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date commentTime;
+    /**
+     * 商家ID
+     */
+    private Long merchantId;
+    /**
+     * 商品信息
+     */
+    private List<OmsOrderItemDTO> goodsInfo;
+    /**
+     * 商家信息
+     */
+    private MerchantDTO merchantInfo;
+
+    /**
+     * 下单时间
+     */
+    private Date createTime;
 }

+ 2 - 1
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/OmsOrderItemDTO.java

@@ -6,6 +6,7 @@ import lombok.NoArgsConstructor;
 import lombok.ToString;
 import lombok.experimental.SuperBuilder;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
@@ -19,7 +20,7 @@ import java.math.BigDecimal;
 @NoArgsConstructor
 @AllArgsConstructor
 @ToString(callSuper = true)
-public class OmsOrderItemDTO
+public class OmsOrderItemDTO implements Serializable
 {
     private static final long serialVersionUID = 1L;
 

+ 48 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/PlatformProfitRatioDTO.java

@@ -0,0 +1,48 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class PlatformProfitRatioDTO implements Serializable {
+
+    private static final long serialVersionUID = 4624792200393967056L;
+    /**
+     * 主键标识
+     */
+    private Long id;
+    /**
+     * 商家id
+     */
+    private Long userId;
+    /**
+     * 商家名称
+     */
+    private String name;
+    /**
+     * 商家上个月营业额
+     */
+    private BigDecimal turnover;
+    /**
+     * 平台商家分佣比例
+     */
+    private int ratio;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新用户
+     */
+    private Long updater;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

+ 57 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/ProfitRatioConfigDTO.java

@@ -0,0 +1,57 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ProfitRatioConfigDTO implements Serializable {
+
+    private static final long serialVersionUID = -9007530650121576786L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 抽佣比例0-100
+     */
+    private int ratio;
+
+    /**
+     * 类型:1-平台;2-邀请用户;3-邀请商家
+     */
+    private Integer type;
+
+    /**
+     * 抽成要求数
+     */
+    private int num;
+
+    /**
+     * 状态:0-正常;1-停用
+     */
+    private Integer status;
+
+    /**
+     * 创建用户
+     */
+    private Long creator;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新用户
+     */
+    private Long updater;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+}

+ 32 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/RegionDTO.java

@@ -0,0 +1,32 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class RegionDTO implements Serializable {
+
+    private static final long serialVersionUID = 5068010923329475966L;
+
+    /**
+     * 区域主键
+     */
+    private int id;
+    /**
+     * 区域名称
+     */
+    private String name;
+    /**
+     * 区域上级标识
+     */
+    private int pid;
+    /**
+     * 地名简称
+     */
+    private String sname;
+    /**
+     * 区域等级
+     */
+    private int level;
+}

+ 25 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/TeamDTO.java

@@ -0,0 +1,25 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TeamDTO implements Serializable {
+
+    private static final long serialVersionUID = 830186969637948801L;
+
+    private Long total;
+
+    private BigDecimal totalAmount;
+
+    private List<TeamDetailsDTO> records;
+}

+ 43 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/TeamDetailsDTO.java

@@ -0,0 +1,43 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TeamDetailsDTO implements Serializable {
+
+    private static final long serialVersionUID = -7589217012828810404L;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+
+    /**
+     * 邀请用户
+     */
+    private Long inviteUserId;
+
+    /**
+     * 用户名称
+     */
+    private String name;
+
+    /**
+     * 总金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 来源类型:1-用户分佣;2-商户分佣
+     */
+    private Integer sourceType;
+}

+ 29 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/AddProfitRatioConfigParams.java

@@ -0,0 +1,29 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class AddProfitRatioConfigParams implements Serializable {
+
+    private static final long serialVersionUID = -3003327769503676313L;
+
+    @Min(value = 0, message = "比例不能小于0")
+    @Max(value = 100, message = "比例不能大于100")
+    private int ratio;
+
+    @NotNull(message = "类型不能为空")
+    private Integer type;
+
+    @Min(value = 0, message = "数量不能小于0")
+    private int num;
+
+    /**
+     * 前端不传
+     */
+    private Long userId;
+}

+ 32 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EditPlatformProfitRatioParam.java

@@ -0,0 +1,32 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class EditPlatformProfitRatioParam implements Serializable {
+
+    private static final long serialVersionUID = 436283372436763938L;
+
+    /**
+     * 商家标识
+     */
+    @NotNull(message = "商家不能为空")
+    private Long userId;
+
+    /**
+     * 分佣比例
+     */
+    @Min(value = 0, message = "分佣比例不能小于0")
+    @Max(value = 100, message = "分佣比例不能大于100")
+    private int ratio;
+
+    /**
+     * 操作用户标识
+     */
+    private Long operateUserId;
+}

+ 32 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EditProfitRatioConfigParams.java

@@ -0,0 +1,32 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class EditProfitRatioConfigParams implements Serializable {
+
+    private static final long serialVersionUID = 1560070976943307796L;
+
+    @NotNull(message = "主键不能为空")
+    private Long id;
+
+    @Min(value = 0, message = "比例不能小于0")
+    @Max(value = 100, message = "比例不能大于100")
+    private int ratio;
+
+    @Min(value = 0, message = "数量不能小于0")
+    private int num;
+
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+    /**
+     * 前端不传
+     */
+    private Long userId;
+}

+ 2 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/FavoritePagingParam.java

@@ -35,4 +35,6 @@ public class FavoritePagingParam extends LocationQueryParam {
      */
     @NotNull(message = "收藏类型不能为空")
     private FavoriteType type;
+
+
 }

+ 4 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/GoodsQueryParam.java

@@ -24,6 +24,10 @@ public class GoodsQueryParam implements Serializable {
      * 商品分类类型
      */
     private CategoryType type;
+    /**
+     * 分类ID
+     */
+    private Long categoryId;
 
     /**
      * 偏移商品ID

+ 28 - 8
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantModifyParam.java

@@ -1,19 +1,15 @@
 package com.chelvc.cloud.vehicle.api.param;
 
-import java.io.Serializable;
-import java.util.List;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
 import com.chelvc.framework.common.model.File;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.SuperBuilder;
 
+import javax.validation.constraints.*;
+import java.io.Serializable;
+import java.util.List;
+
 /**
  * 商家数据模型
  *
@@ -79,6 +75,30 @@ public class MerchantModifyParam implements Serializable {
     @Max(value = 999999, message = "所属地区不能大于999999")
     private Integer region;
 
+    /**
+     * 省
+     */
+    @NotNull(message = "所属省份不能为空")
+    @Min(value = 100000, message = "所属地区不能小于100000")
+    @Max(value = 999999, message = "所属地区不能大于999999")
+    private Integer province;
+
+    /**
+     * 市
+     */
+    @NotNull(message = "所属城市不能为空")
+    @Min(value = 100000, message = "所属地区不能小于100000")
+    @Max(value = 999999, message = "所属地区不能大于999999")
+    private Integer city;
+
+    /**
+     * 区
+     */
+    @NotNull(message = "所属地区不能为空")
+    @Min(value = 100000, message = "所属地区不能小于100000")
+    @Max(value = 999999, message = "所属地区不能大于999999")
+    private Integer district;
+
     /**
      * 经度
      */

+ 19 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantRankParam.java

@@ -0,0 +1,19 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 商家排名查询参数
+ */
+@Data
+public class MerchantRankParam implements Serializable {
+
+    private static final long serialVersionUID = -8647347791206819264L;
+
+    /**
+     * 区域id,不传默认查询当前用户当前区域
+     */
+    private Integer regionId;
+}

+ 5 - 13
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/OmsCartItemModifyParam.java

@@ -1,14 +1,14 @@
 package com.chelvc.cloud.vehicle.api.param;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.ToString;
 import lombok.experimental.SuperBuilder;
 
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * 购物车对象 oms_cart_item
@@ -33,14 +33,12 @@ public class OmsCartItemModifyParam implements Serializable
     /**
      * 商品id
      */
+    @NotNull(message = "商品ID不能为空")
     private Long goodsId;
 
     /** $column.columnComment */
     private Long goodsSkuId;
 
-    /** $column.columnComment */
-    private Long userId;
-
     /** 购买数量 */
     private Integer quantity;
 
@@ -51,6 +49,7 @@ public class OmsCartItemModifyParam implements Serializable
     private String goodsPic;
 
     /** 商品名称 */
+    @NotEmpty(message = "商品名称不能为空")
     private String goodsName;
 
     /** 商品副标题(卖点) */
@@ -62,14 +61,6 @@ public class OmsCartItemModifyParam implements Serializable
     /** 会员昵称 */
     private String memberNickname;
 
-    /** 创建时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date createDate;
-
-    /** 修改时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date modifyDate;
-
     /** 是否删除 */
     private Integer deleteStatus;
 
@@ -87,6 +78,7 @@ public class OmsCartItemModifyParam implements Serializable
     /**
      * 商家id
      */
+    @NotNull(message = "商家ID不能为空")
     private Long merchantId;
     /**
      * 商品原价

+ 13 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryPlatformProfitRatioParam.java

@@ -0,0 +1,13 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class QueryPlatformProfitRatioParam implements Serializable {
+
+    private static final long serialVersionUID = -1491557397318158754L;
+
+    private Long userId;
+}

+ 14 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryProfitRatioConfigParam.java

@@ -0,0 +1,14 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class QueryProfitRatioConfigParam implements Serializable {
+
+    private static final long serialVersionUID = -4915533571039390572L;
+
+    private Integer type;
+    private Integer status;
+}

+ 17 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/TeamInvitePageParam.java

@@ -0,0 +1,17 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import com.chelvc.framework.common.model.Paging;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class TeamInvitePageParam implements Serializable {
+
+    private static final long serialVersionUID = 1789614357588228530L;
+
+    //类型:1-用户;2-商家;不传值-查所有
+    private Integer type;
+
+    private Paging paging;
+}

+ 30 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/UserInviteParams.java

@@ -0,0 +1,30 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class UserInviteParams implements Serializable {
+
+    private static final long serialVersionUID = 3682560818752891605L;
+
+    /**
+     * 邀请用户
+     */
+    @NotNull(message = "用户不能为空")
+    private Long userId;
+
+    /**
+     * 被邀请用户
+     */
+    @NotNull(message = "被邀请用户不能为空")
+    private Long targetId;
+
+    /**
+     * 类型:1-用户;2-商家
+     */
+    @NotNull(message = "类型不能为空")
+    private Integer type;
+}

+ 10 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/CommonService.java

@@ -0,0 +1,10 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+import com.chelvc.cloud.vehicle.api.dto.RegionDTO;
+
+import java.util.List;
+
+public interface CommonService {
+
+    List<RegionDTO> getRegionByPid(Integer pid);
+}

+ 6 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/FavoriteService.java

@@ -45,4 +45,10 @@ public interface FavoriteService {
      * @return 用户收藏店铺列表
      */
     List<FavoriteDTO> listFavoriteMerchants(FavoriteQueryParam param);
+
+    /**
+     * 查询用户收藏商品列表
+     * @return 用户收藏商品列表
+     */
+    List<FavoriteDTO> listFavoriteGoods();
 }

+ 7 - 3
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/IOmsOrderService.java

@@ -1,15 +1,12 @@
 package com.chelvc.cloud.vehicle.api.service;
 
 import com.chelvc.cloud.vehicle.api.dto.ConfirmOrderResultDTO;
-import com.chelvc.cloud.vehicle.api.dto.GoodsDTO;
 import com.chelvc.cloud.vehicle.api.dto.OmsOrderDTO;
 import com.chelvc.cloud.vehicle.api.dto.OmsOrderDetailDTO;
-import com.chelvc.cloud.vehicle.api.param.GoodsPagingParam;
 import com.chelvc.cloud.vehicle.api.param.OmsOrderModifyParam;
 import com.chelvc.cloud.vehicle.api.param.OrderPagingParam;
 import com.chelvc.framework.common.model.Pagination;
 
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -96,4 +93,11 @@ public interface IOmsOrderService
      * @return 订单分页信息
      */
     Pagination<OmsOrderDTO> getMerchantOrderPaging(OrderPagingParam param);
+
+    /**
+     * 商家订单核验
+     * @param orderId
+     * @param merchantId
+     */
+    void orderVerification(Long orderId, Long merchantId);
 }

+ 11 - 6
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/MerchantService.java

@@ -1,15 +1,12 @@
 package com.chelvc.cloud.vehicle.api.service;
 
-import java.util.List;
-
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDetailDTO;
-import com.chelvc.cloud.vehicle.api.param.LocationQueryParam;
-import com.chelvc.cloud.vehicle.api.param.MerchantModifyParam;
-import com.chelvc.cloud.vehicle.api.param.MerchantPagingParam;
-import com.chelvc.cloud.vehicle.api.param.MerchantQueryParam;
+import com.chelvc.cloud.vehicle.api.param.*;
 import com.chelvc.framework.common.model.Pagination;
 
+import java.util.List;
+
 /**
  * 商家业务接口
  *
@@ -104,4 +101,12 @@ public interface MerchantService {
      * @return
      */
     List<MerchantDTO> getMerchantIdsByUserId();
+
+    /**
+     * 查询商家排名
+     * @param param
+     * @param userId
+     * @return
+     */
+    List<MerchantDTO> listRankMerchants(MerchantRankParam param, Long userId);
 }

+ 8 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/OmsCartItemService.java

@@ -56,4 +56,12 @@ public interface OmsCartItemService
     MerchantCartItemDTO listCartItem(Long merchantId);
 
 
+    /**
+     * 根据会员编号及商家获取购物车列表
+     */
+//    List<MerchantCartItemDTO> listCartItemByUserId();
+
+
+
+
 }

+ 13 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/PlatformProfitRatioService.java

@@ -0,0 +1,13 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+import com.chelvc.cloud.vehicle.api.dto.PlatformProfitRatioDTO;
+import com.chelvc.cloud.vehicle.api.param.EditPlatformProfitRatioParam;
+import com.chelvc.cloud.vehicle.api.param.QueryPlatformProfitRatioParam;
+import com.chelvc.framework.common.model.Pagination;
+
+public interface PlatformProfitRatioService {
+
+    void edit(EditPlatformProfitRatioParam param);
+
+    Pagination<PlatformProfitRatioDTO> queryPageList(QueryPlatformProfitRatioParam param, Long pageNum, Long pageSize);
+}

+ 20 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/ProfitRatioConfigService.java

@@ -0,0 +1,20 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+import com.chelvc.cloud.vehicle.api.dto.ProfitRatioConfigDTO;
+import com.chelvc.cloud.vehicle.api.param.AddProfitRatioConfigParams;
+import com.chelvc.cloud.vehicle.api.param.EditProfitRatioConfigParams;
+import com.chelvc.cloud.vehicle.api.param.QueryProfitRatioConfigParam;
+import com.chelvc.framework.common.model.Pagination;
+
+public interface ProfitRatioConfigService {
+
+    void add(AddProfitRatioConfigParams params);
+
+    void edit(EditProfitRatioConfigParams params);
+
+    void delete(Long id, Long userId);
+
+    Pagination<ProfitRatioConfigDTO> queryPageList(QueryProfitRatioConfigParam param, Long pageNum,
+                                                   Long pageSize);
+
+}

+ 12 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/UserInviteService.java

@@ -0,0 +1,12 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+import com.chelvc.cloud.vehicle.api.dto.TeamDTO;
+import com.chelvc.cloud.vehicle.api.param.TeamInvitePageParam;
+import com.chelvc.cloud.vehicle.api.param.UserInviteParams;
+
+public interface UserInviteService {
+
+    void bindInvite(UserInviteParams params);
+
+    TeamDTO teamList(TeamInvitePageParam param, Long userId);
+}

+ 88 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/util/DateTimeUtils.java

@@ -0,0 +1,88 @@
+package com.chelvc.cloud.vehicle.api.util;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Calendar;
+import java.util.TimeZone;
+
+public class DateTimeUtils {
+
+    public static Long getLastMonthStartTime() {
+        Long currentTime = System.currentTimeMillis();
+        String timeZone = "GMT+8:00";
+        Calendar calendar = Calendar.getInstance();// 获取当前日期
+        calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
+        calendar.setTimeInMillis(currentTime);
+        calendar.add(Calendar.YEAR, 0);
+        calendar.add(Calendar.MONTH, -1);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        return calendar.getTimeInMillis();
+    }
+
+    public static Long getLastMonthEndTime() {
+        Long currentTime = System.currentTimeMillis();
+        String timeZone = "GMT+8:00";
+        Calendar calendar = Calendar.getInstance();// 获取当前日期
+        calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
+        calendar.setTimeInMillis(currentTime);
+        calendar.add(Calendar.YEAR, 0);
+        calendar.add(Calendar.MONTH, -1);
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));// 获取当前月最后一天
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        calendar.set(Calendar.MILLISECOND, 999);
+        return calendar.getTimeInMillis();
+    }
+
+    public static Long getMonthStartTime() {
+        Long currentTime = System.currentTimeMillis();
+        String timeZone = "GMT+8:00";
+        Calendar calendar = Calendar.getInstance();// 获取当前日期
+        calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
+        calendar.setTimeInMillis(currentTime);
+        calendar.add(Calendar.YEAR, 0);
+        calendar.add(Calendar.MONTH, 0);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        return calendar.getTimeInMillis();
+    }
+
+    /**
+     * 获取上个月开始时间
+     *
+     * @return
+     */
+    public static LocalDateTime getLastMonthStartLocalTime()  {
+        Long startTime = getLastMonthStartTime();
+        return LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault());
+    }
+
+    /**
+     * 获取上个月开始时间
+     *
+     * @return
+     */
+    public static LocalDateTime getMonthStartLocalTime()  {
+        Long startTime = getMonthStartTime();
+        return LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault());
+    }
+
+    /**
+     * 获取上个月结束时间
+     *
+     * @return
+     */
+    public static LocalDateTime getLastMonthEndLocalTime() {
+        Long endTime = getLastMonthEndTime();
+        return LocalDateTime.ofInstant(Instant.ofEpochMilli(endTime), ZoneId.systemDefault());
+    }
+}

+ 6 - 5
vehicle-server/pom.xml

@@ -20,14 +20,10 @@
         <vehicle-api.version>1.0.0-SNAPSHOT</vehicle-api.version>
         <framework-redis.version>1.0.0-RELEASE</framework-redis.version>
         <framework-database.version>1.0.0-RELEASE</framework-database.version>
+        <framework-location.version>1.0.0-RELEASE</framework-location.version>
     </properties>
 
     <dependencies>
-        <dependency>
-            <groupId>com.chelvc.cloud</groupId>
-            <artifactId>uc-api</artifactId>
-            <version>${uc-api.version}</version>
-        </dependency>
         <dependency>
             <groupId>com.chelvc.cloud</groupId>
             <artifactId>vehicle-api</artifactId>
@@ -38,6 +34,11 @@
             <artifactId>framework-redis</artifactId>
             <version>${framework-redis.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.chelvc.framework</groupId>
+            <artifactId>framework-location</artifactId>
+            <version>${framework-location.version}</version>
+        </dependency>
         <dependency>
             <groupId>com.chelvc.framework</groupId>
             <artifactId>framework-database</artifactId>

+ 1 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/FavoriteMapper.java

@@ -34,6 +34,7 @@ public interface FavoriteMapper extends BaseMapper<Favorite> {
      */
     List<Favorite> listFavoriteMerchants(@Param("userId") Long userId, @Param("param") FavoriteQueryParam param);
 
+
     /**
      * 取消收藏
      * @param id 商品或者商家ID

+ 16 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/MerchantMapper.java

@@ -1,7 +1,5 @@
 package com.chelvc.cloud.vehicle.server.dao;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.api.param.LocationQueryParam;
@@ -10,6 +8,9 @@ import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
+import java.util.List;
+
 /**
  * 商家数据操作接口
  *
@@ -59,4 +60,17 @@ public interface MerchantMapper extends BaseMapper<Merchant> {
      * @return
      */
     Integer merchantFavorite(@Param("merchantId") Long merchantId,@Param("userId") Long userId);
+
+    /**
+     * 商家排名
+     * @param monthStartLocalTime
+     * @param longitude
+     * @param latitude
+     * @param regionId
+     * @param level
+     * @return
+     */
+    List<MerchantDTO> listRankMerchants(@Param("merchantId")LocalDateTime monthStartLocalTime, @Param("regionId")Integer regionId,
+                                        @Param("longitude")Double longitude,
+                                        @Param("latitude")Double latitude, @Param("level")int level);
 }

+ 5 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderMapper.java

@@ -6,10 +6,11 @@ import com.chelvc.cloud.vehicle.api.dto.OmsOrderExampleDTO;
 import com.chelvc.cloud.vehicle.api.dto.OmsOrderItemDTO;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrderItem;
-import com.chelvc.cloud.vehicle.server.entity.Reservation;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 
@@ -116,4 +117,7 @@ public interface OmsOrderMapper extends BaseMapper<OmsOrder>
      * @return
      */
     Map<String,Object> getOrderQuantity();
+
+    BigDecimal queryAmountByLastMonth(@Param("merchantId")Long merchantId,
+                                      @Param("startLocalTime")LocalDateTime startLocalTime, @Param("endLocalTime")LocalDateTime endLocalTime);
 }

+ 22 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/PlatformProfitRatioMapper.java

@@ -0,0 +1,22 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chelvc.cloud.vehicle.api.dto.PlatformProfitRatioDTO;
+import com.chelvc.cloud.vehicle.server.entity.PlatformProfitRatio;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Mapper
+public interface PlatformProfitRatioMapper extends BaseMapper<PlatformProfitRatio> {
+
+    IPage<PlatformProfitRatioDTO> queryPageList(@Param("page") Page<PlatformProfitRatioDTO> page, @Param(Constants.WRAPPER) QueryWrapper<PlatformProfitRatioDTO> wrapper);
+
+    int updateRatio(@Param("id") Long id, @Param("ratio") int ratio, @Param("now") LocalDateTime now, @Param("amount") BigDecimal amount);
+}

+ 16 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/ProfitRatioConfigMapper.java

@@ -0,0 +1,16 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chelvc.cloud.vehicle.api.dto.ProfitRatioConfigDTO;
+import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface ProfitRatioConfigMapper extends BaseMapper<ProfitRatioConfig> {
+    IPage<ProfitRatioConfigDTO> queryPageList(@Param("page") Page<ProfitRatioConfigDTO> page, @Param(Constants.WRAPPER) QueryWrapper<ProfitRatioConfig> wrapper);
+}

+ 15 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/RegionMapper.java

@@ -0,0 +1,15 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.api.dto.RegionDTO;
+import com.chelvc.cloud.vehicle.server.entity.Region;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface RegionMapper extends BaseMapper<Region> {
+
+    List<RegionDTO> getRegionByPid(@Param("pid")Integer pid);
+}

+ 18 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/UserInviteMapper.java

@@ -0,0 +1,18 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.api.dto.TeamDTO;
+import com.chelvc.cloud.vehicle.api.dto.TeamDetailsDTO;
+import com.chelvc.cloud.vehicle.server.entity.UserInvite;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface UserInviteMapper extends BaseMapper<UserInvite> {
+    List<TeamDetailsDTO> teamList(@Param("type") Integer type, @Param("pageNum") int pageNum,
+                                              @Param("pageSize") int pageSize, @Param("userId") Long userId);
+
+    TeamDTO teamTotalStatistics(@Param("type") Integer type, @Param("userId") Long userId);
+}

+ 9 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/UserProfitRatioMapper.java

@@ -0,0 +1,9 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.server.entity.UserProfitRatio;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface UserProfitRatioMapper extends BaseMapper<UserProfitRatio> {
+}

+ 18 - 7
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java

@@ -1,7 +1,5 @@
 package com.chelvc.cloud.vehicle.server.entity;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -10,13 +8,11 @@ import com.chelvc.cloud.vehicle.api.constant.MerchantStatus;
 import com.chelvc.framework.common.model.File;
 import com.chelvc.framework.database.entity.ModifyEntity;
 import com.chelvc.framework.database.interceptor.FilesTypeHandler;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import lombok.ToString;
+import lombok.*;
 import lombok.experimental.SuperBuilder;
 
+import java.util.List;
+
 /**
  * 商家数据模型
  *
@@ -93,6 +89,21 @@ public class Merchant extends ModifyEntity<Long> {
      */
     private Integer region;
 
+    /**
+     * 所属省份
+     */
+    private Integer province;
+
+    /**
+     * 所属城市
+     */
+    private Integer city;
+
+    /**
+     * 所属地区
+     */
+    private Integer district;
+
     /**
      * 经度
      */

+ 9 - 9
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrder.java

@@ -1,19 +1,15 @@
 package com.chelvc.cloud.vehicle.server.entity;
 
-import java.math.BigDecimal;
-import java.util.Date;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.chelvc.framework.database.entity.ModifyEntity;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import lombok.ToString;
+import lombok.*;
 import lombok.experimental.SuperBuilder;
+
+import java.math.BigDecimal;
+import java.util.Date;
 /**
  * 订单对象 oms_order
  * 
@@ -74,7 +70,7 @@ public class OmsOrder extends ModifyEntity<Long>
     /** 订单来源:0->PC订单;1->app订单 */
     private Integer sourceType;
 
-    /** 订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单 */
+    /** 订单状态:0->待付款;1-已付款;2->待发货;3->已发货;4->已完成;5->已关闭;6->无效订单 */
     private Integer status;
 
     /** 订单类型:0->正常订单;1->秒杀订单 */
@@ -165,4 +161,8 @@ public class OmsOrder extends ModifyEntity<Long>
      * 商家ID
      */
     private Long merchantId;
+    /**
+     * 下单时间
+     */
+    private Date createTime;
 }

+ 2 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrderItem.java

@@ -1,5 +1,6 @@
 package com.chelvc.cloud.vehicle.server.entity;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -26,7 +27,7 @@ import lombok.experimental.SuperBuilder;
 @ToString(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 @TableName(autoResultMap = true)
-public class OmsOrderItem extends ModifyEntity<Long>
+public class OmsOrderItem extends ModifyEntity<Long> implements Serializable
 {
     private static final long serialVersionUID = 1L;
 

+ 63 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/PlatformProfitRatio.java

@@ -0,0 +1,63 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 平台分佣比例
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+public class PlatformProfitRatio implements Serializable {
+
+    private static final long serialVersionUID = 7829616515167832606L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+
+    /**
+     * 抽成比例
+     */
+    private int ratio;
+
+    /**
+     * 上月营业额
+     */
+    private BigDecimal turnover;
+
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新用户
+     */
+    private Long updater;
+}

+ 47 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/ProfitRatioConfig.java

@@ -0,0 +1,47 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.chelvc.framework.database.entity.BasicEntity;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 分佣比例配置
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProfitRatioConfig extends BasicEntity<Long> {
+
+    private static final long serialVersionUID = -4564762089152618910L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 抽佣比例0-100
+     */
+    private int ratio;
+
+    /**
+     * 类型:1-平台;2-邀请用户;3-邀请商家
+     */
+    private Integer type;
+
+    /**
+     * 抽成要求数
+     */
+    private int num;
+
+    /**
+     * 状态:0-正常;1-停用
+     */
+    private Integer status;
+}

+ 28 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Region.java

@@ -0,0 +1,28 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+public class Region implements Serializable {
+
+    private static final long serialVersionUID = 1639376448398184907L;
+
+    private Integer id;
+    private String NAME;
+    private int pid;
+    private String sname;
+    private int level;
+    private String citycode;
+    private String yzcode;
+    private String mername;
+}

+ 51 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/UserInvite.java

@@ -0,0 +1,51 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 邀请关系
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+public class UserInvite implements Serializable {
+
+    private static final long serialVersionUID = -6394974784960414140L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+
+    /**
+     * 被邀请用户标识
+     */
+    private Long targetId;
+
+    /**
+     * 类型:1-用户;2-商家
+     */
+    private Integer type;
+
+    /**
+     * 绑定时间
+     */
+    private LocalDateTime createTime;
+}

+ 63 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/UserProfitRatio.java

@@ -0,0 +1,63 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 用户分佣比例
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+public class UserProfitRatio implements Serializable {
+
+    private static final long serialVersionUID = -933687657794409050L;
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+
+    /**
+     * 抽成比例
+     */
+    private int ratio;
+
+    /**
+     * 类型:1-用户;2-商家
+     */
+    private Integer type;
+
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新用户
+     */
+    private Long updater;
+}
+

+ 7 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/IOmsOrderItemService.java

@@ -23,4 +23,11 @@ public interface IOmsOrderItemService extends IService<OmsOrderItem>
 
     List<OmsOrderItem> selectByExample(OmsOrderItem omsOrderItem);
 
+    /**
+     * 返回商品信息
+     * @param orderId
+     * @return
+     */
+    List<OmsOrderItemDTO> getOrderItemByOrderId(Long orderId);
+
 }

+ 8 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/IOmsOrderService.java

@@ -3,6 +3,8 @@ package com.chelvc.cloud.vehicle.server.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
 
+import java.math.BigDecimal;
+
 /**
  * 订单Service接口
  * 
@@ -11,4 +13,10 @@ import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
  */
 public interface IOmsOrderService  extends IService<OmsOrder>
 {
+    /**
+     * 查询商家上个月的营业额
+     * @param merchantId
+     * @return
+     */
+    BigDecimal queryAmountByLastMonth(Long merchantId);
 }

+ 13 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantService.java

@@ -1,6 +1,7 @@
 package com.chelvc.cloud.vehicle.server.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
 
 import java.util.List;
@@ -18,4 +19,16 @@ public interface MerchantService extends IService<Merchant> {
      * @return
      */
     List<Long> getMerchantIdsByUserId(Long userId);
+
+    /**
+     * 商家信息
+     * @param merchantId
+     * @return
+     */
+    MerchantDTO getMerchantById(Long merchantId);
+
+    /**
+     * 获取商家名称
+     */
+    String getMerchantName(Long merchantId);
 }

+ 6 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/PayService.java

@@ -0,0 +1,6 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+public interface PayService {
+
+    void orderPay(Long orderId);
+}

+ 6 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/PlatformProfitRatioService.java

@@ -0,0 +1,6 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+public interface PlatformProfitRatioService {
+
+    void  updateProfitRatio();
+}

+ 10 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/ProfitRatioConfigService.java

@@ -0,0 +1,10 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
+
+import java.util.List;
+
+public interface ProfitRatioConfigService {
+
+    List<ProfitRatioConfig> queryListByType(Integer type);
+}

+ 27 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CommonServiceImpl.java

@@ -0,0 +1,27 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.chelvc.cloud.vehicle.api.dto.RegionDTO;
+import com.chelvc.cloud.vehicle.api.service.CommonService;
+import com.chelvc.cloud.vehicle.server.dao.RegionMapper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.CommonService.class)
+@Slf4j
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class CommonServiceImpl implements CommonService {
+
+    private final RegionMapper regionMapper;
+
+    @Override
+    public List<RegionDTO> getRegionByPid(Integer pid) {
+        if(pid == null){
+            pid = 100000;
+        }
+        return regionMapper.getRegionByPid(pid);
+    }
+}

+ 0 - 4
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicCommentServiceImpl.java

@@ -29,11 +29,9 @@ import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -46,7 +44,6 @@ import java.util.stream.Collectors;
  * @DATE: 2023/8/8 18:53
  */
 @Slf4j
-@Service
 @RequiredArgsConstructor(onConstructor = @__({@Autowired, @Lazy}))
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.DynamicCommentService.class)
 public class DynamicCommentServiceImpl implements DynamicCommentService, com.chelvc.cloud.vehicle.api.service.DynamicCommentService {
@@ -117,7 +114,6 @@ public class DynamicCommentServiceImpl implements DynamicCommentService, com.che
       Map<Long, UserDTO> longUserBaseInfoMap = userService.queryUserByIds(
           userIds);
       log.info("远程查询用户信息成功:{}", longUserBaseInfoMap);
-      List<String> resourceKey = new ArrayList<>();
       records.forEach(e -> {
         e.setUserDTO(longUserBaseInfoMap == null ? new UserDTO() :
             longUserBaseInfoMap.get(e.getUserId()));

+ 4 - 13
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicContentServiceImpl.java

@@ -1,7 +1,6 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
 import cn.hutool.extra.spring.SpringUtil;
-import com.baomidou.lock.annotation.Lock4j;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -34,7 +33,6 @@ import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
@@ -50,7 +48,6 @@ import java.util.stream.Collectors;
  * @USER: igl
  * @DATE: 2023/8/8 14:25
  */
-@Service
 @Slf4j
 @RequiredArgsConstructor(onConstructor = @__({@Autowired, @Lazy}))
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.DynamicContentService.class)
@@ -312,12 +309,10 @@ public class DynamicContentServiceImpl implements DynamicContentService, com.che
   @Override
   @Transactional(rollbackFor = Exception.class)
   public void deleteByIds(Long id, Long userId) {
-    DynamicContent DynamicContent = baseMapper.selectById(id);
-    if (DynamicContent == null || userId == null ||
-        !DynamicContent.getUserId().equals(userId)) {
-      throw new ResourceUnavailableException("动态删除失败");
-    }
-    boolean b = baseMapper.deleteById(id) > 0;
+    LambdaQueryWrapper<DynamicContent> wrapper = Wrappers.lambdaQuery();
+    wrapper.eq(DynamicContent::getId, id);
+    wrapper.eq(DynamicContent::getUserId, userId);
+    boolean b = baseMapper.delete(wrapper) > 0;
     if (!b) {
       throw new ResourceUnavailableException("动态删除失败");
     }
@@ -328,7 +323,6 @@ public class DynamicContentServiceImpl implements DynamicContentService, com.che
   }
 
   @Override
-  @Lock4j(keys = {"#dynamicId"})
   public void addComment(Long dynamicId) {
     int i = baseMapper.addComment(dynamicId);
     if (i != 1) {
@@ -337,7 +331,6 @@ public class DynamicContentServiceImpl implements DynamicContentService, com.che
   }
 
   @Override
-  @Lock4j(keys = {"#dynamicId"})
   public void reduceComment(Long dynamicId, int num) {
     int i = baseMapper.reduceComment(dynamicId, num);
     if (i != 1) {
@@ -346,7 +339,6 @@ public class DynamicContentServiceImpl implements DynamicContentService, com.che
   }
 
   @Override
-  @Lock4j(keys = {"#contentId"})
   public void addNum(Integer dynamicStatus, Long contentId) {
     if (Objects.equals(DynamicStatusType.GOOD.getValue(), dynamicStatus)) {
       int i = baseMapper.addGoodNum(contentId);
@@ -362,7 +354,6 @@ public class DynamicContentServiceImpl implements DynamicContentService, com.che
   }
 
   @Override
-  @Lock4j(keys = {"#contentId"})
   public void reduceNum(Integer dynamicStatus, Long contentId) {
     if (Objects.equals(DynamicStatusType.GOOD.getValue(), dynamicStatus)) {
       int i = baseMapper.reduceGoodNum(contentId);

+ 25 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/FavoriteServiceImpl.java

@@ -7,17 +7,21 @@ import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.api.param.FavoritePagingParam;
 import com.chelvc.cloud.vehicle.api.param.FavoriteQueryParam;
 import com.chelvc.cloud.vehicle.server.copier.FavoriteCopier;
+import com.chelvc.cloud.vehicle.server.copier.GoodsCopier;
 import com.chelvc.cloud.vehicle.server.dao.FavoriteMapper;
 import com.chelvc.cloud.vehicle.server.entity.Favorite;
 import com.chelvc.cloud.vehicle.server.service.FavoriteService;
+import com.chelvc.cloud.vehicle.server.service.GoodsService;
 import com.chelvc.framework.base.context.SessionContextHolder;
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
 import com.chelvc.framework.base.util.ResourceUtils;
 import com.chelvc.framework.common.model.Pagination;
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 
-import java.sql.Wrapper;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
@@ -30,9 +34,13 @@ import java.util.stream.Collectors;
  * @author liude
  * @date 2023/7/20
  */
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.FavoriteService.class)
 public class FavoriteServiceImpl extends ServiceImpl<FavoriteMapper, Favorite> implements FavoriteService,
         com.chelvc.cloud.vehicle.api.service.FavoriteService {
+
+    private final GoodsService goodsService;
+
     @Override
     public Long addMerchantFavorite(@NonNull Long merchantId,String type) {
         Long userId = SessionContextHolder.getId();
@@ -66,6 +74,9 @@ public class FavoriteServiceImpl extends ServiceImpl<FavoriteMapper, Favorite> i
                 .eq(Favorite::getUserId, userId)
                 .eq(Favorite::getContentId, id).one();
         ResourceUtils.available(favorite != null, "收藏信息不存在");
+        if(favorite == null || favorite.getUserId() == null){
+            throw new ResourceUnavailableException("非法操作");
+        }
         ResourceUtils.available(Objects.equals(favorite.getUserId(), SessionContextHolder.getId()), "非法操作");
         this.baseMapper.deleteFavorite(id,userId);
     }
@@ -91,4 +102,17 @@ public class FavoriteServiceImpl extends ServiceImpl<FavoriteMapper, Favorite> i
                 }).collect(Collectors.toList());
 
     }
+
+    @Override
+    public List<FavoriteDTO> listFavoriteGoods() {
+        Long userId = SessionContextHolder.getId();
+        List<Favorite> favorites = this.lambdaQuery().eq(Favorite::getUserId,userId)
+                .eq(Favorite::getType,FavoriteType.GOODS).list();
+
+        List<FavoriteDTO> favoriteList = FavoriteCopier.INSTANCE.copying(favorites);
+        favoriteList.forEach(item ->{
+            item.setGoods(GoodsCopier.INSTANCE.copying(this.goodsService.getById(item.getContentId())));
+        });
+        return favoriteList;
+    }
 }

+ 2 - 4
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/HotMerchantServiceImpl.java

@@ -1,8 +1,7 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
-import com.chelvc.cloud.vehicle.api.param.HotMerchantModifyParam;
-import com.chelvc.cloud.vehicle.server.copier.HotMerchantCopier;
 import com.chelvc.cloud.vehicle.server.dao.HotMerchantMapper;
 import com.chelvc.cloud.vehicle.server.entity.HotMerchant;
 import com.chelvc.cloud.vehicle.server.service.HotMerchantService;
@@ -37,8 +36,7 @@ public class HotMerchantServiceImpl extends ServiceImpl<HotMerchantMapper, HotMe
 
     @Override
     public List<MerchantDTO> listHotMerchant(){
-        List<MerchantDTO> merchantList = this.baseMapper.listHotMerchant();
-        return merchantList;
+        return this.baseMapper.listHotMerchant();
     }
 
 

+ 1 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/IncomeRecordServiceImpl.java

@@ -29,7 +29,7 @@ public class IncomeRecordServiceImpl extends ServiceImpl<IncomeRecordMapper, Inc
         incomeRecord.setCreateTime(new Date());
         incomeRecord.setUpdateTime(new Date());
         incomeRecord.setInviterId(userId);
-        List<IncomeRecord> recordList = this.lambdaQuery().eq(IncomeRecord :: getInviteeId,userId).list();
+        //List<IncomeRecord> recordList = this.lambdaQuery().eq(IncomeRecord :: getInviteeId,userId).list();
 
         this.save(incomeRecord);
         return incomeRecord.getId();

+ 0 - 7
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantAuthServiceImpl.java

@@ -3,19 +3,12 @@ package com.chelvc.cloud.vehicle.server.service.impl;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.api.dto.MerchantAuthDTO;
-import com.chelvc.cloud.vehicle.api.dto.NoticeDTO;
 import com.chelvc.cloud.vehicle.api.param.MerchantAuthModifyParam;
 import com.chelvc.cloud.vehicle.api.param.MerchantAuthPagingParam;
-import com.chelvc.cloud.vehicle.api.param.NoticeModifyParam;
-import com.chelvc.cloud.vehicle.api.param.NoticePagingParam;
 import com.chelvc.cloud.vehicle.server.copier.MerchantAuthCopier;
-import com.chelvc.cloud.vehicle.server.copier.NoticeCopier;
 import com.chelvc.cloud.vehicle.server.dao.MerchantAuthMapper;
-import com.chelvc.cloud.vehicle.server.dao.NoticeMapper;
 import com.chelvc.cloud.vehicle.server.entity.MerchantAuth;
-import com.chelvc.cloud.vehicle.server.entity.Notice;
 import com.chelvc.cloud.vehicle.server.service.MerchantAuthService;
-import com.chelvc.cloud.vehicle.server.service.NoticeService;
 import com.chelvc.framework.base.context.SessionContextHolder;
 import com.chelvc.framework.base.util.ResourceUtils;
 import com.chelvc.framework.common.model.Pagination;

+ 78 - 4
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -1,19 +1,24 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
+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 com.chelvc.cloud.uc.api.dto.UserDTO;
 import com.chelvc.cloud.uc.api.service.EmployeeService;
-import com.chelvc.cloud.vehicle.api.constant.CategoryType;
+import com.chelvc.cloud.uc.api.service.UserService;
 import com.chelvc.cloud.vehicle.api.constant.MerchantStatus;
 import com.chelvc.cloud.vehicle.api.dto.CategoryDTO;
 import com.chelvc.cloud.vehicle.api.dto.GoodsDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDetailDTO;
 import com.chelvc.cloud.vehicle.api.param.*;
-import com.chelvc.cloud.vehicle.server.copier.GoodsCopier;
+import com.chelvc.cloud.vehicle.api.util.DateTimeUtils;
 import com.chelvc.cloud.vehicle.server.copier.MerchantCopier;
 import com.chelvc.cloud.vehicle.server.dao.MerchantMapper;
+import com.chelvc.cloud.vehicle.server.dao.RegionMapper;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
+import com.chelvc.cloud.vehicle.server.entity.Region;
 import com.chelvc.cloud.vehicle.server.service.CategoryService;
 import com.chelvc.cloud.vehicle.server.service.GoodsService;
 import com.chelvc.cloud.vehicle.server.service.MerchantService;
@@ -22,14 +27,19 @@ import com.chelvc.framework.base.util.ResourceUtils;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.util.StringUtils;
 import com.chelvc.framework.database.util.PagingUtils;
+import com.chelvc.framework.location.Address;
+import com.chelvc.framework.location.LocationHandler;
+import com.chelvc.framework.redis.RedisConstant;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
-import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -46,7 +56,17 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
 
     private final CategoryService categoryService;
 
-    private final EmployeeService employeeService;
+    private final RedisTemplate<String, Object> redisTemplate;
+
+    private final LocationHandler locationHandler;
+
+    private final RegionMapper regionMapper;
+
+    @DubboReference
+    EmployeeService employeeService;
+
+    @DubboReference
+    UserService userService;
 
     @Override
     public List<MerchantDTO> listNearbyMerchants(@NonNull LocationQueryParam param, int size) {
@@ -107,6 +127,9 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
         List<Long> idSet = goods.stream()
                 .map(GoodsDTO::getCategoryId) // 将每个Person对象映射到其id
                 .collect(Collectors.toList());
+        if (idSet.isEmpty()){
+            return MerchantDetailDTO.builder().merchant(merchant).goods(goods).build();
+        }
         List<CategoryDTO> categories = this.categoryService.listCategories(idSet);
         return MerchantDetailDTO.builder().merchant(merchant).goods(goods).categories(categories).build();
     }
@@ -196,4 +219,55 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
                 .list();
         return MerchantCopier.INSTANCE.copying(merchants);
     }
+
+    @Override
+    public List<MerchantDTO> listRankMerchants(MerchantRankParam param, Long userId) {
+        List<MerchantDTO> result = new ArrayList<>();
+        Integer regionId = param.getRegionId();
+        Double longitude = (double) 0;
+        Double latitude = (double) 0;
+        if(regionId == null){
+            if(Boolean.TRUE.equals(redisTemplate.hasKey(RedisConstant.USER_ADDRESS + userId))){
+                Address address = (Address)redisTemplate.opsForValue().get(RedisConstant.USER_ADDRESS + userId);
+                if(address != null){
+                    regionId = address.getDistrict().getId();
+                    longitude = address.getLongitude();
+                    latitude = address.getLatitude();
+                }
+            }
+        }
+        if(regionId == null){
+            UserDTO user = userService.getUser(userId);
+            if(user == null){
+                return result;
+            }
+            //LocationHandler locationHandler = locationHandlerConfig.getBean();
+            Address address = locationHandler.ip2address(user.getHost());
+            if(address == null){
+               return result;
+            }
+            regionId = address.getDistrict().getId();
+            longitude = address.getLongitude();
+            latitude = address.getLatitude();
+        }
+        Region region = regionMapper.selectById(regionId);
+        if(region == null){
+            return result;
+        }
+        result = baseMapper.listRankMerchants(DateTimeUtils.getMonthStartLocalTime(), regionId, longitude, latitude, region.getLevel());
+        return result;
+    }
+
+    @Override
+    public MerchantDTO getMerchantById(Long merchantId){
+        return MerchantCopier.INSTANCE.copying(this.getById(merchantId));
+    }
+
+    @Override
+    public String getMerchantName(Long merchantId) {
+        LambdaQueryWrapper<Merchant> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(Merchant::getUserId, merchantId);
+        Merchant merchant = baseMapper.selectOne(wrapper);
+        return merchant != null ? merchant.getName() : "";
+    }
 }

+ 39 - 26
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsCartItemServiceImpl.java

@@ -1,6 +1,6 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.chelvc.cloud.vehicle.api.dto.CartPromotionItemDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantCartItemDTO;
 import com.chelvc.cloud.vehicle.api.dto.OmsCartItemDTO;
 import com.chelvc.cloud.vehicle.api.param.OmsCartItemModifyParam;
@@ -16,10 +16,9 @@ import lombok.RequiredArgsConstructor;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
-import java.util.ArrayList;
+
 import java.util.Date;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * 购物车Service业务层处理
@@ -33,6 +32,7 @@ public class OmsCartItemServiceImpl extends ServiceImpl<OmsCartItemMapper, OmsCa
         com.chelvc.cloud.vehicle.api.service.OmsCartItemService {
 
     private final MerchantService merchantService;
+
     @Override
     public int add(OmsCartItemModifyParam cartItem) {
         int count;
@@ -43,10 +43,10 @@ public class OmsCartItemServiceImpl extends ServiceImpl<OmsCartItemMapper, OmsCa
         omsCartItem.setDeleteStatus(0);
         OmsCartItem existCartItem = getCartItem(omsCartItem);
         if (existCartItem == null) {
-            cartItem.setCreateDate(new Date());
+            omsCartItem.setCreateTime(new Date());
             count = this.baseMapper.insert(omsCartItem);
         } else {
-            cartItem.setModifyDate(new Date());
+            existCartItem.setUpdateTime(new Date());
             existCartItem.setQuantity(existCartItem.getQuantity() + cartItem.getQuantity());
             count = this.baseMapper.updateById(existCartItem);
         }
@@ -59,7 +59,9 @@ public class OmsCartItemServiceImpl extends ServiceImpl<OmsCartItemMapper, OmsCa
     private OmsCartItem getCartItem(OmsCartItem cartItem) {
         List<OmsCartItem> cartItemList = this.lambdaQuery()
                 .eq(OmsCartItem::getUserId, cartItem.getUserId())
-                .eq(OmsCartItem::getGoodsId, cartItem.getGoodsId()).list();
+                .eq(OmsCartItem::getGoodsId, cartItem.getGoodsId())
+                .eq(OmsCartItem::getDeleteStatus,0)
+                .eq(OmsCartItem::getMerchantId, cartItem.getMerchantId()).list();
         if (!CollectionUtils.isEmpty(cartItemList)) {
             return cartItemList.get(0);
         }
@@ -73,8 +75,7 @@ public class OmsCartItemServiceImpl extends ServiceImpl<OmsCartItemMapper, OmsCa
         omsCartItem.setUserId(userId);
         List<OmsCartItem> cartItemList = this.lambdaQuery()
                 .eq(OmsCartItem::getUserId, userId).list();
-        List<OmsCartItemDTO> omsCartItemList = CartItemCopier.INSTANCE.copying(cartItemList);
-        return omsCartItemList;
+        return CartItemCopier.INSTANCE.copying(cartItemList);
     }
 
     public List<OmsCartItemDTO> listCartItem(List<Long> cartIds) {
@@ -83,9 +84,9 @@ public class OmsCartItemServiceImpl extends ServiceImpl<OmsCartItemMapper, OmsCa
         omsCartItem.setUserId(userId);
         List<OmsCartItem> cartItemList = this.lambdaQuery()
                 .eq(OmsCartItem::getUserId, userId)
+                .eq(OmsCartItem::getDeleteStatus,0)
                 .in(OmsCartItem::getGoodsId,cartIds).list();
-        List<OmsCartItemDTO> omsCartItemList = CartItemCopier.INSTANCE.copying(cartItemList);
-        return omsCartItemList;
+        return CartItemCopier.INSTANCE.copying(cartItemList);
     }
 
     @Override
@@ -93,13 +94,13 @@ public class OmsCartItemServiceImpl extends ServiceImpl<OmsCartItemMapper, OmsCa
         if (CollectionUtils.isEmpty(cartIds)) {
             return null;
         }
-        List<OmsCartItemDTO> cartItemList = listCartItem(cartIds);
-        List<CartPromotionItemDTO> cartPromotionItemList = new ArrayList<>();
-        if (!CollectionUtils.isEmpty(cartItemList)) {
+        return listCartItem(cartIds);
+//        List<CartPromotionItemDTO> cartPromotionItemList = new ArrayList<>();
+//        if (!CollectionUtils.isEmpty(cartItemList)) {
 //            cartPromotionItemList.add(cartItemList);
 //            cartPromotionItemList = promotionService.calcCartPromotion(cartItemList);
-        }
-        return cartItemList;
+//        }
+//        return cartItemList;
     }
 
     @Override
@@ -117,16 +118,7 @@ public class OmsCartItemServiceImpl extends ServiceImpl<OmsCartItemMapper, OmsCa
     @Override
     public void delete(List<Long> ids) {
         Long userId = SessionContextHolder.getId();
-        for (Long id : ids) {
-            OmsCartItem cartItem = this.lambdaQuery()
-                    .eq(OmsCartItem::getUserId, userId).eq(
-                            OmsCartItem::getId, id
-                    ).one();
-            if (cartItem != null){
-                cartItem.setDeleteStatus(1);
-                this.baseMapper.updateById(cartItem);
-            }
-        }
+        delete(ids, userId);
     }
 
     @Override
@@ -183,10 +175,31 @@ public class OmsCartItemServiceImpl extends ServiceImpl<OmsCartItemMapper, OmsCa
                 .eq(OmsCartItem :: getMerchantId,merchantId)
                 .eq(OmsCartItem::getDeleteStatus,"0").list();
         List<OmsCartItemDTO> omsCartItemList = CartItemCopier.INSTANCE.copying(cartItemList);
-        Merchant merchant = this.merchantService.getById(merchantId);
+        Merchant merchant = merchantService.getById(merchantId);
         MerchantCartItemDTO merchantCartItemDTO = new MerchantCartItemDTO();
         merchantCartItemDTO.setCartItems(omsCartItemList);
         merchantCartItemDTO.setMerchantDTO(MerchantCopier.INSTANCE.copying(merchant));
         return merchantCartItemDTO;
     }
+
+
+//    @Override
+//    public List<MerchantCartItemDTO> listCartItemByUserId() {
+//        Long userId = SessionContextHolder.getId();
+//        OmsCartItem omsCartItem = new OmsCartItem();
+//        omsCartItem.setUserId(userId);
+//        List<OmsCartItem> cartItemList = this.lambdaQuery()
+//                .eq(OmsCartItem::getUserId, userId)
+//                .eq(OmsCartItem::getDeleteStatus,"0")
+//                .orderByDesc(OmsCartItem::getCreateTime).list();
+//        List<OmsCartItemDTO> omsCartItemList = CartItemCopier.INSTANCE.copying(cartItemList);
+//        if (!omsCartItemList.isEmpty() && omsCartItemList.size() > 0){
+//            Merchant merchant = this.merchantService.getById(merchantId);
+//            MerchantCartItemDTO merchantCartItemDTO = new MerchantCartItemDTO();
+//            merchantCartItemDTO.setCartItems(omsCartItemList);
+//            merchantCartItemDTO.setMerchantDTO(MerchantCopier.INSTANCE.copying(merchant));
+//        }
+//
+//        return merchantCartItemDTO;
+//    }
 }

+ 6 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderItemServiceImpl.java

@@ -3,6 +3,7 @@ package com.chelvc.cloud.vehicle.server.service.impl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.api.dto.OmsOrderItemDTO;
 import com.chelvc.cloud.vehicle.api.dto.OmsOrderItemExampleDTO;
+import com.chelvc.cloud.vehicle.server.copier.OrderItemCopier;
 import com.chelvc.cloud.vehicle.server.dao.OmsOrderItemMapper;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrderItem;
 import com.chelvc.cloud.vehicle.server.service.IOmsOrderItemService;
@@ -34,6 +35,9 @@ public class OmsOrderItemServiceImpl extends ServiceImpl<OmsOrderItemMapper, Oms
     public List<OmsOrderItem> selectByExample(OmsOrderItem omsOrderItem){
         return this.lambdaQuery().eq(OmsOrderItem::getGoodsId,omsOrderItem.getGoodsId()).list();
     }
-
-
+    @Override
+    public List<OmsOrderItemDTO> getOrderItemByOrderId(Long orderId){
+        List<OmsOrderItem> omsOrderItem = this.lambdaQuery().eq(OmsOrderItem::getOrderId,orderId).list();
+        return OrderItemCopier.INSTANCE.copying(omsOrderItem);
+    }
 }

+ 75 - 44
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java

@@ -1,47 +1,20 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.uc.api.service.EmployeeService;
-import com.chelvc.cloud.vehicle.api.dto.CalcAmountDTO;
-import com.chelvc.cloud.vehicle.api.dto.CartPromotionItemDTO;
-import com.chelvc.cloud.vehicle.api.dto.ConfirmOrderResultDTO;
-import com.chelvc.cloud.vehicle.api.dto.CouponDTO;
-import com.chelvc.cloud.vehicle.api.dto.OmsCartItemDTO;
-import com.chelvc.cloud.vehicle.api.dto.OmsOrderDTO;
-import com.chelvc.cloud.vehicle.api.dto.OmsOrderDetailDTO;
-import com.chelvc.cloud.vehicle.api.dto.OmsOrderExampleDTO;
-import com.chelvc.cloud.vehicle.api.dto.OmsOrderItemDTO;
-import com.chelvc.cloud.vehicle.api.dto.UserCouponDTO;
+import com.chelvc.cloud.vehicle.api.dto.*;
 import com.chelvc.cloud.vehicle.api.param.OmsOrderModifyParam;
 import com.chelvc.cloud.vehicle.api.param.OrderPagingParam;
+import com.chelvc.cloud.vehicle.api.util.DateTimeUtils;
 import com.chelvc.cloud.vehicle.server.copier.MerchantCopier;
 import com.chelvc.cloud.vehicle.server.copier.OrderCopier;
 import com.chelvc.cloud.vehicle.server.dao.OmsOrderMapper;
 import com.chelvc.cloud.vehicle.server.dao.OmsOrderSettingMapper;
-import com.chelvc.cloud.vehicle.server.entity.Goods;
-import com.chelvc.cloud.vehicle.server.entity.Merchant;
-import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
-import com.chelvc.cloud.vehicle.server.entity.OmsOrderItem;
-import com.chelvc.cloud.vehicle.server.entity.OmsOrderSetting;
-import com.chelvc.cloud.vehicle.server.entity.UserCoupon;
-import com.chelvc.cloud.vehicle.server.service.GoodsService;
-import com.chelvc.cloud.vehicle.server.service.IOmsOrderItemService;
-import com.chelvc.cloud.vehicle.server.service.IOmsOrderService;
-import com.chelvc.cloud.vehicle.server.service.MerchantService;
-import com.chelvc.cloud.vehicle.server.service.OmsCartItemService;
-import com.chelvc.cloud.vehicle.server.service.OmsOrderSettingService;
-import com.chelvc.cloud.vehicle.server.service.UserCouponService;
+import com.chelvc.cloud.vehicle.server.entity.*;
+import com.chelvc.cloud.vehicle.server.service.*;
 import com.chelvc.framework.base.context.SessionContextHolder;
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.util.StringUtils;
 import com.chelvc.framework.database.util.PagingUtils;
@@ -52,6 +25,12 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
+
 /**
  * 订单Service业务层处理
  * 
@@ -62,6 +41,8 @@ import org.springframework.util.CollectionUtils;
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.IOmsOrderService.class)
 public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> implements IOmsOrderService,
         com.chelvc.cloud.vehicle.api.service.IOmsOrderService {
+
+    private final OmsOrderMapper omsOrderMapper;
     private final OmsCartItemService omsCartItemService;
 
     private final OmsOrderSettingService orderSettingService;
@@ -320,7 +301,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         OmsOrder cancelOrder = cancelOrderList.get(0);
         if (cancelOrder != null) {
             //修改订单状态为取消
-            cancelOrder.setStatus(4);
+            cancelOrder.setStatus(5);
 //            this.baseMapper.updateByPrimaryKeySelective(cancelOrder);
             OmsOrderItem orderItem = new OmsOrderItem();
             orderItem.setOrderId(orderId);
@@ -355,10 +336,10 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         if(!userId.equals(order.getUserId())){
             Asserts.check(true,"不能确认他人订单!");
         }
-        if(order.getStatus()!=2){
+        if(order.getStatus()!=3){
             Asserts.check(true,"该订单还未发货!");
         }
-        order.setStatus(3);
+        order.setStatus(4);
         order.setConfirmStatus(1);
         order.setReceiveTime(new Date());
         this.baseMapper.updateById(order);
@@ -370,7 +351,11 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
                 .eq(OmsOrder :: getStatus,param.getStatus())
                 .orderByDesc(OmsOrder :: getCreateTime)
                 .page(PagingUtils.convert(param.getPaging()));
-       return PagingUtils.convert(page, OrderCopier.INSTANCE::copying);
+        Pagination<OmsOrderDTO> pagination = PagingUtils.convert(page, OrderCopier.INSTANCE::copying);
+        pagination.getRecords().forEach(item ->{
+            item.setGoodsInfo(this.omsOrderItemService.getOrderItemByOrderId(item.getId()));
+        });
+       return pagination;
     }
 
     @Override
@@ -381,7 +366,11 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
                     .eq(StringUtils.nonEmpty(param.getStatus()),OmsOrder :: getStatus,param.getStatus())
                     .orderByDesc(OmsOrder :: getCreateTime)
                     .page(PagingUtils.convert(param.getPaging()));
-            return PagingUtils.convert(page, OrderCopier.INSTANCE::copying);
+            Pagination<OmsOrderDTO> pagination = PagingUtils.convert(page, OrderCopier.INSTANCE::copying);
+            pagination.getRecords().forEach(item ->{
+                item.setGoodsInfo(this.omsOrderItemService.getOrderItemByOrderId(item.getId()));
+            });
+            return pagination;
         }else{
             List<Long> merchants = this.merchantService.getMerchantIdsByUserId(userId);
             if (!StringUtils.nonEmpty(merchants)){
@@ -392,7 +381,11 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
                     .in(OmsOrder :: getMerchantId,merchants)
                     .orderByDesc(OmsOrder :: getCreateTime)
                     .page(PagingUtils.convert(param.getPaging()));
-            return PagingUtils.convert(page, OrderCopier.INSTANCE::copying);
+            Pagination<OmsOrderDTO> pagination = PagingUtils.convert(page, OrderCopier.INSTANCE::copying);
+            pagination.getRecords().forEach(item ->{
+                item.setGoodsInfo(this.omsOrderItemService.getOrderItemByOrderId(item.getId()));
+            });
+            return pagination;
         }
     }
 
@@ -415,7 +408,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         if(!userId.equals(order.getUserId())){
             Asserts.check(true,"不能删除他人订单!");
         }
-        if(order.getStatus()==3||order.getStatus()==4){
+        if(order.getStatus()==4||order.getStatus()==5){
             order.setDeleteStatus(1);
             this.baseMapper.updateById(order);
         }else{
@@ -637,7 +630,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         BigDecimal totalAmount = calcTotalAmount(orderItemList);
         for (OmsOrderItem orderItem : orderItemList) {
             //(商品价格/可用商品总价)*优惠券面额
-            BigDecimal couponAmount = orderItem.getGoodsPrice().divide(totalAmount, 3, RoundingMode.HALF_EVEN).multiply(new BigDecimal(coupon.getAmount()));
+            BigDecimal couponAmount = orderItem.getGoodsPrice().divide(totalAmount, 3, RoundingMode.HALF_EVEN).multiply(BigDecimal.valueOf(coupon.getAmount()));
             orderItem.setCouponAmount(couponAmount);
         }
     }
@@ -754,16 +747,54 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
     }
     @Override
     public Pagination<OmsOrderDTO> getMerchantOrderPaging(OrderPagingParam param){
+        Long userId = SessionContextHolder.getId();
+        List<Long> merchants = this.merchantService.getMerchantIdsByUserId(userId);
+        if (!StringUtils.nonEmpty(merchants)){
+            return null;
+        }
         Page<OmsOrder> page = this.lambdaQuery()
                 .eq(StringUtils.nonEmpty(param.getStatus()),OmsOrder :: getStatus,param.getStatus())
+                .in(OmsOrder::getMerchantId,merchants)
                 .orderByDesc(OmsOrder :: getCreateTime)
                 .page(PagingUtils.convert(param.getPaging()));
-        return PagingUtils.convert(page, OrderCopier.INSTANCE::copying);
+        Pagination<OmsOrderDTO> pagination = PagingUtils.convert(page, OrderCopier.INSTANCE::copying);
+        pagination.getRecords().forEach(item ->{
+           item.setGoodsInfo(this.omsOrderItemService.getOrderItemByOrderId(item.getId()));
+        });
+        return pagination;
     }
 
+    @Override
+    public void orderVerification(Long orderId, Long merchantId) {
+        if(orderId == null){
+            throw new ResourceUnavailableException("订单不存在");
+        }
+        OmsOrder omsOrder = baseMapper.selectById(orderId);
+        if(omsOrder == null){
+            throw new ResourceUnavailableException("订单不存在");
+        }
+        if(omsOrder.getMerchantId() == null || !omsOrder.getMerchantId().equals(merchantId)){
+            throw new ResourceUnavailableException("该订单商品不属于此商家");
+        }
+        Integer status = omsOrder.getStatus();
+        if(status != 1){
+            throw new ResourceUnavailableException("该订单不可用");
+        }
+        omsOrder.setStatus(4);
+        omsOrder.setConfirmStatus(1);
+        omsOrder.setReceiveTime(new Date());
+        omsOrder.setUpdateTime(new Date());
+        int i = baseMapper.updateById(omsOrder);
+        if(i != 1){
+            throw new ResourceUnavailableException("处理失败");
+        }
+    }
 
 
-
-
-
+    @Override
+    public BigDecimal queryAmountByLastMonth(Long merchantId) {
+        LocalDateTime startLocalTime = DateTimeUtils.getLastMonthStartLocalTime();
+        LocalDateTime endLocalTime = DateTimeUtils.getLastMonthEndLocalTime();
+        return omsOrderMapper.queryAmountByLastMonth(merchantId, startLocalTime, endLocalTime);
+    }
 }

+ 251 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PayServiceImpl.java

@@ -0,0 +1,251 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.chelvc.cloud.vehicle.server.dao.OmsOrderMapper;
+import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
+import com.chelvc.cloud.vehicle.server.service.PayService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.Signature;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.Objects;
+
+@Service
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class PayServiceImpl implements PayService {
+
+    private final OmsOrderMapper omsOrderMapper;
+
+    @Override
+    public void orderPay(Long orderId) {
+        LambdaQueryWrapper<OmsOrder> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(OmsOrder::getId, orderId);
+        wrapper.eq(OmsOrder::getStatus, 0);
+        OmsOrder omsOrder = omsOrderMapper.selectOne(wrapper);
+        if(omsOrder == null){
+            return;
+        }
+        StringBuilder sb = new StringBuilder();
+        sb.append("merchantAcctId=").append("1001292117101").append("&");
+        sb.append("version=").append("v2.0").append("&");
+        sb.append("language=").append("1").append("&");
+        sb.append("signType=").append("4").append("&");
+        sb.append("payType=").append("21").append("&");
+        sb.append("bankId=").append("QTYH").append("&");
+        sb.append("orderId=").append("KQ20220609155005").append("&");
+        sb.append("orderTime=").append("20220609155005").append("&");
+        sb.append("orderAmount=").append("1").append("&");
+        sb.append("bindCard=").append("6222027781").append("&");
+        sb.append("bindMobile=").append("1662653").append("&");
+        sb.append("dealId=").append("104964327").append("&");
+        sb.append("bankDealId=").append("9841654761026121342").append("&");
+        sb.append("dealTime=").append("20220609155546").append("&");
+        sb.append("payAmount=").append("1").append("&");
+        sb.append("fee=").append("0").append("&");
+        sb.append("payResult=").append("10");
+    }
+
+    public static void main(String[] args) {
+
+        StringBuilder sb = new StringBuilder();
+        sb.append("merchantAcctId=").append("1001292117101").append("&");
+        sb.append("version=").append("v2.0").append("&");
+        sb.append("language=").append("1").append("&");
+        sb.append("signType=").append("4").append("&");
+        sb.append("payType=").append("21").append("&");
+        sb.append("bankId=").append("QTYH").append("&");
+        sb.append("orderId=").append("KQ20220609155005").append("&");
+        sb.append("orderTime=").append("20220609155005").append("&");
+        sb.append("orderAmount=").append("1").append("&");
+        sb.append("bindCard=").append("6222027781").append("&");
+        sb.append("bindMobile=").append("1662653").append("&");
+        sb.append("dealId=").append("104964327").append("&");
+        sb.append("bankDealId=").append("9841654761026121342").append("&");
+        sb.append("dealTime=").append("20220609155546").append("&");
+        sb.append("payAmount=").append("1").append("&");
+        sb.append("fee=").append("0").append("&");
+        sb.append("payResult=").append("10");
+        String base64 = "";
+        String SignMsgVal="merchantAcctId=1001292117101&version=v2.0&language=1&signType=4&payType=21&bankId=QTYH&orderId=KQ20220609155005&orderTime=20220609155005&orderAmount=1&bindCard=6222027781&bindMobile=1662653&dealId=104964327&bankDealId=9841654761026121342&dealTime=20220609155546&payAmount=1&fee=0&payResult=10";
+
+        //人民币网关账号,该账号为11位人民币网关商户编号+01,该参数必填。
+        String merchantAcctId = "1001295168301";
+        //编码方式,1代表 UTF-8; 2 代表 GBK; 3代表 GB2312 默认为1,该参数必填。
+        String inputCharset = "1";
+        //接收支付结果的页面地址,该参数一般置为空即可。
+        String pageUrl = "";
+        //服务器接收支付结果的后台地址,该参数务必填写,不能为空。
+        String bgUrl = "http://www.99bill.com/";
+        //网关版本,固定值:mobile1.0,该参数必填。
+        String version =  "mobile1.0";
+        //移动网关版本 phone代表手机版移动网关,pad代表平板移动网关,默认为phone
+        String mobileGateway="";
+        //语言种类,1代表中文显示,2代表英文显示。默认为1,该参数必填。
+        String language =  "1";
+        //签名类型,该值为4,代表PKI加密方式,该参数必填。
+        String signType =  "4";
+        //支付人姓名,可以为空。
+        String payerName= "";
+        //支付人联系类型,1 代表电子邮件方式;2 代表手机联系方式。可以为空。
+        String payerContactType =  "";
+        //支付人联系方式,与payerContactType设置对应,payerContactType为1,则填写邮箱地址;payerContactType为2,则填写手机号码。可以为空。
+        String payerContact =  "";
+        //指定付款人,可以为空
+        String payerIdType =  "";
+        //付款人标识,可以为空
+        String payerId =  "";
+        //付款人IP,可以为空
+        String payerIP =  "";
+        //商家的终端ip,支持Ipv4和Ipv6
+        String terminalIp =  "192.168.1.1";
+        //网络交易平台简称,英文或中文字符串,除微信支付宝支付外其他交易方式必传
+        String tdpformName =  "";
+        //商户订单号,以下采用时间来定义订单号,商户可以根据自己订单号的定义规则来定义该值,不能为空。
+        String orderId = "KQ"+new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date());
+        //订单金额,金额以“分”为单位,商户测试以1分测试即可,切勿以大金额测试。该参数必填。
+        String orderAmount = "1";
+        //订单提交时间,格式:yyyyMMddHHmmss,如:20071117020101,不能为空。
+        String orderTime = new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date());
+        //String orderTime = "20220224145101";
+        //快钱时间戳,格式:yyyyMMddHHmmss,如:20071117020101, 可以为空
+        String orderTimestamp= "";//new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date());;
+        //商品名称,可以为空。
+        String productName= "测试商品";
+        //商品数量,可以为空。
+        String productNum = "1";
+        //商品代码,可以为空。
+        String productId = "";
+        //商品描述,可以为空。
+        String productDesc = "";
+        //扩展字段1,商户可以传递自己需要的参数,支付完快钱会原值返回,可以为空。
+        String ext1 = "";
+        //扩展自段2,商户可以传递自己需要的参数,支付完快钱会原值返回,可以为空。
+        String ext2 = "";
+        //支付方式,一般为00,代表所有的支付方式。微信小程序26-3
+        String payType = "26-3";
+        //银行代码,如果payType为00,该值可以为空
+        String bankId = "";
+        //同一订单禁止重复提交标志,实物购物车填1,虚拟产品用0。1代表只能提交一次,0代表在支付不成功情况下可以再提交。可为空。
+        String redoFlag = "0";
+        //快钱合作伙伴的帐户号,即商户编号,可为空。
+        String pid = "";
+        //订单超时时间(秒),可为空。
+        String orderTimeOut = "";
+        //聚合支付参数
+        String aggregatePay="26-3:[appId=wx44377c7a02caaac9,openId=oxr7946y03Ui9LjsR4zGFi8OssbY,limitPay=0]";
+
+        //signMsg 签名字符串 不可空,生成加密签名串
+        String signMsgVal = "";
+        signMsgVal = appendParam(signMsgVal, "inputCharset", inputCharset);
+        signMsgVal = appendParam(signMsgVal, "pageUrl", pageUrl);
+        signMsgVal = appendParam(signMsgVal, "bgUrl", bgUrl);
+        signMsgVal = appendParam(signMsgVal, "version", version);
+        signMsgVal = appendParam(signMsgVal, "language", language);
+        signMsgVal = appendParam(signMsgVal, "signType", signType);
+        signMsgVal = appendParam(signMsgVal, "merchantAcctId",merchantAcctId);
+        signMsgVal = appendParam(signMsgVal, "payerName", payerName);
+        signMsgVal = appendParam(signMsgVal, "payerContactType",payerContactType);
+        signMsgVal = appendParam(signMsgVal, "payerContact", payerContact);
+        signMsgVal = appendParam(signMsgVal, "payerIdType", payerIdType);
+        signMsgVal = appendParam(signMsgVal, "payerId", payerId);
+        signMsgVal = appendParam(signMsgVal, "payerIP", payerIP);
+        signMsgVal = appendParam(signMsgVal, "orderId", orderId);
+        signMsgVal = appendParam(signMsgVal, "orderAmount", orderAmount);
+        signMsgVal = appendParam(signMsgVal, "orderTime", orderTime);
+        signMsgVal = appendParam(signMsgVal, "orderTimestamp", orderTimestamp);
+        signMsgVal = appendParam(signMsgVal, "productName", productName);
+        signMsgVal = appendParam(signMsgVal, "productNum", productNum);
+        signMsgVal = appendParam(signMsgVal, "productId", productId);
+        signMsgVal = appendParam(signMsgVal, "productDesc", productDesc);
+        signMsgVal = appendParam(signMsgVal, "ext1", ext1);
+        signMsgVal = appendParam(signMsgVal, "ext2", ext2);
+        signMsgVal = appendParam(signMsgVal, "payType", payType);
+        signMsgVal = appendParam(signMsgVal, "bankId", bankId);
+        signMsgVal = appendParam(signMsgVal, "redoFlag", redoFlag);
+        signMsgVal = appendParam(signMsgVal, "pid", pid);
+        signMsgVal = appendParam(signMsgVal, "orderTimeOut", orderTimeOut);
+        signMsgVal = appendParam(signMsgVal, "mobileGateway", mobileGateway);
+        signMsgVal = appendParam(signMsgVal, "aggregatePay", aggregatePay);
+
+        try {
+            System.out.println(signMsgVal);
+            KeyStore ks = KeyStore.getInstance("PKCS12");
+
+            //读取密钥仓库(相对路径)
+            String file = Objects.requireNonNull(PayServiceImpl.class.getClassLoader().getResource("payUtils/10012951683.pfx")).getPath().replaceAll("%20", " ");
+            System.out.println(file);
+
+            FileInputStream ksfis = new FileInputStream(file);
+            //InputStream inputStream = PayServiceImpl.class.getClassLoader().getResourceAsStream("payUtils/10012951683.pfx");
+            BufferedInputStream ksbufin = new BufferedInputStream(ksfis);
+            //证书密码
+            char[] keyPwd = "123456".toCharArray();
+            ks.load(ksbufin, keyPwd);
+
+            //证书别名	20190802.3300000002967055(10012155863)、20190801.3300000002925831(10012921171)
+            PrivateKey priK = (PrivateKey) ks.getKey("test-alias", keyPwd); //老别名:test-alias
+            //签名算法
+            Signature signature = Signature.getInstance("SHA256withRSA");  //SHA256withRSA,SHA1withRSA
+            signature.initSign(priK);
+            //signature.update(SignMsgVal.getBytes(StandardCharsets.UTF_8));
+            signature.update(signMsgVal.getBytes(StandardCharsets.UTF_8));
+            sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
+            base64 = encoder.encode(signature.sign());
+
+        } catch(FileNotFoundException e){
+            System.out.println("123");
+        }catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("test = "+base64);
+        String signMsg="Yku7O/TyRnCErbGwvo/EQxgNLgR61YJ9WQrxpD0I6HxIumGVRxQo4eQ/hn5CS57xM2GnJ7qtkWM3J/g9CRcK22S7EJ4E1zK2HuqYiScaFLolHWNszGe7kOPk3PovTFl4nGYUSW8vMzZEZgRTMdHNSpmib57o6Mrjq0+6xA1gSBBRqpaL6SO4IBfB6yldWHpkJN0RJlKlkGGRJjMEpLJPn8lTGPcOfJuNxmMq+qjbvdLyoxn7v0vK8bAPFT45bCdvGG+0HwUCYxtPPhFReZMXP/yJYEZ/TODSMlPhGM1dZXXbnZ5Sc4KJSWNB9CKgyKWcycMbfTlsraWtpsCwOr8k0g==";
+        try {
+            //快钱公钥
+            //String file = Pkipair.class.getResource("99bill.RSA.cer").toURI().getPath();
+            String file = Objects.requireNonNull(PayServiceImpl.class.getClassLoader().getResource("payUtils/CFCA_sandbox.cer")).toURI().getPath();
+            //System.out.println(file);
+            FileInputStream inStream = new FileInputStream(file);
+
+            CertificateFactory cf = CertificateFactory.getInstance("X.509");
+            X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream);
+
+            PublicKey pk = cert.getPublicKey();
+            //验签算法
+            Signature signature = Signature.getInstance("SHA256withRSA");//SHA256withRSA,SHA1withRSA
+            signature.initVerify(pk);
+            signature.update(signMsgVal.getBytes());
+
+            sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
+            //System.out.println(new String(decoder.decodeBuffer(msg)));
+            boolean flag = signature.verify(decoder.decodeBuffer(base64));
+            System.out.println(flag);
+        } catch (Exception e) {
+            e.printStackTrace();
+            //System.out.println("no");
+        }
+    }
+
+    public static String appendParam(String returns, String paramId, String paramValue) {
+        if (!Objects.equals(returns, "")) {
+            if (!Objects.equals(paramValue, "")) {
+                returns += "&" + paramId + "=" + paramValue;
+            }
+        } else {
+            if (!Objects.equals(paramValue, "")) {
+                returns = paramId + "=" + paramValue;
+            }
+        }
+        return returns;
+    }
+}

+ 104 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PlatformProfitRatioServiceImpl.java

@@ -0,0 +1,104 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.dto.PlatformProfitRatioDTO;
+import com.chelvc.cloud.vehicle.api.param.EditPlatformProfitRatioParam;
+import com.chelvc.cloud.vehicle.api.param.QueryPlatformProfitRatioParam;
+import com.chelvc.cloud.vehicle.server.dao.PlatformProfitRatioMapper;
+import com.chelvc.cloud.vehicle.server.entity.PlatformProfitRatio;
+import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
+import com.chelvc.cloud.vehicle.server.service.IOmsOrderService;
+import com.chelvc.cloud.vehicle.server.service.PlatformProfitRatioService;
+import com.chelvc.cloud.vehicle.server.service.ProfitRatioConfigService;
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.model.Pagination;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.PlatformProfitRatioService.class)
+public class PlatformProfitRatioServiceImpl extends ServiceImpl<PlatformProfitRatioMapper, PlatformProfitRatio>
+        implements PlatformProfitRatioService,  com.chelvc.cloud.vehicle.api.service.PlatformProfitRatioService{
+
+    private final ProfitRatioConfigService profitRatioConfigService;
+
+    private final IOmsOrderService omsOrderService;
+
+    @Override
+    @Async
+    public void updateProfitRatio() {
+        Integer total = baseMapper.selectCount(null);
+        if (total <= 0) {
+            return;
+        }
+        List<ProfitRatioConfig> profitRatioConfigs = profitRatioConfigService.queryListByType(1);
+        if(CollectionUtils.isEmpty(profitRatioConfigs)){
+            return;
+        }
+        int pageNum = 1;
+        int pageSize = 100;
+        int pages = 1;
+        if (total > pageSize) {
+            pages = total % 100 != 0 ? (total / 100) + 1 : total / 100;
+        }
+        while (pageNum <= pages) {
+            Pagination<PlatformProfitRatioDTO> platformProfitRatioDTOPagination =
+                    queryPageList(null, new Integer(pageNum).longValue(), new Integer(pageSize).longValue());
+            List<PlatformProfitRatioDTO> records = platformProfitRatioDTOPagination.getRecords();
+            if(!CollectionUtils.isEmpty(records)){
+                for(PlatformProfitRatioDTO dto : records){
+                    Long userId = dto.getUserId();
+                    BigDecimal amount = omsOrderService.queryAmountByLastMonth(userId);
+                    for(ProfitRatioConfig config : profitRatioConfigs){
+                        int num = config.getNum();
+                        if(amount.compareTo(new BigDecimal(num)) > -1){
+                            baseMapper.updateRatio(dto.getId(), config.getRatio(), LocalDateTime.now(), amount);
+                            break;
+                        }
+                    }
+                }
+            }
+            pageNum += 1;
+        }
+    }
+
+    @Override
+    public Pagination<PlatformProfitRatioDTO> queryPageList(QueryPlatformProfitRatioParam param, Long pageNum, Long pageSize) {
+        Page<PlatformProfitRatioDTO> page = new Page<>(pageNum, pageSize);
+        QueryWrapper<PlatformProfitRatioDTO> wrapper = Wrappers.query();
+        if(param != null){
+            wrapper.eq(param.getUserId() != null, "t.user_id", param.getUserId());
+        }
+        wrapper.orderByAsc("t.create_time");
+        IPage<PlatformProfitRatioDTO> result = baseMapper.queryPageList(page, wrapper);
+        return Pagination.<PlatformProfitRatioDTO>builder().total(result.getTotal()).pages(result.getPages())
+                .records(result.getRecords()).build();
+    }
+
+    @Override
+    public void edit(EditPlatformProfitRatioParam param) {
+        Long userId = param.getUserId();
+        LambdaQueryWrapper<PlatformProfitRatio> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(PlatformProfitRatio::getUserId, userId);
+        PlatformProfitRatio platformProfitRatio = baseMapper.selectOne(wrapper);
+        if(platformProfitRatio == null){
+            throw new ResourceUnavailableException("商家不存在");
+        }
+        platformProfitRatio.setRatio(param.getRatio());
+        platformProfitRatio.setUpdater(param.getOperateUserId());
+        platformProfitRatio.setUpdateTime(LocalDateTime.now());
+        baseMapper.updateById(platformProfitRatio);
+    }
+}

+ 98 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ProfitRatioConfigServiceImpl.java

@@ -0,0 +1,98 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.dto.ProfitRatioConfigDTO;
+import com.chelvc.cloud.vehicle.api.param.AddProfitRatioConfigParams;
+import com.chelvc.cloud.vehicle.api.param.EditProfitRatioConfigParams;
+import com.chelvc.cloud.vehicle.api.param.QueryProfitRatioConfigParam;
+import com.chelvc.cloud.vehicle.server.dao.ProfitRatioConfigMapper;
+import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
+import com.chelvc.cloud.vehicle.server.service.ProfitRatioConfigService;
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.model.Pagination;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.ProfitRatioConfigService.class)
+public class ProfitRatioConfigServiceImpl extends ServiceImpl<ProfitRatioConfigMapper, ProfitRatioConfig> implements
+        ProfitRatioConfigService, com.chelvc.cloud.vehicle.api.service.ProfitRatioConfigService {
+
+//    private final ProfitRatioConfigMapper baseMapper;
+
+    @Override
+    public void add(AddProfitRatioConfigParams params) {
+        ProfitRatioConfig config = new ProfitRatioConfig();
+        config.setRatio(params.getRatio());
+        config.setType(params.getType());
+        config.setNum(params.getNum());
+        config.setStatus(0);
+        config.setCreator(params.getUserId());
+        config.setCreateTime(new Date());
+        config.setUpdateTime(new Date());
+        config.setUpdater(params.getUserId());
+        baseMapper.insert(config);
+    }
+
+    @Override
+    public void edit(EditProfitRatioConfigParams params) {
+        ProfitRatioConfig profitRatioConfig = baseMapper.selectById(params.getId());
+        if(profitRatioConfig == null){
+            throw new ResourceUnavailableException("参数错误");
+        }
+        profitRatioConfig.setRatio(params.getRatio());
+        profitRatioConfig.setNum(params.getNum());
+        profitRatioConfig.setStatus(params.getStatus());
+        profitRatioConfig.setUpdateTime(new Date());
+        profitRatioConfig.setUpdater(params.getUserId());
+        baseMapper.update(profitRatioConfig, null);
+    }
+
+    @Override
+    @Transactional
+    public void delete(Long id, Long userId) {
+        ProfitRatioConfig profitRatioConfig = baseMapper.selectById(id);
+        if(profitRatioConfig == null){
+            throw new ResourceUnavailableException("参数错误");
+        }
+        Integer status = profitRatioConfig.getStatus();
+        if(status == 0){
+            throw new ResourceUnavailableException("请先停用该配置");
+        }
+        profitRatioConfig.setUpdater(userId);
+        profitRatioConfig.setUpdateTime(new Date());
+        baseMapper.update(profitRatioConfig, null);
+        baseMapper.deleteById(id);
+    }
+
+    @Override
+    public Pagination<ProfitRatioConfigDTO> queryPageList(QueryProfitRatioConfigParam param, Long pageNum, Long pageSize) {
+        Page<ProfitRatioConfigDTO> page = new Page<>(pageNum, pageSize);
+        QueryWrapper<ProfitRatioConfig> wrapper = Wrappers.query();
+        wrapper.eq(param.getType() != null, "type", param.getType());
+        wrapper.eq(param.getStatus() != null, "status", param.getStatus());
+        wrapper.orderByAsc("ratio");
+        IPage<ProfitRatioConfigDTO> result = baseMapper.queryPageList(page, wrapper);
+        return Pagination.<ProfitRatioConfigDTO>builder().total(result.getTotal()).pages(result.getPages())
+                .records(result.getRecords()).build();
+    }
+
+    @Override
+    public List<ProfitRatioConfig> queryListByType(Integer type) {
+        LambdaQueryWrapper<ProfitRatioConfig> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(ProfitRatioConfig::getType, type);
+        wrapper.eq(ProfitRatioConfig::getStatus, 0);
+        wrapper.orderByDesc(ProfitRatioConfig::getNum);
+        return baseMapper.selectList(wrapper);
+    }
+}

+ 22 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ReservationServiceImpl.java

@@ -2,8 +2,10 @@ package com.chelvc.cloud.vehicle.server.service.impl;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.uc.api.dto.EmployeeDTO;
 import com.chelvc.cloud.uc.api.service.EmployeeService;
 import com.chelvc.cloud.vehicle.api.constant.ReserveStatus;
+import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.api.dto.ReservationDTO;
 import com.chelvc.cloud.vehicle.api.param.ReservationModifyParam;
 import com.chelvc.cloud.vehicle.api.param.ReservationPagingParam;
@@ -79,7 +81,16 @@ public class ReservationServiceImpl extends ServiceImpl<ReservationMapper, Reser
                     .eq(StringUtils.nonEmpty(param.getStatus()),Reservation :: getStatus,param.getStatus())
                     .orderByDesc(Reservation :: getAppointTime)
                     .page(PagingUtils.convert(param.getPaging()));
-            return PagingUtils.convert(page, ReservationCopier.INSTANCE::copying);
+            Pagination<ReservationDTO> pagination = PagingUtils.convert(page, ReservationCopier.INSTANCE::copying);
+            pagination.getRecords().forEach(item ->{
+                EmployeeDTO employeeDTO = this.employeeService.getEmployee(item.getUserId());
+                if (employeeDTO != null){
+                    item.setUsername(employeeDTO.getUsername());
+                }
+                MerchantDTO merchantDTO = this.merchantService.getMerchantById(item.getMerchantId());
+                item.setMerchant(merchantDTO);
+            });
+            return pagination;
         }else{
             List<Long> merchants = this.merchantService.getMerchantIdsByUserId(userId);
             if (!StringUtils.nonEmpty(merchants)){
@@ -90,7 +101,16 @@ public class ReservationServiceImpl extends ServiceImpl<ReservationMapper, Reser
                     .in(Reservation :: getMerchantId,merchants)
                     .orderByDesc(Reservation :: getAppointTime)
                     .page(PagingUtils.convert(param.getPaging()));
-            return PagingUtils.convert(page, ReservationCopier.INSTANCE::copying);
+            Pagination<ReservationDTO> pagination = PagingUtils.convert(page, ReservationCopier.INSTANCE::copying);
+            pagination.getRecords().forEach(item ->{
+                EmployeeDTO employeeDTO = this.employeeService.getEmployee(item.getUserId());
+                if (employeeDTO != null){
+                    item.setUsername(employeeDTO.getUsername());
+                }
+                MerchantDTO merchantDTO = this.merchantService.getMerchantById(item.getMerchantId());
+                item.setMerchant(merchantDTO);
+            });
+            return pagination;
         }
     }
 }

+ 1 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserCouponServiceImpl.java

@@ -182,7 +182,7 @@ public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCou
         Integer haveCoupons = this.lambdaQuery()
                 .eq(UserCoupon::getUserId, userId)
                 .eq(UserCoupon::getCouponId, coupon.getId()).count();
-        if (!PromotionStatus.START.name().equals(coupon.getPromotionStatus())) {
+        if (!PromotionStatus.START.equals(coupon.getPromotionStatus())) {
             throw new ResourceUnavailableException("当前优惠券已经被领取完了,下次要早点来哦");
         }
         if (coupon.getPublishNum() != 0 && coupon.getReceivedNum() >= coupon.getPublishNum()) {

+ 145 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserInviteServiceImpl.java

@@ -0,0 +1,145 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.uc.api.dto.UserDTO;
+import com.chelvc.cloud.uc.api.service.UserService;
+import com.chelvc.cloud.vehicle.api.dto.TeamDTO;
+import com.chelvc.cloud.vehicle.api.dto.TeamDetailsDTO;
+import com.chelvc.cloud.vehicle.api.param.TeamInvitePageParam;
+import com.chelvc.cloud.vehicle.api.param.UserInviteParams;
+import com.chelvc.cloud.vehicle.api.service.UserInviteService;
+import com.chelvc.cloud.vehicle.server.dao.ProfitRatioConfigMapper;
+import com.chelvc.cloud.vehicle.server.dao.UserInviteMapper;
+import com.chelvc.cloud.vehicle.server.dao.UserProfitRatioMapper;
+import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
+import com.chelvc.cloud.vehicle.server.entity.UserInvite;
+import com.chelvc.cloud.vehicle.server.entity.UserProfitRatio;
+import com.chelvc.cloud.vehicle.server.service.MerchantService;
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.model.Paging;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.UserInviteService.class)
+public class UserInviteServiceImpl extends ServiceImpl<UserInviteMapper, UserInvite> implements UserInviteService {
+
+    private final ProfitRatioConfigMapper profitRatioConfigMapper;
+
+    private final UserProfitRatioMapper userProfitRatioMapper;
+
+    @DubboReference
+    UserService userService;
+
+    private final MerchantService merchantService;
+
+    @Override
+    @Transactional
+    public void bindInvite(UserInviteParams params) {
+        Long userId = params.getUserId();
+        Long targetId = params.getTargetId();
+        Integer type = params.getType();
+        if(userId == null || targetId == null || type == null){
+            throw new ResourceUnavailableException("参数错误");
+        }
+        LambdaQueryWrapper<UserInvite> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(UserInvite::getTargetId, targetId);
+        wrapper.eq(UserInvite::getType, type);
+        Integer count = baseMapper.selectCount(wrapper);
+        if(count > 0){
+            throw new ResourceUnavailableException("该用户已绑定关系");
+        }
+        UserInvite userInvite = new UserInvite();
+        userInvite.setUserId(userId);
+        userInvite.setTargetId(targetId);
+        userInvite.setType(type);
+        userInvite.setCreateTime(LocalDateTime.now());
+        int i = baseMapper.insert(userInvite);
+        if(i < 1){
+            throw new ResourceUnavailableException("绑定失败");
+        }
+        LambdaQueryWrapper<UserInvite> lwq = Wrappers.lambdaQuery();
+        lwq.eq(UserInvite::getUserId, userId);
+        lwq.eq(UserInvite::getType, type);
+        Integer total = baseMapper.selectCount(lwq);
+        int ratio = 0;
+        LambdaQueryWrapper<UserProfitRatio> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(UserProfitRatio::getUserId, userId);
+        lambdaQuery.eq(UserProfitRatio::getType, type);
+        UserProfitRatio userProfitRatio = userProfitRatioMapper.selectOne(lambdaQuery);
+        if(userProfitRatio == null){
+            userProfitRatio = new UserProfitRatio();
+            userProfitRatio.setRatio(ratio);
+            userProfitRatio.setUserId(userId);
+            userProfitRatio.setType(type);
+            userProfitRatio.setCreateTime(LocalDateTime.now());
+            userProfitRatio.setUpdateTime(LocalDateTime.now());
+            userProfitRatio.setUpdater(1L);
+            userProfitRatioMapper.insert(userProfitRatio);
+        }
+        int oldRatio = userProfitRatio.getRatio();
+        LambdaQueryWrapper<ProfitRatioConfig> config = Wrappers.lambdaQuery();
+        config.eq(ProfitRatioConfig::getType, type);
+        config.eq(ProfitRatioConfig::getStatus, 0);
+        config.orderByDesc(ProfitRatioConfig::getNum);
+        List<ProfitRatioConfig> list = profitRatioConfigMapper.selectList(config);
+        if(!CollectionUtils.isEmpty(list)){
+            for(ProfitRatioConfig profitRatioConfig : list){
+                int num = profitRatioConfig.getNum();
+                if(total >= num){
+                    ratio = profitRatioConfig.getRatio();
+                    break;
+                }
+            }
+        }
+        if(ratio != 0 && ratio != oldRatio){
+            userProfitRatio.setRatio(ratio);
+            userProfitRatio.setUpdateTime(LocalDateTime.now());
+            userProfitRatio.setUpdater(1L);
+            userProfitRatioMapper.update(userProfitRatio, null);
+        }
+    }
+
+    @Override
+    public TeamDTO teamList(TeamInvitePageParam param, Long userId) {
+        TeamDTO dto = new TeamDTO();
+        Paging paging = param.getPaging();
+        int pageNum = (paging.getIndex() - 1) * paging.getNumber();
+        if(pageNum < 0){
+            return dto;
+        }
+        List<TeamDetailsDTO> records = baseMapper.teamList(param.getType(), pageNum, paging.getNumber(), userId);
+        if(CollectionUtils.isEmpty(records)){
+            return dto;
+        }
+        Map<Long, UserDTO> map = new HashMap<>();
+        if(param.getType() == null || param.getType() == 1){
+            List<Long> ids = records.stream().filter(e -> e.getSourceType() == 1).map(TeamDetailsDTO::getInviteUserId).collect(Collectors.toList());
+            map = userService.queryUserByIds(ids);
+        }
+        for(TeamDetailsDTO detailsDTO : records){
+            Integer sourceType = detailsDTO.getSourceType();
+            if(sourceType == 1){
+                UserDTO userDTO = map.get(detailsDTO.getInviteUserId());
+                detailsDTO.setName(userDTO == null ? "" : userDTO.getNickname());
+            } else {
+                detailsDTO.setName(merchantService.getMerchantName(detailsDTO.getInviteUserId()));
+            }
+        }
+        dto = baseMapper.teamTotalStatistics(param.getType(), userId);
+        dto.setRecords(records);
+        return dto;
+    }
+}

+ 26 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/task/PlatformProfitRatioTask.java

@@ -0,0 +1,26 @@
+package com.chelvc.cloud.vehicle.server.task;
+
+import com.chelvc.cloud.vehicle.server.service.PlatformProfitRatioService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 计算平台分佣比例
+ */
+@Slf4j
+@Component
+@EnableScheduling //开启定时任务
+public class PlatformProfitRatioTask {
+
+    @Autowired
+    PlatformProfitRatioService platformProfitRatioService;
+
+    @Scheduled(cron = "0 0 0 1 * ?") //每月第一天凌晨0点
+    public void closeAccountTask(){
+        log.info("触发更新平台分佣比例定时任务==============");
+        platformProfitRatioService.updateProfitRatio();
+    }
+}

+ 5 - 1
vehicle-server/src/main/resources/application-dev.yml

@@ -18,4 +18,8 @@ dubbo:
 
 nacos:
   config:
-    server-addr: 47.108.128.78:6848
+    server-addr: 47.108.128.78:6848
+
+location:
+  tencent:
+    key: VPKBZ-CR3CG-R23QE-QK2IY-LNXKZ-GCB34

+ 1 - 1
vehicle-server/src/main/resources/mapper/FavoriteMapper.xml

@@ -31,7 +31,7 @@
         )) distance from favorite fe
         inner join merchant mt on fe.content_id = mt.id and mt.status = 'ONLINE'
         and mt.region = #{param.region}
-        where fe.user_id = #{userId} and fe.type = 'MERCHANT'
+        where fe.user_id = #{userId} and fe.type = #{param.type}
         <if test="param.offset != null">
             and fe.id > #{param.offset}
         </if>

+ 2 - 2
vehicle-server/src/main/resources/mapper/GoodsMapper.xml

@@ -9,8 +9,8 @@
             <if test="param.offset != null">
                 and id > #{param.offset}
             </if>
-            <if test="param.type != null">
-                and type = #{param.type}
+            <if test="param.categoryId != null">
+                and category_id = #{param.categoryId}
             </if>
             and status = 'ONLINE'
         </where>

+ 33 - 0
vehicle-server/src/main/resources/mapper/MerchantMapper.xml

@@ -90,4 +90,37 @@
           AND content_id = #{merchantId}
           AND user_id = #{userId}
     </select>
+
+    <select id="listRankMerchants" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO">
+        SELECT
+            mt.id,
+            mt.NAME,
+            mt.logo,
+            mt.score,
+            mt.sale,
+            mt.address,
+            SUM( om.pay_amount ) amount,
+            round(
+                    st_distance_sphere ( POINT ( mt.longitude, mt.latitude ), POINT ( #{param.longitude}, #{param.latitude}) )) distance
+        FROM
+            `merchant` mt
+                LEFT JOIN oms_order om ON mt.user_id = om.merchant_id
+        WHERE
+            om.STATUS = 3
+        <if test="level == 1">
+            and mt.province = #{regionId}
+        </if>
+        <if test="level == 2">
+            and mt.city = #{regionId}
+        </if>
+        <if test="level == 3">
+            and mt.district = #{regionId}
+        </if>
+          AND om.create_time >= #{monthStartLocalTime}
+        GROUP BY
+            mt.id
+        ORDER BY
+            amount DESC
+        limit 10
+    </select>
 </mapper>

+ 12 - 1
vehicle-server/src/main/resources/mapper/OmsOrderMapper.xml

@@ -936,6 +936,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
 
-
+    <select id="queryAmountByLastMonth" resultType="java.math.BigDecimal">
+        select
+            count(pay_amount)
+        from
+            oms_order
+        where
+            merchant_id = #{merchantId}
+        and
+            status = 3
+        and
+            payment_time between #{startLocalTime} and #{endLocalTime}
+    </select>
 
 </mapper>

+ 33 - 0
vehicle-server/src/main/resources/mapper/PlatformProfitRatioMapper.xml

@@ -0,0 +1,33 @@
+<?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="com.chelvc.cloud.vehicle.server.dao.UserCouponMapper">
+
+    <resultMap type="com.chelvc.cloud.vehicle.api.dto.PlatformProfitRatioDTO" id="PlatformProfitRatioResult">
+        <result property="id" column="id"/>
+        <result property="ratio" column="ratio"/>
+        <result property="userId" column="user_id"/>
+        <result property="turnover" column="turnover"/>
+        <result property="name" column="name"/>
+        <result property="updater" column="updater"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <select id="queryPageList" resultMap="PlatformProfitRatioResult">
+        SELECT
+            t.*,m.name
+        FROM
+            platform_profit_ratio t
+            left join merchant m on t.user_id = t.user_id
+            ${ew.getCustomSqlSegment}
+    </select>
+
+    <update id="updateRatio">
+        update
+            platform_profit_ratio
+        set
+            ratio = #{ratio}, update_time = #{now}, updater = 1, turnover = #{amount}
+        where
+            id = #{id}
+    </update>
+</mapper>

+ 24 - 0
vehicle-server/src/main/resources/mapper/ProfitRatioConfigMapper.xml

@@ -0,0 +1,24 @@
+<?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="com.chelvc.cloud.vehicle.server.dao.UserCouponMapper">
+
+    <resultMap type="com.chelvc.cloud.vehicle.api.dto.ProfitRatioConfigDTO" id="ProfitRatioConfigResult">
+        <result property="id" column="id"/>
+        <result property="ratio" column="ratio"/>
+        <result property="type" column="type"/>
+        <result property="status" column="status"/>
+        <result property="num" column="num"/>
+        <result property="creator" column="creator"/>
+        <result property="updater" column="updater"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <select id="queryPageList" resultMap="ProfitRatioConfigResult">
+        SELECT
+            *
+        FROM
+            profit_ratio_config
+            ${ew.getCustomSqlSegment}
+    </select>
+</mapper>

+ 19 - 0
vehicle-server/src/main/resources/mapper/RegionMapper.xml

@@ -0,0 +1,19 @@
+<?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="com.chelvc.cloud.vehicle.server.dao.RegionMapper">
+
+
+
+    <select id="getRegionByPid" resultType="com.chelvc.cloud.vehicle.api.dto.RegionDTO">
+       select
+           id,
+           name,
+           pid,
+           sname,
+           level
+       from
+           region
+        where
+            pid = #{pid}
+    </select>
+</mapper>

+ 47 - 0
vehicle-server/src/main/resources/mapper/UserInviteMapper.xml

@@ -0,0 +1,47 @@
+<?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="com.chelvc.cloud.vehicle.server.dao.UserInviteMapper">
+
+
+
+    <select id="teamList" resultType="com.chelvc.cloud.vehicle.api.dto.TeamDetailsDTO">
+        SELECT
+            i.user_id,
+            target_id AS inviteUserId,
+            SUM( r.reality_amount ) amount,
+            r.source_type sourceType
+        FROM
+            user_invite i
+                LEFT JOIN currency_record r ON i.user_id = r.user_id
+                AND i.target_id = r.source_user_id
+                AND r.type = 0
+                AND i.type = r.source_type
+        WHERE
+            i.user_id = #{userId}
+            <if test="type != null">
+                and i.type = #{type}
+            </if>
+        GROUP BY
+            i.id
+        ORDER BY
+            amount DESC
+        limit #{pageNum}, #{pageSize}
+    </select>
+
+    <select id="teamTotalStatistics" resultType="com.chelvc.cloud.vehicle.api.dto.TeamDTO">
+        SELECT
+        count(i.id) total,
+        sum(r.reality_amount) totalAmount
+        FROM
+        user_invite i
+        LEFT JOIN currency_record r ON i.user_id = r.user_id
+        AND i.target_id = r.source_user_id
+        AND r.type = 0
+        AND i.type = r.source_type
+        WHERE
+        i.user_id = #{userId}
+        <if test="type != null">
+            and i.type = #{type}
+        </if>
+    </select>
+</mapper>

二进制
vehicle-server/src/main/resources/payUtils/10012951683.pfx


+ 25 - 0
vehicle-server/src/main/resources/payUtils/CFCA_sandbox.cer

@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEHjCCAwagAwIBAgIIMwAAAAFIAUkwDQYJKoZIhvcNAQELBQAwXTELMAkGA1UE
+BhMCQ04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eTEcMBoGA1UEAwwTQ0ZDQSBBQ1MgVEVTVCBPQ0EzMzAeFw0xOTA1MTUw
+ODQwMTRaFw0yNDA1MTUwODQwMTRaMH8xCzAJBgNVBAYTAkNOMRgwFgYDVQQKDA9D
+RkNBIFRFU1QgT0NBMzMxDzANBgNVBAsMBjk5YmlsbDEZMBcGA1UECwwQT3JnYW5p
+emF0aW9uYWwtMTEqMCgGA1UEAwwhMDUxQOW/q+mSsea1i+ivlVJTQUBaOTlCaWxs
+VGVzdEAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp1mxpwPjVJdh
+ey3h19FHWY4gMpG89v0bX1INPxOBNgvkJTTH7bYrG7ReEFZD3WI61dpgXbgc6hSe
+5kgLUMvW6XpYmgSe8Yh2ffBeSH6O3qTCGv8QDMEDZrygGsNdEBdXm1voA73SRm/P
+8feFRbzPHxIQebukBO5K9eAJIFZTonYMY1+lxrGSP4bw+GuF9aCbLQnXz4ds726C
+32LjBX1LtUMqqCtwJvcrtVFlGIulrkq8H5v58d7gzXk4MJJIPjAU8XHFZfXHgiHw
+jbkGCubHe2yRZK1g1s8MfglbpmkDX3B8W2oDt47XYa65BZ0QYK1BKrG+B0oagbVP
+TYN0xZ2V6QIDAQABo4G/MIG8MB8GA1UdIwQYMBaAFJ7uXTLMc66SNswUEc//1w4w
+Pm/RMAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL3Vjcmwu
+Y2ZjYS5jb20uY24vT0NBMzMvUlNBL2NybDI3Mi5jcmwwDgYDVR0PAQH/BAQDAgbA
+MB0GA1UdDgQWBBSv5vr2stVPyRTPmY4C0Vcfa+pzWzAdBgNVHSUEFjAUBggrBgEF
+BQcDAgYIKwYBBQUHAwQwDQYJKoZIhvcNAQELBQADggEBACMeT3Wk4n4MW4ll++IV
++BR1VAwORxANxtF8vGEN2sb+/eZ3e8+nOSB4X3WKIJgrT67+/WbeN8FK0S0V2Mrp
+bqlNoqxoQBG5zkizcOYFhzq7GB01U3zSkxC7uSvPTN69jVKmCbsCm73jsCYYTKaC
+RMsbNsp0Yr+u0VGT70JEseFBwQ/UsjVHUKXNywyIZZpn4IlSWW4sHMW+3EiPj/tP
+/hBLG/bqJM2FSUYI4dP1CBLuEqXo0FfvCdF3VKAfZtcEozDyAlpBbSNxidbjGv0d
+Hq47dAmFJRTyl9m7OaVNt+Q5WYnRs0YSafUZGA/28EYom1Yt0L2Vyup6ibntwf1L
+A+M=
+-----END CERTIFICATE-----