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 1474c769..e0e6c27c 100644 --- a/src/main/java/com/peanut/modules/common/controller/UserVipController.java +++ b/src/main/java/com/peanut/modules/common/controller/UserVipController.java @@ -54,11 +54,11 @@ public class UserVipController { @Autowired private VipBuyConfigDao vipBuyConfigDao; @Autowired + private UserVipDao userVipDao; + @Autowired private TransactionDetailsService transactionDetailsService; @Autowired private JfTransactionDetailsDao jfTransactionDetailsDao; - @Autowired - private UserVipDao userVipDao; @RequestMapping("/getMyVipHistory") public R getMyVipHistory(String userId) { @@ -70,6 +70,7 @@ public class UserVipController { return R.ok().put("result", userVips); } + @RequestMapping("/placeVipOrder") @Transactional public R placeVipOrder(@RequestBody BuyOrder buyOrder) throws Exception { int uid = ShiroUtils.getUId(); diff --git a/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java b/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java index 5f671987..1e97f850 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java +++ b/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java @@ -25,6 +25,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.Period; import java.util.*; import java.util.stream.Collectors; @@ -61,6 +63,12 @@ public class AliPayServiceImpl implements AliPayService { private UserCourseBuyDao userCourseBuyDao; @Autowired private JfTransactionDetailsDao jfTransactionDetailsDao; + @Autowired + private MyUserDao myUserDao; + @Autowired + private VipBuyConfigDao vipBuyConfigDao; + @Autowired + private UserVipDao userVipDao; @Override public String pay(AlipayDTO payDto) { @@ -147,16 +155,29 @@ public class AliPayServiceImpl implements AliPayService { String customerid = oldPayZfbOrderEntity.getCustomerid(); if ("vip".equals(subject)) { - //获取会员开通 日期 - - BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigService.getById(Integer.valueOf(body)); - String month = bookBuyConfigEntity.getMonth(); - userService.openMember(Integer.valueOf(customerid),Integer.valueOf(month)); - - // 插入 开通记录 + BuyOrder orderEntity = buyOrderService.getBaseMapper().selectOne(new QueryWrapper().eq("order_sn", oldPayZfbOrderEntity.getRelevanceoid())); + //更新 订单 记录 buyOrderService.updateOrderStatus(Integer.valueOf(customerid),oldPayZfbOrderEntity.getRelevanceoid(),"2"); + //处理抵扣积分 + if(orderEntity.getJfDeduction().compareTo(BigDecimal.ZERO)>0){ + userCoinJf(orderEntity); + } + + //开通vip + openVipForUser(orderEntity); + + //获取会员开通 日期 + +// BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigService.getById(Integer.valueOf(body)); +// String month = bookBuyConfigEntity.getMonth(); +// userService.openMember(Integer.valueOf(customerid),Integer.valueOf(month)); +// +// // 插入 开通记录 +// +// buyOrderService.updateOrderStatus(Integer.valueOf(customerid),oldPayZfbOrderEntity.getRelevanceoid(),"2"); + } @@ -300,6 +321,93 @@ public class AliPayServiceImpl implements AliPayService { } } + 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异常"); + } + @Override @Transactional public String refund(Map params) { diff --git a/src/main/java/com/peanut/modules/pay/weChatPay/controller/WeChatPayController.java b/src/main/java/com/peanut/modules/pay/weChatPay/controller/WeChatPayController.java index bafa17ff..81efdf94 100644 --- a/src/main/java/com/peanut/modules/pay/weChatPay/controller/WeChatPayController.java +++ b/src/main/java/com/peanut/modules/pay/weChatPay/controller/WeChatPayController.java @@ -98,7 +98,7 @@ public class WeChatPayController { */ @PostMapping("/payNotify") @Transactional - public void payNotify(HttpServletRequest request, HttpServletResponse response){ + public void payNotify(HttpServletRequest request, HttpServletResponse response) throws Exception { wxpayService.payNotify(request); } diff --git a/src/main/java/com/peanut/modules/pay/weChatPay/service/WxpayService.java b/src/main/java/com/peanut/modules/pay/weChatPay/service/WxpayService.java index 77d454af..fb295502 100644 --- a/src/main/java/com/peanut/modules/pay/weChatPay/service/WxpayService.java +++ b/src/main/java/com/peanut/modules/pay/weChatPay/service/WxpayService.java @@ -13,7 +13,7 @@ public interface WxpayService extends IService { void prepay(WechatPaymentInfo wechatDto); - void payNotify(HttpServletRequest request); + void payNotify(HttpServletRequest request) throws Exception; String refund(Map map); diff --git a/src/main/java/com/peanut/modules/pay/weChatPay/service/impl/WxpayServiceImpl.java b/src/main/java/com/peanut/modules/pay/weChatPay/service/impl/WxpayServiceImpl.java index d77e4f28..5acdfec2 100644 --- a/src/main/java/com/peanut/modules/pay/weChatPay/service/impl/WxpayServiceImpl.java +++ b/src/main/java/com/peanut/modules/pay/weChatPay/service/impl/WxpayServiceImpl.java @@ -7,11 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.peanut.modules.common.dao.BuyOrderProductDao; -import com.peanut.modules.common.dao.JfTransactionDetailsDao; -import com.peanut.modules.common.dao.PayWechatOrderDao; +import com.peanut.modules.common.dao.*; import com.peanut.modules.book.service.*; -import com.peanut.modules.common.dao.UserCourseBuyDao; import com.peanut.modules.common.entity.*; import com.peanut.modules.pay.refund.entity.PayRefundOrder; import com.peanut.modules.pay.refund.service.PayRefundOrderService; @@ -28,6 +25,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.Period; import java.util.*; import java.util.stream.Collectors; @@ -72,6 +71,12 @@ public class WxpayServiceImpl extends ServiceImpl bodyMap = getNotifyBody(request); @@ -130,6 +136,23 @@ public class WxpayServiceImpl extends ServiceImpl().eq("order_sn", orderNo)); + + if("vip".equals(order.getOrderType())){ + + BuyOrder orderEntity = buyOrderService.getBaseMapper().selectOne(new QueryWrapper().eq("order_sn", orderNo)); + //更新 订单 记录 + + buyOrderService.updateOrderStatus(orderEntity.getUserId(),orderNo,"2"); + + //处理抵扣积分 + if(orderEntity.getJfDeduction().compareTo(BigDecimal.ZERO)>0){ + userCoinJf(orderEntity); + } + + //开通vip + openVipForUser(orderEntity); + } + // 1.根据订单id获取订单信息 if ("order".equals(order.getOrderType())) { BuyOrder orderEntity = buyOrderService.getBaseMapper().selectOne(new QueryWrapper().eq("order_sn", orderNo)); @@ -259,6 +282,93 @@ public class WxpayServiceImpl extends ServiceImpl 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异常"); + } + @Override public String refund(Map map){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); 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 3d921fb9..1bae1834 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 @@ -49,11 +49,11 @@ public class VipServiceImpl extends ServiceImpl vipBuyConfigEntities = this.getBaseMapper().selectList(wrapper); for (VipBuyConfigEntity v:vipBuyConfigEntities){ if(v.getType()==1){ - if(!Objects.equals(userEntity.getVip(), "1") &&chaoCount==0){ - v.setLastFee(v.getFee()); + if(userEntity.getVip().equals("0")){ + v.setLastFee(chaoCount==0?v.getFee():v.getRebateFee()); } else { if(userEntity.getVip().equals("2")){//医学转超v计算价格 - List userVips = userVipDao.selectList(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 2).lt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); + List userVips = userVipDao.selectList(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 2).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); if(userVips.size()!=1){ return R.error("用户vip信息异常,请联系管理员"); } @@ -66,7 +66,7 @@ public class VipServiceImpl extends ServiceImpl0?v.getRebateFee().subtract(chaFee):v.getFee().subtract(chaFee)); } else if (userEntity.getVip().equals("3")) {//国学vip转超v计算价格 - List userVips = userVipDao.selectList(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).lt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); + List userVips = userVipDao.selectList(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); if(userVips.size()!=1){ return R.error("用户vip信息异常,请联系管理员"); }