diff --git a/src/main/java/com/peanut/modules/common/controller/UserVipController.java b/src/main/java/com/peanut/modules/common/controller/UserVipController.java index 8ebb36b2..1474c769 100644 --- a/src/main/java/com/peanut/modules/common/controller/UserVipController.java +++ b/src/main/java/com/peanut/modules/common/controller/UserVipController.java @@ -9,6 +9,7 @@ import com.peanut.config.DelayQueueConfig; import com.peanut.modules.book.service.TransactionDetailsService; import com.peanut.modules.common.dao.JfTransactionDetailsDao; 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.entity.*; 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.RestController; +import javax.transaction.Transactional; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.Period; +import java.util.Calendar; +import java.util.Date; import java.util.List; /** @@ -51,6 +57,8 @@ public class UserVipController { private TransactionDetailsService transactionDetailsService; @Autowired private JfTransactionDetailsDao jfTransactionDetailsDao; + @Autowired + private UserVipDao userVipDao; @RequestMapping("/getMyVipHistory") public R getMyVipHistory(String userId) { @@ -62,8 +70,8 @@ public class UserVipController { return R.ok().put("result", userVips); } - - public R placeVipOrder(@RequestBody BuyOrder buyOrder){ + @Transactional + public R placeVipOrder(@RequestBody BuyOrder buyOrder) throws Exception { int uid = ShiroUtils.getUId(); buyOrder.setOrderStatus("0"); @@ -92,7 +100,7 @@ public class UserVipController { } openVipForUser(buyOrder); } else { - return R.error(500, "花生币余额不足!"); + return R.error(500, "余额不足!"); } } //下单微信支付预付款订单 @@ -126,12 +134,93 @@ public class UserVipController { return false; } - private void openVipForUser(BuyOrder buyOrder){ + private void openVipForUser(BuyOrder buyOrder) throws Exception { 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 userVips = userVipDao.selectList(new LambdaQueryWrapper().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 userVips = userVipDao.selectList(new LambdaQueryWrapper().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 userVips = userVipDao.selectList(new LambdaQueryWrapper().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){ JfTransactionDetails jfTransactionDetails = new JfTransactionDetails(); jfTransactionDetails.setUserId(user.getId()); diff --git a/src/main/java/com/peanut/modules/sociology/service/impl/VipServiceImpl.java b/src/main/java/com/peanut/modules/sociology/service/impl/VipServiceImpl.java index d44035f4..3d921fb9 100644 --- a/src/main/java/com/peanut/modules/sociology/service/impl/VipServiceImpl.java +++ b/src/main/java/com/peanut/modules/sociology/service/impl/VipServiceImpl.java @@ -40,8 +40,8 @@ public class VipServiceImpl extends ServiceImpl().eq(UserVip::getUserId, uid).eq(UserVip::getType, 1).lt(UserVip::getEndTime,new Date()).eq(UserVip::getState,0)); - Integer sociologyCount = userVipDao.selectCount(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).lt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); + Integer chaoCount = userVipDao.selectCount(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 1).gt(UserVip::getEndTime,new Date()).eq(UserVip::getState,0)); + Integer sociologyCount = userVipDao.selectCount(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); //获取超v列表 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(VipBuyConfigEntity::getType,userEntity.getVip().equals("1")||userEntity.getVip().equals("2")? Collections.singletonList(1):Arrays.asList(1,3));