Commit 6c193f723f319ec09d42e2594e5673afcb54e76b

Authored by owen
1 parent 499a054e

trade: 分销业务后台功能:推广订单列表

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
@@ -34,4 +34,8 @@ public class BrokerageAddReqBO { @@ -34,4 +34,8 @@ public class BrokerageAddReqBO {
34 */ 34 */
35 private Integer secondFixedPrice; 35 private Integer secondFixedPrice;
36 36
  37 + /**
  38 + * 来源用户编号
  39 + */
  40 + private Long sourceUserId;
37 } 41 }
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)) {