From 3bfb8ada58d677793a053f34bcbceb7fa7d6dac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Wed, 31 Jul 2024 14:27:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BD=99=E9=A2=9D=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NotifyByBalancePayController.java | 58 +++++++++++++++++++ .../system/controller/PaymentController.java | 50 +++++++++++++++- .../common/system/entity/UserBalanceLog.java | 3 + .../impl/UserBalanceLogServiceImpl.java | 2 +- 4 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/gxwebsoft/common/system/controller/NotifyByBalancePayController.java diff --git a/src/main/java/com/gxwebsoft/common/system/controller/NotifyByBalancePayController.java b/src/main/java/com/gxwebsoft/common/system/controller/NotifyByBalancePayController.java new file mode 100644 index 0000000..c5c8422 --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/controller/NotifyByBalancePayController.java @@ -0,0 +1,58 @@ +package com.gxwebsoft.common.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.gxwebsoft.common.core.config.ConfigProperties; +import com.gxwebsoft.common.core.utils.RedisUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.system.entity.Payment; +import com.wechat.pay.java.core.notification.NotificationConfig; +import com.wechat.pay.java.core.notification.NotificationParser; +import com.wechat.pay.java.core.notification.RSANotificationConfig; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * 会员特权购买记录表控制器 + * + * @author 科技小王子 + * @since 2023-06-20 18:07:50 + */ +@Api(tags = "余额支付结果通知(未完成)") +@RestController +@RequestMapping("/api/system/balance-pay") +public class NotifyByBalancePayController extends BaseController { + @Value("${spring.profiles.active}") + String active; + @Resource + private RedisUtil redisUtil; + @Resource + private RequestUtil requestUtil; + @Resource + private ConfigProperties conf; + + @ApiModelProperty("异步通知") + @PostMapping("/notify/{tenantId}") + public String wxNotify(@RequestHeader Map header, @RequestBody String body, @PathVariable("tenantId") Integer tenantId) { + System.out.println("异步通知*************** = "); + + // 以支付通知回调为例,验签、解密并转换成 Transaction + try { + // 推送微信官方支付结果(携带租户ID的POST请求) +// requestUtil.pushBalancePayNotify(); + return "SUCCESS"; + } catch (Exception $e) { + System.out.println($e.getMessage()); + } + + return "fail"; + } + + +} diff --git a/src/main/java/com/gxwebsoft/common/system/controller/PaymentController.java b/src/main/java/com/gxwebsoft/common/system/controller/PaymentController.java index 7f9f4ce..3e5d8cd 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/PaymentController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/PaymentController.java @@ -3,18 +3,19 @@ package com.gxwebsoft.common.system.controller; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.gxwebsoft.common.core.exception.BusinessException; import com.gxwebsoft.common.core.utils.RedisUtil; import com.gxwebsoft.common.core.web.BaseController; -import com.gxwebsoft.common.system.entity.Merchant; -import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.entity.*; import com.gxwebsoft.common.system.service.PaymentService; -import com.gxwebsoft.common.system.entity.Payment; import com.gxwebsoft.common.system.param.PaymentParam; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.service.UserBalanceLogService; +import com.gxwebsoft.common.system.service.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -22,9 +23,13 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.List; import java.util.concurrent.TimeUnit; +import static com.gxwebsoft.common.core.constants.BalanceConstants.BALANCE_ADMIN; +import static com.gxwebsoft.common.core.constants.BalanceConstants.BALANCE_USE; + /** * 支付方式控制器 * @@ -38,8 +43,47 @@ public class PaymentController extends BaseController { @Resource private PaymentService paymentService; @Resource + private UserService userService; + @Resource + private UserBalanceLogService userBalanceLogService; + @Resource private RedisUtil redisUtil; + @ApiOperation("余额支付接口") + @PostMapping("/balancePay") + public ApiResult balancePay(@RequestBody Order order) { + System.out.println("使用余额支付 >>> 订单信息 " + order); + + // 查询购买者信息 + final User buyer = userService.getById(order.getUserId()); + + if (buyer.getBalance().compareTo(order.getPayPrice()) < 0) { + return fail("余额不足"); + } + + // 扣除余额 + final BigDecimal subtract = buyer.getBalance().subtract(order.getTotalPrice()); + buyer.setBalance(subtract); + final boolean updateUser = userService.updateUser(buyer); + System.out.println("updateUser = " + updateUser); + + // 记录余额明细 + UserBalanceLog userBalanceLog = new UserBalanceLog(); + userBalanceLog.setUserId(buyer.getUserId()); + userBalanceLog.setScene(BALANCE_USE); + userBalanceLog.setMoney(order.getPayPrice()); + BigDecimal balance = buyer.getBalance().add(order.getPayPrice()); + userBalanceLog.setBalance(balance); + userBalanceLog.setComments(order.getMerchantName()); + userBalanceLog.setOrderNo(order.getOrderNo()); + final boolean save = userBalanceLogService.save(userBalanceLog); + System.out.println("save = " + save); + + + + return success("支付成功",order.getOrderNo()); + } + @ApiOperation("选择支付方式") @GetMapping("/select") public ApiResult select(PaymentParam param) { diff --git a/src/main/java/com/gxwebsoft/common/system/entity/UserBalanceLog.java b/src/main/java/com/gxwebsoft/common/system/entity/UserBalanceLog.java index 30abd33..aad6941 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/UserBalanceLog.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/UserBalanceLog.java @@ -39,6 +39,9 @@ public class UserBalanceLog implements Serializable { @ApiModelProperty(value = "变动后余额") private BigDecimal balance; + @ApiModelProperty(value = "订单编号") + private String orderNo; + @ApiModelProperty(value = "管理员备注") private String remark; diff --git a/src/main/java/com/gxwebsoft/common/system/service/impl/UserBalanceLogServiceImpl.java b/src/main/java/com/gxwebsoft/common/system/service/impl/UserBalanceLogServiceImpl.java index 61b3361..2286471 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/impl/UserBalanceLogServiceImpl.java +++ b/src/main/java/com/gxwebsoft/common/system/service/impl/UserBalanceLogServiceImpl.java @@ -23,7 +23,7 @@ public class UserBalanceLogServiceImpl extends ServiceImpl pageRel(UserBalanceLogParam param) { PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time asc"); + page.setDefaultOrder("create_time desc"); List list = baseMapper.selectPageRel(page, param); return new PageResult<>(list, page.getTotal()); }