This commit is contained in:
wuchunlei
2025-06-04 17:12:00 +08:00
parent 6852c64984
commit 5cc6f4f255
12 changed files with 212 additions and 57 deletions

View File

@@ -1,5 +1,6 @@
package com.peanut.modules.common.entity; package com.peanut.modules.common.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
@@ -40,5 +41,12 @@ public class AiBuyConfig implements Serializable {
@TableLogic @TableLogic
private Integer delFlag; private Integer delFlag;
@TableField(exist = false)
private boolean canUpgrade;
@TableField(exist = false)
private String upgradeCount;
@TableField(exist = false)
private BigDecimal upgradeFee;
} }

View File

@@ -36,6 +36,9 @@ public class AiVipLog implements Serializable {
//结束时间 //结束时间
private Date endTime; private Date endTime;
//0有效1失效
private Integer state;
@TableLogic @TableLogic
private Integer delFlag; private Integer delFlag;

View File

@@ -217,6 +217,8 @@ public class BuyOrder implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private VipBuyConfigEntity vipBuyConfigEntity; private VipBuyConfigEntity vipBuyConfigEntity;
@TableField(exist = false) @TableField(exist = false)
private AiBuyConfig aiBuyConfig;
@TableField(exist = false)
private BookEntity bookEntity; private BookEntity bookEntity;
@TableField(exist = false) @TableField(exist = false)
private String trainingClassIdentity; private String trainingClassIdentity;

View File

@@ -2,13 +2,14 @@ package com.peanut.modules.common.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.peanut.modules.common.entity.AiVipLog; import com.peanut.modules.common.entity.AiVipLog;
import com.peanut.modules.common.entity.BuyOrder;
public interface AiVipLogService extends IService<AiVipLog> { public interface AiVipLogService extends IService<AiVipLog> {
void openAiVip(int aiBuyConfigId); void openAiVip(BuyOrder buyOrder);
boolean isAiVip(); boolean isAiVip();
void userCount(); boolean userCount();
} }

View File

@@ -9,13 +9,12 @@ import com.peanut.modules.common.dao.AiBuyConfigDao;
import com.peanut.modules.common.dao.AiVipLogDao; import com.peanut.modules.common.dao.AiVipLogDao;
import com.peanut.modules.common.entity.AiBuyConfig; import com.peanut.modules.common.entity.AiBuyConfig;
import com.peanut.modules.common.entity.AiVipLog; import com.peanut.modules.common.entity.AiVipLog;
import com.peanut.modules.common.entity.BuyOrder;
import com.peanut.modules.common.service.AiVipLogService; import com.peanut.modules.common.service.AiVipLogService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;
import java.util.List;
@Slf4j @Slf4j
@Service("commonAiVipLogService") @Service("commonAiVipLogService")
@@ -25,58 +24,60 @@ public class AiVipLogServiceImpl extends ServiceImpl<AiVipLogDao, AiVipLog> impl
private AiBuyConfigDao aiBuyConfigDao; private AiBuyConfigDao aiBuyConfigDao;
@Override @Override
public void openAiVip(int aiBuyConfigId) { public void openAiVip(BuyOrder buyOrder) {
AiBuyConfig config = aiBuyConfigDao.selectById(aiBuyConfigId); AiBuyConfig config = aiBuyConfigDao.selectById(buyOrder.getAiBuyConfigId());
if (config != null) { if (config != null) {
AiVipLog aiVipLog = new AiVipLog(); if ("aiVip".equals(buyOrder.getOrderType())){
aiVipLog.setUserId(ShiroUtils.getUId()); AiVipLog aiVipLog = new AiVipLog();
//1月度2季度 aiVipLog.setUserId(ShiroUtils.getUId());
aiVipLog.setType(config.getType()); //1月度2季度
aiVipLog.setCount(config.getCount()); aiVipLog.setType(config.getType());
aiVipLog.setSurplusCount(config.getCount()); aiVipLog.setCount(config.getCount());
Date date = new Date(); aiVipLog.setSurplusCount(config.getCount());
aiVipLog.setStartTime(date); Date date = new Date();
if (config.getType()==1){ aiVipLog.setStartTime(date);
aiVipLog.setEndTime(DateUtils.addDateMonths(date,1)); if (config.getType()==1){
}else { aiVipLog.setEndTime(DateUtils.addDateMonths(date,1));
aiVipLog.setEndTime(DateUtils.addDateMonths(date,3)); }else {
aiVipLog.setEndTime(DateUtils.addDateMonths(date,3));
}
this.save(aiVipLog);
}else if ("upgradeAiVip".equals(buyOrder.getOrderType())){
AiVipLog aiVipLog = this.getOne(new LambdaQueryWrapper<AiVipLog>()
.eq(AiVipLog::getUserId,ShiroUtils.getUId())
.eq(AiVipLog::getState,0));
if (aiVipLog!=null){
aiVipLog.setSurplusCount(config.getCount()-aiVipLog.getCount()+aiVipLog.getSurplusCount());
aiVipLog.setCount(config.getCount());
this.updateById(aiVipLog);
}
} }
this.save(aiVipLog);
} }
} }
@Override @Override
public boolean isAiVip() { public boolean isAiVip() {
List<AiVipLog> aiVipLogs = this.list(new LambdaQueryWrapper<AiVipLog>() AiVipLog aiVipLog = this.getOne(new LambdaQueryWrapper<AiVipLog>()
.eq(AiVipLog::getUserId,ShiroUtils.getUId()) .eq(AiVipLog::getUserId,ShiroUtils.getUId())
.orderByAsc(AiVipLog::getStartTime)); .eq(AiVipLog::getState,0));
for (AiVipLog aiVipLog:aiVipLogs){ if (aiVipLog.getSurplusCount()>0&&new Date().getTime()<aiVipLog.getEndTime().getTime()){
if (aiVipLog.getSurplusCount()>0&&new Date().getTime()<aiVipLog.getEndTime().getTime()){ return true;
return true;
}
} }
return false; return false;
} }
@Override @Override
public void userCount() { public boolean userCount() {
List<AiVipLog> aiVipLogs = this.list(new LambdaQueryWrapper<AiVipLog>() AiVipLog aiVipLog = this.getOne(new LambdaQueryWrapper<AiVipLog>()
.eq(AiVipLog::getUserId,ShiroUtils.getUId()) .eq(AiVipLog::getUserId,ShiroUtils.getUId())
.orderByAsc(AiVipLog::getStartTime)); .eq(AiVipLog::getState,0));
boolean flag = false; if (aiVipLog.getSurplusCount()>0&&new Date().getTime()<aiVipLog.getEndTime().getTime()){
for (AiVipLog aiVipLog:aiVipLogs){ aiVipLog.setSurplusCount(aiVipLog.getSurplusCount()-1);
if (aiVipLog.getSurplusCount()>0&&new Date().getTime()<aiVipLog.getEndTime().getTime()){ this.updateById(aiVipLog);
aiVipLog.setSurplusCount(aiVipLog.getSurplusCount()-1); return true;
this.updateById(aiVipLog); }else {
flag = true; return false;
}
if (aiVipLog.getSurplusCount()==0||aiVipLog.getEndTime().getTime()<new Date().getTime()){
this.removeById(aiVipLog);
}
if (flag){
break;
}
} }
} }
} }

View File

@@ -39,6 +39,8 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
@Autowired @Autowired
private VipBuyConfigDao vipBuyConfigDao; private VipBuyConfigDao vipBuyConfigDao;
@Autowired @Autowired
private AiBuyConfigDao aiBuyConfigDao;
@Autowired
private ShopProductCourseDao shopProductCourseDao; private ShopProductCourseDao shopProductCourseDao;
@Override @Override
@@ -90,6 +92,9 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
if (b.getVipBuyConfigId()!=0){ if (b.getVipBuyConfigId()!=0){
b.setVipBuyConfigEntity(vipBuyConfigDao.selectById(b.getVipBuyConfigId())); b.setVipBuyConfigEntity(vipBuyConfigDao.selectById(b.getVipBuyConfigId()));
} }
if (b.getAiBuyConfigId()!=0){
b.setAiBuyConfig(aiBuyConfigDao.selectById(b.getAiBuyConfigId()));
}
//组装商品 //组装商品
List<BuyOrderProduct> buyOrderProducts = buyOrderProductDao.selectList( List<BuyOrderProduct> buyOrderProducts = buyOrderProductDao.selectList(
new LambdaQueryWrapper<BuyOrderProduct>().eq(BuyOrderProduct::getOrderId, b.getOrderId())); new LambdaQueryWrapper<BuyOrderProduct>().eq(BuyOrderProduct::getOrderId, b.getOrderId()));
@@ -138,9 +143,12 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
if (buyOrder.getProductId()!=null){ if (buyOrder.getProductId()!=null){
buyOrder.setBookBuyConfigEntity(bookBuyConfigDao.selectById(buyOrder.getProductId())); buyOrder.setBookBuyConfigEntity(bookBuyConfigDao.selectById(buyOrder.getProductId()));
} }
if (buyOrder.getVipBuyConfigId()!=null){ if (buyOrder.getVipBuyConfigId()!=null&&buyOrder.getAiBuyConfigId()!=0){
buyOrder.setVipBuyConfigEntity(vipBuyConfigDao.selectById(buyOrder.getVipBuyConfigId())); buyOrder.setVipBuyConfigEntity(vipBuyConfigDao.selectById(buyOrder.getVipBuyConfigId()));
} }
if (buyOrder.getAiBuyConfigId()!=null&&buyOrder.getAiBuyConfigId()!=0){
buyOrder.setAiBuyConfig(aiBuyConfigDao.selectById(buyOrder.getAiBuyConfigId()));
}
//添加商品信息 //添加商品信息
MPJLambdaWrapper<BuyOrderProduct> buyOrderProductWrapper = new MPJLambdaWrapper<>(); MPJLambdaWrapper<BuyOrderProduct> buyOrderProductWrapper = new MPJLambdaWrapper<>();
buyOrderProductWrapper.leftJoin(BuyOrder.class,BuyOrder::getOrderId,BuyOrderProduct::getOrderId); buyOrderProductWrapper.leftJoin(BuyOrder.class,BuyOrder::getOrderId,BuyOrderProduct::getOrderId);

View File

@@ -0,0 +1,53 @@
package com.peanut.modules.job.task;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.peanut.config.DelayQueueConfig;
import com.peanut.modules.common.entity.AiVipLog;
import com.peanut.modules.common.service.AiVipLogService;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component("aiVipTask")
public class AiVipTask implements ITask{
@Autowired
private AiVipLogService aiVipLogService;
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void run(String params) {
List<AiVipLog> aiVipLogs = aiVipLogService.list(new LambdaQueryWrapper<AiVipLog>()
.eq(AiVipLog::getState,0));
for (AiVipLog aiVipLog : aiVipLogs) {
if (aiVipLog.getEndTime().getTime()<new Date().getTime()){
aiVipLog.setState(1);
aiVipLogService.updateById(aiVipLog);
}else if (DateUtil.isSameDay(DateUtils.addDays(new Date(),1), aiVipLog.getEndTime())){
rabbitTemplate.convertAndSend(
DelayQueueConfig.COMMON_EXCHANGE,
DelayQueueConfig.COMMON_ROUTING_KEY,
"aiVipExpire"+","+aiVipLog.getId(),
messagePostProcessor(aiVipLog.getEndTime().getTime()-new Date().getTime())
);
}
}
}
private MessagePostProcessor messagePostProcessor(long date) {
return message -> {
message.getMessageProperties().setDelay((int)date);
return message;
};
}
}

View File

@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.peanut.config.DelayQueueConfig; import com.peanut.config.DelayQueueConfig;
import com.peanut.modules.common.dao.*; import com.peanut.modules.common.dao.*;
import com.peanut.modules.common.entity.*; import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.ClassEntityService; import com.peanut.modules.common.service.*;
import com.peanut.modules.common.service.ClassExamService;
import com.peanut.modules.common.service.CouponHistoryService;
import com.peanut.modules.common.service.UserVipService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -41,6 +38,8 @@ public class CommonConsumer {
private CourseCatalogueDao courseCatalogueDao; private CourseCatalogueDao courseCatalogueDao;
@Autowired @Autowired
private UserVipService userVipService; private UserVipService userVipService;
@Autowired
private AiVipLogService aiVipLogService;
@RabbitListener(queues = DelayQueueConfig.COMMON_QUEUE) @RabbitListener(queues = DelayQueueConfig.COMMON_QUEUE)
public void commonConsumer(String typeAndParam) { public void commonConsumer(String typeAndParam) {
@@ -102,6 +101,14 @@ public class CommonConsumer {
couponHistoryService.updateById(couponHistory); couponHistoryService.updateById(couponHistory);
} }
} }
//aiVip过期
if ("aiVipExpire".equals(typeAndParams[0])){
AiVipLog aiVipLog = aiVipLogService.getById(typeAndParams[1]);
if (aiVipLog != null&&aiVipLog.getState()==0) {
aiVipLog.setState(1);
aiVipLogService.updateById(aiVipLog);
}
}
}catch (Exception e) { }catch (Exception e) {
log.error("mq通用队列消费异常",e.getMessage()+"-"+typeAndParam); log.error("mq通用队列消费异常",e.getMessage()+"-"+typeAndParam);
} }

View File

@@ -30,6 +30,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
@@ -209,7 +211,7 @@ public class AliPayServiceImpl implements AliPayService {
userCoinJf(order); userCoinJf(order);
} }
//开通aivip //开通aivip
aiVipLogService.openAiVip(order.getAiBuyConfigId()); aiVipLogService.openAiVip(order);
} }
if("point".equals(subject)){ if("point".equals(subject)){
@@ -338,8 +340,8 @@ public class AliPayServiceImpl implements AliPayService {
} }
log.error(">>>>>>>>>>验签失败 params = {}", params.toString()); log.error(">>>>>>>>>>验签失败 params = {}", params.toString());
return "fail"; return "fail";
} catch (Exception e) { } catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
log.error(">>>>>>>>>>订单回调异常: 订单号 = {}, msg = {}", params.toString(), e.getMessage()); log.error(">>>>>>>>>>订单回调异常: 订单号 = {}, msg = {}", params.toString(), e.getMessage());
return "fail"; return "fail";
} }

View File

@@ -198,7 +198,7 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
userCoinJf(order); userCoinJf(order);
} }
//开通aivip //开通aivip
aiVipLogService.openAiVip(order.getAiBuyConfigId()); aiVipLogService.openAiVip(order);
} }
// 1.根据订单id获取订单信息 // 1.根据订单id获取订单信息

View File

@@ -2,13 +2,18 @@ package com.peanut.modules.taihumed.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.peanut.common.utils.R; import com.peanut.common.utils.R;
import com.peanut.common.utils.ShiroUtils;
import com.peanut.modules.common.entity.AiBuyConfig; import com.peanut.modules.common.entity.AiBuyConfig;
import com.peanut.modules.common.entity.AiVipLog;
import com.peanut.modules.common.service.AiBuyConfigService; import com.peanut.modules.common.service.AiBuyConfigService;
import com.peanut.modules.common.service.AiVipLogService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
@Slf4j @Slf4j
@@ -18,12 +23,41 @@ public class AiBuyConfigController {
@Autowired @Autowired
private AiBuyConfigService aiBuyConfigService; private AiBuyConfigService aiBuyConfigService;
@Autowired
private AiVipLogService aiVipLogService;
//ai会员配置列表 //ai会员配置列表
@RequestMapping("/getAiBuyConfigList") @RequestMapping("/getAiBuyConfigList")
public R getAiBuyConfigList(){ public R getAiBuyConfigList(){
List<AiBuyConfig> list = aiBuyConfigService.list(new LambdaQueryWrapper<AiBuyConfig>() List<AiBuyConfig> list = aiBuyConfigService.list(new LambdaQueryWrapper<AiBuyConfig>()
.orderByAsc(AiBuyConfig::getFee)); .orderByAsc(AiBuyConfig::getFee));
//是否会员
AiVipLog aiVipLog = aiVipLogService.getOne(new LambdaQueryWrapper<AiVipLog>()
.eq(AiVipLog::getUserId,ShiroUtils.getUId())
.eq(AiVipLog::getState,0));
//不是会员全部返回
if (aiVipLog==null){
for (AiBuyConfig aiBuyConfig:list){
aiBuyConfig.setCanUpgrade(true);
}
}else {
AiBuyConfig config = aiBuyConfigService.getOne(new LambdaQueryWrapper<AiBuyConfig>()
.eq(AiBuyConfig::getType,aiVipLog.getType())
.eq(AiBuyConfig::getCount,aiVipLog.getCount()));
//是会员判断能否升级
for (AiBuyConfig aiBuyConfig:list){
List<AiVipLog> aiVipLogs = aiVipLogService.list(new LambdaQueryWrapper<AiVipLog>()
.eq(AiVipLog::getUserId, ShiroUtils.getUId())
.eq(AiVipLog::getState, 0)
.eq(AiVipLog::getType, aiBuyConfig.getType())
.lt(AiVipLog::getCount, aiBuyConfig.getCount()));
if (aiVipLogs.size()>0){
aiBuyConfig.setCanUpgrade(true);
aiBuyConfig.setUpgradeFee(aiBuyConfig.getFee().subtract(config.getFee()));
aiBuyConfig.setUpgradeCount(new BigDecimal(aiBuyConfig.getCount()).subtract(new BigDecimal(config.getCount()))+"");
}
}
}
return R.ok().put("list",list); return R.ok().put("list",list);
} }
} }

View File

@@ -2,17 +2,14 @@ package com.peanut.modules.taihumed.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.peanut.common.utils.R; import com.peanut.common.utils.R;
import com.peanut.common.utils.ShiroUtils; import com.peanut.common.utils.ShiroUtils;
import com.peanut.config.Constants; import com.peanut.config.Constants;
import com.peanut.config.DelayQueueConfig; import com.peanut.config.DelayQueueConfig;
import com.peanut.modules.book.service.TransactionDetailsService; import com.peanut.modules.book.service.TransactionDetailsService;
import com.peanut.modules.common.entity.BuyOrder; import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.entity.MyUserEntity; import com.peanut.modules.common.service.*;
import com.peanut.modules.common.service.AiVipLogService;
import com.peanut.modules.common.service.BuyOrderService;
import com.peanut.modules.common.service.JfTransactionDetailsService;
import com.peanut.modules.common.service.MyUserService;
import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo; import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo;
import com.peanut.modules.pay.weChatPay.service.WxpayService; import com.peanut.modules.pay.weChatPay.service.WxpayService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -25,6 +22,8 @@ import org.springframework.web.bind.annotation.RestController;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Slf4j @Slf4j
@RestController("taihumedAiVip") @RestController("taihumedAiVip")
@@ -44,7 +43,45 @@ public class AiVipController {
@Autowired @Autowired
private WxpayService wxpayService; private WxpayService wxpayService;
@Autowired @Autowired
private AiChatContentService aiChatContentService;
@Autowired
private AiVipLogService aiVipLogService; private AiVipLogService aiVipLogService;
@Autowired
private AiBuyConfigService aiBuyConfigService;
//用户开通aivip信息
@RequestMapping("/getUserAiVip")
public R getUserAiVip(){
int freeCount = 0;
int flag = 0;//不是vip
AiVipLog aiVipLog = aiVipLogService.getOne(new LambdaQueryWrapper<AiVipLog>()
.eq(AiVipLog::getUserId,ShiroUtils.getUId())
.eq(AiVipLog::getState,0));
if (aiVipLog!=null){
List<AiBuyConfig> aiBuyConfig = aiBuyConfigService.list(new LambdaQueryWrapper<AiBuyConfig>()
.eq(AiBuyConfig::getType,aiVipLog.getType())
.orderByDesc(AiBuyConfig::getCount));
//能否升级
if (aiBuyConfig.size() > 0){
if (aiVipLog.getCount()<aiBuyConfig.get(0).getCount()){
flag = 1;//是vip可升级
}else if (aiVipLog.getCount()==aiBuyConfig.get(0).getCount()){
flag = 2;//是vip不可升级
}
}
}else {
List<AiChatContent> quankeContentList = aiChatContentService.list(new LambdaQueryWrapper<AiChatContent>()
.eq(AiChatContent::getUserId,ShiroUtils.getUId())
.like(AiChatContent::getChatAssistantName,"全科")
.orderByAsc(AiChatContent::getCreateTime)
.groupBy(AiChatContent::getChatId));
freeCount = 3-quankeContentList.size();
}
return R.ok().put("aiVipLog",aiVipLog)
.put("flag",flag)
.put("freeCount",freeCount);
}
//aivip下单 //aivip下单
@RequestMapping("/placeAiVipOrder") @RequestMapping("/placeAiVipOrder")
@@ -52,7 +89,6 @@ public class AiVipController {
public R placeVipOrder(@RequestBody BuyOrder buyOrder){ public R placeVipOrder(@RequestBody BuyOrder buyOrder){
int uid = ShiroUtils.getUId(); int uid = ShiroUtils.getUId();
buyOrder.setOrderStatus("0"); buyOrder.setOrderStatus("0");
buyOrder.setOrderType("aiVip");
String timeId = IdWorker.getTimeId().substring(0, 32); String timeId = IdWorker.getTimeId().substring(0, 32);
buyOrder.setOrderSn(timeId); buyOrder.setOrderSn(timeId);
buyOrder.setUserId(uid); buyOrder.setUserId(uid);
@@ -73,7 +109,7 @@ public class AiVipController {
jfTransactionDetailsService.recordJfTransaction(buyOrder, user, buyOrder.getJfDeduction()); jfTransactionDetailsService.recordJfTransaction(buyOrder, user, buyOrder.getJfDeduction());
} }
//开通用户aiVip //开通用户aiVip
aiVipLogService.openAiVip(buyOrder.getAiBuyConfigId()); aiVipLogService.openAiVip(buyOrder);
} else { } else {
rabbitTemplate.convertAndSend( rabbitTemplate.convertAndSend(
DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE, DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE,