This commit is contained in:
wyn
2026-04-28 17:21:51 +08:00
parent dca56c9493
commit f57f5dc9d9
11 changed files with 194 additions and 27 deletions

View File

@@ -1,6 +1,7 @@
package com.peanut.modules.common.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.peanut.modules.common.entity.UserVipLog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -9,7 +10,7 @@ import java.util.List;
import java.util.Map;
@Mapper
public interface UserVipLogDao extends BaseMapper<UserVipLog> {
public interface UserVipLogDao extends MPJBaseMapper<UserVipLog> {
List<Map<String,Object>> getUserVipLogInfo(@Param("date") String date);

View File

@@ -16,6 +16,7 @@ public class BuyOrderRefund implements Serializable {
@TableId
private Integer id;
private String refundNo;
private Integer userId;
//订单类型 线上 线下
private String type;

View File

@@ -8,4 +8,5 @@ import java.math.BigDecimal;
public interface BuyOrderRefundService extends IService<BuyOrderRefund> {
int insertBuyOrderRefund(BuyOrder buyOrder, BigDecimal refundFee, int deductShipping,String remark);
String genRefundNo();
}

View File

@@ -20,6 +20,8 @@ public interface CouponService extends IService<CouponEntity> {
R insertCouponHistory(int couponId, int userId,int getType,int status,String remark);
R insertCouponHistory(BuyOrder buyOrder, int couponId, int userId, int getType, int status, String remark);
List<CouponHistory> getCouponListPayment(Map<String,Object> params);
//使用优惠卷

View File

@@ -29,4 +29,5 @@ public interface UserVipService extends IService<UserVip> {
void openVipForUser(BuyOrder buyOrder);
void refundVip(BuyOrder buyOrder);
}

View File

@@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Random;
@Slf4j
@Service("commonBuyOrderRefundService")
@@ -30,4 +31,10 @@ public class BuyOrderRefundServiceImpl extends ServiceImpl<BuyOrderRefundDao, Bu
this.save(buyOrderRefund);
return buyOrderRefund.getId();
}
@Override
public String genRefundNo() {
long time = System.currentTimeMillis();
int random = new Random().nextInt(900) + 100; // 100~999
return "RF" + time + random;
}
}

View File

@@ -123,7 +123,50 @@ public class CouponServiceImpl extends ServiceImpl<CouponDao, CouponEntity> impl
return R.error("优惠券暂未开始发放");
}
}
@Override
public R insertCouponHistory(BuyOrder buyOrder, int couponId, int userId, int getType, int status, String remark) {
CouponEntity couponEntity = couponDao.selectById(couponId);
if (couponEntity.getCurrentState()==0){
int historyCount = couponHistoryDao.selectCount(new LambdaQueryWrapper<CouponHistory>()
.eq(CouponHistory::getCouponId,couponId)).intValue();
//是否超出总发行量
if (historyCount<couponEntity.getTotalCirculation()){
List<CouponHistory> historyList = couponHistoryDao.selectList(new LambdaQueryWrapper<CouponHistory>()
.eq(CouponHistory::getUserId,userId)
.eq(CouponHistory::getCouponId,couponId));
//是否超出可持有张数
if (historyList.size()<couponEntity.getLimitedCollar()){
CouponHistory couponHistory = new CouponHistory();
couponHistory.setCouponId(couponId);
couponHistory.setUserId(userId);
couponHistory.setGetType(getType);
couponHistory.setStatus(status);
couponHistory.setRemark(remark);
couponHistory.setEffectType(couponEntity.getEffectType());
Date date = new Date();
if (couponEntity.getEffectType()==1){
couponHistory.setStartTime(date);
couponHistory.setEndTime(DateUtils.addDateDays(date,couponEntity.getValidity()));
}else if (couponEntity.getEffectType()==2){
couponHistory.setStartTime(couponEntity.getEffectTime());
couponHistory.setEndTime(couponEntity.getExpireTime());
}
if (couponHistory.getStatus()==1){
couponHistory.setUseTime(date);
}
couponHistory.setOrderId(buyOrder.getOrderId());
couponHistoryDao.insert(couponHistory);
return R.ok();
}else {
return R.error("每人限领"+couponEntity.getLimitedCollar()+"");
}
}else {
return R.error("优惠券已放完");
}
}else {
return R.error("优惠券暂未开始发放");
}
}
@Override
public List<CouponHistory> getCouponListPayment(Map<String, Object> params) {
List<CouponHistory> res = new ArrayList<>();
@@ -280,17 +323,25 @@ public class CouponServiceImpl extends ServiceImpl<CouponDao, CouponEntity> impl
if (userVipList.size() > 0) {
isVip = true;
}
System.out.println("isVip:"+isVip);
BigDecimal refundAllJF = BigDecimal.ZERO;
Boolean isRefundCoupon = false;
for (Map<String,Object> map : buyOrderProducts) {
ShopProduct shopProduct = shopProductDao.selectById(map.get("product_id").toString());
System.out.println("goodsType:"+shopProduct.getGoodsType());
if ("03".equals(shopProduct.getGoodsType())){
int couponId = Integer.parseInt(map.get("coupon_id").toString());
CouponEntity couponEntity = couponDao.selectById(couponId);
//现金券
if (couponEntity.getCouponType()==0 && isVip){
BigDecimal quantity = new BigDecimal(map.get("quantity").toString());
refundAllJF.add(couponEntity.getCouponAmount().multiply(quantity));
BigDecimal sumRefundJF = couponEntity.getCouponAmount().multiply(quantity);
refundAllJF = refundAllJF.add(sumRefundJF);
QueryWrapper<CouponHistory> couponHistoryRemoveWrapper = new QueryWrapper<>();
couponHistoryRemoveWrapper.eq("order_id",order.getOrderId());
couponHistoryRemoveWrapper.eq("status",1);
couponHistoryService.remove(couponHistoryRemoveWrapper);
}else{
isRefundCoupon = true;
}
@@ -338,7 +389,7 @@ public class CouponServiceImpl extends ServiceImpl<CouponDao, CouponEntity> impl
if (couponEntity.getCouponType()==0){
BigDecimal jf = BigDecimal.ZERO;
for (int i=0;i<Integer.parseInt(map.get("quantity").toString());i++){
R res = insertCouponHistory(couponId,order.getUserId(), 1,1,
R res = insertCouponHistory(order,couponId,order.getUserId(), 1,1,
"购买商品"+shopProduct.getProductName()+"赠送;vip用户购买预售书优惠券换积分。");
if (Integer.parseInt(res.get("code").toString())==0&&couponEntity.getCouponAmount() != null && couponEntity.getCouponAmount().compareTo(BigDecimal.ZERO)>0) {
jf = jf.add(couponEntity.getCouponAmount());

View File

@@ -1,8 +1,11 @@
package com.peanut.modules.common.service.impl;
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.common.utils.ShiroUtils;
import com.peanut.modules.book.vo.UserVipYearVo;
import com.peanut.modules.common.dao.*;
import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.UserVipLogService;
@@ -12,7 +15,6 @@ import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
@Slf4j
@@ -33,6 +35,8 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
private VipBuyConfigDao vipBuyConfigDao;
@Autowired
private UserVipLogService userVipLogService;
@Autowired
private UserVipLogDao userVipLogDao;
@Override
public boolean isVip() {
@@ -401,5 +405,26 @@ public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> impleme
}
}
@Override
public void refundVip(BuyOrder buyOrder){
MPJLambdaWrapper<UserVipLog> UserVipLogMPJLambdaWrapper = new MPJLambdaWrapper<>();
UserVipLogMPJLambdaWrapper.leftJoin(UserVip.class,UserVip::getId,UserVipLog::getUserVipId);
UserVipLogMPJLambdaWrapper.leftJoin(BuyOrder.class,BuyOrder::getOrderSn,UserVipLog::getOrderSn);
UserVipLogMPJLambdaWrapper.leftJoin(VipBuyConfigEntity.class,VipBuyConfigEntity::getId,BuyOrder::getVipBuyConfigId);
UserVipLogMPJLambdaWrapper.selectAll(UserVip.class);
UserVipLogMPJLambdaWrapper.select(VipBuyConfigEntity::getYear);
UserVipLogMPJLambdaWrapper.eq(UserVipLog::getOrderSn,buyOrder.getOrderSn()).eq(UserVip::getState,0);
List<UserVipYearVo> userVipYearList = userVipLogDao.selectJoinList(UserVipYearVo.class, UserVipLogMPJLambdaWrapper);
for (UserVipYearVo userVipYearVo:userVipYearList){
UserVip userVip = userVipDao.selectById(userVipYearVo.getId());
userVip.setEndTime(DateUtils.addYears(userVip.getEndTime(),-userVipYearVo.getYear()));
if(userVip.getStartTime().compareTo(userVip.getEndTime())==0){
this.removeById(userVip);
}else{
this.updateById(userVip);
}
}
userVipLogService.remove(new QueryWrapper<UserVipLog>().eq("order_sn",buyOrder.getOrderSn()).eq("user_id",buyOrder.getUserId()));
}
}