Commit 991b53649b2c2f015118f6583429eee8f340ef4d

Authored by owen
1 parent 482a84a6

member: 分销配置

yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/brokerage/BrokerageBindModeEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.member.enums.brokerage;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * 分销关系绑定模式枚举
  11 + *
  12 + * @author owen
  13 + */
  14 +@AllArgsConstructor
  15 +@Getter
  16 +public enum BrokerageBindModeEnum implements IntArrayValuable {
  17 +
  18 + /**
  19 + * 只要用户没有推广人,随时都可以绑定分销关系
  20 + */
  21 + ANYTIME(0, "没有推广人"),
  22 + /**
  23 + * 仅新用户注册时才能绑定推广关系
  24 + */
  25 + REGISTER(1, "新用户"),
  26 + ;
  27 +
  28 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BrokerageBindModeEnum::getMode).toArray();
  29 +
  30 + /**
  31 + * 模式
  32 + */
  33 + private final Integer mode;
  34 + /**
  35 + * 名字
  36 + */
  37 + private final String name;
  38 +
  39 + @Override
  40 + public int[] array() {
  41 + return ARRAYS;
  42 + }
  43 +
  44 +}
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/brokerage/BrokerageEnabledConditionEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.member.enums.brokerage;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * 分佣模式枚举
  11 + *
  12 + * @author owen
  13 + */
  14 +@AllArgsConstructor
  15 +@Getter
  16 +public enum BrokerageEnabledConditionEnum implements IntArrayValuable {
  17 +
  18 + /**
  19 + * 所有用户都可以分销
  20 + */
  21 + ALL(0, "人人分销"),
  22 + /**
  23 + * 仅可后台手动设置推广员
  24 + */
  25 + ADMIN(1, "指定分销"),
  26 + ;
  27 +
  28 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BrokerageEnabledConditionEnum::getCondition).toArray();
  29 +
  30 + /**
  31 + * 模式
  32 + */
  33 + private final Integer condition;
  34 + /**
  35 + * 名字
  36 + */
  37 + private final String name;
  38 +
  39 + @Override
  40 + public int[] array() {
  41 + return ARRAYS;
  42 + }
  43 +
  44 +}
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/brokerage/BrokerageRecordBizTypeEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.member.enums.brokerage;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * 佣金记录业务类型枚举
  11 + *
  12 + * @author owen
  13 + */
  14 +@AllArgsConstructor
  15 +@Getter
  16 +public enum BrokerageRecordBizTypeEnum implements IntArrayValuable {
  17 +
  18 + ORDER(0, "获得推广佣金", "获得推广佣金 {}", true),
  19 + WITHDRAW(1, "提现申请", "提现申请扣除佣金 {}", false),
  20 + ;
  21 +
  22 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BrokerageRecordBizTypeEnum::getType).toArray();
  23 +
  24 + /**
  25 + * 类型
  26 + */
  27 + private final Integer type;
  28 + /**
  29 + * 标题
  30 + */
  31 + private final String title;
  32 + /**
  33 + * 描述
  34 + */
  35 + private final String description;
  36 + /**
  37 + * 是否为增加佣金
  38 + */
  39 + private final boolean add;
  40 +
  41 + @Override
  42 + public int[] array() {
  43 + return ARRAYS;
  44 + }
  45 +
  46 +}
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/brokerage/BrokerageRecordStatusEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.member.enums.brokerage;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * 佣金记录状态枚举
  11 + *
  12 + * @author owen
  13 + */
  14 +@AllArgsConstructor
  15 +@Getter
  16 +public enum BrokerageRecordStatusEnum implements IntArrayValuable {
  17 +
  18 + WAIT_SETTLEMENT(0, "待结算"),
  19 + SETTLEMENT(1, "已结算"),
  20 + CANCEL(2, "已取消"),
  21 + ;
  22 +
  23 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BrokerageRecordStatusEnum::getStatus).toArray();
  24 +
  25 + /**
  26 + * 状态
  27 + */
  28 + private final Integer status;
  29 + /**
  30 + * 名字
  31 + */
  32 + private final String name;
  33 +
  34 + @Override
  35 + public int[] array() {
  36 + return ARRAYS;
  37 + }
  38 +
  39 +}
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/brokerage/BrokerageWithdrawStatusEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.member.enums.brokerage;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * 佣金提现状态枚举
  11 + *
  12 + * @author owen
  13 + */
  14 +@AllArgsConstructor
  15 +@Getter
  16 +public enum BrokerageWithdrawStatusEnum implements IntArrayValuable {
  17 +
  18 + AUDITING(0, "审核中"),
  19 + AUDIT_SUCCESS(10, "审核通过"),
  20 + WITHDRAW_SUCCESS(11, "提现成功"),
  21 + AUDIT_FAIL(20, "审核不通过"),
  22 + WITHDRAW_FAIL(21, "提现失败"),
  23 + ;
  24 +
  25 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BrokerageWithdrawStatusEnum::getStatus).toArray();
  26 +
  27 + /**
  28 + * 状态
  29 + */
  30 + private final Integer status;
  31 + /**
  32 + * 名字
  33 + */
  34 + private final String name;
  35 +
  36 + @Override
  37 + public int[] array() {
  38 + return ARRAYS;
  39 + }
  40 +
  41 +}
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/brokerage/BrokerageWithdrawTypeEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.member.enums.brokerage;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * 佣金提现类型枚举
  11 + *
  12 + * @author owen
  13 + */
  14 +@AllArgsConstructor
  15 +@Getter
  16 +public enum BrokerageWithdrawTypeEnum implements IntArrayValuable {
  17 +
  18 + WALLET(1, "钱包"),
  19 + BANK(2, "银行卡"),
  20 + WECHAT(3, "微信"),
  21 + ALIPAY(4, "支付宝"),
  22 + ;
  23 +
  24 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BrokerageWithdrawTypeEnum::getType).toArray();
  25 +
  26 + /**
  27 + * 类型
  28 + */
  29 + private final Integer type;
  30 + /**
  31 + * 名字
  32 + */
  33 + private final String name;
  34 +
  35 + @Override
  36 + public int[] array() {
  37 + return ARRAYS;
  38 + }
  39 +
  40 +}
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/point/vo/config/MemberPointConfigBaseVO.java
1 package cn.iocoder.yudao.module.member.controller.admin.point.vo.config; 1 package cn.iocoder.yudao.module.member.controller.admin.point.vo.config;
2 2
  3 +import cn.iocoder.yudao.framework.common.validation.InEnum;
  4 +import cn.iocoder.yudao.module.member.enums.brokerage.BrokerageBindModeEnum;
  5 +import cn.iocoder.yudao.module.member.enums.brokerage.BrokerageEnabledConditionEnum;
  6 +import cn.iocoder.yudao.module.member.enums.brokerage.BrokerageWithdrawTypeEnum;
3 import io.swagger.v3.oas.annotations.media.Schema; 7 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 8 import lombok.Data;
  9 +import org.hibernate.validator.constraints.Range;
5 10
  11 +import javax.validation.constraints.NotEmpty;
6 import javax.validation.constraints.NotNull; 12 import javax.validation.constraints.NotNull;
  13 +import javax.validation.constraints.PositiveOrZero;
  14 +import java.util.List;
7 15
8 /** 16 /**
9 * 会员积分配置 Base VO,提供给添加、修改、详细的子 VO 使用 17 * 会员积分配置 Base VO,提供给添加、修改、详细的子 VO 使用
@@ -28,4 +36,53 @@ public class MemberPointConfigBaseVO { @@ -28,4 +36,53 @@ public class MemberPointConfigBaseVO {
28 @NotNull(message = "1 元赠送积分不能为空") 36 @NotNull(message = "1 元赠送积分不能为空")
29 private Integer tradeGivePoint; 37 private Integer tradeGivePoint;
30 38
  39 + // ========== 分销相关 ==========
  40 +
  41 + @Schema(description = "是否启用分佣", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
  42 + @NotNull(message = "是否启用分佣不能为空")
  43 + private Boolean brokerageEnabled;
  44 +
  45 + @Schema(description = "分佣模式", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
  46 + @NotNull(message = "分佣模式不能为空")
  47 + @InEnum(value = BrokerageEnabledConditionEnum.class, message = "分佣模式必须是 {value}")
  48 + private Integer brokerageEnabledCondition;
  49 +
  50 + @Schema(description = "分销关系绑定模式", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
  51 + @NotNull(message = "分销关系绑定模式不能为空")
  52 + @InEnum(value = BrokerageBindModeEnum.class, message = "分销关系绑定模式必须是 {value}")
  53 + private Integer brokerageBindMode;
  54 +
  55 + @Schema(description = "分销海报图地址数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[https://www.iocoder.cn/yudao.jpg]")
  56 + private List<String> brokeragePostUrls;
  57 +
  58 + @Schema(description = "一级返佣比例", requiredMode = Schema.RequiredMode.REQUIRED, example = "5")
  59 + @NotNull(message = "一级返佣比例不能为空")
  60 + @Range(min = 0, max = 100, message = "一级返佣比例必须在 0 - 100 之间")
  61 + private Integer brokerageFirstPercent;
  62 +
  63 + @Schema(description = "二级返佣比例", requiredMode = Schema.RequiredMode.REQUIRED, example = "5")
  64 + @NotNull(message = "二级返佣比例不能为空")
  65 + @Range(min = 0, max = 100, message = "二级返佣比例必须在 0 - 100 之间")
  66 + private Integer brokerageSecondPercent;
  67 +
  68 + @Schema(description = "用户提现最低金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
  69 + @NotNull(message = "用户提现最低金额不能为空")
  70 + @PositiveOrZero(message = "用户提现最低金额不能是负数")
  71 + private Integer brokerageWithdrawMinPrice;
  72 +
  73 + @Schema(description = "提现银行", requiredMode = Schema.RequiredMode.REQUIRED, example = "[0, 1]")
  74 + @NotEmpty(message = "提现银行不能为空")
  75 + private List<Integer> brokerageBankNames;
  76 +
  77 + @Schema(description = "佣金冻结时间(天)", requiredMode = Schema.RequiredMode.REQUIRED, example = "7")
  78 + @NotNull(message = "佣金冻结时间(天)不能为空")
  79 + @PositiveOrZero(message = "佣金冻结时间不能是负数")
  80 + private Integer brokerageFrozenDays;
  81 +
  82 + @Schema(description = "提现方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "[0, 1]")
  83 + @NotNull(message = "提现方式不能为空")
  84 + @InEnum(value = BrokerageWithdrawTypeEnum.class, message = "提现方式必须是 {value}")
  85 + private List<Integer> brokerageWithdrawType;
  86 +
  87 +
31 } 88 }
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/point/MemberPointConfigDO.java
1 package cn.iocoder.yudao.module.member.dal.dataobject.point; 1 package cn.iocoder.yudao.module.member.dal.dataobject.point;
2 2
3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.framework.mybatis.core.type.IntegerListTypeHandler;
  5 +import cn.iocoder.yudao.module.member.enums.brokerage.BrokerageBindModeEnum;
  6 +import cn.iocoder.yudao.module.member.enums.brokerage.BrokerageEnabledConditionEnum;
  7 +import cn.iocoder.yudao.module.member.enums.brokerage.BrokerageWithdrawTypeEnum;
4 import com.baomidou.mybatisplus.annotation.KeySequence; 8 import com.baomidou.mybatisplus.annotation.KeySequence;
  9 +import com.baomidou.mybatisplus.annotation.TableField;
5 import com.baomidou.mybatisplus.annotation.TableId; 10 import com.baomidou.mybatisplus.annotation.TableId;
6 import com.baomidou.mybatisplus.annotation.TableName; 11 import com.baomidou.mybatisplus.annotation.TableName;
  12 +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
7 import lombok.*; 13 import lombok.*;
8 14
9 -import java.math.BigDecimal; 15 +import java.util.List;
10 16
11 /** 17 /**
12 * 会员积分配置 DO 18 * 会员积分配置 DO
13 * 19 *
14 * @author QingX 20 * @author QingX
15 */ 21 */
16 -@TableName("member_point_config") 22 +@TableName(value = "member_point_config", autoResultMap = true)
17 @KeySequence("member_point_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 23 @KeySequence("member_point_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
18 @Data 24 @Data
19 @EqualsAndHashCode(callSuper = true) 25 @EqualsAndHashCode(callSuper = true)
@@ -47,4 +53,56 @@ public class MemberPointConfigDO extends BaseDO { @@ -47,4 +53,56 @@ public class MemberPointConfigDO extends BaseDO {
47 */ 53 */
48 private Integer tradeGivePoint; 54 private Integer tradeGivePoint;
49 55
  56 + // ========== 分销相关 ==========
  57 +
  58 + /**
  59 + * 是否启用分佣
  60 + */
  61 + private Boolean brokerageEnabled;
  62 + /**
  63 + * 分佣模式
  64 + *
  65 + * 枚举 {@link BrokerageEnabledConditionEnum 对应的类}
  66 + */
  67 + private Integer brokerageEnabledCondition;
  68 + /**
  69 + * 分销关系绑定模式
  70 + *
  71 + * 枚举 {@link BrokerageBindModeEnum 对应的类}
  72 + */
  73 + private Integer brokerageBindMode;
  74 + /**
  75 + * 分销海报图地址数组
  76 + */
  77 + @TableField(typeHandler = JacksonTypeHandler.class)
  78 + private List<String> brokeragePostUrls;
  79 + /**
  80 + * 一级返佣比例
  81 + */
  82 + private Integer brokerageFirstPercent;
  83 + /**
  84 + * 二级返佣比例
  85 + */
  86 + private Integer brokerageSecondPercent;
  87 + /**
  88 + * 用户提现最低金额
  89 + */
  90 + private Integer brokerageWithdrawMinPrice;
  91 + /**
  92 + * 提现银行
  93 + */
  94 + @TableField(typeHandler = IntegerListTypeHandler.class)
  95 + private List<Integer> brokerageBankNames;
  96 + /**
  97 + * 佣金冻结时间(天)
  98 + */
  99 + private Integer brokerageFrozenDays;
  100 + /**
  101 + * 提现方式
  102 + *
  103 + * 枚举 {@link BrokerageWithdrawTypeEnum 对应的类}
  104 + */
  105 + @TableField(typeHandler = IntegerListTypeHandler.class)
  106 + private List<Integer> brokerageWithdrawType;
  107 +
50 } 108 }