下单开课时,如果非课程商品中含有课程,报表金额为0

This commit is contained in:
wuchunlei
2025-11-12 17:34:09 +08:00
parent 39ffee581c
commit 28017dbe90
6 changed files with 82 additions and 180 deletions

View File

@@ -29,6 +29,7 @@ import com.peanut.modules.book.vo.response.OrderAddressResponseVo;
import com.peanut.modules.common.dao.UserCourseBuyDao;
import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.*;
import com.peanut.modules.master.service.CourseCatalogueService;
import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo;
import com.peanut.modules.pay.weChatPay.service.WxpayService;
import com.peanut.modules.sys.entity.SysConfigEntity;
@@ -112,6 +113,8 @@ public class BuyOrderController {
private CouponHistoryService couponHistoryService;
@Autowired
private UserCourseBuyLogService userCourseBuyLogService;
@Autowired
private CourseCatalogueService courseCatalogueService;
@RequestMapping(value = "/decomposeShipment", method = RequestMethod.POST)
public R decomposeShipment(@RequestBody BuyOrderListRequestVo requestVo) {
@@ -485,7 +488,8 @@ public class BuyOrderController {
}
//消费用户积分并记录用户积分消费记录
addEbookToUser(buyOrderProductList, buyOrder, 0);
addCourseToUser(buyOrder);
//开课
buyOrderService.addCourseToUser("天医币",buyOrder);
//使用优惠券
if (buyOrder.getCouponId()!=null&&buyOrder.getCouponId()!=0){
CouponHistory couponHistory = couponHistoryService.getById(buyOrder.getCouponId());
@@ -1124,67 +1128,6 @@ public class BuyOrderController {
}
}
private void addCourseToUser(BuyOrder orderEntity){
List<ShopProductCourseEntity> orderCourse = buyOrderService.getOrderCourse(orderEntity.getOrderSn());
for (int i=0;i<orderCourse.size();i++){
ShopProductCourseEntity s = orderCourse.get(i);
LambdaQueryWrapper<UserCourseBuyEntity> wrapper2 = new LambdaQueryWrapper<>();
wrapper2.eq(UserCourseBuyEntity::getUserId,orderEntity.getUserId());
wrapper2.eq(UserCourseBuyEntity::getCatalogueId,s.getCatalogueId());
wrapper2.and(r->r.isNull(UserCourseBuyEntity::getEndTime).or().gt(UserCourseBuyEntity::getEndTime,new Date()));
List<UserCourseBuyEntity> userCourseBuyEntities = userCourseBuyDao.selectList(wrapper2);
//插入开课记录
UserCourseBuyLog userCourseBuyLog = new UserCourseBuyLog();
userCourseBuyLog.setUserId(orderEntity.getUserId());
userCourseBuyLog.setType("order");
userCourseBuyLog.setPayType("天医币");
userCourseBuyLog.setPayTime(orderEntity.getCreateTime());
userCourseBuyLog.setOrderSn(orderEntity.getOrderSn());
if(userCourseBuyEntities.size()>0){//延长有效期
UserCourseBuyEntity userCourseBuyEntity = userCourseBuyEntities.get(0);
userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId());
userCourseBuyLog.setBeginDay(userCourseBuyEntity.getDays()+1);
userCourseBuyLog.setDays(s.getDays());
userCourseBuyEntity.setDays(userCourseBuyEntity.getDays()+s.getDays());
if(userCourseBuyEntity.getEndTime()!=null){
Calendar calendar = Calendar.getInstance();
calendar.setTime(userCourseBuyEntity.getEndTime());
calendar.add(Calendar.DAY_OF_MONTH,s.getDays());
userCourseBuyEntity.setEndTime(calendar.getTime());
}
userCourseBuyEntity.setCome(userCourseBuyEntity.getCome()+";延期(虚拟币购买:"+orderEntity.getOrderSn()+")");
userCourseBuyDao.updateById(userCourseBuyEntity);
}else{
UserCourseBuyEntity userCourseBuyEntity = new UserCourseBuyEntity();
userCourseBuyEntity.setUserId(orderEntity.getUserId());
userCourseBuyEntity.setCourseId(s.getCourseId());
userCourseBuyEntity.setCatalogueId(s.getCatalogueId());
userCourseBuyEntity.setDays(s.getDays());
userCourseBuyEntity.setCreateTime(new Date());
// userCourseBuyEntity.setStartTime(new Date());
// Calendar cal = Calendar.getInstance();
// cal.setTime(new Date());
// cal.add(Calendar.DAY_OF_MONTH,s.getDays());
// userCourseBuyEntity.setEndTime(cal.getTime());
userCourseBuyEntity.setCome("虚拟币购买:"+orderEntity.getOrderSn());
userCourseBuyDao.insert(userCourseBuyEntity);
userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId());
userCourseBuyLog.setBeginDay(0);
userCourseBuyLog.setDays(s.getDays());
}
BigDecimal fee = orderEntity.getRealMoney().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP);
BigDecimal jf = orderEntity.getJfDeduction().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP);
if (i==(orderCourse.size()-1)){
userCourseBuyLog.setFee(orderEntity.getRealMoney().subtract(fee.multiply(new BigDecimal(orderCourse.size()-1))));
userCourseBuyLog.setJf(orderEntity.getJfDeduction().subtract(jf.multiply(new BigDecimal(orderCourse.size()-1))));
}else {
userCourseBuyLog.setFee(fee);
userCourseBuyLog.setJf(jf);
}
userCourseBuyLogService.save(userCourseBuyLog);
}
}
/**
* 购物车
* TODO 新版本上线后删除此方法

View File

@@ -65,6 +65,7 @@ public interface BuyOrderService extends IService<BuyOrder> {
List<ShopProductCourseEntity> getOrderCourse(String orderSn);
void addCourseToUser(String payType,BuyOrder orderEntity);
boolean checkWlOrder(String orderSn);
}

View File

@@ -88,6 +88,10 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
private UserVipService userVipService;
@Autowired
private VipBuyConfigService vipBuyConfigService;
@Autowired
private UserCourseBuyDao userCourseBuyDao;
@Autowired
private UserCourseBuyLogDao userCourseBuyLogDao;
protected Logger logger = LoggerFactory.getLogger(BuyOrderServiceImpl.class);
@@ -633,16 +637,80 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
@Override
public List<ShopProductCourseEntity> getOrderCourse(String orderSn) {
// BuyOrder one = this.getBaseMapper().selectOne(new LambdaQueryWrapper<BuyOrder>().eq(BuyOrder::getOrderSn, orderSn));
MPJLambdaWrapper<BuyOrder> wrapper = new MPJLambdaWrapper<>();
wrapper.selectAll(ShopProductCourseEntity.class);
wrapper.leftJoin(BuyOrderProduct.class,BuyOrderProduct::getOrderId,BuyOrder::getOrderId);
wrapper.leftJoin(ShopProduct.class,ShopProduct::getProductId,BuyOrderProduct::getProductId);
wrapper.leftJoin(ShopProductCourseEntity.class,ShopProductCourseEntity::getProductId,BuyOrderProduct::getProductId);
wrapper.select(ShopProduct::getGoodsType);
wrapper.eq(BuyOrder::getOrderSn,orderSn);
List<ShopProductCourseEntity> shopProductCourseEntities = this.getBaseMapper().selectJoinList(ShopProductCourseEntity.class, wrapper);
return shopProductCourseEntities;
}
@Override
public void addCourseToUser(String payType,BuyOrder orderEntity){
List<ShopProductCourseEntity> orderCourse = getOrderCourse(orderEntity.getOrderSn());
for (int i=0;i<orderCourse.size();i++){
ShopProductCourseEntity s = orderCourse.get(i);
LambdaQueryWrapper<UserCourseBuyEntity> wrapper2 = new LambdaQueryWrapper<>();
wrapper2.eq(UserCourseBuyEntity::getUserId,orderEntity.getUserId());
wrapper2.eq(UserCourseBuyEntity::getCatalogueId,s.getCatalogueId());
wrapper2.and(r->r.isNull(UserCourseBuyEntity::getEndTime).or().gt(UserCourseBuyEntity::getEndTime,new Date()));
List<UserCourseBuyEntity> userCourseBuyEntities = userCourseBuyDao.selectList(wrapper2);
//插入开课记录
UserCourseBuyLog userCourseBuyLog = new UserCourseBuyLog();
userCourseBuyLog.setUserId(orderEntity.getUserId());
userCourseBuyLog.setType("order");
userCourseBuyLog.setPayType(payType);
userCourseBuyLog.setPayTime(orderEntity.getCreateTime());
userCourseBuyLog.setOrderSn(orderEntity.getOrderSn());
if(userCourseBuyEntities.size()>0){//延长有效期
UserCourseBuyEntity userCourseBuyEntity = userCourseBuyEntities.get(0);
userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId());
userCourseBuyLog.setBeginDay(userCourseBuyEntity.getDays()+1);
userCourseBuyLog.setDays(s.getDays());
userCourseBuyEntity.setDays(userCourseBuyEntity.getDays()+s.getDays());
if(userCourseBuyEntity.getEndTime()!=null){
Calendar calendar = Calendar.getInstance();
calendar.setTime(userCourseBuyEntity.getEndTime());
calendar.add(Calendar.DAY_OF_MONTH,s.getDays());
userCourseBuyEntity.setEndTime(calendar.getTime());
}
userCourseBuyEntity.setCome(userCourseBuyEntity.getCome()+";延期("+payType+"购买:"+orderEntity.getOrderSn()+")");
userCourseBuyDao.updateById(userCourseBuyEntity);
}else{
UserCourseBuyEntity userCourseBuyEntity = new UserCourseBuyEntity();
userCourseBuyEntity.setUserId(orderEntity.getUserId());
userCourseBuyEntity.setCourseId(s.getCourseId());
userCourseBuyEntity.setCatalogueId(s.getCatalogueId());
userCourseBuyEntity.setDays(s.getDays());
userCourseBuyEntity.setCreateTime(new Date());
userCourseBuyEntity.setCome(payType+"购买:"+orderEntity.getOrderSn());
userCourseBuyDao.insert(userCourseBuyEntity);
userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId());
userCourseBuyLog.setBeginDay(0);
userCourseBuyLog.setDays(s.getDays());
}
//商品类型不是课程视为赠送课程报表金额为0
if (!"05".equals(s.getGoodsType())){
userCourseBuyLog.setFee(BigDecimal.ZERO);
userCourseBuyLog.setJf(BigDecimal.ZERO);
}else {
BigDecimal fee = orderEntity.getRealMoney().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP);
BigDecimal jf = orderEntity.getJfDeduction().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP);
if (i==(orderCourse.size()-1)){
userCourseBuyLog.setFee(orderEntity.getRealMoney().subtract(fee.multiply(new BigDecimal(orderCourse.size()-1))));
userCourseBuyLog.setJf(orderEntity.getJfDeduction().subtract(jf.multiply(new BigDecimal(orderCourse.size()-1))));
}else {
userCourseBuyLog.setFee(fee);
userCourseBuyLog.setJf(jf);
}
}
userCourseBuyLogDao.insert(userCourseBuyLog);
}
}
@Override
public boolean checkWlOrder(String orderSn) {
BuyOrder one = this.getOne(new LambdaQueryWrapper<BuyOrder>().eq(BuyOrder::getOrderSn, orderSn));

View File

@@ -1,5 +1,6 @@
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;
@@ -26,4 +27,8 @@ public class ShopProductCourseEntity {
@TableLogic
private Integer delFlag;
@TableField(exist = false)
private String goodsType;
}

View File

@@ -277,64 +277,7 @@ public class AliPayServiceImpl implements AliPayService {
userEbookBuyDao.insert(entity);
}
//开通coursestart
List<ShopProductCourseEntity> orderCourse = buyOrderService.getOrderCourse(order.getOrderSn());
for (int i=0;i<orderCourse.size();i++){
ShopProductCourseEntity s = orderCourse.get(i);
LambdaQueryWrapper<UserCourseBuyEntity> wrapper2 = new LambdaQueryWrapper<>();
wrapper2.eq(UserCourseBuyEntity::getUserId,order.getUserId());
wrapper2.eq(UserCourseBuyEntity::getCatalogueId,s.getCatalogueId());
wrapper2.and(r->r.isNull(UserCourseBuyEntity::getEndTime).or().gt(UserCourseBuyEntity::getEndTime,new Date()));
List<UserCourseBuyEntity> userCourseBuyEntities = userCourseBuyDao.selectList(wrapper2);
//插入开课记录
UserCourseBuyLog userCourseBuyLog = new UserCourseBuyLog();
userCourseBuyLog.setUserId(order.getUserId());
userCourseBuyLog.setType("order");
userCourseBuyLog.setPayType("支付宝");
userCourseBuyLog.setPayTime(order.getCreateTime());
userCourseBuyLog.setOrderSn(order.getOrderSn());
if(userCourseBuyEntities.size()>0){
UserCourseBuyEntity userCourseBuyEntity = userCourseBuyEntities.get(0);
userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId());
userCourseBuyLog.setBeginDay(userCourseBuyEntity.getDays()+1);
userCourseBuyLog.setDays(s.getDays());
userCourseBuyEntity.setDays(userCourseBuyEntity.getDays()+s.getDays());
if(userCourseBuyEntity.getEndTime()!=null){
Calendar calendar = Calendar.getInstance();
calendar.setTime(userCourseBuyEntity.getEndTime());
calendar.add(Calendar.DAY_OF_MONTH,s.getDays());
userCourseBuyEntity.setEndTime(calendar.getTime());
}
userCourseBuyEntity.setCome(userCourseBuyEntity.getCome()+";延期(支付宝购买:"+order.getOrderSn()+")");
userCourseBuyDao.updateById(userCourseBuyEntity);
}else{
UserCourseBuyEntity userCourseBuyEntity = new UserCourseBuyEntity();
userCourseBuyEntity.setUserId(order.getUserId());
userCourseBuyEntity.setCourseId(s.getCourseId());
userCourseBuyEntity.setCatalogueId(s.getCatalogueId());
userCourseBuyEntity.setDays(s.getDays());
userCourseBuyEntity.setCreateTime(new Date());
// userCourseBuyEntity.setStartTime(new Date());
// Calendar cal = Calendar.getInstance();
// cal.setTime(new Date());
// cal.add(Calendar.DAY_OF_MONTH,s.getDays());
// userCourseBuyEntity.setEndTime(cal.getTime());
userCourseBuyEntity.setCome("支付宝购买:"+order.getOrderSn());
userCourseBuyDao.insert(userCourseBuyEntity);
userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId());
userCourseBuyLog.setBeginDay(0);
userCourseBuyLog.setDays(s.getDays());
}
BigDecimal fee = order.getRealMoney().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP);
BigDecimal jf = order.getJfDeduction().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP);
if (i==(orderCourse.size()-1)){
userCourseBuyLog.setFee(order.getRealMoney().subtract(fee.multiply(new BigDecimal(orderCourse.size()-1))));
userCourseBuyLog.setJf(order.getJfDeduction().subtract(jf.multiply(new BigDecimal(orderCourse.size()-1))));
}else {
userCourseBuyLog.setFee(fee);
userCourseBuyLog.setJf(jf);
}
userCourseBuyLogDao.insert(userCourseBuyLog);
}
buyOrderService.addCourseToUser("支付宝",order);
//开通courseend
//发放优惠卷
couponService.insertCouponHistoryByProductId(order);

View File

@@ -225,66 +225,8 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
}
userEbookBuyService.saveBatch(userEbookBuyEntities);
//开通bookend
//开通coursestart
List<ShopProductCourseEntity> orderCourse = buyOrderService.getOrderCourse(order.getOrderSn());
for (int i = 0; i < orderCourse.size(); i++) {
ShopProductCourseEntity s = orderCourse.get(i);
LambdaQueryWrapper<UserCourseBuyEntity> wrapper2 = new LambdaQueryWrapper<>();
wrapper2.eq(UserCourseBuyEntity::getUserId,order.getUserId());
wrapper2.eq(UserCourseBuyEntity::getCatalogueId,s.getCatalogueId());
wrapper2.and(r->r.isNull(UserCourseBuyEntity::getEndTime).or().gt(UserCourseBuyEntity::getEndTime,new Date()));
List<UserCourseBuyEntity> userCourseBuyEntities = userCourseBuyDao.selectList(wrapper2);
//插入开课记录
UserCourseBuyLog userCourseBuyLog = new UserCourseBuyLog();
userCourseBuyLog.setUserId(order.getUserId());
userCourseBuyLog.setType("order");
userCourseBuyLog.setPayType("微信");
userCourseBuyLog.setPayTime(order.getCreateTime());
userCourseBuyLog.setOrderSn(order.getOrderSn());
if(userCourseBuyEntities.size()>0){
UserCourseBuyEntity userCourseBuyEntity = userCourseBuyEntities.get(0);
userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId());
userCourseBuyLog.setBeginDay(userCourseBuyEntity.getDays()+1);
userCourseBuyLog.setDays(s.getDays());
userCourseBuyEntity.setDays(userCourseBuyEntity.getDays()+s.getDays());
if(userCourseBuyEntity.getEndTime()!=null){
Calendar calendar = Calendar.getInstance();
calendar.setTime(userCourseBuyEntity.getEndTime());
calendar.add(Calendar.DAY_OF_MONTH,s.getDays());
userCourseBuyEntity.setEndTime(calendar.getTime());
}
userCourseBuyEntity.setCome(userCourseBuyEntity.getCome()+";延期(微信购买:"+order.getOrderSn()+")");
userCourseBuyDao.updateById(userCourseBuyEntity);
}else{
UserCourseBuyEntity userCourseBuyEntity = new UserCourseBuyEntity();
userCourseBuyEntity.setUserId(order.getUserId());
userCourseBuyEntity.setCourseId(s.getCourseId());
userCourseBuyEntity.setCatalogueId(s.getCatalogueId());
userCourseBuyEntity.setDays(s.getDays());
userCourseBuyEntity.setCreateTime(new Date());
// userCourseBuyEntity.setStartTime(new Date());
// Calendar cal = Calendar.getInstance();
// cal.setTime(new Date());
// cal.add(Calendar.DAY_OF_MONTH,s.getDays());
// userCourseBuyEntity.setEndTime(cal.getTime());
userCourseBuyEntity.setCome("微信购买:"+order.getOrderSn());
userCourseBuyDao.insert(userCourseBuyEntity);
userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId());
userCourseBuyLog.setBeginDay(0);
userCourseBuyLog.setDays(s.getDays());
}
BigDecimal fee = order.getRealMoney().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP);
BigDecimal jf = order.getJfDeduction().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP);
if (i==(orderCourse.size()-1)){
userCourseBuyLog.setFee(order.getRealMoney().subtract(fee.multiply(new BigDecimal(orderCourse.size()-1))));
userCourseBuyLog.setJf(order.getJfDeduction().subtract(jf.multiply(new BigDecimal(orderCourse.size()-1))));
}else {
userCourseBuyLog.setFee(fee);
userCourseBuyLog.setJf(jf);
}
userCourseBuyLogDao.insert(userCourseBuyLog);
}
buyOrderService.addCourseToUser("支付宝",order);
//开通courseend
//发放优惠卷
couponService.insertCouponHistoryByProductId(order);