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

View File

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

View File

@@ -1,11 +1,16 @@
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.commom.consumer.RechargeConsumerResp;
import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.manager.ConsumerManager;
import com.ruoyi.cai.service.PayTotalService;
import com.ruoyi.cai.service.RechargeOrderService;
import com.ruoyi.cai.service.VipOrderService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -21,10 +26,52 @@ public class PayManager {
@Autowired
private ConsumerManager consumerManager;
@Autowired
private RechargeOrderService rechargeOrderService;
@Autowired
private AwardManager awardManager;
@Autowired
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){
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()+"";
}
}