This commit is contained in:
777
2025-11-25 10:29:36 +08:00
parent 53e3adb498
commit ea9c4f2a61
5 changed files with 60 additions and 38 deletions

View File

@@ -1,2 +1,6 @@
ALTER TABLE cai_pay_trd_config
ADD COLUMN `extend_data` JSON;
-- 2025-11-25
ALTER TABLE cai_goods
ADD COLUMN `wx_amount` int default 0 not null comment '微信钻石';

View File

@@ -102,7 +102,7 @@ public class PayController {
@Operation(summary = "微信聚合支付")
@Log(title = "微信聚合支付", businessType = BusinessType.OTHER, isSaveDb = true)
public R<PayReturnResp> trdWxPay(@RequestBody PayControllerDTO dto){
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo());
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo(),true);
if(payOrderInfo == null){
return R.fail(600,"支付失败,未找到订单");
}
@@ -133,7 +133,7 @@ public class PayController {
}catch (Exception e){
orderLogsService.createBaseFail(dto.getOrderNo(),"四方支付宝支付",StringUtils.cat(e.getMessage(),2000));
log.error("微信聚合支付 使用第三方支付失败! dto={}",JSON.toJSONString(dto), e);
return R.fail(600,"支付宝支付失败!");
return R.fail(600,"微信支付失败!");
}
}
@@ -157,7 +157,7 @@ public class PayController {
if(payTrdConfig == null){
return R.fail(600,"支付失败,未找到支付通道信息");
}
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(v14Token.getOrderNo());
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(v14Token.getOrderNo(),true);
if(payOrderInfo == null){
return R.fail(600,"支付失败,未找到订单");
}
@@ -217,7 +217,7 @@ public class PayController {
@Operation(summary = "支付宝聚合支付")
@Log(title = "支付宝聚合支付", businessType = BusinessType.OTHER, isSaveDb = true)
public R<PayReturnResp> trdAliPay(@RequestBody PayControllerDTO dto){
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo());
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo(),false);
if(payOrderInfo == null){
return R.fail(600,"支付失败,未找到订单");
}
@@ -276,7 +276,7 @@ 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());
PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo(),true);
if(payOrderInfo == null){
return R.fail(600,"支付失败,未找到订单");
}
@@ -338,33 +338,33 @@ public class PayController {
// @PostMapping(value = "/ali")
// @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){
log.error("支付失败,未找到可用的支付宝配置");
return R.fail(600,"支付失败!未开通支付宝支付!");
}
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody(payOrderInfo.getBody());
model.setSubject(payOrderInfo.getSubject());
model.setOutTradeNo(payOrderInfo.getOrderNo());
model.setTimeoutExpress("30m");
model.setTotalAmount(payOrderInfo.getPrice().toString());
String notifyUrl = AliPayApiConfigKit.getAliPayApiConfig().getDomain();
String orderInfo = AliPayApi.appPayToResponse(model, notifyUrl+NOTIFY_ALI_URL).getBody();
PayReturnResp resp = new PayReturnResp();
resp.setData(orderInfo);
return R.ok(resp);
} catch (AlipayApiException e) {
log.error("支付宝支付失败",e);
return R.fail("支付宝支付失败,请联系客服");
}
}
// 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){
// log.error("支付失败,未找到可用的支付宝配置");
// return R.fail(600,"支付失败!未开通支付宝支付!");
// }
// AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
// model.setBody(payOrderInfo.getBody());
// model.setSubject(payOrderInfo.getSubject());
// model.setOutTradeNo(payOrderInfo.getOrderNo());
// model.setTimeoutExpress("30m");
// model.setTotalAmount(payOrderInfo.getPrice().toString());
// String notifyUrl = AliPayApiConfigKit.getAliPayApiConfig().getDomain();
// String orderInfo = AliPayApi.appPayToResponse(model, notifyUrl+NOTIFY_ALI_URL).getBody();
// PayReturnResp resp = new PayReturnResp();
// resp.setData(orderInfo);
// return R.ok(resp);
// } catch (AlipayApiException e) {
// log.error("支付宝支付失败",e);
// return R.fail("支付宝支付失败,请联系客服");
// }
// }
@PostMapping(value = "/wx/notify")
@Operation(hidden = true)

View File

@@ -68,6 +68,9 @@ public class SettingAppController {
List<Goods> list = goodsService.list(Wrappers.lambdaQuery(Goods.class)
.eq(Goods::getStatus,0)
.orderByAsc(Goods::getPrice));
list.forEach(i -> {
i.setAliAmountDiff(i.getAmount() - i.getWxAmount());
});
vo.setGoods(list);
return R.ok(vo);
}

View File

@@ -1,6 +1,7 @@
package com.ruoyi.cai.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -40,8 +41,12 @@ public class Goods implements Serializable {
/**
*
*/
@Schema(description = "紫贝数量")
@Schema(description = "支付宝紫贝数量")
private Long amount;
@Schema(description = "微信紫贝数量")
private Long wxAmount;
@TableField(exist = false)
private Long aliAmountDiff;
/**
* 状态 0 可用 1不可用
*/

View File

@@ -12,6 +12,7 @@ import com.ijpay.core.enums.SignType;
import com.ijpay.core.kit.WxPayKit;
import com.ijpay.wxpay.WxPayApi;
import com.ijpay.wxpay.model.OrderQueryModel;
import com.ruoyi.cai.domain.Goods;
import com.ruoyi.cai.domain.PayConfig;
import com.ruoyi.cai.domain.RechargeOrder;
import com.ruoyi.cai.domain.VipOrder;
@@ -21,10 +22,7 @@ import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp;
import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.manager.ConsumerManager;
import com.ruoyi.cai.pay.model.PayQueryModel;
import com.ruoyi.cai.service.PayConfigService;
import com.ruoyi.cai.service.PayTotalService;
import com.ruoyi.cai.service.RechargeOrderService;
import com.ruoyi.cai.service.VipOrderService;
import com.ruoyi.cai.service.*;
import com.ruoyi.common.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -51,6 +49,8 @@ public class PayManager {
private PayConfigService payConfigService;
@Autowired
private PayConfigManager payConfigManager;
@Autowired
private GoodsService goodsService;
public PayQueryModel queryOrder(PayConfig payConfig,String orderNo,String appid) throws AlipayApiException {
if(PayTypeEnum.ALI.getCode().equals(payConfig.getPayType())){
@@ -161,7 +161,7 @@ public class PayManager {
}
}
public PayOrderInfoDTO getOrderInfo(String orderNo){
public PayOrderInfoDTO getOrderInfo(String orderNo,boolean wx){
OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo);
if(orderTypeEnum == null){
log.error("订单类型有误orderNo={}",orderNo);
@@ -194,6 +194,16 @@ public class PayManager {
if(!PayStatusEnum.READY_PAY.getCode().equals(rechargeOrder.getPayStatus())){
throw new ServiceException("订单状态有误,请重新下单支付");
}
if(wx){
if(rechargeOrder.getRechargeId() != null){
Goods goods = goodsService.getById(rechargeOrder.getRechargeId());
if(goods != null){
rechargeOrderService.update(Wrappers.lambdaUpdate(RechargeOrder.class)
.eq(RechargeOrder::getId, rechargeOrder.getId())
.set(RechargeOrder::getRechargeCoin, goods.getWxAmount()));
}
}
}
dto = new PayOrderInfoDTO();
dto.setBody(rechargeOrder.getRechargeName());
dto.setSubject(rechargeOrder.getRechargeName());