Commit 6c193f723f319ec09d42e2594e5673afcb54e76b
1 parent
499a054e
trade: 分销业务后台功能:推广订单列表
Showing
10 changed files
with
122 additions
and
28 deletions
sql/mysql/brokerage.sql
| @@ -44,24 +44,26 @@ create index idx_agent on trade_brokerage_user (brokerage_enabled) comment '是å | @@ -44,24 +44,26 @@ create index idx_agent on trade_brokerage_user (brokerage_enabled) comment '是å | ||
| 44 | 44 | ||
| 45 | create table trade_brokerage_record | 45 | create table trade_brokerage_record |
| 46 | ( | 46 | ( |
| 47 | - id int auto_increment comment 'ç¼–å·' | 47 | + id int auto_increment comment 'ç¼–å·' |
| 48 | primary key, | 48 | primary key, |
| 49 | - user_id bigint not null comment '用户编å·', | ||
| 50 | - biz_id varchar(64) default '' not null comment '业务编å·', | ||
| 51 | - biz_type tinyint default 0 not null comment '业务类型:0-订å•,1-æçް', | ||
| 52 | - title varchar(64) default '' not null comment 'æ ‡é¢˜', | ||
| 53 | - price int default 0 not null comment '金é¢', | ||
| 54 | - total_price int default 0 not null comment '当剿€»ä½£é‡‘', | ||
| 55 | - description varchar(500) default '' not null comment '说明', | ||
| 56 | - status tinyint default 0 not null comment '状æ€ï¼š0-待结算,1-已结算,2-已喿¶ˆ', | ||
| 57 | - frozen_days int default 0 not null comment '冻结时间(天)', | ||
| 58 | - unfreeze_time datetime null comment '解冻时间', | ||
| 59 | - creator varchar(64) collate utf8mb4_general_ci default '' null comment '创建者', | ||
| 60 | - create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间', | ||
| 61 | - updater varchar(64) collate utf8mb4_general_ci default '' null comment '更新者', | ||
| 62 | - update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment 'æ›´æ–°æ—¶é—´', | ||
| 63 | - deleted bit default b'0' not null comment '是å¦åˆ 除', | ||
| 64 | - tenant_id bigint default 0 not null comment '租户编å·' | 49 | + user_id bigint not null comment '用户编å·', |
| 50 | + biz_id varchar(64) default '' not null comment '业务编å·', | ||
| 51 | + biz_type tinyint default 0 not null comment '业务类型:1-订å•,2-æçް', | ||
| 52 | + title varchar(64) default '' not null comment 'æ ‡é¢˜', | ||
| 53 | + price int default 0 not null comment '金é¢', | ||
| 54 | + total_price int default 0 not null comment '当剿€»ä½£é‡‘', | ||
| 55 | + description varchar(500) default '' not null comment '说明', | ||
| 56 | + status tinyint default 0 not null comment '状æ€ï¼š0-待结算,1-已结算,2-已喿¶ˆ', | ||
| 57 | + frozen_days int default 0 not null comment '冻结时间(天)', | ||
| 58 | + unfreeze_time datetime null comment '解冻时间', | ||
| 59 | + source_user_type tinyint not null comment 'æ¥æºç”¨æˆ·ç±»åž‹ï¼š1-一级推广用户,2-二级推广用户', | ||
| 60 | + source_user_id bigint not null comment 'æ¥æºç”¨æˆ·ç¼–å·', | ||
| 61 | + creator varchar(64) collate utf8mb4_general_ci default '' null comment '创建者', | ||
| 62 | + create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间', | ||
| 63 | + updater varchar(64) collate utf8mb4_general_ci default '' null comment '更新者', | ||
| 64 | + update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment 'æ›´æ–°æ—¶é—´', | ||
| 65 | + deleted bit default b'0' not null comment '是å¦åˆ 除', | ||
| 66 | + tenant_id bigint default 0 not null comment '租户编å·' | ||
| 65 | ) | 67 | ) |
| 66 | comment '佣金记录'; | 68 | comment '佣金记录'; |
| 67 | 69 |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/record/BrokerageRecordController.java
| @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.trade.controller.admin.brokerage.record; | @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.trade.controller.admin.brokerage.record; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; | ||
| 6 | +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; | ||
| 5 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.BrokerageRecordPageReqVO; | 7 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.BrokerageRecordPageReqVO; |
| 6 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.BrokerageRecordRespVO; | 8 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.BrokerageRecordRespVO; |
| 7 | import cn.iocoder.yudao.module.trade.convert.brokerage.record.BrokerageRecordConvert; | 9 | import cn.iocoder.yudao.module.trade.convert.brokerage.record.BrokerageRecordConvert; |
| @@ -19,8 +21,12 @@ import org.springframework.web.bind.annotation.RestController; | @@ -19,8 +21,12 @@ import org.springframework.web.bind.annotation.RestController; | ||
| 19 | 21 | ||
| 20 | import javax.annotation.Resource; | 22 | import javax.annotation.Resource; |
| 21 | import javax.validation.Valid; | 23 | import javax.validation.Valid; |
| 24 | +import java.util.Map; | ||
| 25 | +import java.util.Set; | ||
| 22 | 26 | ||
| 23 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 27 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 28 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | ||
| 29 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||
| 24 | 30 | ||
| 25 | @Tag(name = "管理后台 - 佣金记录") | 31 | @Tag(name = "管理后台 - 佣金记录") |
| 26 | @RestController | 32 | @RestController |
| @@ -31,6 +37,9 @@ public class BrokerageRecordController { | @@ -31,6 +37,9 @@ public class BrokerageRecordController { | ||
| 31 | @Resource | 37 | @Resource |
| 32 | private BrokerageRecordService brokerageRecordService; | 38 | private BrokerageRecordService brokerageRecordService; |
| 33 | 39 | ||
| 40 | + @Resource | ||
| 41 | + private MemberUserApi memberUserApi; | ||
| 42 | + | ||
| 34 | @GetMapping("/get") | 43 | @GetMapping("/get") |
| 35 | @Operation(summary = "获得佣金记录") | 44 | @Operation(summary = "获得佣金记录") |
| 36 | @Parameter(name = "id", description = "编号", required = true, example = "1024") | 45 | @Parameter(name = "id", description = "编号", required = true, example = "1024") |
| @@ -45,7 +54,12 @@ public class BrokerageRecordController { | @@ -45,7 +54,12 @@ public class BrokerageRecordController { | ||
| 45 | @PreAuthorize("@ss.hasPermission('trade:brokerage-record:query')") | 54 | @PreAuthorize("@ss.hasPermission('trade:brokerage-record:query')") |
| 46 | public CommonResult<PageResult<BrokerageRecordRespVO>> getBrokerageRecordPage(@Valid BrokerageRecordPageReqVO pageVO) { | 55 | public CommonResult<PageResult<BrokerageRecordRespVO>> getBrokerageRecordPage(@Valid BrokerageRecordPageReqVO pageVO) { |
| 47 | PageResult<BrokerageRecordDO> pageResult = brokerageRecordService.getBrokerageRecordPage(pageVO); | 56 | PageResult<BrokerageRecordDO> pageResult = brokerageRecordService.getBrokerageRecordPage(pageVO); |
| 48 | - return success(BrokerageRecordConvert.INSTANCE.convertPage(pageResult)); | 57 | + |
| 58 | + Set<Long> userIds = convertSet(pageResult.getList(), BrokerageRecordDO::getUserId); | ||
| 59 | + userIds.addAll(convertList(pageResult.getList(), BrokerageRecordDO::getSourceUserId)); | ||
| 60 | + Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds); | ||
| 61 | + | ||
| 62 | + return success(BrokerageRecordConvert.INSTANCE.convertPage(pageResult, userMap)); | ||
| 49 | } | 63 | } |
| 50 | 64 | ||
| 51 | } | 65 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/record/vo/BrokerageRecordBaseVO.java
| @@ -57,4 +57,9 @@ public class BrokerageRecordBaseVO { | @@ -57,4 +57,9 @@ public class BrokerageRecordBaseVO { | ||
| 57 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | 57 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| 58 | private LocalDateTime unfreezeTime; | 58 | private LocalDateTime unfreezeTime; |
| 59 | 59 | ||
| 60 | + @Schema(description = "来源用户类型") | ||
| 61 | + private Integer sourceUserType; | ||
| 62 | + | ||
| 63 | + @Schema(description = "来源用户编号") | ||
| 64 | + private Long sourceUserId; | ||
| 60 | } | 65 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/record/vo/BrokerageRecordPageReqVO.java
| 1 | package cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo; | 1 | package cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 4 | +import cn.iocoder.yudao.framework.common.validation.InEnum; | ||
| 5 | +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageUserTypeEnum; | ||
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 6 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | import lombok.Data; | 7 | import lombok.Data; |
| 6 | import lombok.EqualsAndHashCode; | 8 | import lombok.EqualsAndHashCode; |
| @@ -30,4 +32,8 @@ public class BrokerageRecordPageReqVO extends PageParam { | @@ -30,4 +32,8 @@ public class BrokerageRecordPageReqVO extends PageParam { | ||
| 30 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | 32 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| 31 | private LocalDateTime[] createTime; | 33 | private LocalDateTime[] createTime; |
| 32 | 34 | ||
| 35 | + @Schema(description = "用户类型") | ||
| 36 | + @InEnum(value = BrokerageUserTypeEnum.class, message = "用户类型必须是 {value}") | ||
| 37 | + private Integer sourceUserType; | ||
| 38 | + | ||
| 33 | } | 39 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/record/vo/BrokerageRecordRespVO.java
| @@ -19,4 +19,19 @@ public class BrokerageRecordRespVO extends BrokerageRecordBaseVO { | @@ -19,4 +19,19 @@ public class BrokerageRecordRespVO extends BrokerageRecordBaseVO { | ||
| 19 | @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | 19 | @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) |
| 20 | private LocalDateTime createTime; | 20 | private LocalDateTime createTime; |
| 21 | 21 | ||
| 22 | + | ||
| 23 | + // ========== 用户信息 ========== | ||
| 24 | + | ||
| 25 | + @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") | ||
| 26 | + private String userAvatar; | ||
| 27 | + @Schema(description = "用户昵称", example = "李四") | ||
| 28 | + private String userNickname; | ||
| 29 | + | ||
| 30 | + | ||
| 31 | + // ========== 来源用户信息 ========== | ||
| 32 | + | ||
| 33 | + @Schema(description = "来源用户头像", example = "https://www.iocoder.cn/xxx.png") | ||
| 34 | + private String sourceUserAvatar; | ||
| 35 | + @Schema(description = "来源用户昵称", example = "李四") | ||
| 36 | + private String sourceUserNickname; | ||
| 22 | } | 37 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/record/BrokerageRecordConvert.java
| @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.trade.convert.brokerage.record; | @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.trade.convert.brokerage.record; | ||
| 3 | import cn.hutool.core.util.ObjectUtil; | 3 | import cn.hutool.core.util.ObjectUtil; |
| 4 | import cn.hutool.core.util.StrUtil; | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; | ||
| 6 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.BrokerageRecordRespVO; | 7 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.BrokerageRecordRespVO; |
| 7 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record.BrokerageRecordDO; | 8 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record.BrokerageRecordDO; |
| 8 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.BrokerageUserDO; | 9 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.BrokerageUserDO; |
| @@ -13,6 +14,8 @@ import org.mapstruct.factory.Mappers; | @@ -13,6 +14,8 @@ import org.mapstruct.factory.Mappers; | ||
| 13 | 14 | ||
| 14 | import java.time.LocalDateTime; | 15 | import java.time.LocalDateTime; |
| 15 | import java.util.List; | 16 | import java.util.List; |
| 17 | +import java.util.Map; | ||
| 18 | +import java.util.Optional; | ||
| 16 | 19 | ||
| 17 | /** | 20 | /** |
| 18 | * 佣金记录 Convert | 21 | * 佣金记录 Convert |
| @@ -32,7 +35,7 @@ public interface BrokerageRecordConvert { | @@ -32,7 +35,7 @@ public interface BrokerageRecordConvert { | ||
| 32 | 35 | ||
| 33 | default BrokerageRecordDO convert(BrokerageUserDO user, BrokerageRecordBizTypeEnum bizType, String bizId, | 36 | default BrokerageRecordDO convert(BrokerageUserDO user, BrokerageRecordBizTypeEnum bizType, String bizId, |
| 34 | Integer brokerageFrozenDays, int brokerage, LocalDateTime unfreezeTime, | 37 | Integer brokerageFrozenDays, int brokerage, LocalDateTime unfreezeTime, |
| 35 | - String title) { | 38 | + String title, Long sourceUserId, Integer sourceUserType) { |
| 36 | brokerageFrozenDays = ObjectUtil.defaultIfNull(brokerageFrozenDays, 0); | 39 | brokerageFrozenDays = ObjectUtil.defaultIfNull(brokerageFrozenDays, 0); |
| 37 | // 不冻结时,佣金直接就是结算状态 | 40 | // 不冻结时,佣金直接就是结算状态 |
| 38 | Integer status = brokerageFrozenDays > 0 | 41 | Integer status = brokerageFrozenDays > 0 |
| @@ -48,7 +51,22 @@ public interface BrokerageRecordConvert { | @@ -48,7 +51,22 @@ public interface BrokerageRecordConvert { | ||
| 48 | .setDescription(StrUtil.format(bizType.getDescription(), String.format("¥%.2f", brokerage / 100d))) | 51 | .setDescription(StrUtil.format(bizType.getDescription(), String.format("¥%.2f", brokerage / 100d))) |
| 49 | .setStatus(status) | 52 | .setStatus(status) |
| 50 | .setFrozenDays(brokerageFrozenDays) | 53 | .setFrozenDays(brokerageFrozenDays) |
| 51 | - .setUnfreezeTime(unfreezeTime); | 54 | + .setUnfreezeTime(unfreezeTime) |
| 55 | + .setSourceUserType(sourceUserType) | ||
| 56 | + .setSourceUserId(sourceUserId); | ||
| 52 | } | 57 | } |
| 53 | 58 | ||
| 59 | + default PageResult<BrokerageRecordRespVO> convertPage(PageResult<BrokerageRecordDO> pageResult, Map<Long, MemberUserRespDTO> userMap) { | ||
| 60 | + PageResult<BrokerageRecordRespVO> result = convertPage(pageResult); | ||
| 61 | + | ||
| 62 | + for (BrokerageRecordRespVO respVO : result.getList()) { | ||
| 63 | + Optional.ofNullable(userMap.get(respVO.getUserId())).ifPresent(user -> | ||
| 64 | + respVO.setUserNickname(user.getNickname()).setUserAvatar(user.getAvatar())); | ||
| 65 | + | ||
| 66 | + Optional.ofNullable(userMap.get(respVO.getSourceUserId())).ifPresent(user -> | ||
| 67 | + respVO.setSourceUserNickname(user.getNickname()).setSourceUserAvatar(user.getAvatar())); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + return result; | ||
| 71 | + } | ||
| 54 | } | 72 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/brokerage/record/BrokerageRecordDO.java
| @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record; | @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record; | ||
| 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.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; | 4 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; |
| 5 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; | 5 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; |
| 6 | +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageUserTypeEnum; | ||
| 6 | import com.baomidou.mybatisplus.annotation.KeySequence; | 7 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| 7 | import com.baomidou.mybatisplus.annotation.TableId; | 8 | import com.baomidou.mybatisplus.annotation.TableId; |
| 8 | import com.baomidou.mybatisplus.annotation.TableName; | 9 | import com.baomidou.mybatisplus.annotation.TableName; |
| @@ -32,6 +33,8 @@ public class BrokerageRecordDO extends BaseDO { | @@ -32,6 +33,8 @@ public class BrokerageRecordDO extends BaseDO { | ||
| 32 | private Integer id; | 33 | private Integer id; |
| 33 | /** | 34 | /** |
| 34 | * 用户编号 | 35 | * 用户编号 |
| 36 | + * <p> | ||
| 37 | + * 关联 MemberUserDO.id | ||
| 35 | */ | 38 | */ |
| 36 | private Long userId; | 39 | private Long userId; |
| 37 | /** | 40 | /** |
| @@ -79,4 +82,17 @@ public class BrokerageRecordDO extends BaseDO { | @@ -79,4 +82,17 @@ public class BrokerageRecordDO extends BaseDO { | ||
| 79 | */ | 82 | */ |
| 80 | private LocalDateTime unfreezeTime; | 83 | private LocalDateTime unfreezeTime; |
| 81 | 84 | ||
| 85 | + /** | ||
| 86 | + * 来源用户类型 | ||
| 87 | + * <p> | ||
| 88 | + * 枚举 {@link BrokerageUserTypeEnum} | ||
| 89 | + */ | ||
| 90 | + private Integer sourceUserType; | ||
| 91 | + /** | ||
| 92 | + * 来源用户编号 | ||
| 93 | + * <p> | ||
| 94 | + * 关联 MemberUserDO.id | ||
| 95 | + */ | ||
| 96 | + private Long sourceUserId; | ||
| 97 | + | ||
| 82 | } | 98 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/record/BrokerageRecordMapper.java
| @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 6 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.BrokerageRecordPageReqVO; | 6 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.BrokerageRecordPageReqVO; |
| 7 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record.BrokerageRecordDO; | 7 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record.BrokerageRecordDO; |
| 8 | +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageUserTypeEnum; | ||
| 8 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | 9 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; |
| 9 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 10 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 10 | import org.apache.ibatis.annotations.Mapper; | 11 | import org.apache.ibatis.annotations.Mapper; |
| @@ -23,10 +24,14 @@ import java.util.List; | @@ -23,10 +24,14 @@ import java.util.List; | ||
| 23 | public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> { | 24 | public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> { |
| 24 | 25 | ||
| 25 | default PageResult<BrokerageRecordDO> selectPage(BrokerageRecordPageReqVO reqVO) { | 26 | default PageResult<BrokerageRecordDO> selectPage(BrokerageRecordPageReqVO reqVO) { |
| 27 | + boolean sourceUserTypeCondition = reqVO.getSourceUserType() != null && | ||
| 28 | + !BrokerageUserTypeEnum.ALL.getType().equals(reqVO.getSourceUserType()); | ||
| 29 | + | ||
| 26 | return selectPage(reqVO, new LambdaQueryWrapperX<BrokerageRecordDO>() | 30 | return selectPage(reqVO, new LambdaQueryWrapperX<BrokerageRecordDO>() |
| 27 | .eqIfPresent(BrokerageRecordDO::getUserId, reqVO.getUserId()) | 31 | .eqIfPresent(BrokerageRecordDO::getUserId, reqVO.getUserId()) |
| 28 | .eqIfPresent(BrokerageRecordDO::getBizType, reqVO.getBizType()) | 32 | .eqIfPresent(BrokerageRecordDO::getBizType, reqVO.getBizType()) |
| 29 | .eqIfPresent(BrokerageRecordDO::getStatus, reqVO.getStatus()) | 33 | .eqIfPresent(BrokerageRecordDO::getStatus, reqVO.getStatus()) |
| 34 | + .eq(sourceUserTypeCondition, BrokerageRecordDO::getSourceUserType, reqVO.getSourceUserType()) | ||
| 30 | .betweenIfPresent(BrokerageRecordDO::getCreateTime, reqVO.getCreateTime()) | 35 | .betweenIfPresent(BrokerageRecordDO::getCreateTime, reqVO.getCreateTime()) |
| 31 | .orderByDesc(BrokerageRecordDO::getId)); | 36 | .orderByDesc(BrokerageRecordDO::getId)); |
| 32 | } | 37 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/bo/BrokerageAddReqBO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/BrokerageRecordServiceImpl.java
| @@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; | @@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; | ||
| 14 | import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.record.BrokerageRecordMapper; | 14 | import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.record.BrokerageRecordMapper; |
| 15 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; | 15 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; |
| 16 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; | 16 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; |
| 17 | +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageUserTypeEnum; | ||
| 17 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO; | 18 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO; |
| 18 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | 19 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; |
| 19 | import cn.iocoder.yudao.module.trade.service.brokerage.user.BrokerageUserService; | 20 | import cn.iocoder.yudao.module.trade.service.brokerage.user.BrokerageUserService; |
| @@ -27,7 +28,6 @@ import javax.annotation.Resource; | @@ -27,7 +28,6 @@ import javax.annotation.Resource; | ||
| 27 | import java.time.LocalDateTime; | 28 | import java.time.LocalDateTime; |
| 28 | import java.util.ArrayList; | 29 | import java.util.ArrayList; |
| 29 | import java.util.List; | 30 | import java.util.List; |
| 30 | -import java.util.function.Function; | ||
| 31 | 31 | ||
| 32 | /** | 32 | /** |
| 33 | * 佣金记录 Service 实现类 | 33 | * 佣金记录 Service 实现类 |
| @@ -72,7 +72,8 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | @@ -72,7 +72,8 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | ||
| 72 | return; | 72 | return; |
| 73 | } | 73 | } |
| 74 | // 1.2 计算一级分佣 | 74 | // 1.2 计算一级分佣 |
| 75 | - addBrokerage(firstUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageFirstPercent(), BrokerageAddReqBO::getFirstFixedPrice, bizType); | 75 | + addBrokerage(firstUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageFirstPercent(), |
| 76 | + bizType, BrokerageUserTypeEnum.FIRST); | ||
| 76 | 77 | ||
| 77 | // 2.1 获得二级推广员 | 78 | // 2.1 获得二级推广员 |
| 78 | if (firstUser.getBindUserId() == null) { | 79 | if (firstUser.getBindUserId() == null) { |
| @@ -83,7 +84,8 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | @@ -83,7 +84,8 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | ||
| 83 | return; | 84 | return; |
| 84 | } | 85 | } |
| 85 | // 2.2 计算二级分佣 | 86 | // 2.2 计算二级分佣 |
| 86 | - addBrokerage(secondUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageSecondPercent(), BrokerageAddReqBO::getSecondFixedPrice, bizType); | 87 | + addBrokerage(secondUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageSecondPercent(), |
| 88 | + bizType, BrokerageUserTypeEnum.SECOND); | ||
| 87 | } | 89 | } |
| 88 | 90 | ||
| 89 | @Override | 91 | @Override |
| @@ -138,12 +140,11 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | @@ -138,12 +140,11 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | ||
| 138 | * @param list 佣金增加参数列表 | 140 | * @param list 佣金增加参数列表 |
| 139 | * @param brokerageFrozenDays 冻结天数 | 141 | * @param brokerageFrozenDays 冻结天数 |
| 140 | * @param brokeragePercent 佣金比例 | 142 | * @param brokeragePercent 佣金比例 |
| 141 | - * @param fixedPriceFun 固定佣金 | ||
| 142 | * @param bizType 业务类型 | 143 | * @param bizType 业务类型 |
| 144 | + * @param sourceUserType 来源用户类型 | ||
| 143 | */ | 145 | */ |
| 144 | private void addBrokerage(BrokerageUserDO user, List<BrokerageAddReqBO> list, Integer brokerageFrozenDays, | 146 | private void addBrokerage(BrokerageUserDO user, List<BrokerageAddReqBO> list, Integer brokerageFrozenDays, |
| 145 | - Integer brokeragePercent, Function<BrokerageAddReqBO, Integer> fixedPriceFun, | ||
| 146 | - BrokerageRecordBizTypeEnum bizType) { | 147 | + Integer brokeragePercent, BrokerageRecordBizTypeEnum bizType, BrokerageUserTypeEnum sourceUserType) { |
| 147 | // 1.1 处理冻结时间 | 148 | // 1.1 处理冻结时间 |
| 148 | LocalDateTime unfreezeTime = null; | 149 | LocalDateTime unfreezeTime = null; |
| 149 | if (brokerageFrozenDays != null && brokerageFrozenDays > 0) { | 150 | if (brokerageFrozenDays != null && brokerageFrozenDays > 0) { |
| @@ -153,12 +154,20 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | @@ -153,12 +154,20 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | ||
| 153 | int totalBrokerage = 0; | 154 | int totalBrokerage = 0; |
| 154 | List<BrokerageRecordDO> records = new ArrayList<>(); | 155 | List<BrokerageRecordDO> records = new ArrayList<>(); |
| 155 | for (BrokerageAddReqBO item : list) { | 156 | for (BrokerageAddReqBO item : list) { |
| 156 | - int brokeragePerItem = calculatePrice(item.getBasePrice(), brokeragePercent, fixedPriceFun.apply(item)); | 157 | + Integer fixedPrice = 0; |
| 158 | + if (BrokerageUserTypeEnum.FIRST.equals(sourceUserType)) { | ||
| 159 | + fixedPrice = item.getFirstFixedPrice(); | ||
| 160 | + } else if (BrokerageUserTypeEnum.SECOND.equals(sourceUserType)) { | ||
| 161 | + fixedPrice = item.getSecondFixedPrice(); | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + int brokeragePerItem = calculatePrice(item.getBasePrice(), brokeragePercent, fixedPrice); | ||
| 157 | if (brokeragePerItem <= 0) { | 165 | if (brokeragePerItem <= 0) { |
| 158 | continue; | 166 | continue; |
| 159 | } | 167 | } |
| 160 | records.add(BrokerageRecordConvert.INSTANCE.convert(user, bizType, item.getBizId(), | 168 | records.add(BrokerageRecordConvert.INSTANCE.convert(user, bizType, item.getBizId(), |
| 161 | - brokerageFrozenDays, brokeragePerItem, unfreezeTime, bizType.getTitle())); | 169 | + brokerageFrozenDays, brokeragePerItem, unfreezeTime, bizType.getTitle(), |
| 170 | + item.getSourceUserId(), sourceUserType.getType())); | ||
| 162 | totalBrokerage += brokeragePerItem; | 171 | totalBrokerage += brokeragePerItem; |
| 163 | } | 172 | } |
| 164 | if (CollUtil.isEmpty(records)) { | 173 | if (CollUtil.isEmpty(records)) { |