Преглед изворни кода

add 分销推广订单功能

first

first

fix

fix

fix

fix

fix

fix 提现审核

fix 提现审核

fix 统计

fix 分销统计

fix 分销统计

fix 分销订单

fix 分销订单

fix 分销订单

fix
zoujiajian пре 3 година
родитељ
комит
ed0196e422
43 измењених фајлова са 1334 додато и 16 уклоњено
  1. 8 0
      netflix-dao/src/main/java/com/cyksj/mapper/UserMapper.java
  2. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributeMoneyApplyMapper.java
  3. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributePointsExchangeMoneyMapper.java
  4. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributeWaitingSendPointsMapper.java
  5. 14 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/UserDistributeMapper.java
  6. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/UserDistributeSharedMapper.java
  7. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/UserPlatDistributeRateMapper.java
  8. 10 0
      netflix-dao/src/main/java/com/cyksj/model/entity/AbstractBackData.java
  9. 45 0
      netflix-dao/src/main/java/com/cyksj/model/entity/DistributeMoneyApply.java
  10. 20 0
      netflix-dao/src/main/java/com/cyksj/model/entity/DistributePointsExchangeMoney.java
  11. 54 0
      netflix-dao/src/main/java/com/cyksj/model/entity/DistributeWaitingSendPoints.java
  12. 5 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDon.java
  13. 7 1
      netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java
  14. 3 0
      netflix-dao/src/main/java/com/cyksj/model/entity/User.java
  15. 25 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserDistribute.java
  16. 24 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeShared.java
  17. 27 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserPlatDistributeRate.java
  18. 4 1
      netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSpuInsert.java
  19. 5 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/GoodsDonViewer.java
  20. 19 2
      netflix-dao/src/main/java/com/cyksj/model/manage/views/UserView.java
  21. 27 0
      netflix-dao/src/main/java/com/cyksj/model/request/DistributeApplyMoneyReq.java
  22. 31 0
      netflix-dao/src/main/java/com/cyksj/model/request/UserDistributeReq.java
  23. 42 1
      netflix-dao/src/main/java/com/cyksj/model/views/BackgroundDataView.java
  24. 45 0
      netflix-dao/src/main/java/com/cyksj/model/views/DistributeMoneyApplyView.java
  25. 37 0
      netflix-dao/src/main/java/com/cyksj/model/views/DistributeOrdersView.java
  26. 60 0
      netflix-dao/src/main/java/com/cyksj/model/views/DistributePopularizeOrdersView.java
  27. 41 0
      netflix-dao/src/main/java/com/cyksj/model/views/DistributePopularizeView.java
  28. 21 0
      netflix-dao/src/main/java/com/cyksj/model/views/MoneyApplyView.java
  29. 56 0
      netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeViews.java
  30. 13 0
      netflix-dao/src/main/resources/mapper/UserDistributeMapper.xml
  31. 15 0
      netflix-service/src/main/java/com/cyksj/service/distribute/DistributeService.java
  32. 78 0
      netflix-service/src/main/java/com/cyksj/service/distribute/impl/DistributeServiceImpl.java
  33. 64 4
      netflix-service/src/main/java/com/cyksj/service/mange/statistics/impl/StatisticsDataServiceImpl.java
  34. 73 0
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
  35. 1 1
      netflix-service/src/main/java/com/cyksj/service/user/UserService.java
  36. 22 2
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java
  37. 41 2
      netflix-service/src/main/java/com/cyksj/task/Scheduler.java
  38. 10 0
      netflix-service/src/main/java/com/cyksj/task/StatisticsDataScheduler.java
  39. 10 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsUserController.java
  40. 173 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/DistributeController.java
  41. 1 1
      netflix-web/src/main/java/com/cyksj/web/controller/user/AuthorizationController.java
  42. 137 0
      netflix-web/src/main/java/com/cyksj/web/controller/user/DistributePopularizeController.java
  43. 1 1
      netflix-web/src/main/resources/application.yml

+ 8 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserMapper.java

@@ -5,6 +5,8 @@ import com.cyksj.model.entity.User;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
 
+import java.math.BigDecimal;
+
 /**
  * @author chan
  * @date 2021/10/10 下午3:28
@@ -16,4 +18,10 @@ public interface UserMapper extends BaseMapper<User> {
 
     @Update("update user set lottery_time = lottery_time + 1 where id = #{id}")
     void incrLotteryTime(@Param("id") Long userId);
+
+    @Update("update user set points = points - #{points} where id = #{id} and points >= #{points} and points >0")
+    Integer subPoints(@Param("id") Long id, @Param("points") int points);
+
+    @Update("update user set points = points + #{points} where id = #{id} and points >=0")
+    Integer addPoints(@Param("id") Long id, @Param("points") BigDecimal points);
 }

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributeMoneyApplyMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.DistributeMoneyApply;
+
+/*
+ *项目名: netflix
+ *文件名: DistributeMoneyApplyMapper
+ *创建者: JavaZou
+ *创建时间:2022/11/14 14:00
+ */
+public interface DistributeMoneyApplyMapper extends BaseMapper<DistributeMoneyApply> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributePointsExchangeMoneyMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.DistributePointsExchangeMoney;
+
+/*
+ *项目名: netflix
+ *文件名: DistributePointsExchangeMoneyMapper
+ *创建者: JavaZou
+ *创建时间:2022/11/14 15:55
+ */
+public interface DistributePointsExchangeMoneyMapper extends BaseMapper<DistributePointsExchangeMoney> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributeWaitingSendPointsMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.DistributeWaitingSendPoints;
+
+/*
+ *项目名: netflix
+ *文件名: DistributeWaitingSendPointsMapper
+ *创建者: JavaZou
+ *创建时间:2022/11/15 12:10
+ */
+public interface DistributeWaitingSendPointsMapper extends BaseMapper<DistributeWaitingSendPoints> {
+}

+ 14 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/UserDistributeMapper.java

@@ -0,0 +1,14 @@
+package com.cyksj.mapper.manage.distribute;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserDistribute;
+
+/*
+ *项目名: netflix
+ *文件名: UserDistributeMapper
+ *创建者: JavaZou
+ *创建时间:2022/11/14 12:18
+ */
+public interface UserDistributeMapper extends BaseMapper<UserDistribute> {
+	Integer count(Long userId);
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/UserDistributeSharedMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserDistributeShared;
+
+/*
+ *项目名: netflix
+ *文件名: UserDistributeSharedMapper
+ *创建者: JavaZou
+ *创建时间:2022/11/15 11:51
+ */
+public interface UserDistributeSharedMapper extends BaseMapper<UserDistributeShared> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/UserPlatDistributeRateMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserPlatDistributeRate;
+
+/*
+ *项目名: netflix
+ *文件名: UserPlatDistributeRateMapper
+ *创建者: JavaZou
+ *创建时间:2022/11/14 12:23
+ */
+public interface UserPlatDistributeRateMapper extends BaseMapper<UserPlatDistributeRate> {
+}

+ 10 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/AbstractBackData.java

@@ -52,6 +52,16 @@ public abstract class AbstractBackData {
 	 */
 	private Integer numOfYearOrder;
 
+	/**
+	 * 分销单数
+	 */
+	private Integer numOfDistributeOrder;
+
+	/**
+	 * 分销单数
+	 */
+	private BigDecimal distributeOrderMoney;
+
 	private Date statisticsDate;
 
 	/**

+ 45 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DistributeMoneyApply.java

@@ -0,0 +1,45 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+
+/*
+ *项目名: netflix
+ *文件名: DistributeMoneyApply
+ *创建者: JavaZou
+ *创建时间:2022/11/14 14:00
+ */
+@Getter
+@Setter
+public class DistributeMoneyApply extends BaseEntity {
+
+	private Long userId;
+
+	private BigDecimal money;
+
+	private String reason;
+
+	private Integer points;
+
+	private Status verifyStatus;
+
+	@Getter
+	public enum Status {
+		Success("审核成功"),
+		Fail("审核失败"),
+		Verifying("审核中"),
+		;
+		String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+
+		public static Status checkStatus(String status) {
+			return Arrays.stream(Status.values()).filter(st -> st.name().equals(status)).findFirst().orElse(null);
+		}
+	}
+}

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DistributePointsExchangeMoney.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/*
+ *项目名: netflix
+ *文件名: DistributePointsExchangeMoney
+ *创建者: JavaZou
+ *创建时间:2022/11/14 15:56
+ */
+@Getter
+@Setter
+public class DistributePointsExchangeMoney extends BaseEntity{
+	private Integer points;
+
+	private BigDecimal money;
+}

+ 54 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DistributeWaitingSendPoints.java

@@ -0,0 +1,54 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: DistributeWaitingSendPoints
+ *创建者: JavaZou
+ *创建时间:2022/11/15 12:11
+ */
+@Getter
+@Setter
+public class DistributeWaitingSendPoints extends BaseEntity{
+	/**
+	 * 分销订单产生用户id
+	 */
+	private Long userId;
+
+	/**
+	 * 积分待发人
+	 */
+	private Long sharedId;
+
+	private Long orderId;
+
+	private BigDecimal points;
+
+	/**
+	 * 退款状态不再发
+	 */
+	private Status sendStatus;
+
+	private Integer version;
+
+	private Date sendTime;
+
+	@Getter
+	public enum Status{
+		close("分销订单关闭,积分奖励不分发"),
+		success("积分发送成功"),
+		waiting("积分等待发送"),
+		not_exist("用户不存在,导致发送失败"),
+		;
+		String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+	}
+}

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDon.java

@@ -72,6 +72,11 @@ public class GoodsDon extends BaseEntity {
 
     private String banner;
 
+    /**
+     * 平台分销比例
+     */
+    private Integer rate;
+
     @TableField(exist = false)
     @DbIgnore
     private Integer accountCount;

+ 7 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java

@@ -65,6 +65,11 @@ public class OrderDon extends BaseEntity implements Serializable {
      */
     private Date payTime;
 
+    /**
+     * 是否是分销订单
+     */
+    private Boolean isDistribute;
+
     public enum Status {
         /**
          * 订单状态
@@ -74,7 +79,8 @@ public class OrderDon extends BaseEntity implements Serializable {
         hasPayment("已付款"),
         transport("已发货"),
         received("已签收"),
-        complete("已完成");
+        complete("已完成"),
+        refund("已退款")
         ;
 
         private String desc;

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/User.java

@@ -5,6 +5,7 @@ import lombok.Setter;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @author chan
@@ -42,5 +43,7 @@ public class User extends BaseEntity implements Serializable{
 
     /** 性别;性别 */
     private Integer sex ;
+
+    private BigDecimal points;
 }
 

+ 25 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistribute.java

@@ -0,0 +1,25 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: UserDistribute
+ *创建者: JavaZou
+ *创建时间:2022/11/14 12:10
+ */
+@Getter
+@Setter
+public class UserDistribute extends BaseEntity{
+	private Long userId;
+
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+	@TableLogic(value = "1", delval = "0")
+	private Boolean deleted;
+}

+ 24 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeShared.java

@@ -0,0 +1,24 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: UserDistributeShared
+ *创建者: JavaZou
+ *创建时间:2022/11/15 11:51
+ */
+@Getter
+@Setter
+public class UserDistributeShared extends BaseEntity{
+	/**
+	 * 被分享人id
+	 */
+	private Long userId;
+
+	/**
+	 * 分享人id
+	 */
+	private Long sharedId;
+}

+ 27 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserPlatDistributeRate.java

@@ -0,0 +1,27 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: UserPlatDistributeRate
+ *创建者: JavaZou
+ *创建时间:2022/11/14 12:12
+ */
+@Getter
+@Setter
+public class UserPlatDistributeRate extends BaseEntity{
+	private Long goodsId;
+
+	/**
+	 * 固定用户分销id
+	 */
+	private Long distributeId;
+
+	/**
+	 * 分销比例
+	 */
+	private Integer rate;
+}
+

+ 4 - 1
netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSpuInsert.java

@@ -75,5 +75,8 @@ public class ReqGoodsSpuInsert {
      */
     private Integer secondType;
 
-
+    /**
+     * 平台分销比例
+     */
+    private Integer rate;
 }

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/GoodsDonViewer.java

@@ -118,6 +118,11 @@ public class GoodsDonViewer {
     @DbField("g.second_type")
     private Integer secondType;
 
+    /**
+     * banner
+     */
+    @DbField("g.rate")
+    private Integer rate;
 
     @DbIgnore
     private List<GoodsDonSku> skus;

+ 19 - 2
netflix-dao/src/main/java/com/cyksj/model/manage/views/UserView.java

@@ -1,6 +1,5 @@
 package com.cyksj.model.manage.views;
 
-import com.cyksj.model.entity.BaseEntity;
 import com.ejlchina.searcher.bean.DbField;
 import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
@@ -13,7 +12,7 @@ import lombok.Setter;
  */
 @Getter
 @Setter
-@SearchBean(tables = "user u")
+@SearchBean(tables = "user u left join user_distribute_shared usd on usd.shared_id = u.id")
 public class UserView {
 
     /**
@@ -57,4 +56,22 @@ public class UserView {
      */
     @DbIgnore
     private Integer accountNum;
+
+    /**
+     * 邀请人id
+     */
+    @DbField("usd.shared_id")
+    private Long sharedId;
+
+    /**
+     * 邀请人名称
+     */
+    @DbIgnore
+    private String sharNickName;
+
+    /**
+     * 邀请人头像
+     */
+    @DbIgnore
+    private String sharHeadimgurl;
 }

+ 27 - 0
netflix-dao/src/main/java/com/cyksj/model/request/DistributeApplyMoneyReq.java

@@ -0,0 +1,27 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+/*
+ *项目名: netflix
+ *文件名: DistributeApplyMoneyReq
+ *创建者: JavaZou
+ *创建时间:2022/11/15 9:50
+ */
+@Getter
+@Setter
+public class DistributeApplyMoneyReq {
+	@NotNull(message = "id错误")
+	@Min(value = 1, message = "id错误")
+	private Long id;
+
+	@NotEmpty(message = "审核状态为空")
+	private String verifyStatus;
+
+	private String reason;
+}

+ 31 - 0
netflix-dao/src/main/java/com/cyksj/model/request/UserDistributeReq.java

@@ -0,0 +1,31 @@
+package com.cyksj.model.request;
+
+import com.cyksj.model.entity.UserPlatDistributeRate;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/*
+ *项目名: netflix
+ *文件名: UserDistributeReq
+ *创建者: JavaZou
+ *创建时间:2022/11/14 12:15
+ */
+@Getter
+@Setter
+public class UserDistributeReq {
+
+	private Long id;
+
+	@NotNull(message = "请添加用户")
+	private Long userId;
+
+	private String remark;
+
+	/**
+	 * 平台分销比例
+	 */
+	private List<UserPlatDistributeRate> rates;
+}

+ 42 - 1
netflix-dao/src/main/java/com/cyksj/model/views/BackgroundDataView.java

@@ -44,6 +44,48 @@ public class BackgroundDataView {
 	 */
 	private Integer totalExpiredAccountNum;
 
+
+
+
+	/**
+	 * 分销单数
+	 */
+	private Integer distributeOrders;
+
+
+	/**
+	 * 固定推广者分销单数
+	 */
+	private Integer distributePopularizeOrders;
+
+	/**
+	 * 普通分销单数
+	 */
+	private Integer distributeOriginalOrders;
+
+	/**
+	 * 固定推广者分销金额
+	 */
+	private BigDecimal distributePopularizeMoney;
+
+	/**
+	 * 普通分销金额
+	 */
+	private BigDecimal distributeOriginalMoney;
+
+	/**
+	 * 已提现分销金额
+	 */
+	private BigDecimal distributeGotMoney;
+
+	/**
+	 * 待审核提现分销金额
+	 */
+	private BigDecimal distributeVerifyingMoney;
+
+
+
+
 	/**
 	 * apple one数据
 	 */
@@ -58,5 +100,4 @@ public class BackgroundDataView {
 	 * 实物数据
 	 */
 	private List<RealGoodsData> realGoodsDataViews;
-
 }

+ 45 - 0
netflix-dao/src/main/java/com/cyksj/model/views/DistributeMoneyApplyView.java

@@ -0,0 +1,45 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.entity.DistributeMoneyApply;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: DistributeMoneyApplyView
+ *创建者: JavaZou
+ *创建时间:2022/11/15 9:28
+ */
+@Getter
+@Setter
+@SearchBean(tables = "distribute_money_apply dma left join user u on u.id = dma.user_id")
+public class DistributeMoneyApplyView {
+	@DbField("dma.id")
+	private Long id;
+
+	@DbField("dma.user_id")
+	private Long userId;
+
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("dma.money")
+	private BigDecimal money;
+
+	@DbField("dma.reason")
+	private String reason;
+
+	@DbField("dma.points")
+	private Integer points;
+
+	@DbField("dma.verify_status")
+	private DistributeMoneyApply.Status verifyStatus;
+
+	@DbField("dma.created_time")
+	private Date createdTime;
+}

+ 37 - 0
netflix-dao/src/main/java/com/cyksj/model/views/DistributeOrdersView.java

@@ -0,0 +1,37 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: DistributeOrders
+ *创建者: JavaZou
+ *创建时间:2022/11/15 10:52
+ */
+@Getter
+@Setter
+@SearchBean(tables = "order_don od left join user_distribute_shared uds on uds.user_id = od.user_id" +
+		" left join user_distribute ud on ud.user_id = uds.shared_id",
+where = "od.is_distribute is true")
+public class DistributeOrdersView {
+	@DbField("od.id")
+	private Long id;
+
+	@DbField("od.money")
+	private BigDecimal money;
+
+	@DbField("ud.user_id")
+	private Long userId;
+
+	@DbField("od.status")
+	private String status;
+
+	@DbField("od.created_time")
+	private Date createdTime;
+}

+ 60 - 0
netflix-dao/src/main/java/com/cyksj/model/views/DistributePopularizeOrdersView.java

@@ -0,0 +1,60 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: DistributePopularizeOrdersView
+ *创建者: JavaZou
+ *创建时间:2022/11/15 14:28
+ */
+@Getter
+@Setter
+@SearchBean(tables = "distribute_waiting_send_points dw left join order_don od on od.id = dw.order_id" +
+		" left join user u on u.id = od.user_id ",
+		where = "od.is_distribute is true")
+public class DistributePopularizeOrdersView {
+	@DbField("od.id")
+	private Long orderId;
+
+	@DbField("od.goods_id")
+	@JsonIgnore
+	private Long goodsId;
+
+	@DbField("od.sku_id")
+	@JsonIgnore
+	private Long skuId;
+
+	@DbField("od.money")
+	private BigDecimal money;
+
+	@DbField("dw.shared_id")
+	@JsonIgnore
+	private Long sharedId;
+
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("dw.points")
+	private BigDecimal points;
+
+	@DbField("dw.send_status")
+	private String sendStatus;
+
+	@DbIgnore
+	private String goodsTitle;
+
+	@DbIgnore
+	private String specVal;
+
+	@DbField("od.created_time")
+	private Date createdTime;
+}

+ 41 - 0
netflix-dao/src/main/java/com/cyksj/model/views/DistributePopularizeView.java

@@ -0,0 +1,41 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/*
+ *项目名: netflix
+ *文件名: DistributePopularizeView
+ *创建者: JavaZou
+ *创建时间:2022/11/15 14:04
+ */
+@Getter
+@Setter
+public class DistributePopularizeView {
+	/**
+	 * 分销链接
+	 */
+	private String url;
+
+	/**
+	 * 分销链接二维码
+	 */
+	private String urlCode;
+
+	/**
+	 * 目前积分
+	 */
+	private BigDecimal gotPoints;
+
+	/**
+	 * 带入账积分
+	 */
+	private Integer waitingSendPoints;
+
+	/**
+	 * 分销单数
+	 */
+	private Integer distributeOrders;
+}

+ 21 - 0
netflix-dao/src/main/java/com/cyksj/model/views/MoneyApplyView.java

@@ -0,0 +1,21 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/*
+ *项目名: netflix
+ *文件名: MoneyApplyView
+ *创建者: JavaZou
+ *创建时间:2022/11/15 9:42
+ */
+@Getter
+@Setter
+public class MoneyApplyView {
+	private BigDecimal gotMoney;
+
+	List<DistributeMoneyApplyView> details;
+}

+ 56 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeViews.java

@@ -0,0 +1,56 @@
+package com.cyksj.model.views;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: UserDistributeViews
+ *创建者: JavaZou
+ *创建时间:2022/11/14 13:49
+ */
+@Getter
+@Setter
+@SearchBean(tables = "user_distribute ud left join user u on u.id = ud.user_id")
+public class UserDistributeViews {
+
+	@DbField("ud.id")
+	private Long id;
+
+	@DbField("ud.user_id")
+	private Long userId;
+
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("ud.remark")
+	private String remark;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private Integer orders;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private BigDecimal availableMoney;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private BigDecimal gotMoney;
+
+	@DbField("u.points")
+	private Integer points;
+
+	@DbField("ud.created_time")
+	private Date createdTime;
+
+	@DbField("ud.update_time")
+	private Date updateTime;
+}

+ 13 - 0
netflix-dao/src/main/resources/mapper/UserDistributeMapper.xml

@@ -0,0 +1,13 @@
+<?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.cyksj.mapper.manage.distribute.UserDistributeMapper">
+
+    <select id="count" resultType="java.lang.Integer">
+        select count(*)
+        from `user_distribute_shared` us
+                 inner join `order_don` od
+                            on od.user_id = us.shared_id
+        where us.shar_id = #{userId}
+          and od.status not in ('close', 'noPayment', 'refund')
+    </select>
+</mapper>

+ 15 - 0
netflix-service/src/main/java/com/cyksj/service/distribute/DistributeService.java

@@ -0,0 +1,15 @@
+package com.cyksj.service.distribute;
+
+import com.cyksj.model.request.UserDistributeReq;
+
+/*
+ *项目名: netflix
+ *文件名: DistributeService
+ *创建者: JavaZou
+ *创建时间:2022/11/14 12:21
+ */
+public interface DistributeService {
+	void insertDistribute(UserDistributeReq userDistributeReq);
+
+	void editDistribute(UserDistributeReq userDistributeReq);
+}

+ 78 - 0
netflix-service/src/main/java/com/cyksj/service/distribute/impl/DistributeServiceImpl.java

@@ -0,0 +1,78 @@
+package com.cyksj.service.distribute.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
+import com.cyksj.mapper.manage.distribute.UserPlatDistributeRateMapper;
+import com.cyksj.model.entity.GoodsDon;
+import com.cyksj.model.entity.UserDistribute;
+import com.cyksj.model.entity.UserPlatDistributeRate;
+import com.cyksj.model.request.UserDistributeReq;
+import com.cyksj.service.distribute.DistributeService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/*
+ *项目名: netflix
+ *文件名: DistributeServiceImpl
+ *创建者: JavaZou
+ *创建时间:2022/11/14 12:21
+ */
+@Service
+@RequiredArgsConstructor
+public class DistributeServiceImpl implements DistributeService {
+	private final UserDistributeMapper userDistributeMapper;
+
+	private final UserPlatDistributeRateMapper userPlatDistributeRateMapper;
+
+	private final GoodsDonMapper goodsDonMapper;
+
+	@Override
+	@Transactional(rollbackFor = Throwable.class)
+	public void insertDistribute(UserDistributeReq userDistributeReq) {
+		UserDistribute exists = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, userDistributeReq.getUserId()).last("limit 1"));
+		if (exists != null) {
+			throw BusinessRuntimeException.getInstance("该推广者已添加");
+		}
+		UserDistribute userDistribute = new UserDistribute();
+		userDistribute.setUserId(userDistributeReq.getUserId());
+		userDistribute.setRemark(userDistributeReq.getRemark());
+		userDistributeMapper.insert(userDistribute);
+
+		for (UserPlatDistributeRate rate : userDistributeReq.getRates()) {
+			if (rate.getRate() <0 || rate.getRate() > 100) {
+				throw new BusinessRuntimeException("比例错误");
+			}
+			GoodsDon goodsDon = goodsDonMapper.selectById(rate.getGoodsId());
+			if (goodsDon == null || goodsDon.getType() == 2) {
+				throw new BusinessRuntimeException("平台错误");
+			}
+			rate.setDistributeId(userDistribute.getId());
+			userPlatDistributeRateMapper.insert(rate);
+		}
+	}
+
+	@Override
+	public void editDistribute(UserDistributeReq userDistributeReq) {
+		if (userDistributeReq.getId() == null || userDistributeReq.getId() < 1) {
+			throw BusinessRuntimeException.getInstance("id错误");
+		}
+		UserDistribute userDistribute = new UserDistribute();
+		userDistribute.setId(userDistributeReq.getId());
+		userDistribute.setRemark(userDistributeReq.getRemark());
+		userDistributeMapper.updateById(userDistribute);
+		for (UserPlatDistributeRate rate : userDistributeReq.getRates()) {
+			if (rate.getRate() <0 || rate.getRate() > 100) {
+				throw new BusinessRuntimeException("比例错误");
+			}
+			GoodsDon goodsDon = goodsDonMapper.selectById(rate.getGoodsId());
+			if (goodsDon == null || goodsDon.getType() == 2) {
+				throw new BusinessRuntimeException("平台错误");
+			}
+			rate.setDistributeId(userDistribute.getId());
+			userPlatDistributeRateMapper.updateById(rate);
+		}
+	}
+}

+ 64 - 4
netflix-service/src/main/java/com/cyksj/service/mange/statistics/impl/StatisticsDataServiceImpl.java

@@ -15,6 +15,7 @@ import com.cyksj.mapper.manage.statistics.RealGoodsDataMapper;
 import com.cyksj.mapper.manage.statistics.StreamingAccountDataMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.views.BackgroundDataView;
+import com.cyksj.model.views.DistributeOrdersView;
 import com.cyksj.model.views.ExpiredAccountDataView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.mange.CmsAccountService;
@@ -22,14 +23,14 @@ import com.cyksj.service.mange.statistics.StatisticsDataService;
 import com.cyksj.service.order.OrderDonService;
 import com.cyksj.service.user.UserService;
 import com.cyksj.task.StatisticsDataScheduler;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.param.Operator;
+import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /*
@@ -61,6 +62,8 @@ public class StatisticsDataServiceImpl implements StatisticsDataService {
 
 	private final GoodsDonSkuMapper goodsDonSkuMapper;
 
+	private final BeanSearcher beanSearcher;
+
 	@Override
 	public Result<BackgroundDataView> getStatisticsByCondition(Long startTime, Long endTime) {
 		BackgroundDataView backgroundDataView = new BackgroundDataView();
@@ -163,5 +166,62 @@ public class StatisticsDataServiceImpl implements StatisticsDataService {
 		//已到期主账号
 		List<Account> expiredAccounts = Optional.ofNullable(accountService.list(Wrappers.lambdaQuery(Account.class).le(Account::getExpiryTime, now))).orElse(new ArrayList<>());
 		backgroundDataView.setTotalExpiredAccountNum(expiredAccounts.size());
+		//分销金额数据统计
+		distribute(backgroundDataView, startDate, endDate);
+	}
+
+	/**
+	 * 分销金额信息补充
+	 * @param backgroundDataView
+	 */
+	public void distribute(BackgroundDataView backgroundDataView, Date startDate, Date endDate) {
+		List<OrderDon> distributeOrders = Optional.ofNullable(orderDonService.list(Wrappers.lambdaQuery(OrderDon.class)
+				.eq(OrderDon::getIsDistribute, true)
+				.ge(ObjectUtil.isNotNull(startDate), OrderDon::getCreatedTime, startDate).le(ObjectUtil.isNotNull(endDate), OrderDon::getCreatedTime, endDate)
+				.select(OrderDon::getId, OrderDon::getMoney))).orElse(new ArrayList<>());
+		backgroundDataView.setDistributeOrders(distributeOrders.size());
+		//固定推广者订单
+		List<DistributeOrdersView> distributePopularizeOrders = Optional.ofNullable(beanSearcher.searchAll(DistributeOrdersView.class, MapUtils.builder()
+				.field(DistributeOrdersView::getStatus, StatisticsDataScheduler.noOrderStatus).op(Operator.NotIn)
+				.field(DistributeOrdersView::getUserId).op(Operator.NotNull)
+				.field(DistributeOrdersView::getCreatedTime, startDate, endDate).op(Operator.Between)
+				.build())).orElse(new ArrayList<>());
+		backgroundDataView.setDistributePopularizeOrders(distributePopularizeOrders.size());
+		//普通分销单数
+		List<DistributeOrdersView> distributeOriginalOrders = Optional.ofNullable(beanSearcher.searchAll(DistributeOrdersView.class, MapUtils.builder()
+				.field(DistributeOrdersView::getStatus, StatisticsDataScheduler.noOrderStatus).op(Operator.NotIn)
+				.field(DistributeOrdersView::getUserId).op(Operator.IsNull)
+				.field(DistributeOrdersView::getCreatedTime, startDate, endDate).op(Operator.Between)
+				.build())).orElse(new ArrayList<>());
+		backgroundDataView.setDistributeOriginalOrders(distributeOriginalOrders.size());
+		//固定推广者订单金额
+		Optional<BigDecimal> popularizeMoney = distributePopularizeOrders.stream().map(DistributeOrdersView::getMoney).reduce(BigDecimal::add);
+		//普通分销订单金额
+		Optional<BigDecimal> originalMoney = distributeOriginalOrders.stream().map(DistributeOrdersView::getMoney).reduce(BigDecimal::add);
+		backgroundDataView.setDistributePopularizeMoney(popularizeMoney.isPresent() ? popularizeMoney.get().divide(BigDecimal.valueOf(100)) : BigDecimal.ZERO);
+		backgroundDataView.setDistributeOriginalMoney(originalMoney.isPresent() ? popularizeMoney.get().divide(BigDecimal.valueOf(100)) : BigDecimal.ZERO);
+
+		List<DistributeMoneyApply> distributeMoneyApplies = Optional.ofNullable(beanSearcher.searchAll(DistributeMoneyApply.class, MapUtils.builder().field(DistributeMoneyApply::getCreatedTime, startDate, endDate).op(Operator.Between).build())).orElse(new ArrayList<>());
+		Map<DistributeMoneyApply.Status, List<DistributeMoneyApply>> collect = distributeMoneyApplies.stream().collect(Collectors.groupingBy(DistributeMoneyApply::getVerifyStatus));
+		collect.forEach((k, v) -> {
+			if (DistributeMoneyApply.Status.Fail.name().equals(k)) {
+				return;
+			}
+			Optional<BigDecimal> reduce = v.stream().map(DistributeMoneyApply::getMoney).reduce(BigDecimal::add);
+			BigDecimal money = reduce.isPresent() ? reduce.get().divide(BigDecimal.valueOf(100)) : BigDecimal.ZERO;
+			if (DistributeMoneyApply.Status.Success.name().equals(k)) {
+				backgroundDataView.setDistributeGotMoney(money);
+			}
+			if (DistributeMoneyApply.Status.Verifying.name().equals(k)) {
+				backgroundDataView.setDistributeVerifyingMoney(money);
+			}
+		});
+		if (backgroundDataView.getDistributeGotMoney() == null) {
+			backgroundDataView.setDistributeGotMoney(BigDecimal.ZERO);
+		}
+
+		if (backgroundDataView.getDistributeVerifyingMoney() == null) {
+			backgroundDataView.setDistributeVerifyingMoney(BigDecimal.ZERO);
+		}
 	}
 }

+ 73 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -24,6 +24,7 @@ import com.cyksj.config.zfb.ZfbConfig;
 import com.cyksj.config.zfb.ZfbProductCode;
 import com.cyksj.dto.RedisKey;
 import com.cyksj.mapper.*;
+import com.cyksj.mapper.manage.distribute.*;
 import com.cyksj.model.dto.AliPayParams;
 import com.cyksj.model.dto.H5JsPayParams;
 import com.cyksj.model.dto.WxMpTemplateData;
@@ -105,6 +106,16 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final CustomerServiceMapper customerServiceMapper;
 
+	private final UserDistributeSharedMapper userDistributeSharedMapper;
+
+	private final DistributeWaitingSendPointsMapper distributeWaitingSendPointsMapper;
+
+	private final DistributePointsExchangeMoneyMapper distributePointsExchangeMoneyMapper;
+
+	private final UserDistributeMapper userDistributeMapper;
+
+	private final UserPlatDistributeRateMapper userPlatDistributeRateMapper;
+
 
 	@Transactional(rollbackFor = Throwable.class)
 	@Override
@@ -195,6 +206,13 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		orderDon.setStatus(OrderDon.Status.noPayment);
 		orderDon.setUserId(user.getId());
 		orderDon.setType(OrderDon.Type.getType(payRequest.getType()));
+		//虚拟商品订单,是否是分销订单
+		if (goodsDon.getType() == 1) {
+			UserDistributeShared userDistributeShared = userDistributeSharedMapper.selectOne(Wrappers.lambdaQuery(UserDistributeShared.class).eq(UserDistributeShared::getUserId, user.getId()).last("limit 1"));
+			if (userDistributeShared != null) {
+				orderDon.setIsDistribute(true);
+			}
+		}
 		this.saveOrUpdate(orderDon);
 
 
@@ -310,6 +328,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		updateCarParkAndSendMsg(goodsDon, sku, order);
 		order.setType(OrderDon.Type.WeChat);
+		if (order.getMoney().compareTo(BigDecimal.ZERO) > 0 && order.getIsDistribute()) {
+			TASK_POOL.execute(() -> distributeWaitingSendPointsRecord(order));
+		}
 		this.updateById(order);
 	}
 
@@ -519,6 +540,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		//修改车位状态并发送模板消息
 		updateCarParkAndSendMsg(goodsDon, sku, orderDon);
 		orderDon.setType(OrderDon.Type.ALI_PAY);
+		if (orderDon.getMoney().compareTo(BigDecimal.ZERO) > 0 && orderDon.getIsDistribute()) {
+			TASK_POOL.execute(() -> distributeWaitingSendPointsRecord(orderDon));
+		}
 		this.updateById(orderDon);
 	}
 
@@ -700,4 +724,53 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		});
 	}
+
+	/**
+	 * 分销待发积分记录
+	 */
+	public void distributeWaitingSendPointsRecord(OrderDon order) {
+		DistributeWaitingSendPoints distributeWaitingSendPoints = new DistributeWaitingSendPoints();
+		distributeWaitingSendPoints.setOrderId(order.getId());
+		distributeWaitingSendPoints.setUserId(order.getUserId());
+		BigDecimal orderMoney = order.getMoney();
+		BigDecimal points = null;
+		BigDecimal returnMoney = null;
+		UserDistributeShared userDistributeShared = userDistributeSharedMapper.selectOne(Wrappers.lambdaQuery(UserDistributeShared.class).eq(UserDistributeShared::getUserId, order.getUserId()).last("limit 1"));
+		if (userDistributeShared != null) {
+			distributeWaitingSendPoints.setSharedId(userDistributeShared.getSharedId());
+			DistributePointsExchangeMoney distributePointsExchangeMoney = distributePointsExchangeMoneyMapper.selectOne(Wrappers.lambdaQuery(DistributePointsExchangeMoney.class).orderByDesc(DistributePointsExchangeMoney::getPoints).last("limit 1"));
+			if (distributePointsExchangeMoney == null) {
+				log.info("分销兑换积分比例未配置");
+			} else {
+				UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, userDistributeShared.getSharedId()).eq(UserDistribute::getDeleted, true).last("limit 1"));
+				if (userDistributeShared == null) {
+					//普通分销
+					GoodsDon goodsDon = goodsDonMapper.selectById(order.getGoodsId());
+					if (goodsDon != null) {
+						returnMoney = orderMoney.multiply(BigDecimal.valueOf(goodsDon.getRate())).divide(BigDecimal.valueOf(100));
+					}
+				}else {
+					//固定推广分销
+					UserPlatDistributeRate userPlatDistributeRate = userPlatDistributeRateMapper.selectOne(Wrappers.lambdaQuery(UserPlatDistributeRate.class)
+							.eq(UserPlatDistributeRate::getGoodsId, order.getGoodsId())
+							.eq(UserPlatDistributeRate::getDistributeId, userDistribute.getId())
+							.last("limit 1"));
+					if (userPlatDistributeRate != null) {
+						returnMoney = orderMoney.multiply(BigDecimal.valueOf(userPlatDistributeRate.getRate())).divide(BigDecimal.valueOf(100));
+					}
+				}
+				if (returnMoney != null) {
+					BigDecimal returnPoints = returnMoney.multiply(BigDecimal.valueOf(distributePointsExchangeMoney.getPoints())).divide(distributePointsExchangeMoney.getMoney(), 2, RoundingMode.HALF_DOWN);
+					points = returnPoints;
+				}
+				distributeWaitingSendPoints.setPoints(points);
+				if (points != null && points.compareTo(BigDecimal.ZERO) > 0) {
+					log.info("用户{}邀请{},产生分销订单分发积分记录入库", userDistribute.getUserId(), order.getUserId());
+					distributeWaitingSendPoints.setSendStatus(DistributeWaitingSendPoints.Status.waiting);
+					distributeWaitingSendPoints.setSendTime(DateUtil.offsetDay(order.getPayTime(), 7));
+					distributeWaitingSendPointsMapper.insert(distributeWaitingSendPoints);
+				}
+			}
+		}
+	}
 }

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/user/UserService.java

@@ -11,7 +11,7 @@ import com.cyksj.model.entity.User;
  */
 public interface UserService extends IService<User> {
 
-    User saveAuth(GzhOAuth2UserInfo userinfo);
+    User saveAuth(GzhOAuth2UserInfo userinfo, Long sharedId);
 
     UserWhoami whoami(long userId);
 }

+ 22 - 2
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -4,13 +4,16 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.mapper.UserMapper;
+import com.cyksj.mapper.manage.distribute.UserDistributeSharedMapper;
 import com.cyksj.model.dto.GzhOAuth2UserInfo;
 import com.cyksj.model.dto.UserWhoami;
 import com.cyksj.model.entity.User;
+import com.cyksj.model.entity.UserDistributeShared;
 import com.cyksj.service.user.UserService;
 import com.cyksj.service.wechat.WeChatService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 
@@ -28,8 +31,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
     private final WeChatService weChatService;
 
+    private final UserDistributeSharedMapper userDistributeSharedMapper;
+
     @Override
-    public User saveAuth(GzhOAuth2UserInfo info) {
+    public User saveAuth(GzhOAuth2UserInfo info, Long sharedId) {
         final String unionid = info.getUnionid();
 
         // 查询用户是否存在
@@ -48,8 +53,23 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
         user.setUnionid(unionid);
         user.setOpenId(info.getOpenid());
-
+        UserDistributeShared userDistributeShared = null;
+        if (user.getId() == null) {
+            User shared = this.getById(sharedId);
+            if (shared != null) {
+                userDistributeShared = new UserDistributeShared();
+                userDistributeShared.setSharedId(sharedId);
+            }
+        }
         this.saveOrUpdate(user);
+        if (userDistributeShared != null) {
+            userDistributeShared.setUserId(user.getId());
+            try {
+                userDistributeSharedMapper.insert(userDistributeShared);
+            } catch (DuplicateKeyException e) {
+                log.info("分销被邀请人重复插入");
+            }
+        }
         return user;
     }
 

+ 41 - 2
netflix-service/src/main/java/com/cyksj/task/Scheduler.java

@@ -8,6 +8,7 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.RedisKey;
 import com.cyksj.mapper.*;
+import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
 import com.cyksj.model.dto.WxMpTemplateData;
 import com.cyksj.model.dto.WxMpTemplateMessage;
 import com.cyksj.model.entity.*;
@@ -21,8 +22,10 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
 import static com.cyksj.common.constant.WeChatTemplateConst.EXPIRY_TEMPLATE;
 
@@ -57,11 +60,13 @@ public class Scheduler {
 
         private final SysConfigMapper sysConfigMapper;
 
+        private final DistributeWaitingSendPointsMapper distributeWaitingSendPointsMapper;
+
 
     /**
      * 每5分钟清理过期账号
      */
-    @Scheduled(cron = "0 0/5 * * * ?")
+//    @Scheduled(cron = "0 0/5 * * * ?")
     @Transactional(rollbackFor = Throwable.class)
     public void clearExpiry() {
         DateTime now = new DateTime();
@@ -152,7 +157,7 @@ public class Scheduler {
     /**
      * 定时关闭订单
      */
-    @Scheduled(cron = "0 0/5 * * * ?")
+//    @Scheduled(cron = "0 0/5 * * * ?")
     public void closeOrder() {
         //获取为支付订单
         DateTime now = new DateTime();
@@ -190,4 +195,38 @@ public class Scheduler {
         redisService.set(RedisKey.SPOTIFY_FREE_NUM, Long.parseLong(register_free_num.getSysValue()));
         log.info("每日重置 spotify 免单账户数 [end] 数量:{}",register_free_num.getSysValue());
     }
+
+    /**
+     * 分销订单积分奖励分发
+     */
+    @Scheduled(cron = "0 0 0/2 * * ?")
+    @Transactional(rollbackFor = Throwable.class)
+    public void distributeOrdersSendPoints() {
+        List<DistributeWaitingSendPoints> waitingSendPoints = Optional.ofNullable(distributeWaitingSendPointsMapper.selectList(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class)
+                .eq(DistributeWaitingSendPoints::getSendStatus, DistributeWaitingSendPoints.Status.waiting)
+                .gt(DistributeWaitingSendPoints::getSendTime, DateTime.now())
+                .select(DistributeWaitingSendPoints::getId,
+                        DistributeWaitingSendPoints::getOrderId,
+                        DistributeWaitingSendPoints::getPoints,
+                        DistributeWaitingSendPoints::getUserId,
+                        DistributeWaitingSendPoints::getSendTime))).orElse(new ArrayList<>());
+        log.info("查询分销订单积分分发记录开始,条数:{}=======》", waitingSendPoints.size());
+        waitingSendPoints.forEach(wait->{
+            Long userId = wait.getUserId();
+            User user = userMapper.selectById(userId);
+            if (user == null) {
+                wait.setSendStatus(DistributeWaitingSendPoints.Status.not_exist);
+                log.info("分销订单,发送积分用户不存在");
+                distributeWaitingSendPointsMapper.updateById(wait);
+            }else {
+                wait.setSendStatus(DistributeWaitingSendPoints.Status.success);
+                log.info("更新用户积分开始=====>");
+                Integer update = userMapper.addPoints(user.getId(), wait.getPoints());
+                if (update == 1) {
+                    distributeWaitingSendPointsMapper.updateById(wait);
+                    log.info("分销积分表订单id:{}发放积分success", wait.getOrderId());
+                }
+            }
+        });
+    }
 }

+ 10 - 0
netflix-service/src/main/java/com/cyksj/task/StatisticsDataScheduler.java

@@ -122,6 +122,12 @@ public class StatisticsDataScheduler {
 			if (money.isPresent()) {
 				appleOne.setMoney(money.get());
 			} else appleOne.setMoney(BigDecimal.ZERO);
+
+			List<OrderDon> distributeOrders = Optional.ofNullable(orderDons.stream().filter(ord -> ord.getIsDistribute()).collect(Collectors.toList())).orElse(new ArrayList<>());
+			appleOne.setNumOfDistributeOrder(distributeOrders.size());
+			Optional<BigDecimal> distributeMoney = distributeOrders.stream().map(OrderDon::getMoney).reduce(BigDecimal::add);
+			appleOne.setDistributeOrderMoney(distributeMoney.isPresent() ? distributeMoney.get() : BigDecimal.ZERO);
+
 			getNumOfOrderByPayType(orderDons, appleOne);
 		}
 		appleOneSave.add(appleOne);
@@ -209,6 +215,10 @@ public class StatisticsDataScheduler {
 			}
 			//金额
 			streamingAccountData.setMoney(totalMoney);
+			List<OrderDon> distributeOrders = Optional.ofNullable(orderDons.stream().filter(ord -> ord.getIsDistribute()).collect(Collectors.toList())).orElse(new ArrayList<>());
+			streamingAccountData.setNumOfDistributeOrder(distributeOrders.size());
+			Optional<BigDecimal> distributeMoney = distributeOrders.stream().map(OrderDon::getMoney).reduce(BigDecimal::add);
+			streamingAccountData.setDistributeOrderMoney(distributeMoney.isPresent() ? distributeMoney.get() : BigDecimal.ZERO);
 		}
 		dataSave.add(streamingAccountData);
 	}

+ 10 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsUserController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GroupsRelationMapper;
+import com.cyksj.mapper.UserMapper;
 import com.cyksj.model.entity.GroupsRelation;
 import com.cyksj.model.entity.User;
 import com.cyksj.model.manage.views.UserView;
@@ -34,12 +35,21 @@ public class CmsUserController{
 
     private final GroupsRelationMapper relationMapper;
 
+    private final UserMapper userMapper;
+
 
     @GetMapping("/get")
     public Result<SearchResult<UserView>> get(){
         SearchResult<UserView> search = beanSearcher.search(UserView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
         search.getDataList().forEach((userView)->{
             userView.setAccountNum(relationMapper.selectCount(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getUserId,userView.getId())));
+            if (userView.getSharedId() != null) {
+                User user = userMapper.selectById(userView.getSharedId());
+                if (user != null) {
+                    userView.setSharNickName(user.getNickname());
+                    userView.setSharHeadimgurl(user.getHeadimgurl());
+                }
+            }
         });
         return GatewayResponse.SUCCESS.newBuilder().toResult(search);
     }

+ 173 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/DistributeController.java

@@ -0,0 +1,173 @@
+package com.cyksj.web.controller.manage.distribute;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.OrderDonMapper;
+import com.cyksj.mapper.manage.distribute.DistributeMoneyApplyMapper;
+import com.cyksj.mapper.manage.distribute.DistributePointsExchangeMoneyMapper;
+import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
+import com.cyksj.model.entity.DistributeMoneyApply;
+import com.cyksj.model.entity.DistributePointsExchangeMoney;
+import com.cyksj.model.entity.GoodsDon;
+import com.cyksj.model.entity.UserPlatDistributeRate;
+import com.cyksj.model.request.DistributeApplyMoneyReq;
+import com.cyksj.model.request.UserDistributeReq;
+import com.cyksj.model.views.DistributeMoneyApplyView;
+import com.cyksj.model.views.MoneyApplyView;
+import com.cyksj.model.views.UserDistributeViews;
+import com.cyksj.service.distribute.DistributeService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Optional;
+
+/*
+ *项目名: netflix
+ *文件名: DistributeController
+ *创建者: JavaZou
+ *创建时间:2022/11/14 12:06
+ */
+@RestController
+@RequestMapping("/manage/distribute")
+@RequiredArgsConstructor
+public class DistributeController {
+
+	private final DistributeService distributeService;
+
+	private final UserDistributeMapper userDistributeMapper;
+
+	private final BeanSearcher beanSearcher;
+
+	private final OrderDonMapper orderDonMapper;
+
+	private final DistributeMoneyApplyMapper distributeMoneyApplyMapper;
+
+	private final DistributePointsExchangeMoneyMapper distributePointsExchangeMoneyMapper;
+
+	private final GoodsDonMapper goodsDonMapper;
+
+	/**
+	 * 添加固定推广者
+	 */
+	@PostMapping
+	public Result<String> saveDistributes(@RequestBody @NotNull UserDistributeReq userDistributeReq) {
+		distributeService.insertDistribute(userDistributeReq);
+		return GatewayResponse.SUCCESS.newBuilder().toResult("添加成功");
+	}
+
+	/**
+	 * 删除固定推广者
+	 */
+	@DeleteMapping("/del/{id}")
+	public Result<String> deleteDistributesById(@PathVariable Long id) {
+		if (id == null || id < 1) {
+			throw BusinessRuntimeException.getInstance("id不存在");
+		}
+		userDistributeMapper.deleteById(id);
+		return GatewayResponse.SUCCESS.newBuilder().toResult("删除成功");
+	}
+
+	/**
+	 * 推广者编辑
+	 */
+	@PutMapping
+	public Result<String> editDistribute(@RequestBody UserDistributeReq userDistributeReq) {
+		distributeService.editDistribute(userDistributeReq);
+		return GatewayResponse.SUCCESS.newBuilder().toResult("编辑成功");
+	}
+
+	/**
+	 * 固定推广者列表
+	 */
+	@GetMapping
+	public SearchResult<UserDistributeViews> distributeList(HttpServletRequest request) {
+		SearchResult<UserDistributeViews> search = beanSearcher.search(UserDistributeViews.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		DistributePointsExchangeMoney pointsMoneyRate = distributePointsExchangeMoneyMapper.selectOne(null);
+		Optional.ofNullable(search.getDataList()).ifPresent(list->list.forEach(view->{
+			Integer num = view.getPoints() / pointsMoneyRate.getPoints();
+			view.setAvailableMoney(pointsMoneyRate.getMoney().multiply(new BigDecimal(num)));
+			List<DistributeMoneyApply> moneyApplies = distributeMoneyApplyMapper.selectList(Wrappers.lambdaQuery(DistributeMoneyApply.class).eq(DistributeMoneyApply::getVerifyStatus, DistributeMoneyApply.Status.Success).eq(DistributeMoneyApply::getUserId, view.getUserId()).select(DistributeMoneyApply::getMoney));
+			Optional<BigDecimal> money = moneyApplies.stream().map(apply -> apply.getMoney()).reduce(BigDecimal::add);
+			view.setGotMoney(money.isPresent() ? money.get() : BigDecimal.ZERO);
+			Integer orders = userDistributeMapper.count(view.getUserId());
+			view.setOrders(orders);
+		}));
+		return search;
+	}
+
+	/**
+	 * 获取平台分销比例
+	 */
+	@GetMapping("/get/plat")
+	public Result<List<GoodsDon>> getGoodsDistributeRate() {
+		return GatewayResponse.SUCCESS.newBuilder().toResult(goodsDonMapper.selectList(Wrappers.lambdaQuery(GoodsDon.class).eq(GoodsDon::getType, 1).select(GoodsDon::getId, GoodsDon::getTitle, GoodsDon::getRate)));
+	}
+
+	/**
+	 * 平台分销比例修改
+	 */
+	@PutMapping("/put/goods/rate")
+	public Result<String> editGoodsDistributeRate(@RequestBody UserDistributeReq userDistributeReq) {
+		for (UserPlatDistributeRate rate : userDistributeReq.getRates()) {
+			if (rate.getRate() <0 || rate.getRate() > 100) {
+				throw new BusinessRuntimeException("比例错误");
+			}
+			GoodsDon goodsDon = goodsDonMapper.selectById(rate.getGoodsId());
+			if (goodsDon == null || goodsDon.getType() == 2) {
+				throw new BusinessRuntimeException("平台错误");
+			}
+			goodsDon.setRate(rate.getRate());
+			goodsDonMapper.updateById(goodsDon);
+		}
+		return GatewayResponse.SUCCESS.newBuilder().toResult("编辑成功");
+	}
+
+	/**
+	 * 提现列表
+	 */
+	@GetMapping("/get/applyMoney/list")
+	public Result<MoneyApplyView> applyMoneyList(HttpServletRequest request) {
+		MoneyApplyView moneyApplyView = new MoneyApplyView();
+		SearchResult<DistributeMoneyApplyView> search = beanSearcher.search(DistributeMoneyApplyView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		moneyApplyView.setDetails(search.getDataList());
+		List<DistributeMoneyApply> distributeMoneyApplies = distributeMoneyApplyMapper.selectList(Wrappers.lambdaQuery(DistributeMoneyApply.class).eq(DistributeMoneyApply::getVerifyStatus, DistributeMoneyApply.Status.Success).select(DistributeMoneyApply::getMoney));
+		Optional<BigDecimal> reduce = distributeMoneyApplies.stream().map(DistributeMoneyApply::getMoney).reduce(BigDecimal::add);
+		moneyApplyView.setGotMoney(reduce.isPresent() ? reduce.get() : BigDecimal.ZERO);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(moneyApplyView);
+	}
+
+	/**
+	 * 提现审核
+	 */
+	@PutMapping("/verify/applyMoney")
+	public Result<String> verifyApplyMoney(@RequestBody @NotNull DistributeApplyMoneyReq distributeApplyMoneyReq) {
+		DistributeMoneyApply.Status status = DistributeMoneyApply.Status.checkStatus(distributeApplyMoneyReq.getVerifyStatus());
+		if (status == null) {
+			throw BusinessRuntimeException.getInstance("审核状态错误");
+		}
+		DistributeMoneyApply distributeMoneyApply = distributeMoneyApplyMapper.selectById(distributeApplyMoneyReq.getId());
+		if (distributeMoneyApply == null) {
+			throw BusinessRuntimeException.getInstance("提现记录不存在");
+		}
+		if (distributeMoneyApply.getVerifyStatus() != DistributeMoneyApply.Status.Verifying) {
+			throw BusinessRuntimeException.getInstance("该提现记录已处理,无法再进行审核");
+		}
+		distributeMoneyApply.setVerifyStatus(status);
+		if (DistributeMoneyApply.Status.Fail.name().equals(distributeApplyMoneyReq.getVerifyStatus()) && StrUtil.isEmpty(distributeApplyMoneyReq.getReason())) {
+			throw BusinessRuntimeException.getInstance("拒绝原因为空");
+		}
+		distributeMoneyApplyMapper.updateById(distributeMoneyApply);
+		return GatewayResponse.SUCCESS.newBuilder().toResult("审核操作成功");
+	}
+}

+ 1 - 1
netflix-web/src/main/java/com/cyksj/web/controller/user/AuthorizationController.java

@@ -122,7 +122,7 @@ public class AuthorizationController {
         GzhOAuth2UserInfo userinfo = weChatService.getUserInfo(token.getAccessToken(), token.getOpenid());
 
         //保存用户信息
-        User user = userService.saveAuth(userinfo);
+        User user = userService.saveAuth(userinfo, re.getSharedId());
 
         //写回登陆信息
         StpUserUtil.login(user.getId());

+ 137 - 0
netflix-web/src/main/java/com/cyksj/web/controller/user/DistributePopularizeController.java

@@ -0,0 +1,137 @@
+package com.cyksj.web.controller.user;
+
+import cn.hutool.extra.qrcode.QrCodeUtil;
+import cn.hutool.extra.qrcode.QrConfig;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.EnvCommonService;
+import com.cyksj.common.annotation.NoSubmit;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.GoodsDonSkuMapper;
+import com.cyksj.mapper.UserMapper;
+import com.cyksj.mapper.manage.distribute.DistributeMoneyApplyMapper;
+import com.cyksj.mapper.manage.distribute.DistributePointsExchangeMoneyMapper;
+import com.cyksj.model.entity.*;
+import com.cyksj.model.views.DistributeMoneyApplyView;
+import com.cyksj.model.views.DistributeOrdersView;
+import com.cyksj.model.views.DistributePopularizeOrdersView;
+import com.cyksj.model.views.DistributePopularizeView;
+import com.cyksj.redis.RedisService;
+import com.cyksj.web.util.StpUserUtil;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.param.Operator;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+/*
+ *项目名: netflix
+ *文件名: DistributePopularizeController
+ *创建者: JavaZou
+ *创建时间:2022/11/15 13:59
+ * 服务端-》我的分发推广controller
+ */
+@RestController
+@RequestMapping("/distribute/popularize")
+@RequiredArgsConstructor
+public class DistributePopularizeController {
+	private final EnvCommonService envCommonService;
+
+	private final UserMapper userMapper;
+
+	private final BeanSearcher beanSearcher;
+
+	private final GoodsDonMapper goodsDonMapper;
+
+	private final GoodsDonSkuMapper goodsDonSkuMapper;
+
+	private final DistributePointsExchangeMoneyMapper distributePointsExchangeMoneyMapper;
+
+	private final DistributeMoneyApplyMapper distributeMoneyApplyMapper;
+
+	private final RedisService redisService;
+
+	/**
+	 * 推广订单明细
+	 */
+	@GetMapping("/orders/detail")
+	public SearchResult<DistributePopularizeOrdersView> getOrdersView() {
+		Long userId = StpUserUtil.getLoginIdAsLong();
+		SearchResult<DistributePopularizeOrdersView> search = beanSearcher.search(DistributePopularizeOrdersView.class,
+				MapUtils.builder().field(DistributePopularizeOrdersView::getSharedId, userId).build());
+		search.getDataList().forEach(data -> {
+			GoodsDon goodsDon = goodsDonMapper.selectById(data.getGoodsId());
+			GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(data.getSkuId());
+			data.setGoodsTitle(goodsDon.getTitle());
+			data.setSpecVal(goodsDonSku.getSpecVal());
+		});
+		return search;
+	}
+
+	/**
+	 * 提现明细
+	 */
+	@GetMapping("/applyMoney/detail")
+	public SearchResult<DistributeMoneyApplyView> getApplyMoneyView() {
+		return beanSearcher.search(DistributeMoneyApplyView.class, null);
+	}
+
+	/**
+	 * 个人推广详情
+	 */
+	@GetMapping("/get/detail")
+	public Result<DistributePopularizeView> getDetail() {
+		Long userId = StpUserUtil.getLoginIdAsLong();
+		DistributePopularizeView distributePopularizeView = new DistributePopularizeView();
+		String domain = envCommonService.getHost();
+		distributePopularizeView.setUrl(String.format("https://%s/8081/api/auth/weChat?url=https://%s/yinhe/web?sharedId=%s", domain, domain, userId));
+		distributePopularizeView.setUrlCode(QrCodeUtil.generateAsBase64(distributePopularizeView.getUrl(), QrConfig.create(), "png"));
+		User user = userMapper.selectById(userId);
+		distributePopularizeView.setGotPoints(user.getPoints());
+		Number number = beanSearcher.searchCount(DistributeOrdersView.class, MapUtils.builder().field(DistributeOrdersView::getUserId, userId).op(Operator.Equal).build());
+		distributePopularizeView.setDistributeOrders(number.intValue());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(distributePopularizeView);
+	}
+
+	/**
+	 * 提现
+	 */
+	@NoSubmit
+	@PostMapping("/post/applyMoney")
+	@Transactional(rollbackFor = Throwable.class)
+	public Result<String> applyMoney() {
+		Long userId = StpUserUtil.getLoginIdAsLong();
+		User user = userMapper.selectById(userId);
+		if (user == null) {
+			throw BusinessRuntimeException.getInstance("请先授权登录");
+		}
+		DistributePointsExchangeMoney distributePointsExchangeMoney = distributePointsExchangeMoneyMapper.selectOne(Wrappers.lambdaQuery(DistributePointsExchangeMoney.class).orderByDesc(DistributePointsExchangeMoney::getPoints).last("limit 1"));
+		BigDecimal min = BigDecimal.valueOf(distributePointsExchangeMoney.getPoints());
+		if (user.getPoints().compareTo(min) < 0) {
+			throw BusinessRuntimeException.getInstance("您当前积分不够,无法提现");
+		}
+		BigDecimal num = user.getPoints().divide(min, RoundingMode.DOWN);
+		int points = min.multiply(num).intValue();
+		Integer update = userMapper.subPoints(user.getId(), points);
+		if (update == 1) {
+			DistributeMoneyApply distributeMoneyApply = new DistributeMoneyApply();
+			distributeMoneyApply.setUserId(userId);
+			distributeMoneyApply.setPoints(points);
+			distributeMoneyApply.setMoney(num.multiply(distributePointsExchangeMoney.getMoney()));
+			distributeMoneyApply.setVerifyStatus(DistributeMoneyApply.Status.Verifying);
+			distributeMoneyApplyMapper.insert(distributeMoneyApply);
+			return GatewayResponse.SUCCESS.newBuilder().toResult("申请提现成功,待客服审核打款");
+		}
+		return GatewayResponse.SUCCESS.newBuilder().toResult("系统异常,请重新提交提现申请");
+	}
+}

+ 1 - 1
netflix-web/src/main/resources/application.yml

@@ -1 +1 @@
-spring:
  profiles:
    active:
    - ${activeProfile}
    
+spring:
  profiles:
    active: dev