| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- package com.cyksj.service.distribute.impl;
- import cn.hutool.core.date.DateTime;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.cyksj.common.constant.Constant;
- import com.cyksj.common.constant.TaskTypeEnum;
- import com.cyksj.common.exception.BusinessRuntimeException;
- import com.cyksj.mapper.GoodsDonMapper;
- import com.cyksj.mapper.manage.coupon.CouponDistributePopularizeMapper;
- import com.cyksj.mapper.manage.coupon.CouponMapper;
- import com.cyksj.mapper.manage.distribute.UserBusinessDefaultRateConfigMapper;
- import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
- import com.cyksj.mapper.manage.distribute.UserDistributeSharedMapper;
- import com.cyksj.mapper.manage.distribute.UserPlatDistributeRateMapper;
- import com.cyksj.mapper.market.task.TaskTypeMapper;
- import com.cyksj.model.entity.*;
- import com.cyksj.model.request.UserDistributeReq;
- import com.cyksj.redis.RedisService;
- import com.cyksj.service.distribute.DistributeService;
- import com.cyksj.service.market.task.TaskService;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.dao.DuplicateKeyException;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.Optional;
- /*
- *项目名: netflix
- *文件名: DistributeServiceImpl
- *创建者: JavaZou
- *创建时间:2022/11/14 12:21
- */
- @Service
- @RequiredArgsConstructor
- @Slf4j
- public class DistributeServiceImpl implements DistributeService {
- private final UserDistributeMapper userDistributeMapper;
- private final UserPlatDistributeRateMapper userPlatDistributeRateMapper;
- private final GoodsDonMapper goodsDonMapper;
- private final TaskService taskService;
- private final TaskTypeMapper taskTypeMapper;
- private final UserDistributeSharedMapper userDistributeSharedMapper;
- private final UserBusinessDefaultRateConfigMapper defaultRateConfigMapper;
- private final RedisService redisService;
- private final CouponMapper couponMapper;
- private final CouponDistributePopularizeMapper couponDistributePopularizeMapper;
- @Override
- @Transactional(rollbackFor = Throwable.class)
- public void insertDistribute(UserDistributeReq userDistributeReq) {
- if (!redisService.setNx(String.valueOf(userDistributeReq.getUserId()), userDistributeReq.getUserId(), 30l)) {
- throw BusinessRuntimeException.getInstance("请勿重复点击");
- }
- UserDistribute exists = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, userDistributeReq.getUserId()).eq(UserDistribute::getDeleted, true).last("limit 1"));
- if (exists != null) {
- throw BusinessRuntimeException.getInstance("该推广者已添加");
- }
- Long businessId = userDistributeReq.getBusinessId();
- UserDistribute userDistribute = new UserDistribute();
- userDistribute.setUserId(userDistributeReq.getUserId());
- userDistribute.setRemark(userDistributeReq.getRemark());
- userDistribute.setBusinessId(businessId);
- if (businessId != null && businessId != 0) {
- userDistribute.setBusinessBindTime(DateTime.now());
- }
- userDistributeMapper.insert(userDistribute);
- for (UserPlatDistributeRate rate : userDistributeReq.getRates()) {
- if (rate.getRate() < 0 || rate.getRate() > 100) {
- throw new BusinessRuntimeException("比例错误");
- }
- GoodsDon goodsDon = goodsDonMapper.selectById(rate.getGoodsId());
- if (goodsDon == null || !goodsDon.getDeleted() || goodsDon.getType() == 3) {
- throw new BusinessRuntimeException("平台错误");
- }
- //分销者虚物分销比例且配置商务
- if (businessId != null && goodsDon.getType() == 1) {
- checkDistributorAndBusinessRate(rate.getRate(), goodsDon.getId(), goodsDon.getTitle());
- }
- rate.setDistributeId(userDistribute.getId());
- userPlatDistributeRateMapper.insert(rate);
- }
- redisService.del(String.valueOf(userDistributeReq.getUserId()));
- }
- @Override
- @Transactional(rollbackFor = Throwable.class)
- public void editDistribute(UserDistributeReq userDistributeReq) {
- if (userDistributeReq.getId() == null || userDistributeReq.getId() < 1) {
- throw BusinessRuntimeException.getInstance("id错误");
- }
- UserDistribute userDistribute = new UserDistribute();
- userDistribute.setId(userDistributeReq.getId());
- userDistribute.setRemark(userDistributeReq.getRemark());
- Long businessId = userDistributeReq.getBusinessId();
- if (businessId == null) {
- userDistribute.setBusinessId(0l);
- } else {
- if (userDistribute.getBusinessId() != null && !userDistribute.getBusinessId().equals(businessId)) {
- userDistribute.setBusinessBindTime(DateTime.now());
- }
- userDistribute.setBusinessId(businessId);
- }
- userDistributeMapper.updateById(userDistribute);
- for (UserPlatDistributeRate rate : userDistributeReq.getRates()) {
- if (rate.getRate() < 0 || rate.getRate() > 100) {
- throw new BusinessRuntimeException("比例错误");
- }
- GoodsDon goodsDon = goodsDonMapper.selectById(rate.getGoodsId());
- if (rate.getId() != null && (goodsDon == null || !goodsDon.getDeleted())) {
- userPlatDistributeRateMapper.deleteById(rate.getId());
- continue;
- }
- if (goodsDon == null || !goodsDon.getDeleted() || goodsDon.getType() == 3) {
- throw new BusinessRuntimeException("平台错误");
- }
- //分销者虚物分销比例且配置商务
- if (businessId != null && goodsDon.getType() == 1) {
- checkDistributorAndBusinessRate(rate.getRate(), goodsDon.getId(), goodsDon.getTitle());
- }
- rate.setDistributeId(userDistribute.getId());
- if (rate.getId() == null) {
- try {
- userPlatDistributeRateMapper.insert(rate);
- } catch (DuplicateKeyException e) {
- }
- } else {
- userPlatDistributeRateMapper.updateById(rate);
- }
- }
- }
- @Override
- public void saveDistributionInvitation(Long sharedId, Long userId, Long dsPopularizeId) {
- UserDistributeShared userDistributeShared = new UserDistributeShared();
- userDistributeShared.setSharedId(sharedId);
- //存在分销
- userDistributeShared.setUserId(userId);
- userDistributeShared.setDsPopularizeId(dsPopularizeId);
- try {
- userDistributeSharedMapper.insert(userDistributeShared);
- TaskType taskType = taskTypeMapper.selectOne(Wrappers.lambdaQuery(TaskType.class)
- .eq(TaskType::getName, TaskTypeEnum.share.getDesc()).last("limit 1"));
- taskService.completeTask(taskType, sharedId);
- } catch (DuplicateKeyException e) {
- log.info("分销被邀请人重复插入");
- }
- }
- @Override
- @Transactional(rollbackFor = Throwable.class)
- public void bindPopularizeCode(Long userId, String code) {
- Coupon coupon = couponMapper.getCouponById(Constant.GENERAL_POPULARIZE_COUPON_ID);
- if (!redisService.setNx(RedisService.key.GENERAL_POPULARIZE_CODE.getName() + code, userId, RedisService.key.GENERAL_POPULARIZE_CODE.getTimeout())) {
- throw BusinessRuntimeException.getInstance("该专属推广优惠码已被设置");
- }
- CouponDistributePopularize is_exists = couponDistributePopularizeMapper.selectOne(Wrappers.lambdaQuery(CouponDistributePopularize.class).eq(CouponDistributePopularize::getUserId, userId).last("limit 1"));
- if (is_exists != null) throw BusinessRuntimeException.getInstance("你已设置专属推广优惠码");
- CouponDistributePopularize couponDistributePopularize = new CouponDistributePopularize();
- couponDistributePopularize.setCouponId(coupon.getId());
- couponDistributePopularize.setUserId(userId);
- couponDistributePopularize.setIsGeneral(true);
- CouponDistributePopularize exists = couponDistributePopularizeMapper.selectOne(Wrappers.lambdaQuery(CouponDistributePopularize.class)
- .eq(CouponDistributePopularize::getExCode, code)
- .eq(CouponDistributePopularize::getDeleted, true)
- .ne(CouponDistributePopularize::getUserId, userId)
- .select(CouponDistributePopularize::getId)
- .last("limit 1"));
- if (exists != null) {
- throw BusinessRuntimeException.getInstance("该专属推广优惠码已被设置");
- } else {
- Coupon existsCoupon = couponMapper.selectOne(Wrappers.lambdaQuery(Coupon.class)
- .eq(Coupon::getExCode, couponDistributePopularize.getExCode())
- .eq(Coupon::getDeleted, true)
- .select(Coupon::getId)
- .last("limit 1"));
- if (existsCoupon != null) {
- throw BusinessRuntimeException.getInstance("该专属推广优惠码已被设置");
- }
- }
- couponDistributePopularize.setExCode(code);
- couponDistributePopularizeMapper.insert(couponDistributePopularize);
- }
- public void checkDistributorAndBusinessRate(Integer distributeGoodsRate, Long goodsId, String goodsName) {
- UserBusinessDefaultRateConfig defaultGoodsRateConfig = defaultRateConfigMapper.selectOne(Wrappers.lambdaQuery(UserBusinessDefaultRateConfig.class)
- .eq(UserBusinessDefaultRateConfig::getGoodsId, goodsId)
- .last("limit 1"));
- Optional.ofNullable(defaultGoodsRateConfig).ifPresent(config -> {
- if (distributeGoodsRate > config.getMaxRate()) {
- throw BusinessRuntimeException.getInstance(String.format("该%s平台最高可配置分销比例为%s", goodsName, config.getMaxRate()));
- }
- });
- }
- }
|