瀏覽代碼

普通推广专属优惠码

zoujiajian 3 年之前
父節點
當前提交
d29e71cf67

+ 5 - 0
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -118,4 +118,9 @@ public interface Constant {
 	String ZK_MOBILE = "18268325725";
 
 	List<Long> AI_goodsIds = List.of(18l, 26l);
+
+	/**
+	 * 普通推广 关联优惠券id
+	 */
+	Long GENERAL_POPULARIZE_COUPON_ID = 111l;
 }

+ 7 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CouponDistributePopularize.java

@@ -20,6 +20,13 @@ public class CouponDistributePopularize extends BaseEntity {
 	 */
 	private Long distributeId;
 
+	private Long userId;
+
+	/**
+	 * 是否是普通 默认不是
+	 */
+	private Boolean isGeneral;
+
 	/**
 	 * 兑换码
 	 */

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/CouponDistributePopularizeView.java

@@ -16,7 +16,7 @@ import lombok.Setter;
 @Setter
 @SearchBean(tables = "coupon_distribute_popularize cp left join user_distribute ub on ub.id = cp.distribute_id" +
 		" left join user u on u.id = ub.user_id",
-		where = "cp.deleted is true")
+		where = "cp.deleted is true and cp.is_general is false")
 public class CouponDistributePopularizeView {
 	@DbField("cp.id")
 	private Long id;

+ 15 - 0
netflix-dao/src/main/java/com/cyksj/model/views/DistributePopularizeView.java

@@ -45,11 +45,26 @@ public class DistributePopularizeView {
 	 */
 	private Integer distributeOrders;
 
+	/**
+	 * 是否是普通推广
+	 */
+	private Boolean isGeneral;
+
 	/**
 	 * 最高返现比例
 	 */
 	private Integer highestRate;
 
+	/**
+	 * 普通专属推广码
+	 */
+	private String generalCode;
+
+	/**
+	 * 普通专属推广折扣
+	 */
+	private String generalDiscount;
+
 	/**
 	 * 普通低分销比例
 	 */

+ 1 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -610,6 +610,7 @@ public class RedisService {
         IMPORT_ACCOUNT_CACHE_KEY("import_account_cache_key:%s", "导入缓存key", 60 * 10L),
         MAKERTING_MSG_KEY("makerting_msg_key", "营销短信", 60 * 60 * 24 * 30),
         PHONE_AREA_CODE("phone_area_code:key", "国家或地区码", 60 * 60 * 24 * 15),
+        GENERAL_POPULARIZE_CODE("general_popularize_code:", "普通推广者关联优惠券", 10l),
         ;
 
         private String name;

+ 5 - 0
netflix-service/src/main/java/com/cyksj/service/distribute/DistributeService.java

@@ -20,4 +20,9 @@ public interface DistributeService {
 	 * dsPopularizeId: 后台自定义推广链接id
 	 */
 	void saveDistributionInvitation(Long sharedId, Long userId, Long dsPopularizeId);
+
+	/**
+	 * 普通推广者绑定优惠推广码
+	 */
+	void bindPopularizeCode(Long userId, String code);
 }

+ 46 - 1
netflix-service/src/main/java/com/cyksj/service/distribute/impl/DistributeServiceImpl.java

@@ -2,10 +2,16 @@ 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.distribute.*;
+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;
@@ -46,6 +52,10 @@ public class DistributeServiceImpl implements DistributeService {
 
 	private final RedisService redisService;
 
+	private final CouponMapper couponMapper;
+
+	private final CouponDistributePopularizeMapper couponDistributePopularizeMapper;
+
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	public void insertDistribute(UserDistributeReq userDistributeReq) {
@@ -148,6 +158,41 @@ public class DistributeServiceImpl implements DistributeService {
 		}
 	}
 
+	@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)

+ 10 - 4
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -1420,11 +1420,17 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			CouponDistributePopularize couponDistributePopularize = couponDistributePopularizeMapper.selectOne(Wrappers.lambdaQuery(CouponDistributePopularize.class).eq(CouponDistributePopularize::getExCode, couponExCode).last("limit 1"));
 			Optional.ofNullable(couponDistributePopularize).ifPresent(popularize -> {
 				try {
-					UserDistribute userDistribute = userDistributeMapper.selectById(popularize.getDistributeId());
-					if (userDistribute == null || !userDistribute.getDeleted()) {
-						return;
+					Long sharedId;
+					//是否是普通推广专属关联
+					if (popularize.getIsGeneral()) {
+						sharedId = popularize.getUserId();
+					} else {
+						UserDistribute userDistribute = userDistributeMapper.selectById(popularize.getDistributeId());
+						if (userDistribute == null || !userDistribute.getDeleted()) {
+							return;
+						}
+						sharedId = userDistribute.getUserId();
 					}
-					Long sharedId = userDistribute.getUserId();
 					if (sharedId.equals(userId)) {
 						return;
 					}

+ 37 - 1
netflix-web/src/main/java/com/cyksj/web/controller/user/DistributePopularizeController.java

@@ -19,6 +19,8 @@ import com.cyksj.mapper.GoodsDonMapper;
 import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.mapper.UserMapper;
+import com.cyksj.mapper.manage.coupon.CouponDistributePopularizeMapper;
+import com.cyksj.mapper.manage.coupon.CouponMapper;
 import com.cyksj.mapper.manage.distribute.DistributeMoneyApplyMapper;
 import com.cyksj.mapper.manage.distribute.DistributePointsExchangeMoneyMapper;
 import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
@@ -27,6 +29,7 @@ import com.cyksj.model.entity.*;
 import com.cyksj.model.request.ApplyMoneyReq;
 import com.cyksj.model.request.TransferAccountsReq;
 import com.cyksj.model.views.*;
+import com.cyksj.service.distribute.DistributeService;
 import com.cyksj.service.order.OrderDonService;
 import com.cyksj.service.user.UserBenefitsService;
 import com.cyksj.service.user.UserService;
@@ -84,6 +87,12 @@ public class DistributePopularizeController {
 
 	private final UserBenefitsService userBenefitsService;
 
+	private final DistributeService distributeService;
+
+	private final CouponDistributePopularizeMapper couponDistributePopularizeMapper;
+
+	private final CouponMapper couponMapper;
+
 	/**
 	 * 推广订单明细
 	 */
@@ -148,9 +157,21 @@ public class DistributePopularizeController {
 					.build());
 			//最高平台比例
 			distributePopularizeView.setHighestRate(userDistributeView.getRate());
-		}else {
+		} else {
 			GoodsDon goodsDon = goodsDonMapper.selectOne(Wrappers.lambdaQuery(GoodsDon.class).eq(GoodsDon::getDeleted, true).eq(GoodsDon::getStatus, true).orderByDesc(GoodsDon::getRate).select(GoodsDon::getRate).last("limit 1"));
+			distributePopularizeView.setIsGeneral(true);
 			distributePopularizeView.setHighestRate(goodsDon.getRate());
+			Optional.ofNullable(couponDistributePopularizeMapper.selectOne(Wrappers.lambdaQuery(CouponDistributePopularize.class)
+					.eq(CouponDistributePopularize::getUserId, userId)
+					.eq(CouponDistributePopularize::getIsGeneral, true)
+					.last("limit 1")))
+					.ifPresent(couponPopularize -> {
+						Coupon coupon = couponMapper.getCouponById(couponPopularize.getCouponId());
+						distributePopularizeView.setGeneralCode(couponPopularize.getExCode());
+						BigDecimal discount = coupon.getDiscount();
+						String discountStr = String.format("%s折", discount.multiply(BigDecimal.valueOf(100)).intValue());
+						distributePopularizeView.setGeneralDiscount(discountStr);
+					});
 		}
 		List<DistributeWaitingSendPoints> distributeWaitingSendPoints = distributeWaitingSendPointsMapper.selectList(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class).eq(DistributeWaitingSendPoints::getSendStatus, DistributeWaitingSendPoints.Status.waiting).eq(DistributeWaitingSendPoints::getSharedId, userId).select(DistributeWaitingSendPoints::getPoints));
 		BigDecimal waitingPoints = BigDecimal.ZERO;
@@ -345,4 +366,19 @@ public class DistributePopularizeController {
 		distributePopularizeView.setGeneralDistributes(generalDistributes);
 		return GatewayResponse.SUCCESS.newBuilder().toResult(distributePopularizeView);
 	}
+
+	/**
+	 * 设置普通推广码
+	 * 绑定个人专属码
+	 */
+	@PostMapping("/general/code/{code}")
+	public Result<String> setGeneralCode(@PathVariable("code") String code) {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		if (StrUtil.isBlank(code)) {
+			throw BusinessRuntimeException.getInstance("专属推广优惠码不能为空");
+		}
+		code = code.trim();
+		distributeService.bindPopularizeCode(userId, code);
+		return GatewayResponse.SUCCESS.newBuilder().toResult("设置成功");
+	}
 }