vip购买相关

This commit is contained in:
wangjinlei
2024-06-05 14:52:18 +08:00
parent dd93a8e81f
commit edb3123531
2 changed files with 95 additions and 6 deletions

View File

@@ -9,6 +9,7 @@ import com.peanut.config.DelayQueueConfig;
import com.peanut.modules.book.service.TransactionDetailsService; import com.peanut.modules.book.service.TransactionDetailsService;
import com.peanut.modules.common.dao.JfTransactionDetailsDao; import com.peanut.modules.common.dao.JfTransactionDetailsDao;
import com.peanut.modules.common.dao.MyUserDao; import com.peanut.modules.common.dao.MyUserDao;
import com.peanut.modules.common.dao.UserVipDao;
import com.peanut.modules.common.dao.VipBuyConfigDao; import com.peanut.modules.common.dao.VipBuyConfigDao;
import com.peanut.modules.common.entity.*; import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.BuyOrderService; import com.peanut.modules.common.service.BuyOrderService;
@@ -24,7 +25,12 @@ import org.springframework.web.bind.annotation.RequestBody;
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 javax.transaction.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.Period;
import java.util.Calendar;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@@ -51,6 +57,8 @@ public class UserVipController {
private TransactionDetailsService transactionDetailsService; private TransactionDetailsService transactionDetailsService;
@Autowired @Autowired
private JfTransactionDetailsDao jfTransactionDetailsDao; private JfTransactionDetailsDao jfTransactionDetailsDao;
@Autowired
private UserVipDao userVipDao;
@RequestMapping("/getMyVipHistory") @RequestMapping("/getMyVipHistory")
public R getMyVipHistory(String userId) { public R getMyVipHistory(String userId) {
@@ -62,8 +70,8 @@ public class UserVipController {
return R.ok().put("result", userVips); return R.ok().put("result", userVips);
} }
@Transactional
public R placeVipOrder(@RequestBody BuyOrder buyOrder){ public R placeVipOrder(@RequestBody BuyOrder buyOrder) throws Exception {
int uid = ShiroUtils.getUId(); int uid = ShiroUtils.getUId();
buyOrder.setOrderStatus("0"); buyOrder.setOrderStatus("0");
@@ -92,7 +100,7 @@ public class UserVipController {
} }
openVipForUser(buyOrder); openVipForUser(buyOrder);
} else { } else {
return R.error(500, "花生币余额不足!"); return R.error(500, "余额不足!");
} }
} }
//下单微信支付预付款订单 //下单微信支付预付款订单
@@ -126,12 +134,93 @@ public class UserVipController {
return false; return false;
} }
private void openVipForUser(BuyOrder buyOrder){ private void openVipForUser(BuyOrder buyOrder) throws Exception {
VipBuyConfigEntity vipBuyConfigEntity = vipBuyConfigDao.selectById(buyOrder.getVipBuyConfigId()); VipBuyConfigEntity vipBuyConfigEntity = vipBuyConfigDao.selectById(buyOrder.getVipBuyConfigId());
MyUserEntity userEntity = myUserDao.selectById(buyOrder.getUserId());
if(vipBuyConfigEntity.getType()==1){//超v
if(userEntity.getVip().equals("0")){//初次办理
UserVip userVip = new UserVip();
userVip.setUserId(userEntity.getId());
userVip.setType(1);
userVip.setStartTime(new Date());
LocalDate today = LocalDate.now();
LocalDate threeYearsLater = today.plus(Period.ofYears(vipBuyConfigEntity.getYear()));
Date threeYearsDate = Date.from(threeYearsLater.atStartOfDay(java.time.ZoneId.systemDefault()).toInstant());
userVip.setEndTime(threeYearsDate);
userVipDao.insert(userVip);
userEntity.setVip("1");
myUserDao.updateById(userEntity);
}
if(userEntity.getVip().equals("1")){//vip延期
List<UserVip> userVips = userVipDao.selectList(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, userEntity.getId()).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0));
if(userVips.size()!=1){
throwExceptionMethod();
}
UserVip userVip = userVips.get(0);
Date endTime = userVip.getEndTime();
Calendar calendar = Calendar.getInstance();
calendar.setTime(endTime);
calendar.add(Calendar.YEAR,vipBuyConfigEntity.getYear());
userVip.setEndTime(calendar.getTime());
userVipDao.updateById(userVip);
}
if (userEntity.getVip().equals("2")||userEntity.getVip().equals("3")){//医学vip或国学vip升级
List<UserVip> userVips = userVipDao.selectList(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, userEntity.getId()).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0));
if(userVips.size()!=1){
throwExceptionMethod();
}
UserVip userVip1 = userVips.get(0);
userVip1.setEndTime(new Date());
userVip1.setState(1);
userVipDao.updateById(userVip1);
UserVip userVip = new UserVip();
userVip.setUserId(userEntity.getId());
userVip.setType(1);
userVip.setStartTime(new Date());
LocalDate today = LocalDate.now();
LocalDate threeYearsLater = today.plus(Period.ofYears(vipBuyConfigEntity.getYear()));
Date threeYearsDate = Date.from(threeYearsLater.atStartOfDay(java.time.ZoneId.systemDefault()).toInstant());
userVip.setEndTime(threeYearsDate);
userVipDao.insert(userVip);
userEntity.setVip("1");
myUserDao.updateById(userEntity);
}
}
if(vipBuyConfigEntity.getType()==2||vipBuyConfigEntity.getType()==3){//医学vip或国学vip
if(userEntity.getVip().equals("2")||userEntity.getVip().equals("3")){//续费
List<UserVip> userVips = userVipDao.selectList(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, userEntity.getId()).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0));
if(userVips.size()!=1){
throwExceptionMethod();
}
UserVip userVip = userVips.get(0);
Date endTime = userVip.getEndTime();
Calendar calendar = Calendar.getInstance();
calendar.setTime(endTime);
calendar.add(Calendar.YEAR,vipBuyConfigEntity.getYear());
userVip.setEndTime(calendar.getTime());
userVipDao.updateById(userVip);
}else{//新办理
UserVip userVip = new UserVip();
userVip.setUserId(userEntity.getId());
userVip.setType(vipBuyConfigEntity.getType());
userVip.setStartTime(new Date());
LocalDate today = LocalDate.now();
LocalDate threeYearsLater = today.plus(Period.ofYears(vipBuyConfigEntity.getYear()));
Date threeYearsDate = Date.from(threeYearsLater.atStartOfDay(java.time.ZoneId.systemDefault()).toInstant());
userVip.setEndTime(threeYearsDate);
userVipDao.insert(userVip);
userEntity.setVip(vipBuyConfigEntity.getType().toString());
myUserDao.updateById(userEntity);
}
}
} }
private static void throwExceptionMethod() throws Exception {
throw new Exception("开通vip异常");
}
private void recordJfTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal jf){ private void recordJfTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal jf){
JfTransactionDetails jfTransactionDetails = new JfTransactionDetails(); JfTransactionDetails jfTransactionDetails = new JfTransactionDetails();
jfTransactionDetails.setUserId(user.getId()); jfTransactionDetails.setUserId(user.getId());

View File

@@ -40,8 +40,8 @@ public class VipServiceImpl extends ServiceImpl<VipBuyConfigDao, VipBuyConfigEnt
public R getVipProductForUser() throws ParseException { public R getVipProductForUser() throws ParseException {
int uid = ShiroUtils.getUId(); int uid = ShiroUtils.getUId();
MyUserEntity userEntity = myUserDao.selectById(uid); MyUserEntity userEntity = myUserDao.selectById(uid);
Integer chaoCount = userVipDao.selectCount(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, uid).eq(UserVip::getType, 1).lt(UserVip::getEndTime,new Date()).eq(UserVip::getState,0)); Integer chaoCount = userVipDao.selectCount(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, uid).eq(UserVip::getType, 1).gt(UserVip::getEndTime,new Date()).eq(UserVip::getState,0));
Integer sociologyCount = userVipDao.selectCount(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).lt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); Integer sociologyCount = userVipDao.selectCount(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0));
//获取超v列表 //获取超v列表
LambdaQueryWrapper<VipBuyConfigEntity> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<VipBuyConfigEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.in(VipBuyConfigEntity::getType,userEntity.getVip().equals("1")||userEntity.getVip().equals("2")? Collections.singletonList(1):Arrays.asList(1,3)); wrapper.in(VipBuyConfigEntity::getType,userEntity.getVip().equals("1")||userEntity.getVip().equals("2")? Collections.singletonList(1):Arrays.asList(1,3));