zoujiajian 11 meses atrás
pai
commit
23b13dcaf8

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/RenewalView.java

@@ -262,6 +262,12 @@ public class RenewalView {
     @DbIgnore
     private Integer codeNum;
 
+    /**
+     * nano次数
+     */
+    @DbField("sku.nano_quota")
+    private Boolean skuNanoQuota;
+
     /**
      * 是否为镜像服务
      */

+ 21 - 2
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -211,6 +211,8 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final ClaudeCodeService claudeCodeService;
 
+	private final NanoUserQuotaMapper nanoUserQuotaMapper;
+
 	@Override
 	public SearchResult<RenewalView> getMyTicket(long userId, Boolean isLoginPopularize, String customId, String account, String orderNo, Integer cmt) {
 		User u = userMapper.selectById(userId);
@@ -2159,8 +2161,6 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 	 * 标记是否可抵扣会员车票
 	 */
 	private void markVipDeductTicket(List<Long> userIds, RenewalView ticket, Set<Long> vipGoodsIds, Boolean isVip) {
-		//nano 先不参与抵扣
-		vipGoodsIds.remove(Constant.NANO_GOODS_ID);
 		if (CollUtil.isNotEmpty(vipGoodsIds) && ticket.getIsMirror() != null && ticket.getIsMirror() && !isVip) {
 			Long goodsId = ticket.getGoodsId();
 			//只购买
@@ -2168,6 +2168,25 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 				return;
 			}
 			if (vipGoodsIds.contains(goodsId)) {
+				if (goodsId == Constant.NANO_GOODS_ID) {
+					NanoUserQuota nanoUserQuota = nanoUserQuotaMapper.selectOne(Wrappers.lambdaQuery(NanoUserQuota.class).in(NanoUserQuota::getUid, userIds).orderByDesc(NanoUserQuota::getRemainingQuota).last("limit 1"));
+					if (nanoUserQuota != null) {
+						if (ObjectUtil.equal(nanoUserQuota.getRelationId(), ticket.getRelationId())) {
+							ticket.setIsVipDeduct(true);
+						}
+						return;
+					}
+					RenewalView renewalView = beanSearcher.searchFirst(RenewalView.class, MapUtils.builder()
+							.field(RenewalView::getGoodsId, goodsId)
+							.field(RenewalView::getUserId, userIds).op(Operator.InList)
+							.orderBy(RenewalView::getSkuNanoQuota).desc()
+							.onlySelect(RenewalView::getRelationId)
+							.build());
+					if (renewalView != null && ObjectUtil.equal(renewalView.getRelationId(), ticket.getRelationId())) {
+						ticket.setIsVipDeduct(true);
+					}
+					return;
+				}
 				//是否时长最长
 				Number number = beanSearcher.searchCount(RenewalView.class, MapUtils.builder()
 						.field(RenewalView::getRelationId, ticket.getRelationId()).op(Operator.NotEqual)

+ 20 - 2
netflix-service/src/main/java/com/cyksj/service/vip/impl/VipFrontServiceImpl.java

@@ -15,6 +15,7 @@ import com.cyksj.model.dto.VipDeductDto;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.response.VipUserPageResp;
+import com.cyksj.model.views.RenewalView;
 import com.cyksj.service.chatgpt.ChatGptAccountService;
 import com.cyksj.service.claude.ClaudeService;
 import com.cyksj.service.user.UserBindRelationService;
@@ -91,8 +92,6 @@ public class VipFrontServiceImpl implements VipFrontService {
 		//会员规格
 		Set<Long> goodsIds = goodsDonSkuMapper.selectList(Wrappers.lambdaQuery(GoodsDonSku.class)
 				.in(GoodsDonSku::getId, vipSkuIds)).stream().map(GoodsDonSku::getGoodsId).collect(Collectors.toSet());
-		//todo 临时处理 nano先不参与抵扣
-		goodsIds.remove(Constant.NANO_GOODS_ID);
 		Number count = beanSearcher.searchCount(GroupsRelationView.class, MapUtils.builder().field(GroupsRelationView::getUserId, userIdList).op(Operator.InList).field(GroupsRelationView::getGoodsId, goodsIds).op(Operator.InList).field(GroupsRelationView::getIsMirror, Boolean.TRUE).field(GroupsRelationView::getExpiryTime, now).op(Operator.GreaterThan).build());
 		//可抵扣车票
 		if (count.intValue() > 0) {
@@ -174,6 +173,25 @@ public class VipFrontServiceImpl implements VipFrontService {
 			if (deductGoodsIds.contains(goodsId)) {
 				continue;
 			}
+			if (goodsId == Constant.NANO_GOODS_ID) {
+				NanoUserQuota nanoUserQuota = nanoUserQuotaMapper.selectOne(Wrappers.lambdaQuery(NanoUserQuota.class).in(NanoUserQuota::getUid, userIdList).orderByDesc(NanoUserQuota::getRemainingQuota).last("limit 1"));
+				if (nanoUserQuota != null) {
+					if (!ObjectUtil.equal(nanoUserQuota.getRelationId(), relation.getId())) {
+						continue;
+					}
+				} else {
+					//规格最高
+					RenewalView renewalView = beanSearcher.searchFirst(RenewalView.class, MapUtils.builder()
+							.field(RenewalView::getGoodsId, goodsId)
+							.field(RenewalView::getUserId, userIdList).op(Operator.InList)
+							.orderBy(RenewalView::getSkuNanoQuota).desc()
+							.onlySelect(RenewalView::getRelationId)
+							.build());
+					if (renewalView != null && !ObjectUtil.equal(renewalView.getRelationId(), relation.getId())) {
+						continue;
+					}
+				}
+			}
 			Long skuId = relation.getSkuId();
 			deductGoodsIds.add(goodsId);
 			Long relationId = relation.getId();