Commit 991b53649b2c2f015118f6583429eee8f340ef4d
1 parent
482a84a6
member: 分销配置
Showing
8 changed files
with
371 additions
and
2 deletions
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 | } |