diff --git a/doc/20251112.sql b/doc/20251112.sql index ca0577b5..0bf9856b 100644 --- a/doc/20251112.sql +++ b/doc/20251112.sql @@ -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 '微信钻石'; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java index 50c9e18b..a738cae5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java @@ -102,7 +102,7 @@ public class PayController { @Operation(summary = "微信聚合支付") @Log(title = "微信聚合支付", businessType = BusinessType.OTHER, isSaveDb = true) public R 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 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 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 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 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) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/SettingAppController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/SettingAppController.java index 05c98b9c..8442bc96 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/SettingAppController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/SettingAppController.java @@ -68,6 +68,9 @@ public class SettingAppController { List 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); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Goods.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Goods.java index bd02f91e..48f1432d 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Goods.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Goods.java @@ -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不可用 */ 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 index c88f8639..725d2d26 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java @@ -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());