aiVip
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
53
src/main/java/com/peanut/modules/job/task/AiVipTask.java
Normal file
53
src/main/java/com/peanut/modules/job/task/AiVipTask.java
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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获取订单信息
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user