From cce2106e042c46405295cb2798ac09e292c84714 Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Fri, 25 Oct 2024 10:43:11 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=8D=B7=20=E5=A4=8D?= =?UTF-8?q?=E8=AF=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/controller/BuyOrderController.java | 64 ++++- .../service/impl/BuyOrderServiceImpl.java | 1 + .../common/controller/CouponController.java | 83 ++++++- .../controller/CourseRelearnController.java | 222 ++++++++++++++++++ .../common/dao/CouponToProductDao.java | 9 + .../modules/common/entity/CouponHistory.java | 4 + .../common/entity/CouponToProduct.java | 29 +++ .../modules/common/service/CouponService.java | 12 +- .../service/CouponToProductService.java | 7 + .../service/impl/CouponServiceImpl.java | 142 +++++++---- .../impl/CouponToProductServiceImpl.java | 13 + .../master/service/UserCourseBuyService.java | 4 + .../impl/UserCourseBuyServiceImpl.java | 26 ++ .../service/impl/CourseServiceImpl.java | 19 +- .../mq/Consumer/OrderCancelConsumer.java | 10 +- .../service/impl/AliPayServiceImpl.java | 31 ++- .../service/impl/WxpayServiceImpl.java | 26 +- 17 files changed, 602 insertions(+), 100 deletions(-) create mode 100644 src/main/java/com/peanut/modules/common/controller/CourseRelearnController.java create mode 100644 src/main/java/com/peanut/modules/common/dao/CouponToProductDao.java create mode 100644 src/main/java/com/peanut/modules/common/entity/CouponToProduct.java create mode 100644 src/main/java/com/peanut/modules/common/service/CouponToProductService.java create mode 100644 src/main/java/com/peanut/modules/common/service/impl/CouponToProductServiceImpl.java diff --git a/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java b/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java index 8f3f33f9..1e73d7c7 100644 --- a/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java +++ b/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java @@ -20,6 +20,8 @@ import com.peanut.modules.book.vo.response.OrderAddressResponseVo; import com.peanut.modules.common.dao.JfTransactionDetailsDao; import com.peanut.modules.common.dao.UserCourseBuyDao; import com.peanut.modules.common.entity.*; +import com.peanut.modules.common.service.CouponHistoryService; +import com.peanut.modules.common.service.CouponService; import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo; import com.peanut.modules.pay.weChatPay.service.WxpayService; import com.peanut.modules.sys.entity.SysConfigEntity; @@ -30,7 +32,6 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; - import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; @@ -89,6 +90,10 @@ public class BuyOrderController { private UserCourseBuyDao userCourseBuyDao; @Autowired private JfTransactionDetailsDao jfTransactionDetailsDao; + @Autowired + private CouponService couponService; + @Autowired + private CouponHistoryService couponHistoryService; @RequestMapping(value = "/decomposeShipment", method = RequestMethod.POST) public R decomposeShipment(@RequestBody BuyOrderListRequestVo requestVo) { @@ -195,7 +200,10 @@ public class BuyOrderController { */ @RequestMapping(value = "/placeOrder", method = RequestMethod.POST) @Transactional - public R placeOrder(@RequestBody BuyOrder buyOrder) throws IOException { + public R placeOrder(@RequestBody BuyOrder buyOrder) { + String orderSn = IdWorker.getTimeId().substring(0, 32); + buyOrder.setOrderSn(orderSn); + buyOrderService.save(buyOrder); List buyOrderProductList = buyOrder.getProductList(); // 订单实收金额 BigDecimal totalPrice = new BigDecimal(0); @@ -237,7 +245,27 @@ public class BuyOrderController { totalPrice = totalPrice.add(price.multiply(BigDecimal.valueOf(quantity))); } //商品价格减去优惠券的优惠金额 -// totalPrice = totalPrice.subtract(0); + if (buyOrder!=null&&buyOrder.getCouponId()!=null&&buyOrder.getCouponId()!=0){ + CouponHistory couponHistory = couponHistoryService.getById(buyOrder.getCouponId()); + if (couponHistory!=null){ + if (couponHistory.getEffectType()!=0){ + if (couponHistory.getStartTime().getTime()new Date().getTime()){ + }else { + return R.error("优惠券使用时间未到"); + } + } + CouponEntity coupon = couponService.getById(couponHistory.getCouponId()); + if (coupon != null){ + if (new BigDecimal(coupon.getUseLevel()).compareTo(totalPrice)>0){ + return R.error("未达到优惠券使用门槛"); + } + couponHistory.setOrderId(buyOrder.getOrderId()); + couponService.useCouponAmount(couponHistory); + totalPrice = totalPrice.subtract(coupon.getCouponAmount()); + } + } + } //加上运费金额 totalPrice = totalPrice.add(getShoppingAmount(buyOrder)); @@ -251,8 +279,6 @@ public class BuyOrderController { return R.error("系统错误订单金额异常!"); } - String orderSn = IdWorker.getTimeId().substring(0, 32); - buyOrder.setOrderSn(orderSn); if(buyOrder.getAddressId()!=0){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("id", buyOrder.getAddressId()); @@ -269,7 +295,7 @@ public class BuyOrderController { } } buyOrder.setOrderStatus("0"); - buyOrderService.save(buyOrder); + buyOrderService.updateById(buyOrder); //解决购物车相关问题 for (BuyOrderProduct buyOrderProduct : buyOrderProductList) { @@ -301,6 +327,11 @@ public class BuyOrderController { //消费用户积分并记录用户积分消费记录 addEbookToUser(buyOrderProductList, buyOrder, 0); addCourseToUser(buyOrder); + //发放优惠卷 + List collect = buyOrderProductService.list(new LambdaQueryWrapper() + .eq(BuyOrderProduct::getOrderId, buyOrder.getOrderId())) + .stream().map(BuyOrderProduct::getProductId).collect(Collectors.toList()); + couponService.insertCouponHistoryByProductId(collect); } else { return R.error(500, "天医币余额不足!"); } @@ -459,10 +490,15 @@ public class BuyOrderController { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("order_sn", orderSn); BuyOrder buyOrder = buyOrderService.getOne(queryWrapper); - if (buyOrder == null) { return R.error("订单不存在"); } + //回滚优惠卷 + if (buyOrder.getCouponId()!=null&&buyOrder.getCouponId()!=0){ + couponService.rollbackCoupon(buyOrder.getCouponId()); + buyOrder.setCouponId(null); + buyOrderService.updateById(buyOrder); + } // 库存回滚 QueryWrapper buyOrderProductQueryWrapper = new QueryWrapper<>(); buyOrderProductQueryWrapper.eq("order_id", buyOrder.getOrderId()); @@ -500,18 +536,22 @@ public class BuyOrderController { /** * app 端 取消订单 - * TODO 新版本上线后此方法删除 */ @RequestMapping("/appDelete") @Transactional public R appDelete(@RequestParam("orderId") Integer orderId) { - //1. 判断订单状态 - BuyOrder byId = buyOrderService.getById(orderId); - if (byId != null) { + BuyOrder buyOrder = buyOrderService.getById(orderId); + if (buyOrder != null) { + //回滚优惠卷 + if (buyOrder.getCouponId()!=null&&buyOrder.getCouponId()!=0){ + couponService.rollbackCoupon(buyOrder.getCouponId()); + buyOrder.setCouponId(null); + buyOrderService.updateById(buyOrder); + } // 库存回滚 List buyOrderDetailEntities = buyOrderDetailService.getBaseMapper().selectList(new QueryWrapper() - .eq("order_id", byId.getOrderId())); + .eq("order_id", buyOrder.getOrderId())); for (BuyOrderDetail buyOrderDetailEntity : buyOrderDetailEntities) { Integer productId = buyOrderDetailEntity.getProductId(); ShopProduct product = shopProductService.getById(productId); diff --git a/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java b/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java index 0df518b0..e0d27a2d 100644 --- a/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java +++ b/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java @@ -195,6 +195,7 @@ public class BuyOrderServiceImpl extends ServiceImpl impl } else if (type.equals("1")) { orderEntity.setOrderStatus("2"); } else if (type.equals("2")) { + orderEntity.setPaymentDate(new Date()); orderEntity.setOrderStatus("3"); } updateById(orderEntity); diff --git a/src/main/java/com/peanut/modules/common/controller/CouponController.java b/src/main/java/com/peanut/modules/common/controller/CouponController.java index 3fc3d9a7..3ee1b39e 100644 --- a/src/main/java/com/peanut/modules/common/controller/CouponController.java +++ b/src/main/java/com/peanut/modules/common/controller/CouponController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.peanut.common.utils.R; -import com.peanut.modules.book.service.BuyOrderProductService; +import com.peanut.modules.book.service.ShopProductService; import com.peanut.modules.common.entity.*; -import com.peanut.modules.common.service.BuyOrderService; import com.peanut.modules.common.service.CouponHistoryService; import com.peanut.modules.common.service.CouponService; +import com.peanut.modules.common.service.CouponToProductService; +import com.peanut.modules.master.service.CourseService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - import java.util.List; import java.util.Map; import java.util.Set; @@ -29,6 +29,12 @@ public class CouponController { private CouponService couponService; @Autowired private CouponHistoryService couponHistoryService; + @Autowired + private CourseService courseService; + @Autowired + private CouponToProductService couponToProductService; + @Autowired + private ShopProductService shopProductService; //优惠卷列表 @RequestMapping("/getCouponList") @@ -104,17 +110,26 @@ public class CouponController { return R.ok().put("couponEntity",couponEntity); } + //修改优惠劵状态 + @RequestMapping("/updateCouponState") + public R updateCouponState(@RequestBody Map params){ + CouponEntity coupon = couponService.getById(params.get("id").toString()); + coupon.setCurrentState((int)params.get("currentState")); + couponService.updateById(coupon); + return R.ok(); + } + //修改优惠劵 @RequestMapping("/updateCoupon") public R updateCoupon(@RequestBody CouponEntity couponEntity){ int count = couponHistoryService.count(new LambdaQueryWrapper() .eq(CouponHistory::getCouponId,couponEntity.getId())); if (count>0){ - return R.error("已有用户拥有优惠卷"); + return R.error("已有用户拥有优惠券"); } CouponEntity c = couponService.getById(couponEntity.getId()); if (c.getCurrentState()==0){ - return R.error("优惠卷发放中,请先结束再修改"); + return R.error("优惠券发放中,请先结束再修改"); } couponService.updateById(couponEntity); return R.ok(); @@ -127,11 +142,11 @@ public class CouponController { int count = couponHistoryService.count(new LambdaQueryWrapper() .eq(CouponHistory::getCouponId,couponId)); if (count>0){ - return R.error("已有用户拥有优惠卷"); + return R.error("已有用户拥有优惠券"); } CouponEntity c = couponService.getById(couponId); if (c.getCurrentState()==0){ - return R.error("优惠卷发放中,请先结束再删除"); + return R.error("优惠券发放中,请先结束再删除"); } couponService.removeById(couponId); return R.ok(); @@ -161,11 +176,17 @@ public class CouponController { return R.ok(); } - //当前优惠卷可用商品 - @RequestMapping("/getShopProductByCoupon") - public R getShopProductByCoupon(@RequestBody Map params){ - Set l = couponService.getShopProductByCoupon(Integer.parseInt(params.get("couponId").toString())); - return R.ok().put("productIds",l); + //优惠卷可绑定课程 + @RequestMapping("/getCourseList") + public R getCourseList(@RequestBody Map params){ + Integer limit = Integer.valueOf(params.get("limit").toString()); + Integer page = Integer.valueOf(params.get("page").toString()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.select(CourseEntity::getId,CourseEntity::getTitle); + wrapper.like(CourseEntity::getTitle,params.get("title")); + wrapper.orderByDesc(CourseEntity::getId); + Page courses = courseService.page(new Page<>(page, limit), wrapper); + return R.ok().put("courses",courses); } //付款时优惠卷列表 @@ -175,4 +196,42 @@ public class CouponController { return R.ok().put("couponHistoryList",couponHistoryList); } + //购买商品绑定优惠卷列表 + @RequestMapping("/couponToProductList") + public R couponToShopproductList(@RequestBody Map params){ + Integer limit = Integer.valueOf(params.get("limit").toString()); + Integer page = Integer.valueOf(params.get("page").toString()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(CouponToProduct::getProductId,params.get("productId")); + wrapper.orderByDesc(CouponToProduct::getId); + Page couponToShopproductPage = couponToProductService.page(new Page<>(page, limit), wrapper); + for (CouponToProduct couponToProduct : couponToShopproductPage.getRecords()) { + couponToProduct.setCouponEntity(couponService.getById(couponToProduct.getCouponId())); + couponToProduct.setShopProduct(shopProductService.getById(couponToProduct.getShopProduct())); + } + return R.ok().put("couponToShopproductPage",couponToShopproductPage); + } + + //商品绑定优惠卷 + @RequestMapping("/setCouponToProduct") + public R setCouponToProduct(@RequestBody CouponToProduct couponToProduct){ + CouponToProduct c = couponToProductService.getOne(new LambdaQueryWrapper() + .eq(CouponToProduct::getCouponId, couponToProduct.getCouponId()) + .eq(CouponToProduct::getProductId, couponToProduct.getProductId())); + if (c == null){ + couponToProductService.save(couponToProduct); + return R.ok(); + }else { + return R.error("已存在"); + } + } + + //解绑商品优惠卷 + @RequestMapping("/unbindCouponToProduct") + public R unbindCouponToProduct(@RequestBody Map params){ + couponToProductService.removeById(params.get("id").toString()); + return R.ok(); + } + + } diff --git a/src/main/java/com/peanut/modules/common/controller/CourseRelearnController.java b/src/main/java/com/peanut/modules/common/controller/CourseRelearnController.java new file mode 100644 index 00000000..bb0c84b1 --- /dev/null +++ b/src/main/java/com/peanut/modules/common/controller/CourseRelearnController.java @@ -0,0 +1,222 @@ +package com.peanut.modules.common.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.peanut.common.utils.R; +import com.peanut.common.utils.ShiroUtils; +import com.peanut.config.Constants; +import com.peanut.config.DelayQueueConfig; +import com.peanut.modules.book.service.TransactionDetailsService; +import com.peanut.modules.common.entity.*; +import com.peanut.modules.common.service.BuyOrderService; +import com.peanut.modules.common.service.MyUserService; +import com.peanut.modules.master.service.ShopProductService; +import com.peanut.modules.master.service.UserCourseBuyService; +import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo; +import com.peanut.modules.pay.weChatPay.service.WxpayService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.amqp.core.MessagePostProcessor; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Slf4j +@RestController("commonCourseRelearn") +@RequestMapping("common/courseRelearn") +public class CourseRelearnController { + + @Autowired + private UserCourseBuyService userCourseBuyService; + @Autowired + private ShopProductService shopProductService; + @Autowired + private BuyOrderService buyOrderService; + @Autowired + private MyUserService userService; + @Autowired + private WxpayService wxpayService; + @Autowired + private TransactionDetailsService transactionDetailsService; + @Autowired + private RabbitTemplate rabbitTemplate; + + //复读订单列表 + @RequestMapping("/orderListRelearn") + public R orderListRelearn(@RequestBody Map params) { + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(BuyOrder.class); + wrapper.leftJoin(MyUserEntity.class, MyUserEntity::getId,BuyOrder::getUserId); + wrapper.eq(BuyOrder::getOrderType,"relearn"); + if (StringUtils.isNotEmpty(params.get("orderSn").toString())) { + wrapper.eq(BuyOrder::getOrderSn,params.get("orderSn")); + } + if (StringUtils.isNotEmpty(params.get("userInfo").toString())) { + wrapper.and(t->t.like(MyUserEntity::getName,params.get("userInfo")).or().like(MyUserEntity::getNickname,params.get("userInfo")) + .or().like(MyUserEntity::getTel,params.get("userInfo")).or().like(MyUserEntity::getEmail,params.get("userInfo"))); + } + wrapper.orderByDesc(BuyOrder::getOrderId); + Page buyOrderPage = buyOrderService.page(new Page( + Long.parseLong(params.get("page").toString()), Long.parseLong(params.get("limit").toString())), wrapper); + for (BuyOrder buyOrder : buyOrderPage.getRecords()){ + buyOrder.setUser(userService.getById(buyOrder.getUserId())); + } + return R.ok().put("buyOrderPage",buyOrderPage); + } + + //课程目录是否可复读(已购买并过期) + @RequestMapping("/courseCatalogueCanRelearn") + public R courseCatalogueCanRelearn(@RequestBody Map params){ + boolean flag = false; + List list = userCourseBuyService.list(new MPJLambdaWrapper() + .disableLogicDel()//查询出已删除数据 + .eq(UserCourseBuyEntity::getUserId, ShiroUtils.getUId()) + .eq(UserCourseBuyEntity::getCatalogueId,params.get("courseCatalogueId"))); + if (list.size() > 0) { + flag = true; + for (UserCourseBuyEntity userCourseBuyEntity : list) { + if (userCourseBuyEntity.getDelFlag()==0) { + flag = false; + } + } + } + return R.ok().put("canRelearn",flag); + } + + //课程目录复读列表 + @RequestMapping("/relearnShopProductList") + public R relearnShopProductList(@RequestBody Map params) { + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.leftJoin(ShopProductCourseEntity.class,ShopProductCourseEntity::getProductId,ShopProduct::getProductId); + wrapper.selectAll(ShopProduct.class); + wrapper.eq(ShopProductCourseEntity::getCatalogueId,params.get("catalogueId")); + wrapper.eq(ShopProductCourseEntity::getDays,365); + ShopProduct shopProduct = shopProductService.getOne(wrapper); + if (shopProduct == null) { + return R.error("未找到一年期商品"); + }else { + ShopProduct sp1 = new ShopProduct(); + sp1.setProductId(shopProduct.getProductId()); + sp1.setProductName(shopProduct.getProductName().replace("一年","一月")); + sp1.setProductImages(shopProduct.getProductImages()); + BigDecimal sp1Price = shopProduct.getPrice().divide(new BigDecimal(12),0, RoundingMode.DOWN); + sp1.setPrice(sp1Price); + + ShopProduct sp2 = new ShopProduct(); + sp2.setProductId(shopProduct.getProductId()); + sp2.setProductName(shopProduct.getProductName().replace("一年","三月")); + sp2.setProductImages(shopProduct.getProductImages()); + BigDecimal sp2Price = shopProduct.getPrice().divide(new BigDecimal(4),0, RoundingMode.DOWN); + sp2Price = sp2Price.multiply(new BigDecimal(0.6)); + sp2Price = sp2Price.setScale(0, RoundingMode.DOWN); + sp2.setPrice(sp2Price); + + List res = new ArrayList<>(); + res.add(sp1); + res.add(sp2); + return R.ok().put("productList",res); + } + } + + @RequestMapping("/relearnSave") + @Transactional + public R relearnSave(@RequestBody BuyOrder buyOrder){ + int uid = ShiroUtils.getUId(); + buyOrder.setOrderStatus("0"); + buyOrder.setOrderType("relearn"); + String timeId = IdWorker.getTimeId().substring(0, 32); + buyOrder.setOrderSn(timeId); + buyOrder.setUserId(uid); + buyOrderService.save(buyOrder); + BigDecimal totalPrice = buyOrder.getRealMoney(); + //虚拟币支付 + if (Constants.PAYMENT_METHOD_VIRTUAL.equals(buyOrder.getPaymentMethod())) { + buyOrder.setOrderStatus(Constants.ORDER_STATUS_TO_BE_SHIPPED); + MyUserEntity user = userService.getById(buyOrder.getUserId()); + if (usePeanutCoin(user, totalPrice)) { + buyOrder.setSuccessTime(new Date()); + // 更新订单状态 + buyOrderService.updateOrderStatus(user.getId(), buyOrder.getOrderSn(), "2"); + //记录用户虚拟币消费 + if(totalPrice.compareTo(BigDecimal.ZERO)>0){ + recordTransaction(buyOrder, user, totalPrice); + } + //插入复读记录 + userCourseBuyService.addUserCourseBuyRelearn(buyOrder,"虚拟币购买:"+buyOrder.getOrderSn()); + } else { + return R.error(500, "余额不足!"); + } + } + //微信支付预付款订单 + if(Constants.PAYMENT_METHOD_WECHAT_PAY.equals(buyOrder.getPaymentMethod())){ + BuyOrder buyOrderEntity = buyOrderService.getBaseMapper().selectOne(new LambdaQueryWrapper() + .eq(BuyOrder::getOrderSn, timeId)); + WechatPaymentInfo paymentInfo = new WechatPaymentInfo(); + paymentInfo.setOrderSn(buyOrderEntity.getOrderSn()); + paymentInfo.setBuyOrderId(buyOrder.getOrderId()); + paymentInfo.setTotalAmount(buyOrderEntity.getRealMoney()); + if (buyOrder.getCome()==2){ + paymentInfo.setAppName("wumen"); + } else if (buyOrder.getCome()==1) { + paymentInfo.setAppName("zmzm"); + }else { + paymentInfo.setAppName(buyOrder.getAppName()); + } + wxpayService.prepay(paymentInfo); + } + rabbitTemplate.convertAndSend( + DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE, + DelayQueueConfig.ORDER_TO_BE_PAY_ROUTING_KEY, + buyOrder.getOrderId(), + messagePostProcessor() + ); + return R.ok().put("orderSn", timeId).put("money", totalPrice); + } + + private boolean usePeanutCoin(MyUserEntity user, BigDecimal totalPrice) { + if (user.getPeanutCoin().compareTo(totalPrice) >= 0) { + if(totalPrice.compareTo(BigDecimal.ZERO)==0){//纯积分支付,虚拟币不用支付 + return true; + } + user.setPeanutCoin(user.getPeanutCoin().subtract(totalPrice)); + userService.updateById(user); + return true; + } + return false; + } + + private void recordTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal totalPrice) { + TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity(); + transactionDetailsEntity.setRemark("订单编号为 - " + buyOrder.getOrderSn()); + transactionDetailsEntity.setUserId(user.getId()); + transactionDetailsEntity.setUserName(user.getNickname()); + transactionDetailsEntity.setChangeAmount(totalPrice.negate()); + transactionDetailsEntity.setUserBalance(user.getPeanutCoin()); + transactionDetailsEntity.setTel(user.getTel()); + transactionDetailsEntity.setOrderType("购买商品"); + transactionDetailsService.save(transactionDetailsEntity); + } + + private MessagePostProcessor messagePostProcessor() { + return message -> { + //设置有效期30分钟 + message.getMessageProperties().setExpiration(String.valueOf(30 * 60 * 1000)); + return message; + }; + } + + +} diff --git a/src/main/java/com/peanut/modules/common/dao/CouponToProductDao.java b/src/main/java/com/peanut/modules/common/dao/CouponToProductDao.java new file mode 100644 index 00000000..a0c6330f --- /dev/null +++ b/src/main/java/com/peanut/modules/common/dao/CouponToProductDao.java @@ -0,0 +1,9 @@ +package com.peanut.modules.common.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.peanut.modules.common.entity.CouponToProduct; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CouponToProductDao extends BaseMapper { +} diff --git a/src/main/java/com/peanut/modules/common/entity/CouponHistory.java b/src/main/java/com/peanut/modules/common/entity/CouponHistory.java index ab667abd..6d8a9655 100644 --- a/src/main/java/com/peanut/modules/common/entity/CouponHistory.java +++ b/src/main/java/com/peanut/modules/common/entity/CouponHistory.java @@ -49,6 +49,10 @@ public class CouponHistory { @TableLogic private Integer delFlag; + @TableField(exist = false) + private int canUse; + @TableField(exist = false) + private String canUseReason; @TableField(exist = false) private CouponEntity couponEntity; @TableField(exist = false) diff --git a/src/main/java/com/peanut/modules/common/entity/CouponToProduct.java b/src/main/java/com/peanut/modules/common/entity/CouponToProduct.java new file mode 100644 index 00000000..cea199a3 --- /dev/null +++ b/src/main/java/com/peanut/modules/common/entity/CouponToProduct.java @@ -0,0 +1,29 @@ +package com.peanut.modules.common.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +@Data +@TableName("coupon_to_product") +public class CouponToProduct { + + @TableId + private Integer id; + + private Integer couponId; + + private Integer productId; + + @TableLogic + private Integer delFlag; + + @TableField(exist = false) + private CouponEntity couponEntity; + @TableField(exist = false) + private ShopProduct shopProduct; + + +} diff --git a/src/main/java/com/peanut/modules/common/service/CouponService.java b/src/main/java/com/peanut/modules/common/service/CouponService.java index bbf8c1dc..be71790d 100644 --- a/src/main/java/com/peanut/modules/common/service/CouponService.java +++ b/src/main/java/com/peanut/modules/common/service/CouponService.java @@ -4,12 +4,13 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.peanut.common.utils.R; import com.peanut.modules.common.entity.CouponEntity; import com.peanut.modules.common.entity.CouponHistory; - +import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.Set; + public interface CouponService extends IService { CouponEntity getByIdSetRange(int id); @@ -20,6 +21,13 @@ public interface CouponService extends IService { List getCouponListPayment(Map params); - Set getShopProductByCoupon(int couponId); + //使用优惠卷 + void useCouponAmount(CouponHistory couponHistory); + + //回滚优惠卷 + void rollbackCoupon(int couponHistoryId); + + //通过商品发放优惠卷 + void insertCouponHistoryByProductId(List productIds); } diff --git a/src/main/java/com/peanut/modules/common/service/CouponToProductService.java b/src/main/java/com/peanut/modules/common/service/CouponToProductService.java new file mode 100644 index 00000000..27a4e3dd --- /dev/null +++ b/src/main/java/com/peanut/modules/common/service/CouponToProductService.java @@ -0,0 +1,7 @@ +package com.peanut.modules.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.peanut.modules.common.entity.CouponToProduct; + +public interface CouponToProductService extends IService { +} diff --git a/src/main/java/com/peanut/modules/common/service/impl/CouponServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/CouponServiceImpl.java index 0ec651dd..aafa2bbc 100644 --- a/src/main/java/com/peanut/modules/common/service/impl/CouponServiceImpl.java +++ b/src/main/java/com/peanut/modules/common/service/impl/CouponServiceImpl.java @@ -3,7 +3,6 @@ package com.peanut.modules.common.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.peanut.common.utils.DateUtil; import com.peanut.common.utils.DateUtils; import com.peanut.common.utils.R; import com.peanut.common.utils.ShiroUtils; @@ -11,14 +10,13 @@ import com.peanut.config.DelayQueueConfig; import com.peanut.modules.common.dao.*; import com.peanut.modules.common.entity.*; import com.peanut.modules.common.service.CouponService; -import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.amqp.core.MessagePostProcessor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - +import java.math.BigDecimal; import java.util.*; @Slf4j @@ -36,9 +34,11 @@ public class CouponServiceImpl extends ServiceImpl impl @Autowired private RabbitTemplate rabbitTemplate; @Autowired - private ShopProductDao shopProductDao; - @Autowired private ShopProductCourseDao shopProductCourseDao; + @Autowired + private CouponToProductDao couponToProductDao; + @Autowired + private ShopProductDao shopProductDao; @Override public CouponEntity getByIdSetRange(int id) { @@ -95,19 +95,21 @@ public class CouponServiceImpl extends ServiceImpl impl couponHistory.setEndTime(couponEntity.getExpireTime()); } couponHistoryDao.insert(couponHistory); - //发放完优惠卷设置过期 - rabbitTemplate.convertAndSend( - DelayQueueConfig.COMMON_EXCHANGE, - DelayQueueConfig.COMMON_ROUTING_KEY, - "couponExpire"+","+couponHistory.getId(), - messagePostProcessor(couponHistory.getEndTime().getTime()-new Date().getTime()) - ); + if (couponEntity.getEffectType()!=0){ + //发放完优惠卷设置过期 + rabbitTemplate.convertAndSend( + DelayQueueConfig.COMMON_EXCHANGE, + DelayQueueConfig.COMMON_ROUTING_KEY, + "couponExpire"+","+couponHistory.getId(), + messagePostProcessor(couponHistory.getEndTime().getTime()-new Date().getTime()) + ); + } return R.ok(); }else { return R.error("每人限领"+couponEntity.getLimitedCollar()+"张"); } }else { - return R.error("优惠卷已放完"); + return R.error("优惠券已放完"); } } private MessagePostProcessor messagePostProcessor(long date) { @@ -125,16 +127,33 @@ public class CouponServiceImpl extends ServiceImpl impl .eq(CouponHistory::getStatus,0)); if (couponHistoryList.size() > 0) { for (CouponHistory couponHistory : couponHistoryList) { - if (couponHistory.getEffectType()==0){ - res.add(couponHistory); - }else { - List shopProductList = shopProductDao.selectList(new MPJLambdaWrapper() - .leftJoin(BuyOrderProduct.class,BuyOrderProduct::getProductId,ShopProduct::getProductId) - .eq(BuyOrderProduct::getOrderId,params.get("orderId").toString())); - for (ShopProduct shopProduct : shopProductList) { - Set set = getShopProductByCoupon(couponHistory.getCouponId()); - if(!set.add(shopProduct.getProductId())){ - res.add(couponHistory); + CouponEntity couponEntity = this.baseMapper.selectById(couponHistory.getCouponId()); + if (couponEntity != null) { + //校验优惠卷使用时间 + couponHistory.setCanUse(1); + couponHistory.setCanUseReason(""); + if (couponHistory.getEffectType()!=0){ + if (couponHistory.getStartTime().getTime() < new Date().getTime() && + couponHistory.getEndTime().getTime() > new Date().getTime()) { + }else { + couponHistory.setCanUse(0); + couponHistory.setCanUseReason("优惠券使用时间未到"); + } + } + couponHistory.setCouponEntity(couponEntity); + if (couponEntity.getCouponRange()==0){ + //无限制 + res.add(couponHistory); + }else { + String shopProductIds = params.get("shopProductIds").toString(); + String[] ids = shopProductIds.split(","); + for (String shopProductId : ids) { + //通过优惠卷获取商品 + Set set = getShopProductByCoupon(couponEntity); + //比对用户优惠卷是否有此商品 + if(!set.add(Integer.parseInt(shopProductId))){ + res.add(couponHistory); + } } } } @@ -143,32 +162,30 @@ public class CouponServiceImpl extends ServiceImpl impl return res; } - @Override - public Set getShopProductByCoupon(int couponId) { + public Set getShopProductByCoupon(CouponEntity couponEntity) { Set set = new HashSet<>(); - CouponEntity couponEntity = couponDao.selectById(couponId); - if (couponEntity!=null){ - String[] strs = couponEntity.getRangeInfo().split(","); - if (couponEntity.getCouponRange()==1) { - for (String courseId : strs) { - List shopProductCourseList = shopProductCourseDao.selectList(new LambdaQueryWrapper() - .eq(ShopProductCourseEntity::getCourseId,courseId)); - for (ShopProductCourseEntity shopProductCourseEntity : shopProductCourseList) { - set.add(shopProductCourseEntity.getProductId()); - } + String[] strs = couponEntity.getRangeInfo().split(","); + if (couponEntity.getCouponRange()==1) { + //1课程卷 + for (String courseId : strs) { + List shopProductCourseList = shopProductCourseDao.selectList(new LambdaQueryWrapper() + .eq(ShopProductCourseEntity::getCourseId,courseId)); + for (ShopProductCourseEntity shopProductCourseEntity : shopProductCourseList) { + set.add(shopProductCourseEntity.getProductId()); } - }else if (couponEntity.getCouponRange()==2) { - for (String courseMedical : strs) { - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.leftJoin(CourseToMedicine.class,CourseToMedicine::getCourseId,ShopProductCourseEntity::getCourseId); - List l = new ArrayList(); - getCourseMedicalIds(Integer.parseInt(courseMedical),l); - wrapper.in(CourseToMedicine::getMedicalId,l); - wrapper.selectAll(ShopProductCourseEntity.class); - List shopProductCourseList = shopProductCourseDao.selectList(wrapper); - for (ShopProductCourseEntity shopProductCourseEntity : shopProductCourseList) { - set.add(shopProductCourseEntity.getProductId()); - } + } + }else if (couponEntity.getCouponRange()==2) { + //2课程品类卷 + for (String courseMedical : strs) { + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.leftJoin(CourseToMedicine.class,CourseToMedicine::getCourseId,ShopProductCourseEntity::getCourseId); + List l = new ArrayList(); + getCourseMedicalIds(Integer.parseInt(courseMedical),l); + wrapper.in(CourseToMedicine::getMedicalId,l); + wrapper.selectAll(ShopProductCourseEntity.class); + List shopProductCourseList = shopProductCourseDao.selectList(wrapper); + for (ShopProductCourseEntity shopProductCourseEntity : shopProductCourseList) { + set.add(shopProductCourseEntity.getProductId()); } } } @@ -188,5 +205,36 @@ public class CouponServiceImpl extends ServiceImpl impl } } + @Override + public void useCouponAmount(CouponHistory couponHistory) { + couponHistory.setStatus(1);//使用状态 0 未使用 1 已使用 2 已过期 + couponHistory.setUseTime(new Date()); + couponHistoryDao.updateById(couponHistory); + } + @Override + public void rollbackCoupon(int couponHistoryId) { + CouponHistory couponHistory = couponHistoryDao.selectById(couponHistoryId); + if (couponHistory != null) { + couponHistory.setOrderId(0); + couponHistory.setStatus(0); + couponHistory.setUseTime(null); + couponHistoryDao.updateById(couponHistory); + } + } + + @Override + public void insertCouponHistoryByProductId(List productIds) { + List couponToProductList = couponToProductDao.selectList(new LambdaQueryWrapper() + .in(CouponToProduct::getProductId,productIds)); + for (CouponToProduct couponToProduct : couponToProductList) { + ShopProduct shopProduct = shopProductDao.selectById(couponToProduct.getProductId()); + insertCouponHistory(couponToProduct.getCouponId(), + ShiroUtils.getUId(), 1,"购买商品"+shopProduct.getProductName()+"赠送"); + } + + + + + } } diff --git a/src/main/java/com/peanut/modules/common/service/impl/CouponToProductServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/CouponToProductServiceImpl.java new file mode 100644 index 00000000..d146e0cd --- /dev/null +++ b/src/main/java/com/peanut/modules/common/service/impl/CouponToProductServiceImpl.java @@ -0,0 +1,13 @@ +package com.peanut.modules.common.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.peanut.modules.common.dao.CouponToProductDao; +import com.peanut.modules.common.entity.CouponToProduct; +import com.peanut.modules.common.service.CouponToProductService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service("commonCouponToProductService") +public class CouponToProductServiceImpl extends ServiceImpl implements CouponToProductService { +} diff --git a/src/main/java/com/peanut/modules/master/service/UserCourseBuyService.java b/src/main/java/com/peanut/modules/master/service/UserCourseBuyService.java index 8917716a..ba93f7a8 100644 --- a/src/main/java/com/peanut/modules/master/service/UserCourseBuyService.java +++ b/src/main/java/com/peanut/modules/master/service/UserCourseBuyService.java @@ -1,7 +1,11 @@ package com.peanut.modules.master.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.peanut.modules.common.entity.BuyOrder; import com.peanut.modules.common.entity.UserCourseBuyEntity; public interface UserCourseBuyService extends IService { + + void addUserCourseBuyRelearn(BuyOrder buyOrder,String come); + } diff --git a/src/main/java/com/peanut/modules/master/service/impl/UserCourseBuyServiceImpl.java b/src/main/java/com/peanut/modules/master/service/impl/UserCourseBuyServiceImpl.java index 6d0ae56a..9e96faeb 100644 --- a/src/main/java/com/peanut/modules/master/service/impl/UserCourseBuyServiceImpl.java +++ b/src/main/java/com/peanut/modules/master/service/impl/UserCourseBuyServiceImpl.java @@ -1,13 +1,39 @@ package com.peanut.modules.master.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.peanut.modules.common.dao.ShopProductCourseDao; import com.peanut.modules.common.dao.UserCourseBuyDao; +import com.peanut.modules.common.entity.BuyOrder; +import com.peanut.modules.common.entity.ShopProductCourseEntity; import com.peanut.modules.common.entity.UserCourseBuyEntity; import com.peanut.modules.master.service.UserCourseBuyService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Slf4j @Service("masterUserCourseBuyService") public class UserCourseBuyServiceImpl extends ServiceImpl implements UserCourseBuyService { + + @Autowired + public ShopProductCourseDao shopProductCourseDao; + + @Override + public void addUserCourseBuyRelearn(BuyOrder buyOrder,String come) { + String[] info = buyOrder.getRemark().split(","); + ShopProductCourseEntity spc = shopProductCourseDao.selectOne(new LambdaQueryWrapper() + .eq(ShopProductCourseEntity::getProductId,info[0])); + UserCourseBuyEntity userCourseBuyEntity = new UserCourseBuyEntity(); + userCourseBuyEntity.setUserId(buyOrder.getUserId()); + userCourseBuyEntity.setCourseId(spc.getCourseId()); + userCourseBuyEntity.setCatalogueId(spc.getCatalogueId()); + if (info[1].contains("一月")){ + userCourseBuyEntity.setDays(30); + }else if (info[1].contains("三月")){ + userCourseBuyEntity.setDays(90); + } + userCourseBuyEntity.setCome("复读-"+come); + this.baseMapper.insert(userCourseBuyEntity); + } } diff --git a/src/main/java/com/peanut/modules/medical/service/impl/CourseServiceImpl.java b/src/main/java/com/peanut/modules/medical/service/impl/CourseServiceImpl.java index 1c08ea80..d4e420d7 100644 --- a/src/main/java/com/peanut/modules/medical/service/impl/CourseServiceImpl.java +++ b/src/main/java/com/peanut/modules/medical/service/impl/CourseServiceImpl.java @@ -273,9 +273,10 @@ public class CourseServiceImpl extends ServiceImpl impl MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); wrapper.distinct(); wrapper.leftJoin(CourseCatalogueEntity.class,CourseCatalogueEntity::getCourseId,CourseEntity::getId); - //关掉本次查询del_flg = 0的条件,查询过期课程 - wrapper.disableSubLogicDel().rightJoin(UserCourseBuyEntity.class,UserCourseBuyEntity::getCatalogueId,CourseCatalogueEntity::getId); + wrapper.rightJoin(UserCourseBuyEntity.class,UserCourseBuyEntity::getCatalogueId,CourseCatalogueEntity::getId); wrapper.rightJoin(CourseToMedicine.class,CourseToMedicine::getCourseId,CourseEntity::getId); + //关掉本次查询del_flg = 0的条件,查询过期课程 + wrapper.disableSubLogicDel(); wrapper.eq(UserCourseBuyEntity::getUserId,param.get("userId")); wrapper.eq(UserCourseBuyEntity::getDelFlag,-1); wrapper.selectAll(CourseEntity.class); @@ -283,8 +284,18 @@ public class CourseServiceImpl extends ServiceImpl impl wrapper.selectAs(CourseCatalogueEntity::getTitle,"catalogueTitle"); wrapper.orderByAsc(CourseEntity::getSort); wrapper.orderByAsc(CourseCatalogueEntity::getSort); - List courseEntities = this.getBaseMapper().selectMaps(wrapper); - return courseEntities; + List> courseEntities = this.getBaseMapper().selectMaps(wrapper); + List> res = new ArrayList<>(); + //如果过期又开通,去除 + for (Map c : courseEntities) { + UserCourseBuyEntity ucb = userCourseBuyDao.selectOne(new LambdaQueryWrapper() + .eq(UserCourseBuyEntity::getUserId,param.get("userId")) + .eq(UserCourseBuyEntity::getCatalogueId,c.get("catalogueId"))); + if (ucb == null) { + res.add(c); + } + } + return res; }else { return null; } diff --git a/src/main/java/com/peanut/modules/mq/Consumer/OrderCancelConsumer.java b/src/main/java/com/peanut/modules/mq/Consumer/OrderCancelConsumer.java index 65fd9e75..e2b6c818 100644 --- a/src/main/java/com/peanut/modules/mq/Consumer/OrderCancelConsumer.java +++ b/src/main/java/com/peanut/modules/mq/Consumer/OrderCancelConsumer.java @@ -9,10 +9,10 @@ import com.peanut.modules.common.entity.BuyOrder; import com.peanut.modules.common.entity.BuyOrderProduct; import com.peanut.modules.common.entity.ShopProduct; import com.peanut.modules.book.service.BuyOrderService; +import com.peanut.modules.common.service.CouponService; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - import java.util.List; /** @@ -29,16 +29,22 @@ public class OrderCancelConsumer { BuyOrderProductDao buyOrderProductDao; @Autowired ShopProductDao shopProductDao; + @Autowired + CouponService couponService; @RabbitListener(queues = DelayQueueConfig.ORDER_CANCEL_DEAD_LETTER_QUEUE) public void orderConsumer(String orderId) { BuyOrder buyOrder = buyOrderService.getById(orderId); if(buyOrder == null){ - return; } if(Constants.ORDER_STATUS_TO_BE_PAID.equals(buyOrder.getOrderStatus())){ buyOrder.setOrderStatus(Constants.ORDER_STATUS_OUT_OF_TIME); + //回滚优惠卷 + if (buyOrder.getCouponId()!=null&&buyOrder.getCouponId()!=0){ + couponService.rollbackCoupon(buyOrder.getCouponId()); + buyOrder.setCouponId(null); + } //回滚库存 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BuyOrderProduct::getOrderId,buyOrder.getOrderId()); 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 63cc4e67..c6ba23eb 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 @@ -12,6 +12,8 @@ import com.peanut.common.utils.OrderUtils; import com.peanut.modules.common.dao.*; import com.peanut.modules.book.service.*; import com.peanut.modules.common.entity.*; +import com.peanut.modules.common.service.CouponService; +import com.peanut.modules.master.service.UserCourseBuyService; import com.peanut.modules.pay.alipay.config.AliPayConfig; import com.peanut.modules.pay.alipay.config.AliPayUtil; import com.peanut.modules.pay.alipay.dto.AlipayDTO; @@ -62,6 +64,8 @@ public class AliPayServiceImpl implements AliPayService { @Autowired private UserCourseBuyDao userCourseBuyDao; @Autowired + private UserCourseBuyService userCourseBuyService; + @Autowired private JfTransactionDetailsDao jfTransactionDetailsDao; @Autowired private MyUserDao myUserDao; @@ -69,6 +73,8 @@ public class AliPayServiceImpl implements AliPayService { private VipBuyConfigDao vipBuyConfigDao; @Autowired private UserVipDao userVipDao; + @Autowired + private CouponService couponService; @Override public String pay(AlipayDTO payDto) { @@ -95,9 +101,6 @@ public class AliPayServiceImpl implements AliPayService { aliNotifyDto.setCustomerid(payDto.getCustomerId()); aliNotifyDto.setRelevanceoid(payDto.getRelevanceoid()); payZfbOrderService.save(aliNotifyDto); - BuyOrder order = this.buyOrderService.getOne(new QueryWrapper().eq("order_sn",payDto.getRelevanceoid()).eq("del_flag","0")); - order.setPaymentDate(new Date()); - this.buyOrderService.updateById(order); orderInfo = resJson; } @@ -155,33 +158,33 @@ public class AliPayServiceImpl implements AliPayService { String body = oldPayZfbOrderEntity.getBody(); String customerid = oldPayZfbOrderEntity.getCustomerid(); + if("relearn".equals(subject)){ + BuyOrder orderEntity = buyOrderService.getBaseMapper().selectOne(new QueryWrapper() + .eq("order_sn", oldPayZfbOrderEntity.getRelevanceoid())); + //更新 订单 记录 + buyOrderService.updateOrderStatus(Integer.valueOf(customerid),oldPayZfbOrderEntity.getRelevanceoid(),"2"); + //插入复读记录 + userCourseBuyService.addUserCourseBuyRelearn(orderEntity,"支付宝购买:"+orderEntity.getOrderSn()); + } + if ("vip".equals(subject)) { 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"); - } - if("point".equals(subject)){ // 插入花生币 变动记录 BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigService.getById(Integer.valueOf(body)); @@ -284,8 +287,10 @@ public class AliPayServiceImpl implements AliPayService { } //开通course,end - List collect = buyOrderProductDao.selectList(new LambdaQueryWrapper().eq(BuyOrderProduct::getOrderId, orderEntity.getOrderId())).stream().map(BuyOrderProduct::getProductId).collect(Collectors.toList()); + //发放优惠卷 + couponService.insertCouponHistoryByProductId(collect); + //手摸脚模购买后会开启用户的脉穴的功能 if(collect.contains(128)||collect.contains(129)||collect.contains(130)||collect.contains(131)||collect.contains(136)||collect.contains(137)){ MyUserEntity userInfo = userService.getById(orderEntity.getUserId()); userInfo.setPointPower(1); 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 e195dd91..b2f634f4 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 @@ -10,6 +10,8 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.peanut.modules.common.dao.*; import com.peanut.modules.book.service.*; import com.peanut.modules.common.entity.*; +import com.peanut.modules.common.service.CouponService; +import com.peanut.modules.master.service.UserCourseBuyService; import com.peanut.modules.pay.refund.entity.PayRefundOrder; import com.peanut.modules.pay.refund.service.PayRefundOrderService; import com.peanut.modules.pay.weChatPay.config.WechatPayConfig; @@ -70,6 +72,8 @@ public class WxpayServiceImpl extends ServiceImpl().eq("order_sn", orderNo)); - if("vip".equals(order.getOrderType())){ + if("relearn".equals(order.getOrderType())){ + BuyOrder orderEntity = buyOrderService.getBaseMapper().selectOne(new QueryWrapper() + .eq("order_sn", orderNo)); + //更新 订单 记录 + buyOrderService.updateOrderStatus(orderEntity.getUserId(),orderNo,"2"); + //插入复读记录 + userCourseBuyService.addUserCourseBuyRelearn(orderEntity,"微信购买:"+orderEntity.getOrderSn()); + } + 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); } @@ -160,13 +171,10 @@ public class WxpayServiceImpl extends ServiceImpl().eq("order_sn", orderNo)); BigDecimal realMoney = orderEntity.getRealMoney(); - - if(orderEntity.getJfDeduction().compareTo(BigDecimal.ZERO)>0){ userCoinJf(orderEntity); } - //开通book,start // 查询订单的所有 book_id List orderBookIdList = shopProductBookService.getOrderBookId(order.getOrderSn()); @@ -226,8 +234,10 @@ public class WxpayServiceImpl extends ServiceImpl collect = buyOrderProductDao.selectList(new LambdaQueryWrapper().eq(BuyOrderProduct::getOrderId, order.getOrderId())).stream().map(BuyOrderProduct::getProductId).collect(Collectors.toList()); + //发放优惠卷 + couponService.insertCouponHistoryByProductId(collect); + //手摸脚模购买后会开启用户的脉穴的功能 if(collect.contains(128)||collect.contains(129)||collect.contains(130)||collect.contains(131)||collect.contains(136)||collect.contains(137)){ MyUserEntity userInfo = userService.getById(order.getUserId()); userInfo.setPointPower(1); From 76eec3b2ba27eabed8ee9d3d93f565b15995257b Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Mon, 28 Oct 2024 09:41:26 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=BF=83=E8=BA=AB=E5=8C=BB=E5=AD=A6?= =?UTF-8?q?=E8=87=AA=E8=AF=84=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SelfEvaluationFormController.java | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/main/java/com/peanut/modules/common/controller/SelfEvaluationFormController.java diff --git a/src/main/java/com/peanut/modules/common/controller/SelfEvaluationFormController.java b/src/main/java/com/peanut/modules/common/controller/SelfEvaluationFormController.java new file mode 100644 index 00000000..f8d8c781 --- /dev/null +++ b/src/main/java/com/peanut/modules/common/controller/SelfEvaluationFormController.java @@ -0,0 +1,102 @@ +package com.peanut.modules.common.controller; + +import com.peanut.common.utils.R; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 心身医学自评表 + */ +@Slf4j +@RestController("commonSelfEvaluationForm") +@RequestMapping("common/selfEvaluationForm") +public class SelfEvaluationFormController { + +/* +中国大陆用户 +SDS的评定结果以标准分来定: +标准分小于52分为无抑郁;标准分大于等于52分且小于62分为轻微至轻度抑郁;标准分大于等于62分且小于72分为中至重度抑郁;标准分大于等于72分为重度抑郁。 + +其它国家和地区 +标准分小于50分为无抑郁;标准分大于等于50分且小于60分为轻微至轻度抑郁;标准分大于等于60分且小于70分为中至重度抑郁;标准分大于等于70分为重度抑郁。 + +计分规则: +SDS评定采用1—4制记分,评分时间为过去一周内。 +正向题,依次评为粗分1、2、3、4分   (1 3 4 7 8 9 10 13 15 19) +反向题,依次评为粗分4、3、2、1分   (2 5 6 11 12 14 16 17 18 20) +20项相加得到原始分,原始分分乘以1.25以后取整,得到标准分。 + +*/ + + //打分 + @RequestMapping("/calculationForm") + public R calculationForm(@RequestBody Map params) { + List list = (List) params.get("resList"); + int total = 0; + for (int i=0;i < list.size(); i++) { + //反向题 + if (i==1||i==4||i==5||i==10||i==11||i==13||i==15||i==16||i==17||i==19){ + if (list.get(i)==1){ + total += 4; + }else if(list.get(i)==2){ + total += 3; + }else if (list.get(i) == 3) { + total += 2; + }else { + total += 1; + } + }else { + total += list.get(i); + } + } + total = (int)(total*1.25); + String country = params.get("country").toString(); + if ("CN".equals(country)){ + total = total - 2; + } + String res ="无抑郁"; + if (total>=70){ + res ="重度抑郁"; + }else if (total >= 60) { + res ="中至重度抑郁"; + }else if (total >= 50) { + res ="轻微至轻度抑郁"; + } + return R.ok().put("res",res); + } + + //自评表题目列表 + @RequestMapping("/getSelfEvaluationFormList") + public R getSelfEvaluationFormList() { + List list = new ArrayList(); + list.add("我觉得闷闷不乐,情绪低沉"); + list.add("我觉得一天之中早晨最好"); + list.add("我一阵阵哭出来或觉得想哭"); + list.add("我晚上睡眠不好"); + list.add("我吃得跟平常一样多"); + list.add("我与异性密切接触时和以往一样感到愉快"); + list.add("我发觉我的体重下降"); + list.add("我有便秘的苦恼"); + list.add("我心跳比平时快"); + list.add("我无缘无故地感到疲乏"); + list.add("我的头脑跟平常一样清楚"); + list.add("觉得经常做的事情并没有困难"); + list.add("我觉得不安而平静不下来"); + list.add("我对将来抱有希望"); + list.add("我比平常容易生气激动"); + list.add("我觉得作出决定是容易的"); + list.add("我觉得自己是个有用的人,有人需要我"); + list.add("我的生活过得很有意思"); + list.add("我认为如果我死了别人会生活得好些"); + list.add("我平常感兴趣的事我仍然照样感兴趣"); + return R.ok().put("list",list); + } + + +} From d5d22ae2d9964c966d8674a5d8d6b3caf9c41ac8 Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Mon, 28 Oct 2024 10:15:16 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A4=87=E6=B3=A8?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/peanut/modules/pay/IOSPay/controller/AppController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/peanut/modules/pay/IOSPay/controller/AppController.java b/src/main/java/com/peanut/modules/pay/IOSPay/controller/AppController.java index b28efcf8..0f9fa4a6 100644 --- a/src/main/java/com/peanut/modules/pay/IOSPay/controller/AppController.java +++ b/src/main/java/com/peanut/modules/pay/IOSPay/controller/AppController.java @@ -127,7 +127,7 @@ public class AppController { transactionDetailsEntity.setChangeAmount(new BigDecimal(money)); transactionDetailsEntity.setOrderType("充值"); transactionDetailsEntity.setRelationId(order.getId()); - transactionDetailsEntity.setRemark("苹果充值:"+order.getTransactionId()); + transactionDetailsEntity.setRemark("苹果充值:"+order.getOrderid()); MyUserEntity user = userService.getById(Integer.valueOf(customerid)); BigDecimal peanutCoin = user.getPeanutCoin(); transactionDetailsEntity.setUserBalance(peanutCoin);