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 | 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 | 7 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | 8 | import lombok.Data; |
| 9 | +import org.hibernate.validator.constraints.Range; | |
| 5 | 10 | |
| 11 | +import javax.validation.constraints.NotEmpty; | |
| 6 | 12 | import javax.validation.constraints.NotNull; |
| 13 | +import javax.validation.constraints.PositiveOrZero; | |
| 14 | +import java.util.List; | |
| 7 | 15 | |
| 8 | 16 | /** |
| 9 | 17 | * 会员积分配置 Base VO,提供给添加、修改、详细的子 VO 使用 |
| ... | ... | @@ -28,4 +36,53 @@ public class MemberPointConfigBaseVO { |
| 28 | 36 | @NotNull(message = "1 元赠送积分不能为空") |
| 29 | 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 | 1 | package cn.iocoder.yudao.module.member.dal.dataobject.point; |
| 2 | 2 | |
| 3 | 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 | 8 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| 9 | +import com.baomidou.mybatisplus.annotation.TableField; | |
| 5 | 10 | import com.baomidou.mybatisplus.annotation.TableId; |
| 6 | 11 | import com.baomidou.mybatisplus.annotation.TableName; |
| 12 | +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; | |
| 7 | 13 | import lombok.*; |
| 8 | 14 | |
| 9 | -import java.math.BigDecimal; | |
| 15 | +import java.util.List; | |
| 10 | 16 | |
| 11 | 17 | /** |
| 12 | 18 | * 会员积分配置 DO |
| 13 | 19 | * |
| 14 | 20 | * @author QingX |
| 15 | 21 | */ |
| 16 | -@TableName("member_point_config") | |
| 22 | +@TableName(value = "member_point_config", autoResultMap = true) | |
| 17 | 23 | @KeySequence("member_point_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 |
| 18 | 24 | @Data |
| 19 | 25 | @EqualsAndHashCode(callSuper = true) |
| ... | ... | @@ -47,4 +53,56 @@ public class MemberPointConfigDO extends BaseDO { |
| 47 | 53 | */ |
| 48 | 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 | } | ... | ... |