This commit is contained in:
dute7liang
2024-01-14 20:50:25 +08:00
parent 7f195c02be
commit b163213beb
6 changed files with 136 additions and 20 deletions

View File

@@ -0,0 +1,50 @@
package com.ruoyi.cai.controller.test;
import com.ruoyi.cai.domain.RechargeOrder;
import com.ruoyi.cai.domain.VipOrder;
import com.ruoyi.cai.dto.AddRechargeOrderDto;
import com.ruoyi.cai.dto.dto.AddVipOrderDto;
import com.ruoyi.cai.pay.PayManager;
import com.ruoyi.cai.service.RechargeOrderService;
import com.ruoyi.cai.service.VipOrderService;
import com.ruoyi.common.core.domain.R;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/cai/test/pay")
public class TestPayController {
@Autowired
private VipOrderService vipOrderService;
@Autowired
private RechargeOrderService rechargeOrderService;
@Autowired
private PayManager payManager;
@GetMapping("/vip")
public R<Void> vip(Long memberPriceId, Long userId){
AddVipOrderDto addVipOrderDto = new AddVipOrderDto();
addVipOrderDto.setUserId(userId);
addVipOrderDto.setMemberPriceId(memberPriceId);
VipOrder vipOrder = vipOrderService.addVipOrder(addVipOrderDto);
payManager.callBack(vipOrder.getOrderNo());
return R.ok();
}
@GetMapping("/recharge")
public R<Void> recharge(Long goodId, Long userId){
AddRechargeOrderDto dto = new AddRechargeOrderDto();
dto.setUserId(userId);
dto.setGoodId(goodId);
RechargeOrder order = rechargeOrderService.addRechargeOrder(dto);
payManager.callBack(order.getOrderNo());
return R.ok();
}
}

View File

@@ -8,10 +8,20 @@ public class OrderNoUtil {
public static final Snowflake snowflake = IdUtil.getSnowflake(1, 1); public static final Snowflake snowflake = IdUtil.getSnowflake(1, 1);
public static final String VIP_ORDER_SUB = "V"; public static String createOrderNo(OrderTypeEnum sub){
public static final String RECHARGE_ORDER_SUB = "R"; return sub.getType() + snowflake.nextIdStr();
}
public static String createOrderNo(String sub){ public static OrderTypeEnum getType(String orderNo){
return sub + snowflake.nextIdStr(); if(orderNo == null){
return null;
}
OrderTypeEnum[] values = OrderTypeEnum.values();
for (OrderTypeEnum value : values) {
if(orderNo.startsWith(value.getType())){
return value;
}
}
return null;
} }
} }

View File

@@ -0,0 +1,16 @@
package com.ruoyi.cai.pay;
import lombok.Getter;
@Getter
public enum OrderTypeEnum {
VIP_ORDER_SUB("V"),
RECHARGE_ORDER_SUB("R"),
;
private final String type;
OrderTypeEnum(String type) {
this.type = type;
}
}

View File

@@ -0,0 +1,36 @@
package com.ruoyi.cai.pay;
import com.ruoyi.cai.service.RechargeOrderService;
import com.ruoyi.cai.service.VipOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class PayManager {
@Autowired
private VipOrderService vipOrderService;
@Autowired
private RechargeOrderService rechargeOrderService;
public void callBack(String orderNo){
OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo);
if(orderTypeEnum == null){
log.error("订单类型有误orderNo={}",orderNo);
return;
}
switch (orderTypeEnum){
case VIP_ORDER_SUB:
vipOrderService.orderSuccess(orderNo);
break;
case RECHARGE_ORDER_SUB:
rechargeOrderService.orderSuccess(orderNo);
break;
default:
break;
}
}
}

View File

@@ -15,10 +15,7 @@ import com.ruoyi.cai.enums.ConsumeLogType;
import com.ruoyi.cai.manager.IdManager; import com.ruoyi.cai.manager.IdManager;
import com.ruoyi.cai.mapper.AccountMapper; import com.ruoyi.cai.mapper.AccountMapper;
import com.ruoyi.cai.mapper.RechargeOrderMapper; import com.ruoyi.cai.mapper.RechargeOrderMapper;
import com.ruoyi.cai.pay.OrderNoUtil; import com.ruoyi.cai.pay.*;
import com.ruoyi.cai.pay.PayStatusEnum;
import com.ruoyi.cai.pay.PlatformTypeEnum;
import com.ruoyi.cai.pay.RechargeTypeEnum;
import com.ruoyi.cai.service.*; import com.ruoyi.cai.service.*;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
@@ -69,6 +66,10 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public RechargeOrder addRechargeOrder(AddRechargeOrderDto addRechargeOrderDto){ public RechargeOrder addRechargeOrder(AddRechargeOrderDto addRechargeOrderDto){
Long goodId = addRechargeOrderDto.getGoodId(); Long goodId = addRechargeOrderDto.getGoodId();
User user = userService.getById(addRechargeOrderDto.getUserId());
if(user == null){
throw new ServiceException("用户不存在");
}
Goods goods = goodsService.getById(goodId); Goods goods = goodsService.getById(goodId);
if(goods == null){ if(goods == null){
throw new ServiceException("充值价格错误"); throw new ServiceException("充值价格错误");
@@ -80,7 +81,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
order.setRechargeCoin(goods.getAmount()); order.setRechargeCoin(goods.getAmount());
order.setRechargeType(RechargeTypeEnum.COIN.getCode()); order.setRechargeType(RechargeTypeEnum.COIN.getCode());
order.setPrice(goods.getPrice()); order.setPrice(goods.getPrice());
order.setOrderNo(OrderNoUtil.createOrderNo(OrderNoUtil.RECHARGE_ORDER_SUB)); order.setOrderNo(OrderNoUtil.createOrderNo(OrderTypeEnum.RECHARGE_ORDER_SUB));
order.setPayStatus(PayStatusEnum.READY_PAY.getCode()); order.setPayStatus(PayStatusEnum.READY_PAY.getCode());
order.setAdmin(false); order.setAdmin(false);
this.save(order); this.save(order);
@@ -140,7 +141,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
order.setRechargeCoin(dto.getRechargeCoin()); order.setRechargeCoin(dto.getRechargeCoin());
order.setPrice(BigDecimal.ZERO); order.setPrice(BigDecimal.ZERO);
order.setRechargeType(dto.getRechargeType()); order.setRechargeType(dto.getRechargeType());
order.setOrderNo(OrderNoUtil.createOrderNo(OrderNoUtil.RECHARGE_ORDER_SUB)); order.setOrderNo(OrderNoUtil.createOrderNo(OrderTypeEnum.RECHARGE_ORDER_SUB));
order.setPlatformType(PlatformTypeEnum.ADMIN.name()); order.setPlatformType(PlatformTypeEnum.ADMIN.name());
order.setPayStatus(PayStatusEnum.NO_PAY.getCode()); order.setPayStatus(PayStatusEnum.NO_PAY.getCode());
order.setOperateIp(ServletUtils.getClientIP()); order.setOperateIp(ServletUtils.getClientIP());

View File

@@ -5,15 +5,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.MemberPrice; import com.ruoyi.cai.domain.MemberPrice;
import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.domain.UserMember; import com.ruoyi.cai.domain.UserMember;
import com.ruoyi.cai.domain.VipOrder; import com.ruoyi.cai.domain.VipOrder;
import com.ruoyi.cai.dto.admin.vo.VipOrderAdminVo; import com.ruoyi.cai.dto.admin.vo.VipOrderAdminVo;
import com.ruoyi.cai.dto.dto.AddVipOrderDto; import com.ruoyi.cai.dto.dto.AddVipOrderDto;
import com.ruoyi.cai.mapper.VipOrderMapper; import com.ruoyi.cai.mapper.VipOrderMapper;
import com.ruoyi.cai.pay.MemberStatusEnum; import com.ruoyi.cai.pay.*;
import com.ruoyi.cai.pay.OrderNoUtil;
import com.ruoyi.cai.pay.PayStatusEnum;
import com.ruoyi.cai.pay.PlatformTypeEnum;
import com.ruoyi.cai.service.*; import com.ruoyi.cai.service.*;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
@@ -40,6 +38,8 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
private MemberPriceService memberPriceService; private MemberPriceService memberPriceService;
@Autowired @Autowired
private UserMemberService userMemberService; private UserMemberService userMemberService;
@Autowired
private UserService userService;
/** /**
* 强制修改VIP * 强制修改VIP
@@ -60,7 +60,7 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
vipOrder.setVipExpire(memberPrice.getExpires()); vipOrder.setVipExpire(memberPrice.getExpires());
vipOrder.setVipLongs(memberPrice.getLongs()); vipOrder.setVipLongs(memberPrice.getLongs());
vipOrder.setPrice(memberPrice.getPrice()); vipOrder.setPrice(memberPrice.getPrice());
vipOrder.setOrderNo(OrderNoUtil.createOrderNo(OrderNoUtil.VIP_ORDER_SUB)); vipOrder.setOrderNo(OrderNoUtil.createOrderNo(OrderTypeEnum.VIP_ORDER_SUB));
vipOrder.setPayStatus(PayStatusEnum.NO_PAY.getCode()); vipOrder.setPayStatus(PayStatusEnum.NO_PAY.getCode());
vipOrder.setPlatformType(PlatformTypeEnum.ADMIN.name()); vipOrder.setPlatformType(PlatformTypeEnum.ADMIN.name());
vipOrder.setOperateIp(ServletUtils.getClientIP()); vipOrder.setOperateIp(ServletUtils.getClientIP());
@@ -86,6 +86,10 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
@Override @Override
public VipOrder addVipOrder(AddVipOrderDto addVipOrder){ public VipOrder addVipOrder(AddVipOrderDto addVipOrder){
Long memberPriceId = addVipOrder.getMemberPriceId(); Long memberPriceId = addVipOrder.getMemberPriceId();
User user = userService.getById(addVipOrder.getUserId());
if(user == null){
throw new ServiceException("用户不存在");
}
MemberPrice memberPrice = memberPriceService.getById(memberPriceId); MemberPrice memberPrice = memberPriceService.getById(memberPriceId);
if(memberPrice == null){ if(memberPrice == null){
throw new ServiceException("VIP价格错误"); throw new ServiceException("VIP价格错误");
@@ -98,7 +102,7 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
vipOrder.setVipExpire(memberPrice.getExpires()); vipOrder.setVipExpire(memberPrice.getExpires());
vipOrder.setVipLongs(memberPrice.getLongs()); vipOrder.setVipLongs(memberPrice.getLongs());
vipOrder.setPrice(memberPrice.getPrice()); vipOrder.setPrice(memberPrice.getPrice());
vipOrder.setOrderNo(OrderNoUtil.createOrderNo(OrderNoUtil.VIP_ORDER_SUB)); vipOrder.setOrderNo(OrderNoUtil.createOrderNo(OrderTypeEnum.VIP_ORDER_SUB));
vipOrder.setPayStatus(PayStatusEnum.READY_PAY.getCode()); vipOrder.setPayStatus(PayStatusEnum.READY_PAY.getCode());
this.save(vipOrder); this.save(vipOrder);
return vipOrder; return vipOrder;
@@ -134,13 +138,12 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
} }
public boolean incVip(Long userId,Integer memberType,Integer expire,Integer longs){ public boolean incVip(Long userId,Integer memberType,Integer expire,Integer longs){
UserMember userMember = userMemberService.getByUserId(userId); UserMember userMember = userMemberService.getByUserIdAndType(userId,memberType);
LocalDateTime createTime = LocalDateTime.now(); LocalDateTime createTime = LocalDateTime.now();
// 以前会员失效 , 买了不同的会员等级 不做续费操作 // 以前会员失效
if(userMember == null || if(userMember == null ||
!MemberStatusEnum.NORMAL.getCode().equals(userMember.getMemberStatus()) || // 会员不可用 !MemberStatusEnum.NORMAL.getCode().equals(userMember.getMemberStatus()) || // 会员不可用
userMember.getExpireDate().isBefore(createTime) || // 时间已经失效了 定时任务还没有执行 userMember.getExpireDate().isBefore(createTime)
!memberType.equals(userMember.getMemberType()) // 会员类型变更
){ ){
if(userMember == null){ if(userMember == null){
userMember = new UserMember(); userMember = new UserMember();