Commit 643602d0382b60249f5d19276265fb5dd971b7a5
1 parent
ca55e61d
trade: 分销业务后台功能:修改上级推广人
Showing
3 changed files
with
48 additions
and
35 deletions
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/user/BrokerageUserController.java
| @@ -9,8 +9,8 @@ import cn.iocoder.yudao.module.trade.convert.brokerage.user.BrokerageUserConvert | @@ -9,8 +9,8 @@ import cn.iocoder.yudao.module.trade.convert.brokerage.user.BrokerageUserConvert | ||
| 9 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.BrokerageUserDO; | 9 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.BrokerageUserDO; |
| 10 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; | 10 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; |
| 11 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; | 11 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; |
| 12 | -import cn.iocoder.yudao.module.trade.service.brokerage.record.BrokerageRecordService; | ||
| 13 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | 12 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; |
| 13 | +import cn.iocoder.yudao.module.trade.service.brokerage.record.BrokerageRecordService; | ||
| 14 | import cn.iocoder.yudao.module.trade.service.brokerage.user.BrokerageUserService; | 14 | import cn.iocoder.yudao.module.trade.service.brokerage.user.BrokerageUserService; |
| 15 | import io.swagger.v3.oas.annotations.Operation; | 15 | import io.swagger.v3.oas.annotations.Operation; |
| 16 | import io.swagger.v3.oas.annotations.Parameter; | 16 | import io.swagger.v3.oas.annotations.Parameter; |
| @@ -72,7 +72,8 @@ public class BrokerageUserController { | @@ -72,7 +72,8 @@ public class BrokerageUserController { | ||
| 72 | @PreAuthorize("@ss.hasPermission('trade:brokerage-user:query')") | 72 | @PreAuthorize("@ss.hasPermission('trade:brokerage-user:query')") |
| 73 | public CommonResult<BrokerageUserRespVO> getBrokerageUser(@RequestParam("id") Long id) { | 73 | public CommonResult<BrokerageUserRespVO> getBrokerageUser(@RequestParam("id") Long id) { |
| 74 | BrokerageUserDO brokerageUser = brokerageUserService.getBrokerageUser(id); | 74 | BrokerageUserDO brokerageUser = brokerageUserService.getBrokerageUser(id); |
| 75 | - return success(BrokerageUserConvert.INSTANCE.convert(brokerageUser)); | 75 | + BrokerageUserRespVO respVO = BrokerageUserConvert.INSTANCE.convert(brokerageUser); |
| 76 | + return success(BrokerageUserConvert.INSTANCE.copyTo(memberUserApi.getUser(id), respVO)); | ||
| 76 | } | 77 | } |
| 77 | 78 | ||
| 78 | @GetMapping("/page") | 79 | @GetMapping("/page") |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/user/BrokerageUserConvert.java
| @@ -37,11 +37,7 @@ public interface BrokerageUserConvert { | @@ -37,11 +37,7 @@ public interface BrokerageUserConvert { | ||
| 37 | PageResult<BrokerageUserRespVO> result = convertPage(pageResult); | 37 | PageResult<BrokerageUserRespVO> result = convertPage(pageResult); |
| 38 | for (BrokerageUserRespVO vo : result.getList()) { | 38 | for (BrokerageUserRespVO vo : result.getList()) { |
| 39 | // 用户信息 | 39 | // 用户信息 |
| 40 | - Optional.ofNullable(userMap.get(vo.getId())) | ||
| 41 | - .ifPresent(user -> { | ||
| 42 | - vo.setNickname(user.getNickname()); | ||
| 43 | - vo.setAvatar(user.getAvatar()); | ||
| 44 | - }); | 40 | + copyTo(userMap.get(vo.getId()), vo); |
| 45 | 41 | ||
| 46 | // 推广用户数量(一级) | 42 | // 推广用户数量(一级) |
| 47 | vo.setBrokerageUserCount(MapUtil.getInt(brokerageUserCountMap, vo.getId(), 0)); | 43 | vo.setBrokerageUserCount(MapUtil.getInt(brokerageUserCountMap, vo.getId(), 0)); |
| @@ -60,5 +56,12 @@ public interface BrokerageUserConvert { | @@ -60,5 +56,12 @@ public interface BrokerageUserConvert { | ||
| 60 | return result; | 56 | return result; |
| 61 | } | 57 | } |
| 62 | 58 | ||
| 59 | + default BrokerageUserRespVO copyTo(MemberUserRespDTO source, BrokerageUserRespVO target) { | ||
| 60 | + Optional.ofNullable(source) | ||
| 61 | + .ifPresent(user -> target.setNickname(user.getNickname()) | ||
| 62 | + .setAvatar(user.getAvatar())); | ||
| 63 | + return target; | ||
| 64 | + } | ||
| 65 | + | ||
| 63 | BrokerageUserDTO convertDTO(BrokerageUserDO brokerageUser); | 66 | BrokerageUserDTO convertDTO(BrokerageUserDO brokerageUser); |
| 64 | } | 67 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/user/BrokerageUserServiceImpl.java
| @@ -55,16 +55,19 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -55,16 +55,19 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 55 | 55 | ||
| 56 | @Override | 56 | @Override |
| 57 | public void updateBrokerageUserId(Long id, Long bindUserId) { | 57 | public void updateBrokerageUserId(Long id, Long bindUserId) { |
| 58 | - // 校验存在 | ||
| 59 | - validateBrokerageUserExists(id); | 58 | + // 0. 校验存在 |
| 59 | + BrokerageUserDO brokerageUser = validateBrokerageUserExists(id); | ||
| 60 | if (bindUserId == null) { | 60 | if (bindUserId == null) { |
| 61 | - // 清除推广员 | 61 | + // 1. 清除推广员 |
| 62 | brokerageUserMapper.updateBindUserIdAndBindUserTimeToNull(id); | 62 | brokerageUserMapper.updateBindUserIdAndBindUserTimeToNull(id); |
| 63 | - } else { | ||
| 64 | - // 修改推广员 | ||
| 65 | - brokerageUserMapper.updateById(new BrokerageUserDO().setId(id) | ||
| 66 | - .setBindUserId(bindUserId).setBindUserTime(LocalDateTime.now())); | 63 | + return; |
| 67 | } | 64 | } |
| 65 | + | ||
| 66 | + // 2.1 校验能否绑定 | ||
| 67 | + validateCanBindUser(brokerageUser, bindUserId); | ||
| 68 | + // 2.2 修改推广员 | ||
| 69 | + brokerageUserMapper.updateById(new BrokerageUserDO().setId(id) | ||
| 70 | + .setBindUserId(bindUserId).setBindUserTime(LocalDateTime.now())); | ||
| 68 | } | 71 | } |
| 69 | 72 | ||
| 70 | @Override | 73 | @Override |
| @@ -81,10 +84,13 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -81,10 +84,13 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 81 | } | 84 | } |
| 82 | } | 85 | } |
| 83 | 86 | ||
| 84 | - private void validateBrokerageUserExists(Long id) { | ||
| 85 | - if (brokerageUserMapper.selectById(id) == null) { | 87 | + private BrokerageUserDO validateBrokerageUserExists(Long id) { |
| 88 | + BrokerageUserDO brokerageUserDO = brokerageUserMapper.selectById(id); | ||
| 89 | + if (brokerageUserDO == null) { | ||
| 86 | throw exception(BROKERAGE_USER_NOT_EXISTS); | 90 | throw exception(BROKERAGE_USER_NOT_EXISTS); |
| 87 | } | 91 | } |
| 92 | + | ||
| 93 | + return brokerageUserDO; | ||
| 88 | } | 94 | } |
| 89 | 95 | ||
| 90 | @Override | 96 | @Override |
| @@ -142,12 +148,15 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -142,12 +148,15 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 142 | brokerageUser = new BrokerageUserDO().setId(userId).setBrokerageEnabled(false).setPrice(0).setFrozenPrice(0); | 148 | brokerageUser = new BrokerageUserDO().setId(userId).setBrokerageEnabled(false).setPrice(0).setFrozenPrice(0); |
| 143 | } | 149 | } |
| 144 | 150 | ||
| 145 | - // 校验能否绑定 | ||
| 146 | - boolean validated = validateCanBindUser(brokerageUser, bindUserId, isNewUser); | 151 | + // 校验分配配置 |
| 152 | + boolean validated = validateTradeConfig(brokerageUser, bindUserId, isNewUser); | ||
| 147 | if (!validated) { | 153 | if (!validated) { |
| 148 | return false; | 154 | return false; |
| 149 | } | 155 | } |
| 150 | 156 | ||
| 157 | + // 校验能否绑定 | ||
| 158 | + validateCanBindUser(brokerageUser, bindUserId); | ||
| 159 | + | ||
| 151 | if (isInsert) { | 160 | if (isInsert) { |
| 152 | Integer enabledCondition = tradeConfigService.getTradeConfig().getBrokerageEnabledCondition(); | 161 | Integer enabledCondition = tradeConfigService.getTradeConfig().getBrokerageEnabledCondition(); |
| 153 | if (BrokerageEnabledConditionEnum.ALL.getCondition().equals(enabledCondition)) { | 162 | if (BrokerageEnabledConditionEnum.ALL.getCondition().equals(enabledCondition)) { |
| @@ -162,28 +171,13 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -162,28 +171,13 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 162 | return true; | 171 | return true; |
| 163 | } | 172 | } |
| 164 | 173 | ||
| 165 | - private boolean validateCanBindUser(BrokerageUserDO user, Long bindUserId, Boolean isNewUser) { | ||
| 166 | - if (bindUserId == null) { | ||
| 167 | - return false; | ||
| 168 | - } | ||
| 169 | - | 174 | + private boolean validateTradeConfig(BrokerageUserDO user, Long bindUserId, Boolean isNewUser) { |
| 170 | // 校验分销功能是否启用 | 175 | // 校验分销功能是否启用 |
| 171 | TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig(); | 176 | TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig(); |
| 172 | if (tradeConfig == null || !BooleanUtil.isTrue(tradeConfig.getBrokerageEnabled())) { | 177 | if (tradeConfig == null || !BooleanUtil.isTrue(tradeConfig.getBrokerageEnabled())) { |
| 173 | return false; | 178 | return false; |
| 174 | } | 179 | } |
| 175 | 180 | ||
| 176 | - // 校验绑定自己 | ||
| 177 | - if (Objects.equals(user.getId(), bindUserId)) { | ||
| 178 | - throw exception(BROKERAGE_BIND_SELF); | ||
| 179 | - } | ||
| 180 | - | ||
| 181 | - // 校验要绑定的用户有无推广资格 | ||
| 182 | - BrokerageUserDO bindUser = brokerageUserMapper.selectById(bindUserId); | ||
| 183 | - if (bindUser == null || !BooleanUtil.isTrue(bindUser.getBrokerageEnabled())) { | ||
| 184 | - throw exception(BROKERAGE_BIND_USER_NOT_ENABLED); | ||
| 185 | - } | ||
| 186 | - | ||
| 187 | // 校验分佣模式:仅可后台手动设置推广员 | 181 | // 校验分佣模式:仅可后台手动设置推广员 |
| 188 | if (BrokerageEnabledConditionEnum.ADMIN.getCondition().equals(tradeConfig.getBrokerageEnabledCondition())) { | 182 | if (BrokerageEnabledConditionEnum.ADMIN.getCondition().equals(tradeConfig.getBrokerageEnabledCondition())) { |
| 189 | throw exception(BROKERAGE_BIND_CONDITION_ADMIN); | 183 | throw exception(BROKERAGE_BIND_CONDITION_ADMIN); |
| @@ -200,11 +194,26 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -200,11 +194,26 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 200 | } | 194 | } |
| 201 | } | 195 | } |
| 202 | 196 | ||
| 197 | + validateCanBindUser(user, bindUserId); | ||
| 198 | + return true; | ||
| 199 | + } | ||
| 200 | + | ||
| 201 | + private void validateCanBindUser(BrokerageUserDO user, Long bindUserId) { | ||
| 202 | + // 校验要绑定的用户有无推广资格 | ||
| 203 | + BrokerageUserDO bindUser = brokerageUserMapper.selectById(bindUserId); | ||
| 204 | + if (bindUser == null || !BooleanUtil.isTrue(bindUser.getBrokerageEnabled())) { | ||
| 205 | + throw exception(BROKERAGE_BIND_USER_NOT_ENABLED); | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + // 校验绑定自己 | ||
| 209 | + if (Objects.equals(user.getId(), bindUserId)) { | ||
| 210 | + throw exception(BROKERAGE_BIND_SELF); | ||
| 211 | + } | ||
| 212 | + | ||
| 203 | // A->B->A:下级不能绑定自己的上级, A->B->C->A可以!! | 213 | // A->B->A:下级不能绑定自己的上级, A->B->C->A可以!! |
| 204 | if (Objects.equals(user.getId(), bindUser.getBindUserId())) { | 214 | if (Objects.equals(user.getId(), bindUser.getBindUserId())) { |
| 205 | throw exception(BROKERAGE_BIND_LOOP); | 215 | throw exception(BROKERAGE_BIND_LOOP); |
| 206 | } | 216 | } |
| 207 | - return true; | ||
| 208 | } | 217 | } |
| 209 | 218 | ||
| 210 | } | 219 | } |