NanoController.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package com.cyksj.web.controller.nano;
  2. import cn.hutool.core.date.DateTime;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.cyksj.common.constant.Constant;
  5. import com.cyksj.dto.Result;
  6. import com.cyksj.dto.UserSharedDto;
  7. import com.cyksj.enums.GatewayResponse;
  8. import com.cyksj.mapper.GroupsMapper;
  9. import com.cyksj.mapper.GroupsRelationMapper;
  10. import com.cyksj.mapper.NanoUserQuotaMapper;
  11. import com.cyksj.mapper.manage.coupon.*;
  12. import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
  13. import com.cyksj.model.entity.*;
  14. import com.cyksj.model.views.GoodsDonSkuView;
  15. import com.cyksj.model.views.NanoPackageView;
  16. import com.cyksj.service.user.UserBindRelationService;
  17. import com.cyksj.service.user.UserService;
  18. import com.cyksj.web.util.StpUserUtil;
  19. import com.ejlchina.searcher.BeanSearcher;
  20. import com.ejlchina.searcher.param.Operator;
  21. import com.ejlchina.searcher.util.MapUtils;
  22. import lombok.RequiredArgsConstructor;
  23. import lombok.extern.slf4j.Slf4j;
  24. import org.springframework.web.bind.annotation.GetMapping;
  25. import org.springframework.web.bind.annotation.RequestMapping;
  26. import org.springframework.web.bind.annotation.RestController;
  27. import javax.servlet.http.HttpServletRequest;
  28. import java.util.List;
  29. import java.util.stream.Collectors;
  30. /**
  31. * server/nano推广
  32. * Nano推广控制器
  33. * 项目名: yhlxj11111111
  34. * 文件名: NanoController
  35. * 创建者: Claude Code
  36. * 创建时间:2025/9/4
  37. */
  38. @Slf4j
  39. @RestController
  40. @RequestMapping("/applet/nano")
  41. @RequiredArgsConstructor
  42. public class NanoController {
  43. private final BeanSearcher beanSearcher;
  44. private final HttpServletRequest request;
  45. private final UserBindRelationService userBindRelationService;
  46. private final NanoUserQuotaMapper nanoUserQuotaMapper;
  47. private final GroupsRelationMapper relationMapper;
  48. private final GroupsMapper groupsMapper;
  49. private final UserService userService;
  50. private final UserDistributeMapper userDistributeMapper;
  51. private final CouponDistributePopularizeMapper couponDistributePopularizeMapper;
  52. private final CouponMapper couponMapper;
  53. private final CouponSkuMapper couponSkuMapper;
  54. private final CouponRecommendMapper couponRecommendMapper;
  55. private final CouponUserMapper couponUserMapper;
  56. /**
  57. * nano可选套餐
  58. */
  59. @GetMapping("/get/packages")
  60. public Result<NanoPackageView> getNanoPackages(String dsCode) {
  61. Long userId = StpUserUtil.getUserIdAfterLogin();
  62. NanoPackageView nanoPackageView = new NanoPackageView();
  63. List<GoodsDonSkuView> goodsDonSkuViews = beanSearcher.searchAll(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getGoodsId, Constant.NANO_GOODS_ID).field(GoodsDonSkuView::getUserOwns).op(Operator.IsNull).build());
  64. //渠道推广
  65. setNanoSkuCouponInfo(dsCode, userId, goodsDonSkuViews);
  66. nanoPackageView.setSkus(goodsDonSkuViews);
  67. return GatewayResponse.SUCCESS.newBuilder().toResult(nanoPackageView);
  68. }
  69. public void setNanoSkuCouponInfo(String dsCode, Long userId, List<GoodsDonSkuView> goodsDonSkuViews) {
  70. //渠道推广
  71. Coupon coupon = null;
  72. if (dsCode != null) {
  73. UserSharedDto popularizeDto = userService.getUserShredDtoByDsCode(dsCode);
  74. if (popularizeDto != null) {
  75. UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, popularizeDto.getSharedId()).eq(UserDistribute::getDeleted, Boolean.TRUE).last("limit 1"));
  76. //渠道推广
  77. if (userDistribute != null) {
  78. // 这里需要根据实际的nano推广优惠券配置来设置
  79. // 假设有DISTRIBUTE_NANO_COUPON_ID和DISTRIBUTE_NANO_NO_CODE_COUPON_ID常量
  80. Integer selectCount = couponDistributePopularizeMapper.selectCount(Wrappers.lambdaQuery(CouponDistributePopularize.class)
  81. .eq(CouponDistributePopularize::getDistributeId, userDistribute.getId())
  82. .eq(CouponDistributePopularize::getCouponId, Constant.DISTRIBUTE_NANO_COUPON_ID)
  83. .eq(CouponDistributePopularize::getDeleted, Boolean.TRUE));
  84. //已配置使用渠道优惠码
  85. if (selectCount > 0) {
  86. coupon = couponMapper.selectById(Constant.DISTRIBUTE_NANO_COUPON_ID);
  87. }
  88. }
  89. }
  90. }
  91. Boolean isTjB = false;
  92. //非推广链接
  93. if (dsCode == null && coupon == null) {
  94. coupon = couponRecommendMapper.getRecommendCouponByGoodsId(Constant.NANO_GOODS_ID);
  95. isTjB = true;
  96. }
  97. if (coupon == null) {
  98. return;
  99. }
  100. if (isTjB) {
  101. int isTj = couponRecommendMapper.checkPresentRecommendByCouponId(coupon.getId());
  102. if (isTj == 0) {
  103. return;
  104. }
  105. }
  106. 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());
  107. //该优惠券是否已经使用
  108. if (userId != null) {
  109. Integer selectCount = couponUserMapper.selectCount(Wrappers.lambdaQuery(CouponUser.class).eq(CouponUser::getCouponId, coupon.getId()).eq(CouponUser::getUserId, userId));
  110. if (selectCount > 0) {
  111. Integer isUsed = couponUserMapper.selectCount(Wrappers.lambdaQuery(CouponUser.class)
  112. .eq(CouponUser::getCouponId, coupon.getId())
  113. .eq(CouponUser::getStatus, CouponUser.Status.unused)
  114. .eq(CouponUser::getUserId, userId)
  115. .lt(CouponUser::getValidStartTime, DateTime.now())
  116. .gt(CouponUser::getValidEndTime, DateTime.now()));
  117. if (isUsed == 0) {
  118. return;
  119. }
  120. }
  121. }
  122. for (GoodsDonSkuView sku : goodsDonSkuViews) {
  123. if (couponSkuIds.contains(sku.getSkuId())) {
  124. sku.setCouponId(coupon.getId());
  125. if (coupon.getType() == Coupon.Type.discount) {
  126. sku.setDiscount(coupon.getDiscount());
  127. sku.setDiscountPrice(sku.getMoney().multiply(coupon.getDiscount()));
  128. } else {
  129. sku.setReduceMoney(coupon.getReduceMoney());
  130. }
  131. }
  132. }
  133. }
  134. }