From 104339ee09076ea0846571fa738b350d8496baaf Mon Sep 17 00:00:00 2001 From: wxy <14293288+zysysys@user.noreply.gitee.com> Date: Wed, 21 Aug 2024 20:42:23 +0800 Subject: [PATCH 1/8] =?UTF-8?q?```feat(sys-user):=20=E5=9C=A8=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=AF=A6=E6=83=85=E4=B8=AD=E6=B7=BB=E5=8A=A0=E4=BD=99?= =?UTF-8?q?=E9=A2=9D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户详情页面现在将展示用户的余额信息,以便于管理员查看。这是通过在SysUserMapper.xml中添加新的查询字段实现的。 ``` --- src/main/resources/mapper/system/SysUserMapper.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml index 6f633b7..f399944 100644 --- a/src/main/resources/mapper/system/SysUserMapper.xml +++ b/src/main/resources/mapper/system/SysUserMapper.xml @@ -63,6 +63,7 @@ u.create_by, u.create_time, u.remark, + u.user_balance, d.dept_id, d.parent_id, d.ancestors, From 84c9201df5cacf7a6664afb39c594af0934358cb Mon Sep 17 00:00:00 2001 From: wxy <14293288+zysysys@user.noreply.gitee.com> Date: Thu, 22 Aug 2024 22:40:01 +0800 Subject: [PATCH 2/8] =?UTF-8?q?```feat(user):=20=E9=9B=86=E6=88=90?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E5=85=85=E5=80=BC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 集成支付宝充值功能,允许用户通过支付宝进行余额充值。在用户控制器中添加了处理充值请求的端点,并在用户服务中实现了充值逻辑。使用Alipay SDK处理支付请求,并在成功支付后更新用户的余额。确保用户余额和支付金额的处理在数据库中是原子操作。支付宝配置详细信息已加载,同步和异步通知URL已设置。 ``` --- pom.xml | 5 ++ .../java/com/muyu/config/AlipayConfig.java | 30 +++++++ .../java/com/muyu/config/util/logFile.java | 36 ++++++++ .../system/controller/SysUserController.java | 15 ++++ .../com/muyu/system/mapper/SysUserMapper.java | 7 ++ .../muyu/system/service/SysUserService.java | 2 + .../service/impl/SysUserServiceImpl.java | 53 +++++++++++ src/main/java/com/muyu/system/util/Dome.java | 89 +++++++++++++++++++ .../resources/mapper/system/SysUserMapper.xml | 27 ++++++ 9 files changed, 264 insertions(+) create mode 100644 src/main/java/com/muyu/config/AlipayConfig.java create mode 100644 src/main/java/com/muyu/config/util/logFile.java create mode 100644 src/main/java/com/muyu/system/util/Dome.java diff --git a/pom.xml b/pom.xml index ba6b18a..7df0ce3 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,11 @@ + + com.alipay.sdk + alipay-sdk-java + + com.alibaba.cloud diff --git a/src/main/java/com/muyu/config/AlipayConfig.java b/src/main/java/com/muyu/config/AlipayConfig.java new file mode 100644 index 0000000..13ac1d0 --- /dev/null +++ b/src/main/java/com/muyu/config/AlipayConfig.java @@ -0,0 +1,30 @@ +package com.muyu.config; + +/** + * @Author: wangxinyuan + * @Date: 2024/8/22 下午6:43 + */ +public class AlipayConfig { + + + // 商户appid + public static String APPID = "9021000139609995"; + // 私钥 pkcs8格式的 + public static String RSA_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMbBAf8yRmFvLx2SEfhdjdidpqWzfeRkL8d3K0Sz9DC5xxnrrUujwQF7FfbmwR43oJy1mIrMffc2Fp3vpSjWgdOMfAJy5N0GlrDb4o/3mN3pH3xElfdz7VEw9jcIhLDEsV2LP3nnrbkEKoj93gnZsuMkTnO4yfsEyCZVL6rkK01R9Pcu3tKKLrY5n30U7aE1WOuKvE3pTmxkpdXaX3Q46npP8wHOY1x6kUzyFgjFip/E4HEE91OzqaVnirt6GkWm9m0VAiUOENthEbnSzKagoVuTV0lXoX0hzTJ4H/4Ees2wOE4pZzeK2xqrolD3/EIR31I1ztyz4hXJG3sBC3v7gFAgMBAAECggEAQP9jKSWAP02wtaFaXNGMIPTCE+spGm2wwuGgAR+j38eDWMUllpoYmu1NopBToGR52z9jGogFjVD8elNBuJnprtDtAnXyzR8lRbq66gJBPhC0zNkGk2ow+kLzM6UGUQZ5oVqj7mnfmoyGBV6pJ9A1FT06l2Nh1SyTRyq8daSO5TwE5wUl040YT5pFIy4TCL1NhJVqDU61kNZCzVrUN4Lorkvv4gAeYZGY0cX0QMWXxwq5N7dOAn1tbwuo3WHnJbva3KBOVCtkldZ7Z0iwFQsniZXuXk7NmpNKFuZiQArlR8pTqDJB1dUwua9Nw1c9T+0CvpGRUH2u3wFIWK/RYyh0gQKBgQDxZaam5Z4irNdlxv9ypwQiiSsar745cDsmKv7oE4mUkxQzcR1segK+og0aX2s6Oa25Cj64jSXqbY/Y2DsoIEFFDe9z2E52QEOsZcN51edLc88YsopSSSIgobA8/+hB+AHjlILNhrtghwbKBOxNR5vBM/QGmfWaGPqtA8HsD3DQcQKBgQDYyc56eLOPWLuREu1aFrNs4viJ8r4v+pZmLFrXHojPF3teQr6z+CnrnF7vKYAmnOVxD2M44LgRr7LYnswzDWLLvrAkhUCYiaTL+6dvgy0okkUGE5QjGPP889yiHef8b1fRKNaVM+hXkt452oqhh95ZMnN4/ugZ3Uiq3UF8Q4vq1QKBgEV/cn9SVDi/cjQHGrwzgWk//HzuY+G9ggn3DvRZy55Oyd4VjtcQOYIQvZz+I6zbtjwzyuLvIB9h86wGdOGUh7YN0QaVG+HHlrQniCOnhbOfX9xIarJOA9lJM6gcNQ3pDQIsW4w4YfHkbfvzduS43Qq+nl7YLHF1B5aQImCIAX7BAoGBAK135iG33a6RiR0P8R8KVS6G++uecrL/qEM/sLy78SsNFimZ7PEjXZ/rs0dahPHgz/PFJVdI8eEtH0YY4zritjBkeJvwiHzGfzi+OP+RDpyNVnADUKE5AVtiYyTSG2SyT6nNLM+dBoi0u9+9UPrqNnBXX3DtQBoaKGCYxSLDBf21AoGANG5wAjV+ME7uAYEvW9GlrvGmNmzyUuiZrYuYHCf76CTa+q0+P7o0WgKcWEXUSah08qF4EItUQuuw+PtFTFs/sorqa9QrZs/ozTt8Q4ms/tahFPkZOTJ8s1Az2jY3C9ERwS8ab3Q+kbLiXDTnWo4s7YqwpwMZd/abhs3SwCjzLDI="; + // 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 + public static String notify_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/notify_url.jsp"; + // 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址 + public static String return_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/return_url.jsp"; + // 请求网关地址 + public static String URL = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"; + // 编码 + public static String CHARSET = "UTF-8"; + // 返回格式 + public static String FORMAT = "json"; + // 支付宝公钥 + public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnOq1vdnkd83CnZUWZVka7EWT0YgiGX8io6ul4GThlue66YNKoS/rKT1rHzyZqBwNG1qgeU7eH+UazuFK2GsxrDI1rSqzljkgQnkmwtjEsJYpXzFF5PTuW8bsDNHoXr5LsEyMaljyiNtBO3uc+Zbb0D6GcbnQUFGorMi9tKR28XjNJkvamohMhh+V5cb1FJtybliNoGAjA+Nh+aQVAXqFEPj3FX0qhPi4gRXniYL0o9ePaRtNg5pJ/uJ3G6llRi3+uZleD7XBSQCSf8ZZJfH8Bvr3mTQ/ObpyDub8VYnIkOgld4OAJRzqXJAyPFo0mRGhaeuSqviyRYGQK8/U8CrLkQIDAQAB"; + // 日志记录目录定义在 logFile 中 + public static String log_path = "/log"; + // RSA2 + public static String SIGNTYPE = "RSA2"; +} diff --git a/src/main/java/com/muyu/config/util/logFile.java b/src/main/java/com/muyu/config/util/logFile.java new file mode 100644 index 0000000..c7312a5 --- /dev/null +++ b/src/main/java/com/muyu/config/util/logFile.java @@ -0,0 +1,36 @@ +package com.muyu.config.util; + +import com.muyu.config.AlipayConfig; + +import java.io.FileWriter; +import java.io.IOException; + +/** + * @Author: wangxinyuan + * @Date: 2024/8/22 下午6:48 + */ +public class logFile { + + /** + * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库) + * @param sWord 要写入日志里的文本内容 + */ + public static void logResult(String sWord) { + FileWriter writer = null; + try { + writer = new FileWriter(AlipayConfig.log_path + "alipay_log_" + System.currentTimeMillis()+".txt"); + writer.write(sWord); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (writer != null) { + try { + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + +} diff --git a/src/main/java/com/muyu/system/controller/SysUserController.java b/src/main/java/com/muyu/system/controller/SysUserController.java index bc0b5fe..92af689 100644 --- a/src/main/java/com/muyu/system/controller/SysUserController.java +++ b/src/main/java/com/muyu/system/controller/SysUserController.java @@ -26,6 +26,7 @@ import org.springframework.web.multipart.MultipartFile; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.Date; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -254,6 +255,20 @@ public class SysUserController extends BaseController { return toAjax(userService.updateUserStatus(user)); } + + //TODO 用户充值 + /** + * 用户充值 + */ + @Log(title = "用户充值", businessType = BusinessType.INSERT) + @PostMapping ("/alipay/recharge") + public Result userBalance(@RequestBody SysUser user){ + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setCreateBy(SecurityUtils.getUsername()); + return toAjax(userService.insertBalance(user)); + } + /** * 根据用户编号获取授权角色 */ diff --git a/src/main/java/com/muyu/system/mapper/SysUserMapper.java b/src/main/java/com/muyu/system/mapper/SysUserMapper.java index e037b34..2e96315 100644 --- a/src/main/java/com/muyu/system/mapper/SysUserMapper.java +++ b/src/main/java/com/muyu/system/mapper/SysUserMapper.java @@ -75,6 +75,9 @@ public interface SysUserMapper extends BaseMapper { */ public int updateUser (SysUser user); + public int updateUserBalance (SysUser user); + + /** * 修改用户头像 * @@ -139,4 +142,8 @@ public interface SysUserMapper extends BaseMapper { * @return 结果 */ public SysUser checkEmailUnique (String email); + + + + } diff --git a/src/main/java/com/muyu/system/service/SysUserService.java b/src/main/java/com/muyu/system/service/SysUserService.java index f4c6167..45792a2 100644 --- a/src/main/java/com/muyu/system/service/SysUserService.java +++ b/src/main/java/com/muyu/system/service/SysUserService.java @@ -225,4 +225,6 @@ public interface SysUserService extends IService { * @return 结果 */ public String importUser (List userList, Boolean isUpdateSupport, String operName); + + int insertBalance(SysUser user); } diff --git a/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java index c1d3f18..7259834 100644 --- a/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java @@ -1,5 +1,10 @@ package com.muyu.system.service.impl; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipayTradePagePayRequest; +import com.alipay.api.response.AlipayTradePagePayResponse; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.muyu.common.core.constant.UserConstants; import com.muyu.common.core.exception.ServiceException; @@ -10,6 +15,7 @@ import com.muyu.common.datascope.annotation.DataScope; import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.system.domain.SysRole; import com.muyu.common.system.domain.SysUser; +import com.muyu.config.AlipayConfig; import com.muyu.system.domain.SysPost; import com.muyu.system.domain.SysUserPost; import com.muyu.system.domain.SysUserRole; @@ -17,6 +23,7 @@ import com.muyu.system.mapper.*; import com.muyu.system.service.SysUserService; import com.muyu.system.service.SysConfigService; import jakarta.validation.Validator; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,15 +31,20 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; +import static com.muyu.config.AlipayConfig.*; + /** * 用户 业务层处理 * * @author muyu */ + @Service public class SysUserServiceImpl extends ServiceImpl implements SysUserService { private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); @@ -245,6 +257,39 @@ public class SysUserServiceImpl extends ServiceImpl impl return rows; } + + + + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBalance(SysUser user) { + // 创建支付宝客户端 + AlipayClient alipayClient = new DefaultAlipayClient(URL, APPID, RSA_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGNTYPE); + AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); + + + // 发起支付请求 + try { + //TODO 调用支付宝接口 + AlipayTradePagePayResponse response = alipayClient.pageExecute(alipayRequest); + if (response.isSuccess()) { + // 支付成功,更新用户余额 + SysUser sysUser = userMapper.selectUserById(user.getUserId()); +// sysUser.setUserBalance(user.getUserBalance()); + double currentBalance = sysUser.getUserBalance(); + double newPaymentAmount = user.getPaymentAmount(); + double newBalance = currentBalance + newPaymentAmount; + sysUser.setUserBalance(newBalance); + userMapper.updateUserBalance(sysUser); + } else { + throw new RuntimeException("充值失败"); + } + } catch (Exception e) { + e.printStackTrace(); + } + return 0; + } + /** * 注册用户信息 * @@ -354,6 +399,10 @@ public class SysUserServiceImpl extends ServiceImpl impl return userMapper.resetUserPwd(userName, password); } + + + + /** * 新增用户角色信息 * @@ -403,6 +452,8 @@ public class SysUserServiceImpl extends ServiceImpl impl } } + + /** * 通过用户ID删除用户 * @@ -500,4 +551,6 @@ public class SysUserServiceImpl extends ServiceImpl impl return successMsg.toString(); } + + } diff --git a/src/main/java/com/muyu/system/util/Dome.java b/src/main/java/com/muyu/system/util/Dome.java new file mode 100644 index 0000000..273e6f0 --- /dev/null +++ b/src/main/java/com/muyu/system/util/Dome.java @@ -0,0 +1,89 @@ +package com.muyu.system.util; + +import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipayTradePagePayRequest; +import com.alipay.api.request.AlipayTradeWapPayRequest; +import com.alipay.api.response.AlipayTradePagePayResponse; +import com.alipay.api.response.AlipayTradeWapPayResponse; + +/** + * @Author: wangxinyuan + * @Date: 2024/7/10 下午7:33 + */ +public class Dome { + + public static void main(String[] args) throws AlipayApiException { + + AlipayClient alipayClient = new DefaultAlipayClient( + URL, + APPID, + RSA_PRIVATE_KEY, + FORMAT, + CHARSET, + ALIPAY_PUBLIC_KEY, + SIGNTYPE + ); + + AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest(); + // 异步接收地址,仅支持http/https,公网可访问 + request.setNotifyUrl(notify_url); + // 同步跳转地址,仅支持http/https + request.setReturnUrl(return_url); + + // 必传参数 + JSONObject bizContent = new JSONObject(); + // 商户订单号,商家自定义,保持唯一性 + bizContent.put("out_trade_no", "20210817010101004"); + // 支付金额,最小值0.01元 + bizContent.put("total_amount", 0.01); + // 订单标题,不可使用特殊符号 + bizContent.put("subject", "测试商品"); + + // 可选参数 + // 手机网站支付默认传值QUICK_WAP_WAY + bizContent.put("product_code", "QUICK_WAP_WAY"); + // bizContent.put("time_expire", "2022-08-01 22:00:00"); + + // 设置业务请求参数 + request.setBizContent(bizContent.toString()); + + // 调用支付宝接口,获取支付页面内容 + AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "POST"); + // 如果需要返回GET请求,请使用 + // AlipayTradeWapPayResponse response = alipayClient.pageExecute(request,"GET"); + + String pageRedirectionData = response.getBody(); + System.out.println(pageRedirectionData); + + if (response.isSuccess()) { + System.out.println("调用成功"); + } else { + System.out.println("调用失败"); + } + } + + // 商户appid + public static String APPID = "9021000139609995"; + // 私钥 pkcs8格式的 + public static String RSA_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMbBAf8yRmFvLx2SEfhdjdidpqWzfeRkL8d3K0Sz9DC5xxnrrUujwQF7FfbmwR43oJy1mIrMffc2Fp3vpSjWgdOMfAJy5N0GlrDb4o/3mN3pH3xElfdz7VEw9jcIhLDEsV2LP3nnrbkEKoj93gnZsuMkTnO4yfsEyCZVL6rkK01R9Pcu3tKKLrY5n30U7aE1WOuKvE3pTmxkpdXaX3Q46npP8wHOY1x6kUzyFgjFip/E4HEE91OzqaVnirt6GkWm9m0VAiUOENthEbnSzKagoVuTV0lXoX0hzTJ4H/4Ees2wOE4pZzeK2xqrolD3/EIR31I1ztyz4hXJG3sBC3v7gFAgMBAAECggEAQP9jKSWAP02wtaFaXNGMIPTCE+spGm2wwuGgAR+j38eDWMUllpoYmu1NopBToGR52z9jGogFjVD8elNBuJnprtDtAnXyzR8lRbq66gJBPhC0zNkGk2ow+kLzM6UGUQZ5oVqj7mnfmoyGBV6pJ9A1FT06l2Nh1SyTRyq8daSO5TwE5wUl040YT5pFIy4TCL1NhJVqDU61kNZCzVrUN4Lorkvv4gAeYZGY0cX0QMWXxwq5N7dOAn1tbwuo3WHnJbva3KBOVCtkldZ7Z0iwFQsniZXuXk7NmpNKFuZiQArlR8pTqDJB1dUwua9Nw1c9T+0CvpGRUH2u3wFIWK/RYyh0gQKBgQDxZaam5Z4irNdlxv9ypwQiiSsar745cDsmKv7oE4mUkxQzcR1segK+og0aX2s6Oa25Cj64jSXqbY/Y2DsoIEFFDe9z2E52QEOsZcN51edLc88YsopSSSIgobA8/+hB+AHjlILNhrtghwbKBOxNR5vBM/QGmfWaGPqtA8HsD3DQcQKBgQDYyc56eLOPWLuREu1aFrNs4viJ8r4v+pZmLFrXHojPF3teQr6z+CnrnF7vKYAmnOVxD2M44LgRr7LYnswzDWLLvrAkhUCYiaTL+6dvgy0okkUGE5QjGPP889yiHef8b1fRKNaVM+hXkt452oqhh95ZMnN4/ugZ3Uiq3UF8Q4vq1QKBgEV/cn9SVDi/cjQHGrwzgWk//HzuY+G9ggn3DvRZy55Oyd4VjtcQOYIQvZz+I6zbtjwzyuLvIB9h86wGdOGUh7YN0QaVG+HHlrQniCOnhbOfX9xIarJOA9lJM6gcNQ3pDQIsW4w4YfHkbfvzduS43Qq+nl7YLHF1B5aQImCIAX7BAoGBAK135iG33a6RiR0P8R8KVS6G++uecrL/qEM/sLy78SsNFimZ7PEjXZ/rs0dahPHgz/PFJVdI8eEtH0YY4zritjBkeJvwiHzGfzi+OP+RDpyNVnADUKE5AVtiYyTSG2SyT6nNLM+dBoi0u9+9UPrqNnBXX3DtQBoaKGCYxSLDBf21AoGANG5wAjV+ME7uAYEvW9GlrvGmNmzyUuiZrYuYHCf76CTa+q0+P7o0WgKcWEXUSah08qF4EItUQuuw+PtFTFs/sorqa9QrZs/ozTt8Q4ms/tahFPkZOTJ8s1Az2jY3C9ERwS8ab3Q+kbLiXDTnWo4s7YqwpwMZd/abhs3SwCjzLDI="; + // 请求网关地址 + public static String URL = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"; + // 编码 + public static String CHARSET = "UTF-8"; + // 返回格式 + public static String FORMAT = "json"; + // 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 + public static String notify_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/notify_url.jsp"; + // 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址 + public static String return_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/return_url.jsp"; + // 支付宝公钥 + public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnOq1vdnkd83CnZUWZVka7EWT0YgiGX8io6ul4GThlue66YNKoS/rKT1rHzyZqBwNG1qgeU7eH+UazuFK2GsxrDI1rSqzljkgQnkmwtjEsJYpXzFF5PTuW8bsDNHoXr5LsEyMaljyiNtBO3uc+Zbb0D6GcbnQUFGorMi9tKR28XjNJkvamohMhh+V5cb1FJtybliNoGAjA+Nh+aQVAXqFEPj3FX0qhPi4gRXniYL0o9ePaRtNg5pJ/uJ3G6llRi3+uZleD7XBSQCSf8ZZJfH8Bvr3mTQ/ObpyDub8VYnIkOgld4OAJRzqXJAyPFo0mRGhaeuSqviyRYGQK8/U8CrLkQIDAQAB"; + // 日志记录目录定义在 logFile 中 + public static String log_path = "/log"; + // RSA2 + public static String SIGNTYPE = "RSA2"; + +} diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml index f399944..c01177d 100644 --- a/src/main/resources/mapper/system/SysUserMapper.xml +++ b/src/main/resources/mapper/system/SysUserMapper.xml @@ -217,6 +217,8 @@ ) + + update sys_user @@ -238,6 +240,30 @@ where user_id = #{userId} + + + update sys_user + + dept_id = #{deptId}, + user_name = #{userName}, + nick_name = #{nickName}, + email = #{email}, + phonenumber = #{phonenumber}, + sex = #{sex}, + avatar = #{avatar}, + password = #{password}, + status = #{status}, + login_ip = #{loginIp}, + login_date = #{loginDate}, + update_by = #{updateBy}, + user_balance = #{userBalance}, + payment_amount = #{paymentAmount}, + remark = #{remark}, + update_time = sysdate() + + where user_id = #{userId} + + update sys_user set status = #{status} @@ -256,6 +282,7 @@ where user_name = #{userName} + update sys_user set del_flag = '2' From d270cf96a8f2886823120cdd64cda0ee88a331ba Mon Sep 17 00:00:00 2001 From: wxy <14293288+zysysys@user.noreply.gitee.com> Date: Fri, 23 Aug 2024 20:53:51 +0800 Subject: [PATCH 3/8] =?UTF-8?q?```feat(user):=20=E9=9B=86=E6=88=90?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E5=85=85=E5=80=BC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 集成支付宝充值功能,允许用户通过支付宝进行余额充值。在用户控制器中添加了处理充值请求的端点,并在用户服务中实现了充值逻辑。使用Alipay SDK处理支付请求,并在成功支付后更新用户的余额。确保用户余额和支付金额的处理在数据库中是原子操作。支付宝配置详细信息已加载,同步和异步通知URL已设置。 ``` --- .../system/controller/SysUserController.java | 11 +++++++++++ .../com/muyu/system/mapper/SysUserMapper.java | 3 +-- .../muyu/system/service/SysUserService.java | 3 +++ .../service/impl/SysUserServiceImpl.java | 18 +++++++++++++----- src/main/resources/bootstrap.yml | 2 +- .../resources/mapper/system/SysUserMapper.xml | 3 +++ 6 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/muyu/system/controller/SysUserController.java b/src/main/java/com/muyu/system/controller/SysUserController.java index 92af689..9b16369 100644 --- a/src/main/java/com/muyu/system/controller/SysUserController.java +++ b/src/main/java/com/muyu/system/controller/SysUserController.java @@ -269,6 +269,17 @@ public class SysUserController extends BaseController { return toAjax(userService.insertBalance(user)); } + + //TODO + // 查询当前用户的余额 + @GetMapping("/balance/{userId}") + public Result userBalance(@PathVariable("userId") Long userId){ + userService.checkUserDataScope(userId); + return toAjax(userService.selectBalance(userId)); + } + + + /** * 根据用户编号获取授权角色 */ diff --git a/src/main/java/com/muyu/system/mapper/SysUserMapper.java b/src/main/java/com/muyu/system/mapper/SysUserMapper.java index 2e96315..b1206af 100644 --- a/src/main/java/com/muyu/system/mapper/SysUserMapper.java +++ b/src/main/java/com/muyu/system/mapper/SysUserMapper.java @@ -144,6 +144,5 @@ public interface SysUserMapper extends BaseMapper { public SysUser checkEmailUnique (String email); - - + public int selectBalance(Long userId); } diff --git a/src/main/java/com/muyu/system/service/SysUserService.java b/src/main/java/com/muyu/system/service/SysUserService.java index 45792a2..6b67cdf 100644 --- a/src/main/java/com/muyu/system/service/SysUserService.java +++ b/src/main/java/com/muyu/system/service/SysUserService.java @@ -227,4 +227,7 @@ public interface SysUserService extends IService { public String importUser (List userList, Boolean isUpdateSupport, String operName); int insertBalance(SysUser user); + + + int selectBalance(Long userId); } diff --git a/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java index 7259834..be1d7dd 100644 --- a/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java @@ -126,6 +126,12 @@ public class SysUserServiceImpl extends ServiceImpl impl return userMapper.selectUserById(userId); } + + @Override + public int selectBalance(Long userId) { + return userMapper.selectBalance(userId); + } + /** * 查询用户所属角色组 * @@ -275,11 +281,11 @@ public class SysUserServiceImpl extends ServiceImpl impl if (response.isSuccess()) { // 支付成功,更新用户余额 SysUser sysUser = userMapper.selectUserById(user.getUserId()); -// sysUser.setUserBalance(user.getUserBalance()); - double currentBalance = sysUser.getUserBalance(); - double newPaymentAmount = user.getPaymentAmount(); - double newBalance = currentBalance + newPaymentAmount; - sysUser.setUserBalance(newBalance); + sysUser.setUserBalance(user.getUserBalance()); +// double currentBalance = sysUser.getUserBalance(); +// double newPaymentAmount = user.getPaymentAmount(); +// double newBalance = currentBalance + newPaymentAmount; +// sysUser.setUserBalance(newBalance); userMapper.updateUserBalance(sysUser); } else { throw new RuntimeException("充值失败"); @@ -290,6 +296,8 @@ public class SysUserServiceImpl extends ServiceImpl impl return 0; } + + /** * 注册用户信息 * diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index cd6beea..ba6142e 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -6,7 +6,7 @@ nacos: addr: 47.116.184.54:8848 user-name: nacos password: nacos - namespace: cloud-2112 + namespace: cloud-tx # Spring spring: diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml index c01177d..039bbe8 100644 --- a/src/main/resources/mapper/system/SysUserMapper.xml +++ b/src/main/resources/mapper/system/SysUserMapper.xml @@ -184,6 +184,9 @@ and del_flag = '0' limit 1 + insert into sys_user( From de76836daf2cc9466b153c14219e085bb08d8572 Mon Sep 17 00:00:00 2001 From: wxy <14293288+zysysys@user.noreply.gitee.com> Date: Sat, 24 Aug 2024 20:56:55 +0800 Subject: [PATCH 4/8] =?UTF-8?q?```feat(user):=20=E9=9B=86=E6=88=90?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E5=85=85=E5=80=BC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 集成支付宝充值功能,允许用户通过支付宝进行余额充值。在用户控制器中添加了处理充值请求的端点,并在用户服务中实现了充值逻辑。使用Alipay SDK处理支付请求,并在成功支付后更新用户的余额。确保用户余额和支付金额的处理在数据库中是原子操作。支付宝配置详细信息已加载,同步和异步通知URL已设置。 ``` --- .../java/com/muyu/system/controller/SysUserController.java | 5 ++++- .../com/muyu/system/service/impl/SysUserServiceImpl.java | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/muyu/system/controller/SysUserController.java b/src/main/java/com/muyu/system/controller/SysUserController.java index 9b16369..c30bfc7 100644 --- a/src/main/java/com/muyu/system/controller/SysUserController.java +++ b/src/main/java/com/muyu/system/controller/SysUserController.java @@ -275,11 +275,14 @@ public class SysUserController extends BaseController { @GetMapping("/balance/{userId}") public Result userBalance(@PathVariable("userId") Long userId){ userService.checkUserDataScope(userId); - return toAjax(userService.selectBalance(userId)); + int rows = userService.selectBalance(userId); + System.out.println(rows); + return Result.success(rows); } + /** * 根据用户编号获取授权角色 */ diff --git a/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java index be1d7dd..a37d6c9 100644 --- a/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java @@ -129,7 +129,9 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public int selectBalance(Long userId) { - return userMapper.selectBalance(userId); + int i = userMapper.selectBalance(userId); + System.out.println(i); + return i; } /** @@ -274,6 +276,7 @@ public class SysUserServiceImpl extends ServiceImpl impl AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); + // 发起支付请求 try { //TODO 调用支付宝接口 From e895310e0a3a72e8ccf3627f4fdcea9d6681a4bc Mon Sep 17 00:00:00 2001 From: wxy <14293288+zysysys@user.noreply.gitee.com> Date: Sun, 25 Aug 2024 10:14:21 +0800 Subject: [PATCH 5/8] =?UTF-8?q?```feat(user):=20=E9=9B=86=E6=88=90?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E5=85=85=E5=80=BC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 集成支付宝充值功能,允许用户通过支付宝进行余额充值。在用户控制器中添加了处理充值请求的端点,并在用户服务中实现了充值逻辑。使用Alipay SDK处理支付请求,并在成功支付后更新用户的余额。确保用户余额和支付金额的处理在数据库中是原子操作。支付宝配置详细信息已加载,同步和异步通知URL已设置。 ``` --- src/main/resources/bootstrap.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index ba6142e..cd6beea 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -6,7 +6,7 @@ nacos: addr: 47.116.184.54:8848 user-name: nacos password: nacos - namespace: cloud-tx + namespace: cloud-2112 # Spring spring: From b98ec80a4fb4db6ab450be6cfa09d6e277de93ad Mon Sep 17 00:00:00 2001 From: wxy <14293288+zysysys@user.noreply.gitee.com> Date: Sun, 25 Aug 2024 11:13:17 +0800 Subject: [PATCH 6/8] =?UTF-8?q?```refactor(system):=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BD=99=E9=A2=9D=E6=9F=A5=E8=AF=A2=E6=94=B9=E4=B8=BA=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=AD=97=E7=AC=A6=E4=B8=B2=E8=A1=A8=E7=A4=BA=E7=9A=84?= =?UTF-8?q?BigDecimal=E6=9B=B4=E6=94=B9=E5=86=85=E5=AE=B9=EF=BC=9A=20-=20?= =?UTF-8?q?=E3=80=90=E6=8E=A7=E4=BB=B6=E5=B1=82=E3=80=91SysUserController?= =?UTF-8?q?=EF=BC=9A=E7=94=A8=E6=88=B7=E4=BD=99=E9=A2=9D=E7=8E=B0=E5=9C=A8?= =?UTF-8?q?=E4=BD=9C=E4=B8=BABigDecimal=E8=BF=94=E5=9B=9E=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E9=AB=98=E4=BA=86=E7=B2=BE=E5=BA=A6=E5=92=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E4=BA=86=E6=BD=9C=E5=9C=A8=E7=9A=84=E6=95=B0=E5=80=BC?= =?UTF-8?q?=E8=AF=AF=E5=B7=AE=E3=80=82=20-=20=E3=80=90=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E5=B1=82=E3=80=91SysUserMapper=EF=BC=9A?= =?UTF-8?q?=E4=BD=99=E9=A2=9D=E6=9F=A5=E8=AF=A2=E7=BB=93=E6=9E=9C=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=9B=B4=E6=94=B9=E4=B8=BABigDecimal=EF=BC=8C?= =?UTF-8?q?=E4=B8=8E=E6=95=B0=E6=8D=AE=E5=BA=93=E5=AD=98=E5=82=A8=E7=9A=84?= =?UTF-8?q?=E8=B4=A7=E5=B8=81=E5=80=BC=E6=9B=B4=E4=B8=80=E8=87=B4=E3=80=82?= =?UTF-8?q?-=20=E3=80=90Mapper=20XML=E3=80=91SysUserMapper.xml=EF=BC=9Asel?= =?UTF-8?q?ectBalance=E6=96=B9=E6=B3=95=E7=9A=84=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=9B=B4=E6=96=B0=E4=B8=BABigDecimal?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=BC=BA=E4=BA=86=E7=B1=BB=E5=9E=8B=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E5=92=8C=E6=95=B0=E6=8D=AE=E5=87=86=E7=A1=AE=E6=80=A7?= =?UTF-8?q?=E3=80=82=20-=20=E3=80=90=E6=9C=8D=E5=8A=A1=E5=B1=82=E3=80=91Sy?= =?UTF-8?q?sUserService=EF=BC=9A=E4=BD=99=E9=A2=9D=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=AD=BE=E5=90=8D=E6=9B=B4=E6=96=B0=EF=BC=8C=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=94=B9=E4=B8=BABigDecimal=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E6=9C=8D=E5=8A=A1=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E3=80=82=20-=20=E3=80=90=E6=9C=8D=E5=8A=A1=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E3=80=91SysUserServiceImpl=EF=BC=9A=E5=AE=9E=E7=8E=B0=E4=BA=86?= =?UTF-8?q?=E6=96=B0=E7=9A=84BigDecimal=E4=BD=99=E9=A2=9D=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=96=B9=E6=B3=95=EF=BC=8C=E7=9B=B4=E6=8E=A5=E4=BB=8E?= =?UTF-8?q?Mapper=E8=BF=94=E5=9B=9EBigDecimal=E5=80=BC=EF=BC=8C=E7=AE=80?= =?UTF-8?q?=E5=8C=96=E4=BA=86=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 此改动确保了用户余额在所有层面上一致且精确的表示,避免了由于整形或字符串转换导致的潜在数据丢失或格式错误问题。 ``` --- .../com/muyu/system/controller/SysUserController.java | 8 +++++--- src/main/java/com/muyu/system/mapper/SysUserMapper.java | 4 +++- src/main/java/com/muyu/system/service/SysUserService.java | 3 ++- .../com/muyu/system/service/impl/SysUserServiceImpl.java | 6 ++---- src/main/resources/mapper/system/SysUserMapper.xml | 2 +- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/muyu/system/controller/SysUserController.java b/src/main/java/com/muyu/system/controller/SysUserController.java index c30bfc7..ce612e9 100644 --- a/src/main/java/com/muyu/system/controller/SysUserController.java +++ b/src/main/java/com/muyu/system/controller/SysUserController.java @@ -26,6 +26,7 @@ import org.springframework.web.multipart.MultipartFile; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Set; @@ -275,9 +276,10 @@ public class SysUserController extends BaseController { @GetMapping("/balance/{userId}") public Result userBalance(@PathVariable("userId") Long userId){ userService.checkUserDataScope(userId); - int rows = userService.selectBalance(userId); - System.out.println(rows); - return Result.success(rows); + BigDecimal balance = userService.selectBalance(userId); + String balanceString = balance.toPlainString(); + System.out.println(balanceString); + return Result.success(balanceString); } diff --git a/src/main/java/com/muyu/system/mapper/SysUserMapper.java b/src/main/java/com/muyu/system/mapper/SysUserMapper.java index b1206af..901b158 100644 --- a/src/main/java/com/muyu/system/mapper/SysUserMapper.java +++ b/src/main/java/com/muyu/system/mapper/SysUserMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.muyu.common.system.domain.SysUser; import org.apache.ibatis.annotations.Param; +import java.math.BigDecimal; import java.util.List; /** @@ -144,5 +145,6 @@ public interface SysUserMapper extends BaseMapper { public SysUser checkEmailUnique (String email); - public int selectBalance(Long userId); + + BigDecimal selectBalance(Long userId); } diff --git a/src/main/java/com/muyu/system/service/SysUserService.java b/src/main/java/com/muyu/system/service/SysUserService.java index 6b67cdf..f04a34b 100644 --- a/src/main/java/com/muyu/system/service/SysUserService.java +++ b/src/main/java/com/muyu/system/service/SysUserService.java @@ -3,6 +3,7 @@ package com.muyu.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.muyu.common.system.domain.SysUser; +import java.math.BigDecimal; import java.util.List; /** @@ -229,5 +230,5 @@ public interface SysUserService extends IService { int insertBalance(SysUser user); - int selectBalance(Long userId); + BigDecimal selectBalance(Long userId); } diff --git a/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java index a37d6c9..99bb708 100644 --- a/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java @@ -128,10 +128,8 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override - public int selectBalance(Long userId) { - int i = userMapper.selectBalance(userId); - System.out.println(i); - return i; + public BigDecimal selectBalance(Long userId) { + return userMapper.selectBalance(userId); } /** diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml index 039bbe8..87f7f29 100644 --- a/src/main/resources/mapper/system/SysUserMapper.xml +++ b/src/main/resources/mapper/system/SysUserMapper.xml @@ -184,7 +184,7 @@ and del_flag = '0' limit 1 - select user_balance from sys_user where user_id = #{userId} From 7c9091b6bfda58d44d80a87047c3ee3d30515de8 Mon Sep 17 00:00:00 2001 From: wxy <14293288+zysysys@user.noreply.gitee.com> Date: Sun, 25 Aug 2024 16:45:38 +0800 Subject: [PATCH 7/8] =?UTF-8?q?```feat):=20=E6=B7=BB=E5=8A=A0=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=AE=9D=E6=94=AF=E4=BB=98=E6=8E=A5=E5=8F=A3(payment?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增PaymentController,提供支付宝支付功能。包含支付必要参数配置,如APP_ID、APP_PRIVATE_KEY等, 并实现通过POST请求的payZFB方法,处理支付逻辑,使用AlipayClient进行支付请求并返回结果。 ``` --- .../system/controller/PaymentController.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/main/java/com/muyu/system/controller/PaymentController.java diff --git a/src/main/java/com/muyu/system/controller/PaymentController.java b/src/main/java/com/muyu/system/controller/PaymentController.java new file mode 100644 index 0000000..5ffbbe5 --- /dev/null +++ b/src/main/java/com/muyu/system/controller/PaymentController.java @@ -0,0 +1,76 @@ +package com.muyu.system.controller; + +import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipayTradePagePayRequest; +import com.alipay.api.response.AlipayTradePagePayResponse; +import com.muyu.common.core.domain.Result; +import com.muyu.common.system.domain.PaymentParam; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.web.bind.annotation.*; + +/** + * @Author: wangxinyuan + * @Date: 2024/8/25 下午3:21 + */ + +@RestController +@Tag(name = "PaymentController", description = "支付接口") +@RequestMapping("/aliyun/pay") +public class PaymentController { + + + //appid + private final String APP_ID = "9021000139609995"; + //应用私钥 + private final String APP_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMbBAf8yRmFvLx2SEfhdjdidpqWzfeRkL8d3K0Sz9DC5xxnrrUujwQF7FfbmwR43oJy1mIrMffc2Fp3vpSjWgdOMfAJy5N0GlrDb4o/3mN3pH3xElfdz7VEw9jcIhLDEsV2LP3nnrbkEKoj93gnZsuMkTnO4yfsEyCZVL6rkK01R9Pcu3tKKLrY5n30U7aE1WOuKvE3pTmxkpdXaX3Q46npP8wHOY1x6kUzyFgjFip/E4HEE91OzqaVnirt6GkWm9m0VAiUOENthEbnSzKagoVuTV0lXoX0hzTJ4H/4Ees2wOE4pZzeK2xqrolD3/EIR31I1ztyz4hXJG3sBC3v7gFAgMBAAECggEAQP9jKSWAP02wtaFaXNGMIPTCE+spGm2wwuGgAR+j38eDWMUllpoYmu1NopBToGR52z9jGogFjVD8elNBuJnprtDtAnXyzR8lRbq66gJBPhC0zNkGk2ow+kLzM6UGUQZ5oVqj7mnfmoyGBV6pJ9A1FT06l2Nh1SyTRyq8daSO5TwE5wUl040YT5pFIy4TCL1NhJVqDU61kNZCzVrUN4Lorkvv4gAeYZGY0cX0QMWXxwq5N7dOAn1tbwuo3WHnJbva3KBOVCtkldZ7Z0iwFQsniZXuXk7NmpNKFuZiQArlR8pTqDJB1dUwua9Nw1c9T+0CvpGRUH2u3wFIWK/RYyh0gQKBgQDxZaam5Z4irNdlxv9ypwQiiSsar745cDsmKv7oE4mUkxQzcR1segK+og0aX2s6Oa25Cj64jSXqbY/Y2DsoIEFFDe9z2E52QEOsZcN51edLc88YsopSSSIgobA8/+hB+AHjlILNhrtghwbKBOxNR5vBM/QGmfWaGPqtA8HsD3DQcQKBgQDYyc56eLOPWLuREu1aFrNs4viJ8r4v+pZmLFrXHojPF3teQr6z+CnrnF7vKYAmnOVxD2M44LgRr7LYnswzDWLLvrAkhUCYiaTL+6dvgy0okkUGE5QjGPP889yiHef8b1fRKNaVM+hXkt452oqhh95ZMnN4/ugZ3Uiq3UF8Q4vq1QKBgEV/cn9SVDi/cjQHGrwzgWk//HzuY+G9ggn3DvRZy55Oyd4VjtcQOYIQvZz+I6zbtjwzyuLvIB9h86wGdOGUh7YN0QaVG+HHlrQniCOnhbOfX9xIarJOA9lJM6gcNQ3pDQIsW4w4YfHkbfvzduS43Qq+nl7YLHF1B5aQImCIAX7BAoGBAK135iG33a6RiR0P8R8KVS6G++uecrL/qEM/sLy78SsNFimZ7PEjXZ/rs0dahPHgz/PFJVdI8eEtH0YY4zritjBkeJvwiHzGfzi+OP+RDpyNVnADUKE5AVtiYyTSG2SyT6nNLM+dBoi0u9+9UPrqNnBXX3DtQBoaKGCYxSLDBf21AoGANG5wAjV+ME7uAYEvW9GlrvGmNmzyUuiZrYuYHCf76CTa+q0+P7o0WgKcWEXUSah08qF4EItUQuuw+PtFTFs/sorqa9QrZs/ozTt8Q4ms/tahFPkZOTJ8s1Az2jY3C9ERwS8ab3Q+kbLiXDTnWo4s7YqwpwMZd/abhs3SwCjzLDI="; + private final String CHARSET = "UTF-8"; + // 支付宝公钥 + private final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnOq1vdnkd83CnZUWZVka7EWT0YgiGX8io6ul4GThlue66YNKoS/rKT1rHzyZqBwNG1qgeU7eH+UazuFK2GsxrDI1rSqzljkgQnkmwtjEsJYpXzFF5PTuW8bsDNHoXr5LsEyMaljyiNtBO3uc+Zbb0D6GcbnQUFGorMi9tKR28XjNJkvamohMhh+V5cb1FJtybliNoGAjA+Nh+aQVAXqFEPj3FX0qhPi4gRXniYL0o9ePaRtNg5pJ/uJ3G6llRi3+uZleD7XBSQCSf8ZZJfH8Bvr3mTQ/ObpyDub8VYnIkOgld4OAJRzqXJAyPFo0mRGhaeuSqviyRYGQK8/U8CrLkQIDAQAB"; + //这是沙箱接口路径 + private final String GATEWAY_URL ="https://openapi-sandbox.dl.alipaydev.com/gateway.do"; + private final String FORMAT = "JSON"; + //签名方式 + private final String SIGN_TYPE = "RSA2"; + //支付宝异步通知路径,付款完毕后会异步调用本项目的方法,必须为公网地址 + private final String NOTIFY_URL = "http://IP/aliyun/pay/yibu"; + //支付宝同步通知路径,也就是当付款完毕后跳转本项目的页面,可以不是公网地址 + private final String RETURN_URL = "http://IP/entertainment/payment"; + + + + + @RequestMapping(value = "/payZFB", method = RequestMethod.POST) + @ResponseBody + public Result payZFB(@RequestBody PaymentParam paymentParam) throws AlipayApiException { + AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE); + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + //异步接收地址,仅支持http/https,公网可访问 + request.setNotifyUrl(""); + //同步跳转地址,仅支持http/https + request.setReturnUrl(paymentParam.getReturnUrl()); + JSONObject json = new JSONObject(); + json.put("outTradeNo", paymentParam.getOutTradeNo()); + String params = json.toString(); + /******必传参数******/ + JSONObject bizContent = new JSONObject(); + //商户订单号,商家自定义,保持唯一性 + bizContent.put("out_trade_no", paymentParam.getOutTradeNo()); + //支付金额,最小值0.01元 + bizContent.put("total_amount", paymentParam.getTotalAmount()); + //订单标题,不可使用特殊符号 + bizContent.put("subject", paymentParam.getSubject()); + //电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY + bizContent.put("product_code", paymentParam.getProductCode()); + //支付宝请求的传值 可以在req中获取 + bizContent.put("body", params); + /******可选参数******/ + request.setBizContent(bizContent.toString()); + AlipayTradePagePayResponse response = alipayClient.pageExecute(request); + return Result.success(response.getBody()); + } + + +} From 71ead9ebfd2b065a9a583e43bd0a8d73fd3892ab Mon Sep 17 00:00:00 2001 From: wxy <14293288+zysysys@user.noreply.gitee.com> Date: Sun, 25 Aug 2024 22:20:01 +0800 Subject: [PATCH 8/8] =?UTF-8?q?```txtfeat(user):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=85=85=E5=80=BC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增一个用户充值功能,用户可以通过POST请求向其账户内余额进行充值。 在SysUserController中添加了addUserMoney接口,通过调用UserService中的addUserMoney服务来实现。 同时,更新了SysUserMapper及SysUserMapper.xml以支持数据库中用户余额的增加。 ``` --- .../com/muyu/system/controller/SysUserController.java | 7 +++++++ src/main/java/com/muyu/system/mapper/SysUserMapper.java | 4 ++++ .../java/com/muyu/system/service/SysUserService.java | 4 ++++ .../com/muyu/system/service/impl/SysUserServiceImpl.java | 9 +++++++++ src/main/resources/mapper/system/SysUserMapper.xml | 6 ++++++ 5 files changed, 30 insertions(+) diff --git a/src/main/java/com/muyu/system/controller/SysUserController.java b/src/main/java/com/muyu/system/controller/SysUserController.java index ce612e9..9891f4a 100644 --- a/src/main/java/com/muyu/system/controller/SysUserController.java +++ b/src/main/java/com/muyu/system/controller/SysUserController.java @@ -283,6 +283,13 @@ public class SysUserController extends BaseController { } + //TODO + @PostMapping("/addUserMoney") + public Result addUserMoney(@RequestBody SysUser user){ + return Result.success(userService.addUserMoney(user)); + } + + /** diff --git a/src/main/java/com/muyu/system/mapper/SysUserMapper.java b/src/main/java/com/muyu/system/mapper/SysUserMapper.java index 901b158..38245a9 100644 --- a/src/main/java/com/muyu/system/mapper/SysUserMapper.java +++ b/src/main/java/com/muyu/system/mapper/SysUserMapper.java @@ -147,4 +147,8 @@ public interface SysUserMapper extends BaseMapper { BigDecimal selectBalance(Long userId); + + + int addUserMoney(SysUser user); + } diff --git a/src/main/java/com/muyu/system/service/SysUserService.java b/src/main/java/com/muyu/system/service/SysUserService.java index f04a34b..d7da17e 100644 --- a/src/main/java/com/muyu/system/service/SysUserService.java +++ b/src/main/java/com/muyu/system/service/SysUserService.java @@ -231,4 +231,8 @@ public interface SysUserService extends IService { BigDecimal selectBalance(Long userId); + + + String addUserMoney(SysUser user); + } diff --git a/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java index 99bb708..481c080 100644 --- a/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java @@ -132,6 +132,15 @@ public class SysUserServiceImpl extends ServiceImpl impl return userMapper.selectBalance(userId); } + @Override + public String addUserMoney(SysUser user) { + int i = userMapper.addUserMoney(user); + if(i <= 0){ + throw new RuntimeException("充值失败"); + } + return "充值成功"; + } + /** * 查询用户所属角色组 * diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml index 87f7f29..be46325 100644 --- a/src/main/resources/mapper/system/SysUserMapper.xml +++ b/src/main/resources/mapper/system/SysUserMapper.xml @@ -184,10 +184,16 @@ and del_flag = '0' limit 1 + + + + update sys_user set user_balance = user_balance + #{userBalance} where user_id = #{userId} + + insert into sys_user( user_id,