zoujiajian 11 luni în urmă
părinte
comite
07403d4015

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

@@ -683,4 +683,9 @@ public interface Constant {
 	 * nano 商品id
 	 */
 	Long NANO_GOODS_ID = 104L;
+
+	/**
+	 * nano 渠道优惠券id
+	 */
+	Long DISTRIBUTE_NANO_COUPON_ID = 104L;
 }

+ 28 - 0
netflix-dao/src/main/java/com/cyksj/model/views/NanoPackageView.java

@@ -0,0 +1,28 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * Nano套餐视图
+ * 项目名: yhlxj11111111
+ * 文件名: NanoPackageView
+ * 创建者: Claude Code
+ * 创建时间:2025/9/4
+ */
+@Getter
+@Setter
+public class NanoPackageView {
+
+	/**
+	 * nano规格
+	 */
+	private List<GoodsDonSkuView> skus;
+
+	/**
+	 * 升级套餐
+	 */
+	private List<RenewUpgradePackageFrontView> upgrades;
+}

+ 188 - 0
netflix-web/src/main/java/com/cyksj/web/controller/nano/NanoController.java

@@ -0,0 +1,188 @@
+package com.cyksj.web.controller.nano;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.constant.Constant;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
+import com.cyksj.dto.Result;
+import com.cyksj.dto.UserSharedDto;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.GroupsMapper;
+import com.cyksj.mapper.GroupsRelationMapper;
+import com.cyksj.mapper.NanoUserQuotaMapper;
+import com.cyksj.mapper.manage.coupon.*;
+import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
+import com.cyksj.model.entity.*;
+import com.cyksj.model.views.GoodsDonSkuView;
+import com.cyksj.model.views.NanoPackageView;
+import com.cyksj.model.views.RenewUpgradePackageFrontView;
+import com.cyksj.service.user.UserBindRelationService;
+import com.cyksj.service.user.UserService;
+import com.cyksj.web.util.StpUserUtil;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.param.Operator;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Nano推广控制器
+ * 项目名: yhlxj11111111
+ * 文件名: NanoController
+ * 创建者: Claude Code
+ * 创建时间:2025/9/4
+ */
+@Slf4j
+@RestController
+@RequestMapping("/applet/nano")
+@RequiredArgsConstructor
+public class NanoController {
+
+	private final BeanSearcher beanSearcher;
+	
+	private final HttpServletRequest request;
+
+	private final UserBindRelationService userBindRelationService;
+
+	private final NanoUserQuotaMapper nanoUserQuotaMapper;
+
+	private final GroupsRelationMapper relationMapper;
+
+	private final GroupsMapper groupsMapper;
+
+	private final UserService userService;
+
+	private final UserDistributeMapper userDistributeMapper;
+
+	private final CouponDistributePopularizeMapper couponDistributePopularizeMapper;
+
+	private final CouponMapper couponMapper;
+
+	private final CouponSkuMapper couponSkuMapper;
+
+	private final CouponRecommendMapper couponRecommendMapper;
+
+	private final CouponUserMapper couponUserMapper;
+
+	/**
+	 * nano可选套餐
+	 */
+	@GetMapping("/get/packages")
+	public Result<NanoPackageView> getNanoPackages(String dsCode) {
+		Long userId = StpUserUtil.getUserIdAfterLogin();
+		NanoPackageView nanoPackageView = new NanoPackageView();
+		if (userId != null) {
+			List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+			NanoUserQuota user = nanoUserQuotaMapper.selectOne(Wrappers.lambdaQuery(NanoUserQuota.class)
+					.in(NanoUserQuota::getUid, userIdList)
+					.last("limit 1"));
+			if (user != null) {
+				GroupsRelation relation = relationMapper.selectById(user.getRelationId());
+				if (relation != null) {
+					GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
+					if (groupsTrips != null) {
+						Long skuId = groupsTrips.getSkuId();
+						List<RenewUpgradePackageFrontView> renewUpgradePackageFrontViews = beanSearcher.searchAll(RenewUpgradePackageFrontView.class, MapUtils.builder().field(RenewUpgradePackageFrontView::getSkuId, skuId).build());
+						renewUpgradePackageFrontViews.forEach(renew -> {
+							try {
+								List<Long> upgradeSkuIds = Jsons.parseList(renew.getUpgradeSkuIds(), Long.class);
+								List<RenewUpgradePackageFrontView.RenewSkuView> renewSkuViews = new ArrayList<>();
+								if (CollUtil.isNotEmpty(upgradeSkuIds)) {
+									renewSkuViews = beanSearcher.searchAll(RenewUpgradePackageFrontView.RenewSkuView.class, MapUtils.builder()
+											//高套餐配额
+											.field(RenewUpgradePackageFrontView.RenewSkuView::getSkuId, upgradeSkuIds).op(Operator.InList)
+											.build());
+								}
+								renew.setRenewSkus(renewSkuViews);
+							} catch (Exception e) {
+								log.error("处理nano升级套餐失败:{}", StringUtil.getErrorText(e));
+							}
+						});
+						nanoPackageView.setUpgrades(renewUpgradePackageFrontViews);
+					}
+				}
+			}
+		}
+		List<GoodsDonSkuView> goodsDonSkuViews = beanSearcher.searchAll(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getGoodsId, Constant.NANO_GOODS_ID).field(GoodsDonSkuView::getUserOwns).op(Operator.IsNull).build());
+		//渠道推广
+		setNanoSkuCouponInfo(dsCode, userId, goodsDonSkuViews);
+		nanoPackageView.setSkus(goodsDonSkuViews);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(nanoPackageView);
+	}
+
+	public void setNanoSkuCouponInfo(String dsCode, Long userId, List<GoodsDonSkuView> goodsDonSkuViews) {
+		//渠道推广
+		Coupon coupon = null;
+		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) {
+					// 这里需要根据实际的nano推广优惠券配置来设置
+					// 假设有DISTRIBUTE_NANO_COUPON_ID和DISTRIBUTE_NANO_NO_CODE_COUPON_ID常量
+					Integer selectCount = couponDistributePopularizeMapper.selectCount(Wrappers.lambdaQuery(CouponDistributePopularize.class)
+							.eq(CouponDistributePopularize::getDistributeId, userDistribute.getId())
+							.eq(CouponDistributePopularize::getCouponId, Constant.DISTRIBUTE_NANO_COUPON_ID)
+							.eq(CouponDistributePopularize::getDeleted, Boolean.TRUE));
+					//已配置使用渠道优惠码
+					if (selectCount > 0) {
+						coupon = couponMapper.selectById(Constant.DISTRIBUTE_NANO_COUPON_ID);
+					}
+				}
+			}
+		}
+		Boolean isTjB = false;
+		//非推广链接
+		if (dsCode == null && coupon == null) {
+			coupon = couponRecommendMapper.getRecommendCouponByGoodsId(Constant.NANO_GOODS_ID);
+			isTjB = true;
+		}
+		if (coupon == null) {
+			return;
+		}
+		if (isTjB) {
+			int isTj = couponRecommendMapper.checkPresentRecommendByCouponId(coupon.getId());
+			if (isTj == 0) {
+				return;
+			}
+		}
+		List<Long> couponSkuIds = couponSkuMapper.selectList(Wrappers.lambdaQuery(CouponSku.class).eq(CouponSku::getCouponId, coupon.getId()).eq(CouponSku::getDeleted, Boolean.TRUE)).stream().map(CouponSku::getSkuId).collect(Collectors.toList());
+		//该优惠券是否已经使用
+		if (userId != null) {
+			Integer selectCount = couponUserMapper.selectCount(Wrappers.lambdaQuery(CouponUser.class).eq(CouponUser::getCouponId, coupon.getId()).eq(CouponUser::getUserId, userId));
+			if (selectCount > 0) {
+				Integer isUsed = couponUserMapper.selectCount(Wrappers.lambdaQuery(CouponUser.class)
+						.eq(CouponUser::getCouponId, coupon.getId())
+						.eq(CouponUser::getStatus, CouponUser.Status.unused)
+						.eq(CouponUser::getUserId, userId)
+						.lt(CouponUser::getValidStartTime, DateTime.now())
+						.gt(CouponUser::getValidEndTime, DateTime.now()));
+				if (isUsed == 0) {
+					return;
+				}
+			}
+		}
+		for (GoodsDonSkuView sku : goodsDonSkuViews) {
+			if (couponSkuIds.contains(sku.getSkuId())) {
+				sku.setCouponId(coupon.getId());
+				if (coupon.getType() == Coupon.Type.discount) {
+					sku.setDiscount(coupon.getDiscount());
+					sku.setDiscountPrice(sku.getMoney().multiply(coupon.getDiscount()));
+				} else {
+					sku.setReduceMoney(coupon.getReduceMoney());
+				}
+			}
+		}
+	}
+}