From 76730d890d20575f831958dcd40cc88007d05a07 Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Wed, 4 Dec 2024 10:35:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8B=E5=8D=95=E6=97=B6?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E7=94=A8=E6=88=B7=E8=99=9A=E6=8B=9F=E5=B8=81?= =?UTF-8?q?=E3=80=81=E7=A7=AF=E5=88=86=E6=B6=88=E8=B4=B9=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/controller/BuyOrderController.java | 38 ++---------- .../service/TransactionDetailsService.java | 6 +- .../impl/TransactionDetailsServiceImpl.java | 17 +++++- .../controller/OrderController.java | 60 +++++++++++-------- .../controller/CourseRelearnController.java | 14 +---- .../common/controller/UserVipController.java | 33 ++-------- .../service/JfTransactionDetailsService.java | 6 ++ .../impl/JfTransactionDetailsServiceImpl.java | 14 +++++ 8 files changed, 86 insertions(+), 102 deletions(-) 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 c0d60eb9..cbdabbe9 100644 --- a/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java +++ b/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java @@ -17,11 +17,11 @@ import com.peanut.modules.book.vo.request.ProductRequestVo; import com.peanut.modules.book.vo.request.ProductTransportVo; import com.peanut.modules.book.vo.response.BuyOrderResponseVo; 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.common.service.JfTransactionDetailsService; import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo; import com.peanut.modules.pay.weChatPay.service.WxpayService; import com.peanut.modules.sys.entity.SysConfigEntity; @@ -89,7 +89,7 @@ public class BuyOrderController { @Autowired private UserCourseBuyDao userCourseBuyDao; @Autowired - private JfTransactionDetailsDao jfTransactionDetailsDao; + private JfTransactionDetailsService jfTransactionDetailsService; @Autowired private CouponService couponService; @Autowired @@ -320,11 +320,11 @@ public class BuyOrderController { } //记录用户虚拟币消费 if(totalPrice.compareTo(BigDecimal.ZERO)>0){ - recordTransaction(buyOrder, user, totalPrice); + transactionDetailsService.recordTransaction(buyOrder, user, totalPrice); } //记录用户积分消费情况 if(buyOrder.getJfDeduction()!=null&&buyOrder.getJfDeduction().compareTo(BigDecimal.ZERO) > 0){ - recordJfTransaction(buyOrder, user, buyOrder.getJfDeduction()); + jfTransactionDetailsService.recordJfTransaction(buyOrder, user, buyOrder.getJfDeduction()); } //消费用户积分并记录用户积分消费记录 addEbookToUser(buyOrderProductList, buyOrder, 0); @@ -914,36 +914,6 @@ public class BuyOrderController { } } - /** - * 交易记录 - * - * @param buyOrder - * @param user - * @param totalPrice - */ - 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 void recordJfTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal jf){ - JfTransactionDetails jfTransactionDetails = new JfTransactionDetails(); - jfTransactionDetails.setUserId(user.getId()); - jfTransactionDetails.setChangeAmount(jf); - jfTransactionDetails.setActType(0); - jfTransactionDetails.setUserBalance(user.getJf()); - jfTransactionDetails.setRelationId(buyOrder.getOrderId()); - jfTransactionDetails.setRemark("消费积分抵扣:"+jf.toString()+",订单号:"+buyOrder.getOrderSn()); - jfTransactionDetailsDao.insert(jfTransactionDetails); - } - /** * 给用户添加电子书 * TODO 新版本上线删除此接口 diff --git a/src/main/java/com/peanut/modules/book/service/TransactionDetailsService.java b/src/main/java/com/peanut/modules/book/service/TransactionDetailsService.java index 078ceac7..b210ec60 100644 --- a/src/main/java/com/peanut/modules/book/service/TransactionDetailsService.java +++ b/src/main/java/com/peanut/modules/book/service/TransactionDetailsService.java @@ -3,8 +3,10 @@ package com.peanut.modules.book.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.peanut.common.utils.PageUtils; +import com.peanut.modules.common.entity.BuyOrder; +import com.peanut.modules.common.entity.MyUserEntity; import com.peanut.modules.common.entity.TransactionDetailsEntity; - +import java.math.BigDecimal; import java.util.Map; /** @@ -21,5 +23,7 @@ public interface TransactionDetailsService extends IService getTransactionList(Map map); + void recordTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal totalPrice); + } diff --git a/src/main/java/com/peanut/modules/book/service/impl/TransactionDetailsServiceImpl.java b/src/main/java/com/peanut/modules/book/service/impl/TransactionDetailsServiceImpl.java index f02dc128..89175794 100644 --- a/src/main/java/com/peanut/modules/book/service/impl/TransactionDetailsServiceImpl.java +++ b/src/main/java/com/peanut/modules/book/service/impl/TransactionDetailsServiceImpl.java @@ -8,6 +8,8 @@ import com.peanut.common.utils.ExcludeEmptyQueryWrapper; import com.peanut.common.utils.PageUtils; import com.peanut.common.utils.Query; import com.peanut.modules.common.dao.TransactionDetailsDao; +import com.peanut.modules.common.entity.BuyOrder; +import com.peanut.modules.common.entity.MyUserEntity; import com.peanut.modules.common.entity.TransactionDetailsEntity; import com.peanut.modules.book.service.BookService; import com.peanut.modules.book.service.TransactionDetailsService; @@ -15,7 +17,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - +import java.math.BigDecimal; import java.util.Map; @Slf4j @@ -49,4 +51,17 @@ public class TransactionDetailsServiceImpl extends ServiceImpl transactionDetailsEntityPage = getBaseMapper().selectPage(new Page<>(Integer.valueOf(map.get("page").toString()), Integer.valueOf(map.get("limit").toString())), wrapper); return transactionDetailsEntityPage; } + + @Override + public 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("购买商品"); + getBaseMapper().insert(transactionDetailsEntity); + } } \ No newline at end of file diff --git a/src/main/java/com/peanut/modules/bookAbroad/controller/OrderController.java b/src/main/java/com/peanut/modules/bookAbroad/controller/OrderController.java index 827d1ff6..ec6314bb 100644 --- a/src/main/java/com/peanut/modules/bookAbroad/controller/OrderController.java +++ b/src/main/java/com/peanut/modules/bookAbroad/controller/OrderController.java @@ -5,20 +5,24 @@ import com.github.promeg.pinyinhelper.Pinyin; 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.BuyOrderService; +import com.peanut.modules.book.service.TransactionDetailsService; +import com.peanut.modules.book.service.UserEbookBuyService; import com.peanut.modules.common.entity.BookEntity; import com.peanut.modules.common.entity.BuyOrder; +import com.peanut.modules.common.entity.MyUserEntity; import com.peanut.modules.common.service.BookService; +import com.peanut.modules.common.service.MyUserService; import lombok.extern.slf4j.Slf4j; -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.math.BigDecimal; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; @Slf4j @RestController("bookAbroadOrder") @@ -28,22 +32,27 @@ public class OrderController { @Autowired private BookService bookService; @Autowired + private MyUserService myUserService; + @Autowired private BuyOrderService buyOrderService; @Autowired - private RabbitTemplate rabbitTemplate; + private TransactionDetailsService transactionDetailsService; + @Autowired + private UserEbookBuyService userEbookBuyService; + //海外读书下单 @RequestMapping("/placeOrder") + @Transactional public R createOrder(@RequestBody BuyOrder buyOrder){ buyOrder.setUserId(ShiroUtils.getUId()); buyOrder.setCome(3);//3 海外读书 - buyOrder.setPaymentMethod("5"); //5 paypal BookEntity bookEntity = bookService.getById(buyOrder.getAbroadBookId()); - BigDecimal orderMoney = buyOrder.getOrderMoney(); + BigDecimal totalPrice = buyOrder.getOrderMoney(); //校验价格 - if (orderMoney.compareTo(bookEntity.getAbroadPrice())!=0){ + if (totalPrice.compareTo(bookEntity.getAbroadPrice())!=0){ return R.error("订单价格异常"); } - buyOrder.setRealMoney(orderMoney); + buyOrder.setRealMoney(totalPrice); buyOrder.setRemark("Purchase the e-book '"+ Pinyin.toPinyin(bookEntity.getName(), " ").toLowerCase()+"'"); buyOrder.setOrderStatus("0"); buyOrder.setOrderType("abroadBook"); @@ -52,22 +61,25 @@ public class OrderController { buyOrderService.save(buyOrder); // 1. 虚拟币支付 if (Constants.PAYMENT_METHOD_VIRTUAL.equals(buyOrder.getPaymentMethod())) { - + MyUserEntity user = ShiroUtils.getUser(); + if (user.getPeanutCoin().compareTo(totalPrice)>=0){ + //更新虚拟币 + user.setPeanutCoin(user.getPeanutCoin().subtract(totalPrice)); + myUserService.updateById(user); + //更新订单状态 + buyOrderService.updateOrderStatus(user.getId(), buyOrder.getOrderSn(), "2"); + //记录用户虚拟币消费 + transactionDetailsService.recordTransaction(buyOrder, user, totalPrice); + //开通电子书权限 + userEbookBuyService.addBookForUser(user.getId(), Arrays.asList(buyOrder.getAbroadBookId())); + }else { + return R.error(500, "天医币余额不足!"); + } } - rabbitTemplate.convertAndSend( - DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE, - DelayQueueConfig.ORDER_TO_BE_PAY_ROUTING_KEY, - buyOrder.getOrderId(), - messagePostProcessor() - ); - return R.ok(); - } - private MessagePostProcessor messagePostProcessor() { - return message -> { - //设置有效期30分钟 - message.getMessageProperties().setExpiration(String.valueOf(30 * 60 * 1000)); - return message; - }; + Map result = new HashMap<>(); + result.put("orderSn", buyOrder.getOrderSn()); + result.put("money", totalPrice); + return R.ok(result); } } diff --git a/src/main/java/com/peanut/modules/common/controller/CourseRelearnController.java b/src/main/java/com/peanut/modules/common/controller/CourseRelearnController.java index bb0c84b1..504a3ae8 100644 --- a/src/main/java/com/peanut/modules/common/controller/CourseRelearnController.java +++ b/src/main/java/com/peanut/modules/common/controller/CourseRelearnController.java @@ -152,7 +152,7 @@ public class CourseRelearnController { buyOrderService.updateOrderStatus(user.getId(), buyOrder.getOrderSn(), "2"); //记录用户虚拟币消费 if(totalPrice.compareTo(BigDecimal.ZERO)>0){ - recordTransaction(buyOrder, user, totalPrice); + transactionDetailsService.recordTransaction(buyOrder, user, totalPrice); } //插入复读记录 userCourseBuyService.addUserCourseBuyRelearn(buyOrder,"虚拟币购买:"+buyOrder.getOrderSn()); @@ -198,18 +198,6 @@ public class CourseRelearnController { 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分钟 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 e31bb764..167335ba 100644 --- a/src/main/java/com/peanut/modules/common/controller/UserVipController.java +++ b/src/main/java/com/peanut/modules/common/controller/UserVipController.java @@ -7,14 +7,13 @@ 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.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; +import com.peanut.modules.common.service.JfTransactionDetailsService; import com.peanut.modules.common.service.UserVipService; -import com.peanut.modules.common.to.VipOrderDto; import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo; import com.peanut.modules.pay.weChatPay.service.WxpayService; import lombok.extern.slf4j.Slf4j; @@ -24,7 +23,6 @@ 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 javax.transaction.Transactional; import java.math.BigDecimal; import java.time.LocalDate; @@ -58,7 +56,7 @@ public class UserVipController { @Autowired private TransactionDetailsService transactionDetailsService; @Autowired - private JfTransactionDetailsDao jfTransactionDetailsDao; + private JfTransactionDetailsService jfTransactionDetailsService; @RequestMapping("/getMyVipHistory") public R getMyVipHistory(String userId) { @@ -90,11 +88,11 @@ public class UserVipController { buyOrderService.updateOrderStatus(user.getId(), buyOrder.getOrderSn(), "2"); //记录用户虚拟币消费 if(totalPrice.compareTo(BigDecimal.ZERO)>0){ - recordTransaction(buyOrder, user, totalPrice); + transactionDetailsService.recordTransaction(buyOrder, user, totalPrice); } //记录用户积分消费情况 if(buyOrder.getJfDeduction()!=null&&buyOrder.getJfDeduction().compareTo(BigDecimal.ZERO) > 0){ - recordJfTransaction(buyOrder, user, buyOrder.getJfDeduction()); + jfTransactionDetailsService.recordJfTransaction(buyOrder, user, buyOrder.getJfDeduction()); } //开通用户vip,并且对已开通的课程做延期 openVipForUser(buyOrder); @@ -226,17 +224,6 @@ public class UserVipController { throw new Exception("开通vip异常"); } - private void recordJfTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal jf){ - JfTransactionDetails jfTransactionDetails = new JfTransactionDetails(); - jfTransactionDetails.setUserId(user.getId()); - jfTransactionDetails.setChangeAmount(jf); - jfTransactionDetails.setActType(0); - jfTransactionDetails.setUserBalance(user.getJf()); - jfTransactionDetails.setRelationId(buyOrder.getOrderId()); - jfTransactionDetails.setRemark("消费积分抵扣:"+jf.toString()+",订单号:"+buyOrder.getOrderSn()); - jfTransactionDetailsDao.insert(jfTransactionDetails); - } - private boolean useJfCoin(MyUserEntity user,BigDecimal jf){ if(jf==null){ return true; @@ -250,18 +237,6 @@ public class UserVipController { } } - 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分钟 diff --git a/src/main/java/com/peanut/modules/common/service/JfTransactionDetailsService.java b/src/main/java/com/peanut/modules/common/service/JfTransactionDetailsService.java index 09f44921..30bf2dc5 100644 --- a/src/main/java/com/peanut/modules/common/service/JfTransactionDetailsService.java +++ b/src/main/java/com/peanut/modules/common/service/JfTransactionDetailsService.java @@ -1,7 +1,13 @@ package com.peanut.modules.common.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.peanut.modules.common.entity.BuyOrder; import com.peanut.modules.common.entity.JfTransactionDetails; +import com.peanut.modules.common.entity.MyUserEntity; +import java.math.BigDecimal; public interface JfTransactionDetailsService extends IService { + + void recordJfTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal jf); + } diff --git a/src/main/java/com/peanut/modules/common/service/impl/JfTransactionDetailsServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/JfTransactionDetailsServiceImpl.java index 7eeeddda..8b3b588d 100644 --- a/src/main/java/com/peanut/modules/common/service/impl/JfTransactionDetailsServiceImpl.java +++ b/src/main/java/com/peanut/modules/common/service/impl/JfTransactionDetailsServiceImpl.java @@ -2,10 +2,24 @@ package com.peanut.modules.common.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.peanut.modules.common.dao.JfTransactionDetailsDao; +import com.peanut.modules.common.entity.BuyOrder; import com.peanut.modules.common.entity.JfTransactionDetails; +import com.peanut.modules.common.entity.MyUserEntity; import com.peanut.modules.common.service.JfTransactionDetailsService; import org.springframework.stereotype.Service; +import java.math.BigDecimal; @Service("commonJfTransactionDetailsService") public class JfTransactionDetailsServiceImpl extends ServiceImpl implements JfTransactionDetailsService { + @Override + public void recordJfTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal jf) { + JfTransactionDetails jfTransactionDetails = new JfTransactionDetails(); + jfTransactionDetails.setUserId(user.getId()); + jfTransactionDetails.setChangeAmount(jf); + jfTransactionDetails.setActType(0); + jfTransactionDetails.setUserBalance(user.getJf()); + jfTransactionDetails.setRelationId(buyOrder.getOrderId()); + jfTransactionDetails.setRemark("消费积分抵扣:"+jf.toString()+",订单号:"+buyOrder.getOrderSn()); + getBaseMapper().insert(jfTransactionDetails); + } }