package cn.iocoder.yudao.module.trade.controller.admin.brokerage; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.member.api.user.MemberUserApi; import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.*; import cn.iocoder.yudao.module.trade.convert.brokerage.BrokerageUserConvert; import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum; import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordService; import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService; import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageWithdrawService; import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageWithdrawSummaryRespBO; import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryRespBO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Map; import java.util.Set; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static java.util.Arrays.asList; @Tag(name = "管理后台 - 分销用户") @RestController @RequestMapping("/trade/brokerage-user") @Validated public class BrokerageUserController { @Resource private BrokerageUserService brokerageUserService; @Resource private BrokerageRecordService brokerageRecordService; @Resource private BrokerageWithdrawService brokerageWithdrawService; @Resource private MemberUserApi memberUserApi; @PostMapping("/create") @Operation(summary = "创建分销用户") @PreAuthorize("@ss.hasPermission('trade:brokerage-user:create')") public CommonResult createBrokerageUser(@Valid @RequestBody BrokerageUserCreateReqVO createReqVO) { return success(brokerageUserService.createBrokerageUser(createReqVO)); } @PutMapping("/update-bind-user") @Operation(summary = "修改推广员") @PreAuthorize("@ss.hasPermission('trade:brokerage-user:update-bind-user')") public CommonResult updateBindUser(@Valid @RequestBody BrokerageUserUpdateBrokerageUserReqVO updateReqVO) { brokerageUserService.updateBrokerageUserId(updateReqVO.getId(), updateReqVO.getBindUserId()); return success(true); } @PutMapping("/clear-bind-user") @Operation(summary = "清除推广员") @PreAuthorize("@ss.hasPermission('trade:brokerage-user:clear-bind-user')") public CommonResult clearBindUser(@Valid @RequestBody BrokerageUserClearBrokerageUserReqVO updateReqVO) { brokerageUserService.updateBrokerageUserId(updateReqVO.getId(), null); return success(true); } @PutMapping("/update-brokerage-enable") @Operation(summary = "修改推广资格") @PreAuthorize("@ss.hasPermission('trade:brokerage-user:update-brokerage-enable')") public CommonResult updateBrokerageEnabled(@Valid @RequestBody BrokerageUserUpdateBrokerageEnabledReqVO updateReqVO) { brokerageUserService.updateBrokerageUserEnabled(updateReqVO.getId(), updateReqVO.getEnabled()); return success(true); } @GetMapping("/get") @Operation(summary = "获得分销用户") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('trade:brokerage-user:query')") public CommonResult getBrokerageUser(@RequestParam("id") Long id) { BrokerageUserDO brokerageUser = brokerageUserService.getBrokerageUser(id); // TODO @疯狂:是不是搞成一个统一的 convert? BrokerageUserRespVO respVO = BrokerageUserConvert.INSTANCE.convert(brokerageUser); return success(BrokerageUserConvert.INSTANCE.copyTo(memberUserApi.getUser(id), respVO)); } @GetMapping("/page") @Operation(summary = "获得分销用户分页") @PreAuthorize("@ss.hasPermission('trade:brokerage-user:query')") public CommonResult> getBrokerageUserPage(@Valid BrokerageUserPageReqVO pageVO) { // 分页查询 PageResult pageResult = brokerageUserService.getBrokerageUserPage(pageVO); // 查询用户信息 Set userIds = convertSet(pageResult.getList(), BrokerageUserDO::getId); Map userMap = memberUserApi.getUserMap(userIds); // 合计分佣的推广订单 Map brokerageOrderSummaryMap = brokerageRecordService.getUserBrokerageSummaryMapByUserId( userIds, BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus()); // 合计分佣的推广用户 // TODO @疯狂:转成 map 批量读取 Map brokerageUserCountMap = convertMap(userIds, userId -> userId, userId -> brokerageUserService.getBrokerageUserCountByBindUserId(userId, null)); // 合计分佣的提现 // TODO @疯狂:如果未来支持了打款这个动作,可能 status 会不对; Map withdrawMap = brokerageWithdrawService.getWithdrawSummaryMapByUserId( userIds, asList(BrokerageWithdrawStatusEnum.AUDIT_SUCCESS, BrokerageWithdrawStatusEnum.WITHDRAW_SUCCESS)); // 拼接返回 return success(BrokerageUserConvert.INSTANCE.convertPage(pageResult, userMap, brokerageUserCountMap, brokerageOrderSummaryMap, withdrawMap)); } }