Ver código fonte

add 分销推广订单功能

first

first

fix

fix

fix

fix

fix

fix 提现审核

fix 提现审核

fix 统计

fix 分销统计

fix 分销统计

fix 分销订单

fix 分销订单

fix 分销订单

fix
zoujiajian 3 anos atrás
pai
commit
ed0196e422
43 arquivos alterados com 1334 adições e 16 exclusões
  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