diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/test/TestPayController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/test/TestPayController.java new file mode 100644 index 00000000..233b1cc0 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/test/TestPayController.java @@ -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 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 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(); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/OrderNoUtil.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/OrderNoUtil.java index 80de66ed..65852337 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/OrderNoUtil.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/OrderNoUtil.java @@ -8,10 +8,20 @@ public class OrderNoUtil { public static final Snowflake snowflake = IdUtil.getSnowflake(1, 1); - public static final String VIP_ORDER_SUB = "V"; - public static final String RECHARGE_ORDER_SUB = "R"; + public static String createOrderNo(OrderTypeEnum sub){ + return sub.getType() + snowflake.nextIdStr(); + } - public static String createOrderNo(String sub){ - return sub + snowflake.nextIdStr(); + public static OrderTypeEnum getType(String orderNo){ + if(orderNo == null){ + return null; + } + OrderTypeEnum[] values = OrderTypeEnum.values(); + for (OrderTypeEnum value : values) { + if(orderNo.startsWith(value.getType())){ + return value; + } + } + return null; } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/OrderTypeEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/OrderTypeEnum.java new file mode 100644 index 00000000..510882ae --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/OrderTypeEnum.java @@ -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; + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java new file mode 100644 index 00000000..19f457cf --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java @@ -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; + } + + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/RechargeOrderServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/RechargeOrderServiceImpl.java index 0b47cbe6..12761657 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/RechargeOrderServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/RechargeOrderServiceImpl.java @@ -15,10 +15,7 @@ import com.ruoyi.cai.enums.ConsumeLogType; import com.ruoyi.cai.manager.IdManager; import com.ruoyi.cai.mapper.AccountMapper; import com.ruoyi.cai.mapper.RechargeOrderMapper; -import com.ruoyi.cai.pay.OrderNoUtil; -import com.ruoyi.cai.pay.PayStatusEnum; -import com.ruoyi.cai.pay.PlatformTypeEnum; -import com.ruoyi.cai.pay.RechargeTypeEnum; +import com.ruoyi.cai.pay.*; import com.ruoyi.cai.service.*; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.exception.ServiceException; @@ -69,6 +66,10 @@ public class RechargeOrderServiceImpl extends ServiceImpl im private MemberPriceService memberPriceService; @Autowired private UserMemberService userMemberService; + @Autowired + private UserService userService; /** * 强制修改VIP @@ -60,7 +60,7 @@ public class VipOrderServiceImpl extends ServiceImpl im vipOrder.setVipExpire(memberPrice.getExpires()); vipOrder.setVipLongs(memberPrice.getLongs()); 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.setPlatformType(PlatformTypeEnum.ADMIN.name()); vipOrder.setOperateIp(ServletUtils.getClientIP()); @@ -86,6 +86,10 @@ public class VipOrderServiceImpl extends ServiceImpl im @Override public VipOrder addVipOrder(AddVipOrderDto addVipOrder){ Long memberPriceId = addVipOrder.getMemberPriceId(); + User user = userService.getById(addVipOrder.getUserId()); + if(user == null){ + throw new ServiceException("用户不存在"); + } MemberPrice memberPrice = memberPriceService.getById(memberPriceId); if(memberPrice == null){ throw new ServiceException("VIP价格错误"); @@ -98,7 +102,7 @@ public class VipOrderServiceImpl extends ServiceImpl im vipOrder.setVipExpire(memberPrice.getExpires()); vipOrder.setVipLongs(memberPrice.getLongs()); 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()); this.save(vipOrder); return vipOrder; @@ -134,13 +138,12 @@ public class VipOrderServiceImpl extends ServiceImpl im } 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(); - // 以前会员失效 , 买了不同的会员等级 不做续费操作 + // 以前会员失效 if(userMember == null || !MemberStatusEnum.NORMAL.getCode().equals(userMember.getMemberStatus()) || // 会员不可用 - userMember.getExpireDate().isBefore(createTime) || // 时间已经失效了 定时任务还没有执行 - !memberType.equals(userMember.getMemberType()) // 会员类型变更 + userMember.getExpireDate().isBefore(createTime) ){ if(userMember == null){ userMember = new UserMember();