This commit is contained in:
dute7liang
2024-01-27 17:09:35 +08:00
parent df689571a2
commit 63b2d1f238
5 changed files with 93 additions and 21 deletions

View File

@@ -55,20 +55,7 @@ public class ConsumeController {
@PostMapping("/order/vip/create") @PostMapping("/order/vip/create")
@Operation(summary = "创建VIP订单") @Operation(summary = "创建VIP订单")
@Log(title = "创建VIP订单", businessType = BusinessType.OTHER, isSaveDb = true) @Log(title = "创建VIP订单", businessType = BusinessType.OTHER, isSaveDb = true)
public R<OrderCreateVo> vipOrderCreate(@RequestBody AddRechargeOrderDto dto){ public R<OrderCreateVo> vipOrderCreate(@RequestBody AddVipOrderDto dto){
RechargeOrder order = rechargeOrderService.addRechargeOrder(dto);
OrderCreateVo vo = new OrderCreateVo();
vo.setPrice(order.getPrice());
vo.setOrderNo(order.getOrderNo());
vo.setOrderName(order.getRechargeName());
return R.ok(vo);
}
@PostMapping("/order/recharge/create")
@Operation(summary = "创建充值订单")
@Log(title = "创建充值订单", businessType = BusinessType.OTHER, isSaveDb = true)
public R<OrderCreateVo> giveGift(@RequestBody AddVipOrderDto dto){
VipOrder order = vipOrderService.addVipOrder(dto); VipOrder order = vipOrderService.addVipOrder(dto);
OrderCreateVo vo = new OrderCreateVo(); OrderCreateVo vo = new OrderCreateVo();
vo.setPrice(order.getPrice()); vo.setPrice(order.getPrice());
@@ -76,4 +63,17 @@ public class ConsumeController {
vo.setOrderName(order.getVipName()); vo.setOrderName(order.getVipName());
return R.ok(vo); return R.ok(vo);
} }
@PostMapping("/order/recharge/create")
@Operation(summary = "创建充值订单")
@Log(title = "创建充值订单", businessType = BusinessType.OTHER, isSaveDb = true)
public R<OrderCreateVo> rechargeOrderCreate(@RequestBody AddRechargeOrderDto dto){
RechargeOrder order = rechargeOrderService.addRechargeOrder(dto);
OrderCreateVo vo = new OrderCreateVo();
vo.setPrice(order.getPrice());
vo.setOrderNo(order.getOrderNo());
vo.setOrderName(order.getRechargeName());
return R.ok(vo);
}
} }

View File

@@ -48,6 +48,10 @@ public class PayController {
@Operation(summary = "微信支付") @Operation(summary = "微信支付")
@Log(title = "微信支付", businessType = BusinessType.OTHER, isSaveDb = true) @Log(title = "微信支付", businessType = BusinessType.OTHER, isSaveDb = true)
public R<PayReturnResp> appPay(@RequestBody PayControllerDTO dto) { public R<PayReturnResp> appPay(@RequestBody PayControllerDTO dto) {
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo());
if(payOrderInfo == null){
return R.fail(600,"支付失败,未找到订单");
}
PayConfig payConfig = payConfigManager.getWxConfig(); PayConfig payConfig = payConfigManager.getWxConfig();
String ip = ServletUtils.getClientIP(); String ip = ServletUtils.getClientIP();
Map<String, String> params = UnifiedOrderModel Map<String, String> params = UnifiedOrderModel
@@ -55,9 +59,9 @@ public class PayController {
.appid(dto.getWxAppId()) .appid(dto.getWxAppId())
.mch_id(payConfig.getWxMcid()) .mch_id(payConfig.getWxMcid())
.nonce_str(WxPayKit.generateStr()) .nonce_str(WxPayKit.generateStr())
.body("微信支付") .body(payOrderInfo.getBody())
.out_trade_no(WxPayKit.generateStr()) .out_trade_no(WxPayKit.generateStr())
.total_fee("1000") .total_fee(payOrderInfo.getPriceFenStr())
.spbill_create_ip(ip) .spbill_create_ip(ip)
.notify_url(payConfig.getNotifyUrl()) .notify_url(payConfig.getNotifyUrl())
.trade_type(TradeType.APP.getTradeType()) .trade_type(TradeType.APP.getTradeType())
@@ -92,17 +96,21 @@ public class PayController {
@Operation(summary = "支付宝支付") @Operation(summary = "支付宝支付")
@Log(title = "支付宝支付", businessType = BusinessType.OTHER, isSaveDb = true) @Log(title = "支付宝支付", businessType = BusinessType.OTHER, isSaveDb = true)
public R<PayReturnResp> aliPay(@RequestBody PayControllerDTO dto) { public R<PayReturnResp> aliPay(@RequestBody PayControllerDTO dto) {
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo());
if(payOrderInfo == null){
return R.fail(600,"支付失败,未找到订单");
}
try { try {
boolean b = payConfigManager.initAliPay(); boolean b = payConfigManager.initAliPay();
if(!b){ if(!b){
return R.fail("支付宝支付失败!请联系管理员"); return R.fail(600,"支付宝支付失败!请联系管理员");
} }
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("我是测试数据-By Javen"); model.setBody(payOrderInfo.getBody());
model.setSubject("App支付测试-By Javen"); model.setSubject(payOrderInfo.getSubject());
model.setOutTradeNo(WxPayKit.generateStr()); model.setOutTradeNo(WxPayKit.generateStr());
model.setTimeoutExpress("30m"); model.setTimeoutExpress("30m");
model.setTotalAmount("0.01"); model.setTotalAmount(payOrderInfo.getPrice().toString());
String notifyUrl = AliPayApiConfigKit.getAliPayApiConfig().getServiceUrl(); String notifyUrl = AliPayApiConfigKit.getAliPayApiConfig().getServiceUrl();
String orderInfo = AliPayApi.appPayToResponse(model, notifyUrl).getBody(); String orderInfo = AliPayApi.appPayToResponse(model, notifyUrl).getBody();
PayReturnResp resp = new PayReturnResp(); PayReturnResp resp = new PayReturnResp();

View File

@@ -6,7 +6,7 @@ import lombok.Data;
@Data @Data
public class PayControllerDTO { public class PayControllerDTO {
@Schema(description = "订单号") @Schema(description = "订单号")
private String tradeNo; private String orderNo;
@Schema(description = "微信支付的时候需要传") @Schema(description = "微信支付的时候需要传")
private String wxAppId; private String wxAppId;
} }

View File

@@ -1,11 +1,16 @@
package com.ruoyi.cai.pay; package com.ruoyi.cai.pay;
import com.ruoyi.cai.domain.RechargeOrder;
import com.ruoyi.cai.domain.VipOrder;
import com.ruoyi.cai.dto.ConsumeResp; import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp; import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp;
import com.ruoyi.cai.manager.AwardManager; import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.manager.ConsumerManager; import com.ruoyi.cai.manager.ConsumerManager;
import com.ruoyi.cai.service.PayTotalService; import com.ruoyi.cai.service.PayTotalService;
import com.ruoyi.cai.service.RechargeOrderService;
import com.ruoyi.cai.service.VipOrderService; import com.ruoyi.cai.service.VipOrderService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -21,10 +26,52 @@ public class PayManager {
@Autowired @Autowired
private ConsumerManager consumerManager; private ConsumerManager consumerManager;
@Autowired @Autowired
private RechargeOrderService rechargeOrderService;
@Autowired
private AwardManager awardManager; private AwardManager awardManager;
@Autowired @Autowired
private PayTotalService payTotalService; private PayTotalService payTotalService;
public PayOrderInfoDTO getOrderInfo(String orderNo){
OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo);
if(orderTypeEnum == null){
log.error("订单类型有误orderNo={}",orderNo);
throw new ServiceException("支付失败,请检查订单号");
}
PayOrderInfoDTO dto = null;
switch (orderTypeEnum) {
case VIP_ORDER_SUB:
VipOrder vipOrder = vipOrderService.getByOrderNo(orderNo);
if(vipOrder == null){
throw new ServiceException("订单不存在,请重新下单支付");
}
if(!PayStatusEnum.READY_PAY.getCode().equals(vipOrder.getPayStatus())){
throw new ServiceException("订单状态有误,请重新下单支付");
}
dto = new PayOrderInfoDTO();
dto.setBody(vipOrder.getVipName());
dto.setSubject(vipOrder.getVipName());
dto.setPrice(vipOrder.getPrice());
break;
case RECHARGE_ORDER_SUB:
RechargeOrder rechargeOrder = rechargeOrderService.getByOrderNo(orderNo);
if(rechargeOrder == null){
throw new ServiceException("订单不存在,请重新下单支付");
}
if(!PayStatusEnum.READY_PAY.getCode().equals(rechargeOrder.getPayStatus())){
throw new ServiceException("订单状态有误,请重新下单支付");
}
dto = new PayOrderInfoDTO();
dto.setBody(rechargeOrder.getRechargeName());
dto.setSubject(rechargeOrder.getRechargeName());
dto.setPrice(rechargeOrder.getPrice());
break;
default:
break;
}
return dto;
}
public void callBack(String orderNo){ public void callBack(String orderNo){
callBack(orderNo,null,null,null,null); callBack(orderNo,null,null,null,null);
} }

View File

@@ -0,0 +1,17 @@
package com.ruoyi.cai.pay;
import cn.hutool.core.util.NumberUtil;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class PayOrderInfoDTO {
private String body;
private String subject;
private BigDecimal price;
public String getPriceFenStr(){
return NumberUtil.mul(price,100).longValue()+"";
}
}