zoujiajian 3 kuukautta sitten
vanhempi
sitoutus
d856a1f5e8

+ 1 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/TicketRedemptionCodeRecord.java

@@ -13,6 +13,7 @@ public class TicketRedemptionCodeRecord extends BaseEntity {
     private Long relationId;
     private Long goodsId;
     private Long skuId;
+    private Long sourceGoodsId;
     private String sourceType;
     private String redeemName;
     private Integer quota;

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

@@ -611,6 +611,12 @@ public class RenewalView {
     @DbIgnore
     private Boolean receivedGptGift;
 
+    /**
+     * 是否可领取GPT API额度
+     */
+    @DbIgnore
+    private Boolean canReceiveGptApiQuota;
+
     /**
      * 是否是会员抵扣车票
      */

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

@@ -428,6 +428,9 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 						ticket.setIsComplete(orderDon.getStatus() == OrderDon.Status.complete ? true : false);
 					}
 				}
+                if (isGptApiQuotaSourceTicket(ticket.getGoodsId(), ticket.getSkuNum())) {
+                    markGptApiQuotaReceiveStatus(userIds, ticket);
+                }
 				if (lang != null && !StrUtil.equals(UserPageLanguage.Language.zh_CN.name(), lang)) {
 					String languageSpecVal = backInfoTranslationsFrontService.getLanguageSpecVal(zhSkuId, lang);
 					if (StrUtil.isNotBlank(languageSpecVal)) {
@@ -580,6 +583,16 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		return true;
 	}
 
+	private void markGptApiQuotaReceiveStatus(List<Long> userIds, RenewalView ticket) {
+        Integer successCount = ticketRedemptionCodeRecordMapper.selectCount(Wrappers.lambdaQuery(TicketRedemptionCodeRecord.class)
+                .in(TicketRedemptionCodeRecord::getUserId, userIds)
+                .eq(TicketRedemptionCodeRecord::getSourceGoodsId, ticket.getGoodsId())
+                .eq(TicketRedemptionCodeRecord::getSkuId, Constant.GPT_ACTIVITY_GIFT_SKU_ID)
+                .eq(TicketRedemptionCodeRecord::getSourceType, RedisKey.GPT_API_QUOTA_KEY)
+                .eq(TicketRedemptionCodeRecord::getStatus, "success"));
+        ticket.setCanReceiveGptApiQuota(successCount == 0);
+	}
+
 	@Override
 	public GroupsRelation getSimilarExpiredGroupRelation(GoodsDonSku sku, List<Long> errorsRelationIds, String ip) {
 		Long skuId = sku.getId();
@@ -2762,8 +2775,8 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 			if (sourceSku == null) {
 				throw BusinessRuntimeException.getInstance("车票规格不存在");
 			}
-			if (!Constant.GPT_RECHARGE_GOODS_ID.equals(sourceRelation.getGoodsId())
-					&& !(Constant.GPT_PLUS_GID.equals(sourceRelation.getGoodsId()) && Objects.equals(sourceSku.getNum(), 1))) {
+			Long sourceGoodsId = sourceRelation.getGoodsId();
+			if (!isGptApiQuotaSourceTicket(sourceGoodsId, sourceSku.getNum())) {
 				throw BusinessRuntimeException.getInstance("当前车票不符合领取条件");
 			}
 
@@ -2778,11 +2791,12 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 			if (sourceOrder == null) {
 				throw BusinessRuntimeException.getInstance("不符合领取要求");
 			}
-			Integer receivedCount = ticketRedemptionCodeRecordMapper.selectCount(Wrappers.lambdaQuery(TicketRedemptionCodeRecord.class)
-					.in(TicketRedemptionCodeRecord::getUserId, userIds)
-					.eq(TicketRedemptionCodeRecord::getSkuId, Constant.GPT_ACTIVITY_GIFT_SKU_ID)
-					.eq(TicketRedemptionCodeRecord::getSourceType, RedisKey.GPT_API_QUOTA_KEY)
-					.eq(TicketRedemptionCodeRecord::getStatus, "success"));
+            Integer receivedCount = ticketRedemptionCodeRecordMapper.selectCount(Wrappers.lambdaQuery(TicketRedemptionCodeRecord.class)
+                    .in(TicketRedemptionCodeRecord::getUserId, userIds)
+                    .eq(TicketRedemptionCodeRecord::getSkuId, Constant.GPT_ACTIVITY_GIFT_SKU_ID)
+                    .eq(TicketRedemptionCodeRecord::getSourceType, RedisKey.GPT_API_QUOTA_KEY)
+                    .eq(TicketRedemptionCodeRecord::getSourceGoodsId, sourceGoodsId)
+                    .eq(TicketRedemptionCodeRecord::getStatus, "success"));
 			if (receivedCount > 0) {
 				throw BusinessRuntimeException.getInstance("您已领取");
 			}
@@ -2791,6 +2805,7 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 			record.setUserId(userId);
 			record.setRelationId(sourceRelationId);
 			record.setGoodsId(sourceRelation.getGoodsId());
+            record.setSourceGoodsId(sourceGoodsId);
 			record.setSkuId(Constant.GPT_ACTIVITY_GIFT_SKU_ID);
 			record.setSourceType(RedisKey.GPT_API_QUOTA_KEY);
 			record.setRedeemName("GPT代充/独立赠送");
@@ -2815,6 +2830,7 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 				GptActivityRedeemResult redeemResult = requestGptActivityRedeemCode(Constant.AI_API_SVC_DOMAIN, giftRelation, giftSku);
 				record.setRelationId(giftRelation.getId());
 				record.setGoodsId(giftSku.getGoodsId());
+                record.setSourceGoodsId(sourceGoodsId);
 				record.setRedeemCode(redeemResult.getRedeemCode());
 				record.setQuota(redeemResult.getQuota());
 				record.setRedeemCount(0);
@@ -2830,7 +2846,8 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 				return resp;
 			} catch (Exception e) {
 				record.setGoodsId(giftSku.getGoodsId());
-				record.setStatus("error");
+                record.setSourceGoodsId(sourceGoodsId);
+                record.setStatus("error");
 				record.setErrorMsg(StringUtil.getErrorText(e));
 				if (giftRelation != null) {
 					record.setRelationId(giftRelation.getId());
@@ -2844,21 +2861,25 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		}
 	}
 
-	private GroupsRelation getReusableGptActivityGiftRelation(List<Long> userIds, Long giftSkuId) {
-		TicketRedemptionCodeRecord retryRecord = ticketRedemptionCodeRecordMapper.selectOne(Wrappers.lambdaQuery(TicketRedemptionCodeRecord.class)
-				.in(TicketRedemptionCodeRecord::getUserId, userIds)
-				.eq(TicketRedemptionCodeRecord::getSkuId, giftSkuId)
-				.eq(TicketRedemptionCodeRecord::getSourceType, RedisKey.GPT_API_QUOTA_KEY)
-				.eq(TicketRedemptionCodeRecord::getStatus, "error")
-				.isNotNull(TicketRedemptionCodeRecord::getRelationId)
-				.orderByDesc(TicketRedemptionCodeRecord::getId)
-				.last("limit 1"));
-		if (retryRecord != null) {
-			return groupsRelationMapper.selectById(retryRecord.getRelationId());
-		}
-		return null;
+	private boolean isGptApiQuotaSourceTicket(Long goodsId, Integer skuNum) {
+		return Constant.GPT_RECHARGE_GOODS_ID.equals(goodsId)
+				|| (Constant.GPT_PLUS_GID.equals(goodsId) && Objects.equals(skuNum, 1));
 	}
 
+    private GroupsRelation getReusableGptActivityGiftRelation(List<Long> userIds, Long giftSkuId) {
+        TicketRedemptionCodeRecord retryRecord = ticketRedemptionCodeRecordMapper.selectOne(Wrappers.lambdaQuery(TicketRedemptionCodeRecord.class)
+                .in(TicketRedemptionCodeRecord::getUserId, userIds)
+                .eq(TicketRedemptionCodeRecord::getSkuId, giftSkuId)
+                .eq(TicketRedemptionCodeRecord::getSourceType, RedisKey.GPT_API_QUOTA_KEY)
+                .eq(TicketRedemptionCodeRecord::getStatus, "error")
+                .isNotNull(TicketRedemptionCodeRecord::getRelationId)
+                .orderByDesc(TicketRedemptionCodeRecord::getId)
+                .last("limit 1"));
+        if (retryRecord != null) {
+            return groupsRelationMapper.selectById(retryRecord.getRelationId());
+        }
+        return null;
+    }
 	private GptActivityRedeemResult requestGptActivityRedeemCode(String apiDomain, GroupsRelation giftRelation, GoodsDonSku giftSku) throws Exception {
         //默认5刀额度
         Integer quota = 2500000;