分销员使用 shopUser主键ID

This commit is contained in:
wangw 2025-10-28 11:27:27 +08:00
parent 0d2a930ae8
commit 9b4354ae70
4 changed files with 86 additions and 39 deletions

View File

@ -104,9 +104,9 @@ public class UDistributionController {
*/
@PostMapping("/bindInviteUser")
public CzgResult<Map<String, Object>> bindInviteUser(@RequestBody MkDistributionUserDTO param) {
AssertUtil.isNull(param.getId(), "店铺用户ID不能为空");
AssertUtil.isNull(param.getShopId(), "店铺ID不能为空");
AssertUtil.isNull(param.getParentId(), "店铺用户ID不能为空");
AssertUtil.isNull(param.getDistributionLevelId(), "分销等级ID不能为空");
AssertUtil.isNull(param.getInviteCode(), "邀请码不能为空");
distributionUserService.bindInviteUser(param);
return CzgResult.success();
}

View File

@ -45,11 +45,6 @@ public class MkDistributionUserDTO extends TimeQueryParam implements Serializabl
*/
private Long shopId;
/**
* 店铺用户Id
*/
private Long shopUserId;
/**
* 分销等级
*/
@ -120,4 +115,9 @@ public class MkDistributionUserDTO extends TimeQueryParam implements Serializabl
*/
private String shopUserPhone;
/**
* 邀请码
*/
private String inviteCode;
}

View File

@ -32,9 +32,8 @@ public class MkDistributionUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 分销员ID主键自增
* 分销员ID 使用ShopUserId
*/
@Id(keyType = KeyType.Auto)
private Long id;
/**
@ -49,11 +48,6 @@ public class MkDistributionUser implements Serializable {
private Long userId;
/**
* 店铺用户Id
*/
private Long shopUserId;
/**
* 分销等级
*/

View File

@ -158,12 +158,12 @@ public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUse
if (shopUser.getDistributionUserId() != null) {
MkDistributionUser mkDistributionUser = this.getById(shopUser.getDistributionUserId());
AssertUtil.isNull(mkDistributionUser, "上级分销员不存在");
ShopUser shopUserParent = shopUserService.getById(mkDistributionUser.getShopUserId());
ShopUser shopUserParent = shopUserService.getById(mkDistributionUser.getId());
result.put("parentName", shopUserParent.getNickName());
result.put("parentPhone", shopUserParent.getPhone());
}
MkDistributionUser mkDistributionUser = this.getOne(QueryWrapper.create()
.eq(MkDistributionUser::getShopUserId, shopUser.getId()).eq(MkDistributionUser::getShopId, shopId));
.eq(MkDistributionUser::getId, shopUser.getId()).eq(MkDistributionUser::getShopId, shopId));
MkDistributionConfigVO mkDistributionConfigVO = mkDistributionConfigService.detail(shopId);
if (mkDistributionUser != null) {
Map<String, Object> distributionUser = new HashMap<>();
@ -211,42 +211,92 @@ public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUse
@Override
public void bindInviteUser(MkDistributionUserDTO param) {
ShopUser shopUser = shopUserService.getById(param.getShopUserId());
ShopUser shopUser = shopUserService.getById(param.getId());
AssertUtil.isNull(shopUser, "店铺用户不存在");
AssertUtil.isNull(shopUser.getDistributionUserId(), "店铺用户已绑定分销员");
MkDistributionUser parent = getOne(QueryWrapper.create().eq(MkDistributionUser::getInviteCode, param.getInviteCount()));
MkDistributionUser parent = getOne(QueryWrapper.create().eq(MkDistributionUser::getInviteCode, param.getInviteCode()));
AssertUtil.isNull(parent, "邀请人不存在");
ShopUser newShopUser = new ShopUser();
newShopUser.setId(shopUser.getId());
newShopUser.setDistributionUserId(parent.getId());
newShopUser.setDistributionUserParentId(parent.getParentId());
shopUserService.updateById(newShopUser);
MkDistributionUser newDistributionUser = new MkDistributionUser();
newDistributionUser.setId(parent.getId());
newDistributionUser.setInviteCount(parent.getInviteCount() + 1);
if (parent.getStatus() != 9) {
MkDistributionConfig mkDistributionConfig = mkDistributionConfigService.getOne(QueryWrapper.create()
.eq(MkDistributionConfig::getShopId, parent.getShopId()));
if (mkDistributionConfig != null) {
if ("invite".equals(mkDistributionConfig.getUpgradeType())) {
MkDistributionLevelConfig levelConfig = levelConfigService.getOne(QueryWrapper.create()
.eq(MkDistributionLevelConfig::getShopId, parent.getShopId())
.le(MkDistributionLevelConfig::getInviteCount, parent.getInviteCount())
.gt(MkDistributionLevelConfig::getId, parent.getDistributionLevelId())
.orderBy(MkDistributionLevelConfig::getLevel).desc().limit(1));
if (levelConfig != null) {
newDistributionUser.setDistributionLevelId(levelConfig.getId());
newDistributionUser.setDistributionLevelName(levelConfig.getName());
}
}
}
}
this.updateById(newDistributionUser);
}
// /**
// * 按消费金额升级等级
// *
// * @param distributionUserId 分销员Id
// */
// public void costUpgradeLevel(Long distributionUserId) {
// MkDistributionUser distributionUser = getById(distributionUserId);
// if (distributionUser == null) {
// return;
// }
//
// MkDistributionConfig mkDistributionConfig = mkDistributionConfigService.getOne(QueryWrapper.create()
// .eq(MkDistributionConfig::getShopId, distributionUser.getShopId()));
// AssertUtil.isNull(mkDistributionConfig, "升级失败,店铺未配置分销");
// AssertUtil.isNotEqual(mkDistributionConfig.getUpgradeType(), "cost", "升级失败");
//
// MkDistributionLevelConfig levelConfig = levelConfigService.getOne(QueryWrapper.create()
// .eq(MkDistributionLevelConfig::getShopId, distributionUser.getShopId())
// .le(MkDistributionLevelConfig::getInviteCount, distributionUser.getInviteCount())
// .gt(MkDistributionLevelConfig::getId, distributionUser.getDistributionLevelId())
// .orderBy(MkDistributionLevelConfig::getLevel).desc().limit(1));
// if (levelConfig != null) {
// distributionUser.setDistributionLevelId(levelConfig.getId());
// distributionUser.setDistributionLevelName(levelConfig.getName());
// }
// }
@Override
public Page<MkDistributionUserDTO> getDistributionUser(MkDistributionUserDTO param) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq(MkDistributionUser::getId, param.getId());
queryWrapper.eq(MkDistributionUser::getShopId, param.getShopId());
queryWrapper.eq(MkDistributionUser::getParentId, param.getParentId());
queryWrapper.eq(MkDistributionUser::getShopUserId, param.getShopUserId());
queryWrapper.ge(MkDistributionUser::getCreateTime, param.getStartTime());
queryWrapper.le(MkDistributionUser::getCreateTime, param.getEndTime());
queryWrapper.orderBy(MkDistributionUser::getCreateTime).desc();
Page<MkDistributionUserDTO> page = pageAs(new Page<>(param.getPage(), param.getSize()), queryWrapper, MkDistributionUserDTO.class);
Map<Long, ShopUser> shopUserMap = new HashMap<>();
if (CollUtil.isNotEmpty(page.getRecords())) {
if (param.getShopUserId() != null) {
shopUserMap.put(param.getShopUserId(), shopUserService.getById(param.getShopUserId()));
if (param.getId() != null) {
shopUserMap.put(param.getId(), shopUserService.getById(param.getId()));
} else {
Set<Long> shopUserIds = page.getRecords().stream()
.map(MkDistributionUserDTO::getShopUserId)
.map(MkDistributionUserDTO::getId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
shopUserMap = shopUserService.list(QueryWrapper.create().in(ShopUser::getId, shopUserIds))
.stream().collect(Collectors.toMap(ShopUser::getId, shopUser -> shopUser));
}
for (MkDistributionUserDTO record : page.getRecords()) {
ShopUser shopUser = shopUserMap.get(record.getShopUserId());
ShopUser shopUser = shopUserMap.get(record.getId());
if (shopUser == null || shopUser.getId() == null) {
continue;
}
@ -272,26 +322,29 @@ public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUse
AssertUtil.isNull(param.getShopId(), "店铺ID不能为空");
AssertUtil.isNull(param.getOpeningMethod(), "开通方式不能为空");
AssertUtil.isNull(param.getUserId(), "用户ID不能为空");
AssertUtil.isNull(param.getShopUserId(), "店铺用户ID不能为空");
AssertUtil.isNull(param.getId(), "店铺用户ID不能为空");
long count = count(QueryWrapper.create()
.eq(MkDistributionUser::getId, param.getId())
.eq(MkDistributionUser::getShopId, param.getShopId())
.eq(MkDistributionUser::getShopUserId, param.getShopUserId())
.eq(MkDistributionUser::getUserId, param.getUserId()));
if (count > 0) {
throw new CzgException("该用户已被添加为分销员");
}
//TODO 通过不同的添加方式 增加校验
MkDistributionConfig config = mkDistributionConfigService.getOne(
QueryWrapper.create().eq(MkDistributionConfig::getShopId, param.getShopId())
.eq(MkDistributionConfig::getIsEnable, 1));
AssertUtil.isNull(config, "店铺未配置分销");
param.setStatus(1);
MkDistributionLevelConfig levelConfig = levelConfigService.getOne(QueryWrapper.create()
.eq(MkDistributionLevelConfig::getShopId, param.getShopId())
.eq(MkDistributionLevelConfig::getLevel, 1));
AssertUtil.isNull(levelConfig, "店铺未配置分销等级");
param.setDistributionLevelId(levelConfig.getId());
param.setDistributionLevelName(levelConfig.getName());
param.setStatus(0);
if (!"自主申请".equals(param.getOpeningMethod()) || (config.getInviteCount() == 0)) {
MkDistributionLevelConfig levelConfig = levelConfigService.getOne(QueryWrapper.create()
.eq(MkDistributionLevelConfig::getShopId, param.getShopId())
.orderBy(MkDistributionLevelConfig::getId).asc().limit(1));
param.setStatus(1);
AssertUtil.isNull(levelConfig, "店铺未配置分销等级");
param.setDistributionLevelId(levelConfig.getId());
param.setDistributionLevelName(levelConfig.getName());
}
param.setId(param.getId());
param.setInviteCode(CzgRandomUtils.randomString(10));
save(param);
}
@ -354,7 +407,7 @@ public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUse
.setRemark("分销员购买"));
addDistributionUser(new MkDistributionUser().setParentId(null).setShopId(shopId)
.setUserId(shopUserInfo.getUserId())
.setShopUserId(shopUserInfo.getId()).setOpeningMethod("付费开通"));
.setId(shopUserInfo.getId()).setOpeningMethod("付费开通"));
}
@ -381,7 +434,7 @@ public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUse
return;
}
try {
deepReward(config, shopUserService.getById(parent.getShopUserId()), amount, sourceId, type, orderNo, ++currentLevel);
deepReward(config, shopUserService.getById(parent.getId()), amount, sourceId, type, orderNo, ++currentLevel);
} catch (Exception e) {
log.warn("分销奖励失败: {}", e.getMessage());
}
@ -392,9 +445,9 @@ public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUse
if (config.getRewardCount() != null && config.getRewardCount() > 0) {
long count = distributionFlowService.count(new QueryWrapper().eq(MkDistributionFlow::getSourceShopUserId, sourceShopUser.getId())
.eq(MkDistributionFlow::getShopUserId, distributionUser.getShopUserId()));
.eq(MkDistributionFlow::getShopUserId, distributionUser.getId()));
if (count >= config.getRewardCount()) {
log.info("分销员{}已达到奖励次数上限, 次数: {}", distributionUser.getShopUserId(), config.getRewardCount());
log.info("分销员{}已达到奖励次数上限, 次数: {}", distributionUser.getId(), config.getRewardCount());
return;
}
}
@ -415,7 +468,7 @@ public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUse
flag = false;
}
MkDistributionFlow mkDistributionFlow = new MkDistributionFlow().setShopUserId(distributionUser.getShopUserId())
MkDistributionFlow mkDistributionFlow = new MkDistributionFlow().setShopUserId(distributionUser.getId())
.setShopId(distributionUser.getShopId()).setDistributionUserId(distributionUser.getId())
.setLevelId(distributionUser.getDistributionLevelId()).setLevel(level.getLevel()).setSourceNickName(sourceShopUser.getNickName()).setOrderNo(orderNo)
.setSourceId(sourceId).setAmount(amount).setType(type).setStatus(flag ? TableValueConstant.DistributionFlow.Status.SUCCESS.getCode() :
@ -461,7 +514,7 @@ public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUse
public Boolean withdraw(long userId, MkDistributionWithdrawFlowDTO withdrawFlowDTO) {
ShopUser shopUserInfo = shopUserService.getShopUserInfo(withdrawFlowDTO.getShopId(), userId);
UserInfo userInfo = userInfoService.getById(shopUserInfo.getUserId());
MkDistributionUser distributionUser = getOne(new QueryWrapper().eq(MkDistributionUser::getShopUserId, shopUserInfo.getId()));
MkDistributionUser distributionUser = getOne(new QueryWrapper().eq(MkDistributionUser::getId, shopUserInfo.getId()));
AssertUtil.isNull(distributionUser, "分销员不存在");
if (distributionUser.getReceivedIncome().subtract(withdrawFlowDTO.getAmount()).compareTo(BigDecimal.ZERO) < 0) {
throw new CzgException("可提现金额不足");