|
|
|
|
@@ -10,14 +10,8 @@ import com.czg.account.service.ShopUserService;
|
|
|
|
|
import com.czg.constant.TableValueConstant;
|
|
|
|
|
import com.czg.exception.CzgException;
|
|
|
|
|
import com.czg.market.dto.MkDistributionUserDTO;
|
|
|
|
|
import com.czg.market.entity.MkDistributionAmountFlow;
|
|
|
|
|
import com.czg.market.entity.MkDistributionConfig;
|
|
|
|
|
import com.czg.market.entity.MkDistributionLevelConfig;
|
|
|
|
|
import com.czg.market.entity.MkDistributionUser;
|
|
|
|
|
import com.czg.market.service.MkDistributionAmountFlowService;
|
|
|
|
|
import com.czg.market.service.MkDistributionConfigService;
|
|
|
|
|
import com.czg.market.service.MkDistributionLevelConfigService;
|
|
|
|
|
import com.czg.market.service.MkDistributionUserService;
|
|
|
|
|
import com.czg.market.entity.*;
|
|
|
|
|
import com.czg.market.service.*;
|
|
|
|
|
import com.czg.market.vo.MkDistributionConfigVO;
|
|
|
|
|
import com.czg.order.dto.MkDistributionPayDTO;
|
|
|
|
|
import com.czg.order.entity.OrderPayment;
|
|
|
|
|
@@ -26,14 +20,17 @@ import com.czg.sa.StpKit;
|
|
|
|
|
import com.czg.service.market.mapper.MkDistributionUserMapper;
|
|
|
|
|
import com.czg.system.service.WxService;
|
|
|
|
|
import com.czg.utils.AssertUtil;
|
|
|
|
|
import com.czg.utils.FunUtils;
|
|
|
|
|
import com.mybatisflex.core.paginate.Page;
|
|
|
|
|
import com.mybatisflex.core.query.QueryWrapper;
|
|
|
|
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
|
|
|
|
import jakarta.annotation.Resource;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.math.RoundingMode;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
@@ -46,6 +43,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
* @author ww
|
|
|
|
|
* @since 2025-10-27
|
|
|
|
|
*/
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Service
|
|
|
|
|
public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUserMapper, MkDistributionUser> implements MkDistributionUserService {
|
|
|
|
|
|
|
|
|
|
@@ -55,6 +53,9 @@ public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUse
|
|
|
|
|
private MkDistributionLevelConfigService levelConfigService;
|
|
|
|
|
@Resource
|
|
|
|
|
private MkDistributionAmountFlowService distributionAmountFlowService;
|
|
|
|
|
@Resource
|
|
|
|
|
private MkDistributionFlowService distributionFlowService;
|
|
|
|
|
|
|
|
|
|
@DubboReference
|
|
|
|
|
private ShopUserService shopUserService;
|
|
|
|
|
@DubboReference
|
|
|
|
|
@@ -188,4 +189,69 @@ public class MkDistributionUserServiceImpl extends ServiceImpl<MkDistributionUse
|
|
|
|
|
.setMainShopId(mainShopId).setShopId(shopId).setAmount(finalAmount).setChangeAmount(amount).setSourceId(paymentId)
|
|
|
|
|
.setRemark("自助充值").setOpAccount(StpKit.USER.getAccount()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void distribute(Long sourceId, String orderNo, BigDecimal amount, Long sourceUserId, Long shopId, String type) {
|
|
|
|
|
FunUtils.safeRunVoid(() -> {
|
|
|
|
|
AssertUtil.isTrue(amount.compareTo(BigDecimal.ZERO) == 0, "分销金额不能为0");
|
|
|
|
|
MkDistributionConfigVO config = mkDistributionConfigService.detail(shopId);
|
|
|
|
|
AssertUtil.isTrue(config.getIsEnable() != 1, "分销未开启");
|
|
|
|
|
|
|
|
|
|
// 当前用户上级分销员
|
|
|
|
|
ShopUser sourceShopUserInfo = shopUserService.getShopUserInfo(shopId, sourceUserId);
|
|
|
|
|
if (sourceShopUserInfo.getDistributionUserId() == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
MkDistributionUser distributionUser = getOne(new QueryWrapper().eq(MkDistributionUser::getId, sourceShopUserInfo));
|
|
|
|
|
AssertUtil.isNull(distributionUser, "分销员不存在");
|
|
|
|
|
AssertUtil.isTrue(distributionUser.getStatus() != 1, "分销员未开启");
|
|
|
|
|
|
|
|
|
|
// 上上级分销员
|
|
|
|
|
if (distributionUser.getParentId() != null) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MkDistributionLevelConfig level = levelConfigService.getById(distributionUser.getDistributionLevelId());
|
|
|
|
|
AssertUtil.isNull(level, "分销等级不存在");
|
|
|
|
|
|
|
|
|
|
if (config.getRewardCount() != null && config.getRewardCount() > 0) {
|
|
|
|
|
long count = distributionFlowService.count(new QueryWrapper().eq(MkDistributionFlow::getSourceShopUserId, sourceUserId)
|
|
|
|
|
.eq(MkDistributionFlow::getShopUserId, distributionUser.getShopUserId()));
|
|
|
|
|
if (count >= config.getRewardCount()) {
|
|
|
|
|
log.info("分销员{}已达到奖励次数上限, 次数: {}", distributionUser.getShopUserId(), config.getRewardCount());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 店铺信息
|
|
|
|
|
ShopInfo shopInfo = shopInfoService.getById(shopId);
|
|
|
|
|
BigDecimal oneAmount = amount.multiply(level.getLevelOneCommission().divide(BigDecimal.valueOf(100), RoundingMode.DOWN));
|
|
|
|
|
|
|
|
|
|
boolean flag = true;
|
|
|
|
|
BigDecimal finalAmount = BigDecimal.ZERO;
|
|
|
|
|
try {
|
|
|
|
|
shopInfoService.updateAmount(shopId, oneAmount.negate());
|
|
|
|
|
}catch (Exception e) {
|
|
|
|
|
flag = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MkDistributionFlow mkDistributionFlow = new MkDistributionFlow().setShopUserId(distributionUser.getShopUserId()).setShopId(distributionUser.getShopId()).setDistributionUserId(distributionUser.getId())
|
|
|
|
|
.setLevelId(distributionUser.getDistributionLevelId()).setLevel(level.getLevel()).setSourceNickName(sourceShopUserInfo.getNickName()).setOrderNo(orderNo)
|
|
|
|
|
.setSourceId(sourceId).setAmount(amount).setType(type).setStatus(flag ? TableValueConstant.DistributionFlow.Status.SUCCESS.getCode() :
|
|
|
|
|
TableValueConstant.DistributionFlow.Status.PENDING.getCode())
|
|
|
|
|
.setRewardAmount(oneAmount);
|
|
|
|
|
distributionFlowService.save(mkDistributionFlow);
|
|
|
|
|
|
|
|
|
|
if (flag) {
|
|
|
|
|
distributionAmountFlowService.save(new MkDistributionAmountFlow()
|
|
|
|
|
.setType(TableValueConstant.DistributionAmountFlow.Type.SELF_RECHARGE.getCode())
|
|
|
|
|
.setShopId(shopId).setAmount(finalAmount).setChangeAmount(amount).setSourceId(mkDistributionFlow.getId())
|
|
|
|
|
.setRemark("自助充值").setOpAccount(StpKit.USER.getAccount()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}, "分销方法执行失败");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|