From c7d71811b66792f2f465340617c772add4b10c8f Mon Sep 17 00:00:00 2001 From: wangqx Date: Fri, 26 Sep 2025 15:25:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[fix]=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/app/AppPayController.java | 13 +++--- .../soopin/order/service/OrderService.java | 2 + .../order/service/impl/OrderServiceImpl.java | 41 +++++++++++++++++++ .../kit/params/impl/OrderCashier.java | 9 ++-- 4 files changed, 55 insertions(+), 10 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppPayController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppPayController.java index 2ae82ac7a..d42394e2e 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppPayController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppPayController.java @@ -73,11 +73,14 @@ public class AppPayController { if (user == null) { return R.notLogin(); } - //先生成充值订单 - chargeBO.setMemberId(user.getUserId()); - chargeBO.setMethod(paymentMethodEnum.getCode()); - chargeBusiness.charge(chargeBO); - payParam.setSn(chargeBO.getCode()); + if(payParam.getOrderType().equals("RECHARGE")){ + //先生成充值订单 + chargeBO.setMemberId(user.getUserId()); + chargeBO.setMethod(paymentMethodEnum.getCode()); + chargeBusiness.charge(chargeBO); + payParam.setSn(chargeBO.getCode()); + } + return cashierSupport.payment(paymentMethodEnum, paymentClientEnum, request, response, payParam); } catch (ServiceException se) { log.info("支付异常", se); diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java index 4a2b958ea..fc1115fb2 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java @@ -50,4 +50,6 @@ public interface OrderService extends IService { void sendMessage(Long orderId); + void paySuccess(String orderNo,String payNo,Integer payType); + } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java index 3e138c396..cc252bb72 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java @@ -3,6 +3,7 @@ package com.wzj.soopin.order.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.text.StrBuilder; import cn.hutool.core.util.RandomUtil; @@ -530,5 +531,45 @@ public class OrderServiceImpl extends ServiceImpl implements } } + + @Override + public void paySuccess(String orderNo,String payNo,Integer payType) { + // 根据订单编号查询订单信息 + Order order = getByNo(orderNo); + Assert.notNull(order, "订单不存在"); + // 生成订单核销码信息 + verificationCodeService.generateVerificationCode(order); + // 更新订单信息 + this.updateById(Order.builder() + .id(order.getId()) + .status(OrderStatusEnum.VERIFY.getValue()) + .paymentTime(LocalDateTime.now()) + .payType(payType) + .build()); + + //发出消息 + MqUtil.sendIMMessage(buildMQMessage(order)); + } + + private MQMessage buildMQMessage(Order order) { + Map params = new HashMap<>(); + params.put("orderID", order.getId()); + params.put("amount", order.getTotalAmount()); + + //取订单的第一个商品 + List orderItems = orderItemMapper.findByOrderId(order.getId()); + if (CollectionUtil.isNotEmpty(orderItems)) { + params.put("name", orderItems.get(0).getProductName()); + params.put("pic", orderItems.get(0).getPic()); + params.put("price", orderItems.get(0).getSalePrice()); + params.put("amount", orderItems.get(0).getQuantity()); + } + MQMessage mqMessage = new MQMessage(); + mqMessage.setTag(MessageActionEnum.ORDER_PAY.name()); + mqMessage.setMessageType(MQMessageType.IM.name()); + mqMessage.setToUserId(order.getMemberId()); + mqMessage.setData(params); + return mqMessage; + } } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/params/impl/OrderCashier.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/params/impl/OrderCashier.java index a7a4529b0..b1e4dc130 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/params/impl/OrderCashier.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/params/impl/OrderCashier.java @@ -54,14 +54,14 @@ public class OrderCashier implements CashierExecute { Order order = orderService.getByNo(payParam.getSn()); // //如果订单已支付,则不能发器支付 - if (!order.getStatus().equals(OrderStatusEnum.UNPAID.name())) { + if (!order.getStatus().equals(OrderStatusEnum.UNPAID.getValue())) { throw new ServiceException(ResultCode.PAY_DOUBLE_ERROR); } //如果订单状态不是待付款,则抛出异常 if (!order.getStatus().equals(OrderStatusEnum.UNPAID.getValue())) { throw new ServiceException(ResultCode.PAY_BAN); } - cashierParam.setPrice(order.getPayAmount().longValue()); + cashierParam.setPrice(order.getTotalAmount().longValue()); // // try { // BaseSetting baseSetting = JSONUtil.toBean(settingService.get(SettingEnum.BASE_SETTING.name()).getSettingValue(), BaseSetting.class); @@ -92,9 +92,8 @@ public class OrderCashier implements CashierExecute { PayParam payParam = paymentSuccessParams.getPayParam(); if (payParam.getOrderType().equals(CashierEnum.ORDER.name())) { -// orderService.payOrder(payParam.getSn(), -// paymentSuccessParams.getPaymentMethod(), -// paymentSuccessParams.getReceivableNo()); + orderService.paySuccess(payParam.getSn(), + paymentSuccessParams.getReceivableNo(),paymentSuccessParams.getPaymentMethod()); log.info("订单{}支付成功,金额{},方式{}", payParam.getSn(), paymentSuccessParams.getPaymentMethod(), paymentSuccessParams.getReceivableNo()); From 773a93b5ff2a8100770c626e810414ff2782d100 Mon Sep 17 00:00:00 2001 From: wangqx Date: Fri, 26 Sep 2025 15:47:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[fix]=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-prod.yml | 2 +- .../controller/WithdrawController.java | 1 - .../controller/WxPayController.java | 26 ------------------- script/docker/docker.txt | 1 + 4 files changed, 2 insertions(+), 28 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index b68f568ad..b82409107 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -270,7 +270,7 @@ wechat: mch-serial-no: 6BA681D9B219034D6F7851F57D61BE9317AB48FD # 商户证书序列号 api-v3-key: T9iE71aHSmjtM35z4bDLuU3gFX8s2I2h # APIv3密钥 private-key-path: "/java/cert/apiclient_key.pem" # 商户私钥文件路径 - transfer-notify-url: https://wuzhongjie.com.cn/prod-api/api/transfer/callback # 转账回调地址 + transfer-notify-url: https://wuzhongjie.com.cn/prod-api/trans/withdraw/callback # 转账回调地址 app-id: wxebcdaea31881caab # 应用ID secret: 71826d76bad096ec5407897c6ed1391f # 应用密钥 mini-program: diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/WithdrawController.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/WithdrawController.java index cc4c6b584..0e4860c5c 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/WithdrawController.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/WithdrawController.java @@ -98,7 +98,6 @@ public class WithdrawController { //更新提现状态 service.withdrawCallback(id); return R.ok(); - } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/WxPayController.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/WxPayController.java index bc798ee25..46f7c3baf 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/WxPayController.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/controller/WxPayController.java @@ -97,32 +97,6 @@ public class WxPayController { } return response; } - /** - * 微信商户零线转账 - 回调通知 - * @Context注解 把HTTP请求上下文对象注入进来,HttpServletRequest、HttpServletResponse、UriInfo 等 - * @return - */ - @Operation(summary = "微信商户零线转账 - 回调通知") - @RequestMapping(value = "/callback", method = {RequestMethod.GET, RequestMethod.POST}) - @Log(title = "微信商户零线转账 - 回调通知", businessType = BusinessType.INSERT) - public ResponseEntity> wxPayCallback(@Context HttpServletRequest request) { - Map errMap = new HashMap<>(); - try { - log.info("微信商户零线转账 - 回调通知 /wxpay/callback"); - Map resMap = (Map) wxPayService.wxPaySuccessCallback(request); - return new ResponseEntity<>(resMap, HttpStatus.OK); - } catch (ServiceException e){ - errMap.put("code", "FAIL"); - errMap.put("message", e.getMessage()); - return new ResponseEntity<>(errMap, HttpStatus.BAD_REQUEST); - } catch (Exception e) { - log.error("微信商户零线转账 - 回调通知 /wxpay/callback:异常!", e); - errMap.put("code", "FAIL"); - errMap.put("message", "服务器内部错误"); - return new ResponseEntity<>(errMap, HttpStatus.INTERNAL_SERVER_ERROR); - } - } - /** * 商家转账 - 商户单号查询转账单 * @param outBillNo 商户系统内部的商家单号 diff --git a/script/docker/docker.txt b/script/docker/docker.txt index 7f0f786dd..a0eb8160e 100644 --- a/script/docker/docker.txt +++ b/script/docker/docker.txt @@ -84,6 +84,7 @@ docker run -d \ docker run -d \ --name minio \ + --restart always \ -p 9000:9000 \ -p 9001:9001 \ -e TZ=Asia/Shanghai \