zoujiajian 1 год назад
Родитель
Сommit
d415498687

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

@@ -638,4 +638,14 @@ public interface Constant {
 	 * claude code平台id
 	 */
 	Long CLAUDE_CODE_GOODS_ID = 102L;
+
+	/**
+	 * 推广claude code分销链接
+	 */
+	String DISTRIBUTE_CLAUDE_CODE_CC_URL = "https://cc.yhlxj.com/claude/dashboard/web?dsCode=%s";
+
+	/**
+	 * 推广claude code优惠券id
+	 */
+	Long DISTRIBUTE_CLAUDE_CODE_COUPON_ID = 111L;
 }

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributePopularize.java

@@ -31,5 +31,11 @@ public class UserDistributePopularize extends BaseEntity{
 
 	private String remark;
 
+	/**
+	 * 其他网址标识
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String otherUrl;
+
 	private Boolean deleted;
 }

+ 19 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSkuView.java

@@ -1,6 +1,7 @@
 package com.cyksj.model.views;
 
 import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Getter;
@@ -78,4 +79,22 @@ public class GoodsDonSkuView {
 	 */
 	@DbField("gdk.code_credit_recovery")
 	private Integer codeCreditRecovery;
+
+	/**
+	 * 优惠价格
+	 */
+	@DbIgnore
+	private BigDecimal discountPrice;
+
+	/**
+	 * 优惠折扣
+	 */
+	@DbIgnore
+	private BigDecimal discount;
+
+	/**
+	 * 满减金额
+	 */
+	@DbIgnore
+	private BigDecimal reduceMoney;
 }

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

@@ -18,7 +18,7 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = "(select id,name,remark,code,created_time,goods_id,sku_id from user_distribute_popularize where deleted is true :userId:) dp left join order_don od on od.cps_popularize_id = dp.id" +
+@SearchBean(tables = "(select id,name,remark,code,created_time,goods_id,sku_id,other_url from user_distribute_popularize where deleted is true :userId:) dp left join order_don od on od.cps_popularize_id = dp.id" +
 		" and od.status not in ('close','noPayment') and od.relation_id != 0 and is_fixed_distribute is true :time:" +
 		" left join distribute_waiting_send_points dsp on dsp.order_id = od.id and dsp.send_status in ('success','waiting')",
 		groupBy = "dp.id,dp.name,dp.code,dp.remark,dp.created_time,dp.goods_id")
@@ -90,6 +90,13 @@ public class UserDistributePopularizeView {
 	@DbField("dp.created_time")
 	private Date createdTime;
 
+	/**
+	 * 其他网址标识
+	 * cc 独立网址
+	 */
+	@DbField("dp.other_url")
+	private String otherUrl;
+
 	/**
 	 * 优惠码
 	 */

+ 18 - 0
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -20,7 +20,9 @@ import com.cyksj.dto.UserSharedDto;
 import com.cyksj.mapper.*;
 import com.cyksj.mapper.channel.ChannelPopularizeMapper;
 import com.cyksj.mapper.corp.*;
+import com.cyksj.mapper.manage.coupon.CouponDistributePopularizeMapper;
 import com.cyksj.mapper.manage.cps.UserDistributePopularizeMapper;
+import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeSharedMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
 import com.cyksj.mapper.mirrorshop.UserMirrorShopMapper;
@@ -137,6 +139,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
 	private final VipUserMapper vipUserMapper;
 
+	private final CouponDistributePopularizeMapper couponDistributePopularizeMapper;
+
+	private final UserDistributeMapper userDistributeMapper;
+
 	private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
 	@Override
@@ -570,6 +576,18 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 		if (sharedId != null && dsType != null && dsType == 2) {
 			equipDistributeService.saveDistributionInvitation(sharedId, isNewUser, user.getId());
 		}
+		//查找渠道是否有设置了对应的claude code优惠码
+		if (sharedId != null) {
+			UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, sharedId).eq(UserDistribute::getDeleted, Boolean.TRUE).last("limit 1"));
+			if (userDistribute != null) {
+				Integer selectCount = couponDistributePopularizeMapper.selectCount(Wrappers.lambdaQuery(CouponDistributePopularize.class).eq(CouponDistributePopularize::getDistributeId, userDistribute.getId()).eq(CouponDistributePopularize::getCouponId, Constant.DISTRIBUTE_CLAUDE_CODE_COUPON_ID));
+				if (selectCount > 0) {
+					//设置了 直接发送优惠券
+					couponCommonService.sendCouponToUser(user.getId(), Constant.DISTRIBUTE_CLAUDE_CODE_COUPON_ID, 0l, 0l, dsPopularizeId, CouponUser.Channel.manual);
+				}
+			}
+		}
+
 		//每日活跃记录
 		userLoginRecordService.saveUserLoginDayRecord(user.getId());
 		return user;

+ 37 - 1
netflix-web/src/main/java/com/cyksj/web/controller/claude/ClaudeCodeController.java

@@ -7,10 +7,14 @@ import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
+import com.cyksj.dto.UserSharedDto;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.ClaudeCodeUserMapper;
 import com.cyksj.mapper.GroupsMapper;
 import com.cyksj.mapper.GroupsRelationMapper;
+import com.cyksj.mapper.manage.coupon.CouponDistributePopularizeMapper;
+import com.cyksj.mapper.manage.coupon.CouponMapper;
+import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.OrderDonView;
 import com.cyksj.model.request.ClaudeCodeApiKeysReq;
@@ -74,6 +78,13 @@ public class ClaudeCodeController {
 	private final GroupsMapper groupsMapper;
 
 	private final UserService userService;
+
+	private final UserDistributeMapper userDistributeMapper;
+
+	private final CouponDistributePopularizeMapper couponDistributePopularizeMapper;
+
+	private final CouponMapper couponMapper;
+
 	/**
 	 * 用户创建API KEY
 	 */
@@ -190,7 +201,7 @@ public class ClaudeCodeController {
 	 * claude code可选套餐
 	 */
 	@GetMapping("/get/packages")
-	public Result<ClaudeCodePackageView> getClaudeCodePackages() {
+	public Result<ClaudeCodePackageView> getClaudeCodePackages(String dsCode) {
 		Long userId = StpUserUtil.getUserIdAfterLogin();
 		ClaudeCodePackageView claudeCodePackageView = new ClaudeCodePackageView();
 		if (userId != null) {
@@ -226,6 +237,31 @@ public class ClaudeCodeController {
 			}
 		}
 		List<GoodsDonSkuView> goodsDonSkuViews = beanSearcher.searchAll(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getGoodsId, Constant.CLAUDE_CODE_GOODS_ID).field(GoodsDonSkuView::getUserOwns).op(Operator.IsNull).build());
+		//渠道推广
+		if (dsCode != null) {
+			UserSharedDto popularizeDto = userService.getUserShredDtoByDsCode(dsCode);
+			if (popularizeDto != null) {
+				UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, popularizeDto.getSharedId()).eq(UserDistribute::getDeleted, Boolean.TRUE).last("limit 1"));
+				//渠道推广
+				if (userDistribute != null) {
+					Integer selectCount = couponDistributePopularizeMapper.selectCount(Wrappers.lambdaQuery(CouponDistributePopularize.class).eq(CouponDistributePopularize::getDistributeId, userDistribute.getId()).eq(CouponDistributePopularize::getCouponId, Constant.DISTRIBUTE_CLAUDE_CODE_COUPON_ID));
+					//已配置
+					if (selectCount > 0) {
+						Coupon coupon = couponMapper.selectById(Constant.DISTRIBUTE_CLAUDE_CODE_COUPON_ID);
+						if (coupon != null) {
+							goodsDonSkuViews.forEach(sku -> {
+								if (coupon.getType() == Coupon.Type.discount) {
+									sku.setDiscount(coupon.getDiscount());
+									sku.setDiscountPrice(sku.getMoney().multiply(coupon.getDiscount()));
+								} else {
+									sku.setReduceMoney(coupon.getReduceMoney());
+								}
+							});
+						}
+					}
+				}
+			}
+		}
 		claudeCodePackageView.setSkus(goodsDonSkuViews);
 		return GatewayResponse.SUCCESS.newBuilder().toResult(claudeCodePackageView);
 	}

+ 7 - 1
netflix-web/src/main/java/com/cyksj/web/controller/cps/CpsPopularizeController.java

@@ -117,7 +117,13 @@ public class CpsPopularizeController {
 				.last("limit 1"));
 		SearchResult<UserDistributePopularizeView> search = beanSearcher.search(UserDistributePopularizeView.class, builder.build());
 		search.getDataList().forEach(data -> {
-			data.setPopularizeLink(String.format(envCommonService.DISTRIBUTE_DEFAULT_URL_PREFIX, data.getCode()));
+			if (StrUtil.isNotBlank(data.getOtherUrl())) {
+				if ("cc".equals(data.getOtherUrl())) {
+					data.setPopularizeLink(String.format(Constant.DISTRIBUTE_CLAUDE_CODE_CC_URL, data.getCode()));
+				}
+			} else {
+				data.setPopularizeLink(String.format(envCommonService.DISTRIBUTE_DEFAULT_URL_PREFIX, data.getCode()));
+			}
 			Optional.ofNullable(goodsDonMapper.selectById(data.getGoodsId())).ifPresent(goods -> {
 				data.setTitle(goods.getTitle());
 				data.setLogo(goods.getLogo());