From 5cf8494a6da08dfcdc5fdb4c5e55aefd8b27d684 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 26 十一月 2024 18:34:28 +0800 Subject: [PATCH] 代码提交 --- xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserWithdrawController.java | 211 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 197 insertions(+), 14 deletions(-) diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserWithdrawController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserWithdrawController.java index 85dd362..1d282e1 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserWithdrawController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserWithdrawController.java @@ -3,11 +3,14 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.hutool.core.util.RandomUtil; +import com.alibaba.fastjson2.JSONObject; import com.alibaba.nacos.common.utils.UuidUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xinquan.common.core.constant.CacheConstants; import com.xinquan.common.core.domain.R; +import com.xinquan.common.core.utils.JuHeFuUtil; import com.xinquan.common.core.utils.WebUtils; import com.xinquan.common.core.utils.page.CollUtils; import com.xinquan.common.core.utils.page.PageDTO; @@ -15,12 +18,10 @@ import com.xinquan.common.redis.service.RedisService; import com.xinquan.common.security.service.TokenService; import com.xinquan.course.api.domain.Course; +import com.xinquan.meditation.api.domain.Meditation; import com.xinquan.order.api.domain.Order; -import com.xinquan.system.api.domain.AppUserWalletRecord; +import com.xinquan.system.api.domain.*; import com.xinquan.user.api.domain.dto.OrderListDTO; -import com.xinquan.system.api.domain.AppUser; -import com.xinquan.system.api.domain.AppUserBank; -import com.xinquan.system.api.domain.AppUserWithdraw; import com.xinquan.system.api.model.LoginUser; import com.xinquan.user.domain.export.WithdrawExport; import com.xinquan.user.service.AppUserBankService; @@ -36,16 +37,20 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; import java.io.IOException; +import java.io.PrintWriter; import java.math.BigDecimal; +import java.math.RoundingMode; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -254,7 +259,7 @@ @ApiImplicitParam(name = "bankId", value = "银行卡id", dataType = "Long", required = true), @ApiImplicitParam(name = "money", value = "提现金额", dataType = "String", required = true) }) - public R withdraw(Long bankId,String money) { + public R withdraw(Long bankId,String money) throws Exception { LoginUser loginUser = tokenService.getLoginUser(); if (loginUser==null){ @@ -265,8 +270,9 @@ if (byId.getBalance().compareTo(new BigDecimal(money))<0){ return R.fail("提现金额不能超过钱包余额"); } + AppUserBank byId1 = appUserBankService.getById(bankId); + byId.setBalance(byId.getBalance().subtract(new BigDecimal(money))); - appUserService.updateById(byId); BigDecimal bigDecimal = new BigDecimal(money); AppUserWithdraw appUserWithdraw = new AppUserWithdraw(); appUserWithdraw.setAppUserId(userId); @@ -275,11 +281,12 @@ appUserWithdraw.setWithdrawType(1); appUserWithdraw.setWithdrawStatus(0); // todo 提现流水号 - appUserWithdraw.setSerialNo(UuidUtils.generateUuid()); - appUserWithdraw.setCode(UuidUtils.generateUuid()); + String s = UuidUtils.generateUuid(); + String replace = s.replace("-", ""); + + appUserWithdraw.setCode(replace); appUserWithdraw.setWithdrawTime(LocalDateTime.now()); appUserWithdraw.setCreateTime(LocalDateTime.now()); - withdrawService.save(appUserWithdraw); // 先扣去余额 AppUserWalletRecord appUserWalletRecord = new AppUserWalletRecord(); appUserWalletRecord.setAppUserId(userId); @@ -287,13 +294,177 @@ appUserWalletRecord.setReason("提现"); appUserWalletRecord.setOrderId(appUserWithdraw.getId()); appUserWalletRecord.setAmount(new BigDecimal(money)); + BigDecimal bigDecimal1 = new BigDecimal(money).setScale(2, RoundingMode.HALF_DOWN); + JuHeFuUtil.updateAccount(byId.getFenzhangId(),byId1.getCardholder(),byId1.getCellPhone(),byId1.getCardNo()); + JSONObject jsonObject = JuHeFuUtil.balancePay(replace, byId.getFenzhangId(), bigDecimal1 + "" + , "https://xq.xqzhihui.com/api/user/client/app-user-withdraw/base/callback"); + if (jsonObject.getString("error_msg")!=null){ + return R.fail(jsonObject.getString("error_msg")); + } + appUserService.updateById(byId); appUserWalletRecordService.save(appUserWalletRecord); - + withdrawService.save(appUserWithdraw); return R.ok(); + } + private static final String AES_KEY = "cb0a181ac97395c6942be19315fc0727"; + public static String decrypt(String strToDecrypt) { + try { + SecretKeySpec secretKey = new SecretKeySpec(AES_KEY.getBytes(), "AES"); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, secretKey); + return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); + } catch (Exception e) { + System.out.println("Error while decrypting: " + e.toString()); + } + return null;} + @ResponseBody + @PostMapping("/base/callback") + public void callback(HttpServletRequest request, HttpServletResponse response) { + try { + System.err.println("提现到分账接收方回调================="+request); + BufferedReader reader = request.getReader(); + String string1 = reader.toString(); + StringBuilder requestBody = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + requestBody.append(line); + } + System.err.println("提现回调=================全部请求体"+requestBody); + com.alibaba.fastjson2.JSONObject jsonObject = JSONObject.parseObject(requestBody.toString()); + System.err.println("json串"+jsonObject); + String string9 = jsonObject.getString("resCipher"); + String decrypt = decrypt(string9); + System.err.println(decrypt); + JSONObject jsonObject1 = JSONObject.parseObject(decrypt); + // 系统订单号 + String string = jsonObject1.getString("order_no"); + String payId = jsonObject1.getString("pay_id"); + AppUserWithdraw one = withdrawService.lambdaQuery().eq(AppUserWithdraw::getCode, string).one(); + if (jsonObject.getString("type").equals("balancePay.succeeded")){ + if (one!=null){ + String s = UuidUtils.generateUuid(); + AppUser appUser = appUserService.getById(one.getAppUserId()); + if (one.getWithdrawStatus()==1 || one.getWithdrawStatus()==2){ + return; + } + JSONObject jsonObject2 = JuHeFuUtil.balanceWithdraw(s, one.getAmount() + "", appUser.getFenzhangId(), + "https://xq.xqzhihui.com/api/user/client/app-user-withdraw/base/callbackA"); + if (jsonObject2.getString("error_msg")!=null){ + // 调用失败 + // 回退余额记录 + AppUserWalletRecord appUserWalletRecord = new AppUserWalletRecord(); + appUserWalletRecord.setAppUserId(one.getAppUserId()); + appUserWalletRecord.setChangeType(1); + appUserWalletRecord.setReason("提现回退"); + appUserWalletRecord.setOrderId(one.getId()); + appUserWalletRecord.setAmount(one.getAmount()); + appUserWalletRecordService.save(appUserWalletRecord); + one.setWithdrawStatus(2); + one.setReason(jsonObject1.getString("error_msg")); + withdrawService.updateById(one); + // 回退用户余额 + BigDecimal add = appUser.getBalance().add(one.getAmount()); + appUser.setBalance(add); + appUserService.updateById(appUser); + PrintWriter out = response.getWriter(); + out.write("succeeded"); + out.flush(); + out.close(); + } + withdrawService.updateById(one); + } + PrintWriter out = response.getWriter(); + out.write("succeeded"); + out.flush(); + out.close(); + }else if (jsonObject.getString("type").equals("balancePay.failed")){ + // 回退余额记录 + AppUserWalletRecord appUserWalletRecord = new AppUserWalletRecord(); + appUserWalletRecord.setAppUserId(one.getAppUserId()); + appUserWalletRecord.setChangeType(1); + appUserWalletRecord.setReason("提现回退"); + appUserWalletRecord.setOrderId(one.getId()); + appUserWalletRecord.setAmount(one.getAmount()); + appUserWalletRecordService.save(appUserWalletRecord); + one.setWithdrawStatus(2); + one.setReason(jsonObject1.getString("error_msg")); + withdrawService.updateById(one); + // 回退用户余额 + AppUser appUser = appUserService.getById(one.getAppUserId()); + BigDecimal add = appUser.getBalance().add(one.getAmount()); + appUser.setBalance(add); + appUserService.updateById(appUser); + PrintWriter out = response.getWriter(); + out.write("succeeded"); + out.flush(); + out.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + @ResponseBody + @PostMapping("/base/callbackA") + public void callbackA(HttpServletRequest request, HttpServletResponse response) { + try { + System.err.println("提现到银行卡回调================="+request); + BufferedReader reader = request.getReader(); + String string1 = reader.toString(); + StringBuilder requestBody = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + requestBody.append(line); + } + System.err.println("提现到银行卡回调=================全部请求体"+requestBody); + com.alibaba.fastjson2.JSONObject jsonObject = JSONObject.parseObject(requestBody.toString()); + System.err.println("json串"+jsonObject); + String string9 = jsonObject.getString("resCipher"); + String decrypt = decrypt(string9); + System.err.println(decrypt); + JSONObject jsonObject1 = JSONObject.parseObject(decrypt); + // 系统订单号 + String string = jsonObject1.getString("order_no"); + AppUserWithdraw one = withdrawService.lambdaQuery().eq(AppUserWithdraw::getCode, string).one(); + if (jsonObject.getString("type").equals("withdraw.succeeded")){ + if (one!=null){ + System.err.println("提现成功"); + one.setWithdrawStatus(1); + one.setSerialNo(jsonObject1.getString("withdraw_id")); + withdrawService.updateById(one); + } + PrintWriter out = response.getWriter(); + out.write("succeeded"); + out.flush(); + out.close(); + }else if (jsonObject.getString("type").equals("withdraw.failed")){ + // 回退余额记录 + AppUserWalletRecord appUserWalletRecord = new AppUserWalletRecord(); + appUserWalletRecord.setAppUserId(one.getAppUserId()); + appUserWalletRecord.setChangeType(1); + appUserWalletRecord.setReason("提现回退"); + appUserWalletRecord.setOrderId(one.getId()); + appUserWalletRecord.setAmount(one.getAmount()); + appUserWalletRecordService.save(appUserWalletRecord); + one.setWithdrawStatus(2); + one.setReason(jsonObject1.getString("error_msg")); + withdrawService.updateById(one); + // 回退用户余额 + AppUser appUser = appUserService.getById(one.getAppUserId()); + BigDecimal add = appUser.getBalance().add(one.getAmount()); + appUser.setBalance(add); + appUserService.updateById(appUser); + PrintWriter out = response.getWriter(); + out.write("succeeded"); + out.flush(); + out.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } } @PostMapping("/addBank") @ApiOperation(value = "提现-添加银行卡", tags = {"钱包"}) - public R wallet(@RequestBody AppUserBank appUserWithdraw) { + public R wallet(@RequestBody AppUserBank appUserWithdraw) throws Exception { LoginUser loginUser = tokenService.getLoginUser(); if (loginUser==null){ return R.tokenError("登录失效"); @@ -310,6 +481,18 @@ // return R.fail("验证码不正确"); // } appUserBankService.save(appUserWithdraw); + // 查询是否已经开户 + AppUser byId = appUserService.getById(userId); + if (byId.getFenzhangId()==null){ + // 开户 + long time = new Date().getTime(); + String s = RandomUtil.randomNumbers(4); + String s1 = "FZ" + time + s; + JuHeFuUtil.createUser(s1, appUserWithdraw.getCardholder(), "00", + appUserWithdraw.getIdentityCard(), appUserWithdraw.getCellPhone(), appUserWithdraw.getCardNo()); + byId.setFenzhangId(s1); + appUserService.updateById(byId); + } return R.ok(); } @PostMapping("/deleteBank") -- Gitblit v1.7.1