瀏覽代碼

GPT套餐升级

zoujiajian 2 年之前
父節點
當前提交
db4dc9ec3a

+ 8 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UpgradePackage.java

@@ -1,5 +1,7 @@
 package com.cyksj.model.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -31,6 +33,12 @@ public class UpgradePackage extends BaseEntity{
      */
     private BigDecimal price;
 
+    /**
+     * 时间限制
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Integer time;
+
     /**
      * 数量
      */

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

@@ -216,4 +216,31 @@ public class RenewalView {
      */
     @DbIgnore
     private Integer mjUserRelaxNum;
+
+    /**
+     * gpt镜像限制次数
+     */
+    @DbField("sku.gpt_limit_num")
+    private Integer gptLimitNum;
+
+    /**
+     * gpt镜像限制时间
+     */
+    @DbField("sku.gpt_limit_time")
+    private Integer gptLimitTime;
+
+    /**
+     * gpt 用户镜像限制次数
+     */
+    @DbIgnore
+    private Integer gptUserLimitNum;
+
+    /**
+     * gpt 用户镜像限制时间
+     */
+    @DbIgnore
+    private Long gptUserLimitTime;
+
+    @DbIgnore
+    private Long use;
 }

+ 61 - 6
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -3,6 +3,7 @@ package com.cyksj.service.order.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.ObjectUtil;
@@ -303,6 +304,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final MidjourneyUserMapper midjourneyUserMapper;
 
+	private final ChatgptUserMapper chatgptUserMapper;
+
 	private final DistributeExtraRebateService distributeExtraRebateService;
 
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
@@ -3234,14 +3237,41 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			if (upgradePackage.getPrice() == null || upgradePackage.getPrice().compareTo(BigDecimal.ZERO) <= 0) {
 				throw BusinessRuntimeException.getInstance("下单商品价格异常");
 			}
-			if (payRequest.getDonMoney().compareTo(upgradePackage.getPrice()) < 0) {
-				log.info("套餐包:{}支付金额:{}异常,调整用户userId:{}支付金额为:{}", upgradePackage.getName(), payRequest.getDonMoney(), user.getId(), upgradePackage.getPrice());
-				payRequest.setDonMoney(upgradePackage.getPrice());
+			if (goodsDonSku.getGoodsId() == 18) {
+				ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class).eq(ChatgptUser::getRelationId, payRequest.getRelationId()));
+				if (chatgptUser == null) {
+					throw BusinessRuntimeException.getInstance("车票未激活gpt账号,请先激活");
+				}
+				if (chatgptUser.getLimitNum() > goodsDonSku.getGptLimitNum()) {
+					throw BusinessRuntimeException.getInstance("您已升级车票套餐");
+				}
+				Date expiryTime = groupsRelation.getExpiryTime();
+				//剩余多少天
+				DateTime now = DateTime.now();
+				long day = DateUtil.between(now, expiryTime, DateUnit.DAY);
+
+				BigDecimal upgradePackagePrice = upgradePackage.getPrice();
+				//自然月差价
+				int thisMonthDays = DateUtil.endOfMonth(now).dayOfMonth();
+				BigDecimal singlePrice = upgradePackagePrice.divide(BigDecimal.valueOf(thisMonthDays));
+
+				BigDecimal payUpgradePackagePrice = singlePrice.multiply(BigDecimal.valueOf(day));
+				if (payRequest.getDonMoney().compareTo(payUpgradePackagePrice) < 0) {
+					payRequest.setDonMoney(payUpgradePackagePrice);
+				}
 			}
-			MidjourneyUser midjourneyUser = midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class).eq(MidjourneyUser::getRelationId, payRequest.getRelationId()));
-			if (midjourneyUser == null){
-				throw BusinessRuntimeException.getInstance("车票未激活Midjourney账号,请先激活");
+
+			if (goodsDonSku.getGoodsId() == 26) {
+				if (payRequest.getDonMoney().compareTo(upgradePackage.getPrice()) < 0) {
+					log.info("套餐包:{}支付金额:{}异常,调整用户userId:{}支付金额为:{}", upgradePackage.getName(), payRequest.getDonMoney(), user.getId(), upgradePackage.getPrice());
+					payRequest.setDonMoney(upgradePackage.getPrice());
+				}
+				MidjourneyUser midjourneyUser = midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class).eq(MidjourneyUser::getRelationId, payRequest.getRelationId()));
+				if (midjourneyUser == null){
+					throw BusinessRuntimeException.getInstance("车票未激活Midjourney账号,请先激活");
+				}
 			}
+
 			String donNo = SEQUENCE.nextId().toString();
 			UpgradeOrderDon upgradeOrderDon = new UpgradeOrderDon();
 			upgradeOrderDon.setOrderNo(donNo);
@@ -3415,6 +3445,31 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				}
 			}
 		}
+
+		//gpt 升级套餐
+		if (upgradePackage.getGoodsId() == 18) {
+			ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class).eq(ChatgptUser::getRelationId, orderDon.getRelationId()));
+			Long oriTime = chatgptUser.getLimitTime();
+			if (chatgptUser != null) {
+				Integer time = upgradePackage.getTime();
+				Integer num = upgradePackage.getNum();
+
+				int update = chatgptUserMapper.update(null, Wrappers.lambdaUpdate(ChatgptUser.class)
+						.set(ChatgptUser::getLimitTime, time)
+						.set(ChatgptUser::getLimitNum, num)
+						.eq(ChatgptUser::getId, chatgptUser.getId()));
+				if (update == 0) {
+					log.info("chatgptUser 升级套餐包增值失败 id:{},orderId:{}", chatgptUser.getId(), orderDon.getId());
+				}
+				String key = RedisService.key.CHATGPT_CONVERSATION_LIMIT.getName() + ":" + chatgptUser.getUserToken();
+				Long expire = redisService.getExpire(key);
+				//存在
+				if (expire > 0) {
+					//加上剩余的时间
+					redisService.expire(key, expire + (time - oriTime) * 60 * 60);
+				}
+			}
+		}
 	}
 
 

+ 10 - 0
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -26,6 +26,7 @@ import com.cyksj.model.entity.*;
 import com.cyksj.model.request.SpecialGoodsTicketReq;
 import com.cyksj.model.views.*;
 import com.cyksj.redis.RedisService;
+import com.cyksj.service.chatgpt.ChatGptAccountService;
 import com.cyksj.service.chatgpt.ChatGptAuthService;
 import com.cyksj.service.groups.GroupsFuncService;
 import com.cyksj.service.mail.CuiQiuMailService;
@@ -114,6 +115,8 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final MidjourneyAccountService midjourneyAccountService;
 
+	private final ChatGptAccountService chatGptAccountService;
+
 	//脆球邮箱后缀
 	private final static String CUI_QIU_EMAIL_SUFFIX = "@kindvd.com";
 	private final UpgradePackageMapper upgradePackageMapper;
@@ -258,6 +261,13 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 				} catch (Exception e) {
 				}
 			}
+			if (ticket.getGoodsId() == 18 && ticket.getIsMirror()) {
+				//gpt用户镜像
+				ChatGptUserView userInfo = chatGptAccountService.getUserInfo(userId, ticket.getRelationId());
+				ticket.setGptUserLimitNum(userInfo.getLimitNum());
+				ticket.setGptUserLimitTime(userInfo.getLimitTime());
+				ticket.setUse(userInfo.getUse());
+			}
 			List<GroupsRelationUserView> relationUserViews = groupsRelationMapper.getUserRelationUserViews(ticket.getGroupId(), ticket.getRelationId(), ticket.getUserId(), List.of(GroupsRelation.Status.validity, GroupsRelation.Status.outside));
 			ticket.setRelationViews(relationUserViews);
 			if (ticket.getExpiryTime() != null) {

+ 0 - 2
netflix-web/src/main/java/com/cyksj/web/controller/manage/upgrade/UpgradePackageController.java

@@ -1,7 +1,6 @@
 package com.cyksj.web.controller.manage.upgrade;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.hutool.core.map.MapUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.Log;
 import com.cyksj.common.exception.BusinessRuntimeException;
@@ -16,7 +15,6 @@ import com.cyksj.model.views.UpgradePackageView;
 import com.cyksj.service.mange.upgrade.UpgradePackageService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
-import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;