From d24826f4bb6faf3dbba5743ab7275cbda93497fc Mon Sep 17 00:00:00 2001 From: GYJ <1157756119@qq.com> Date: Sat, 28 Dec 2024 11:55:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=9C=BA=E5=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqx/common/aspect/AppApiMethodAspect.java | 8 ++ src/main/java/com/sqx/config/ShiroConfig.java | 1 + .../controller/CashOutController.java | 12 +++ .../com/sqx/modules/pay/dao/CashOutDao.java | 2 + .../modules/pay/service/CashOutService.java | 2 + .../pay/service/impl/CashOutServiceImpl.java | 74 +++++++++++++++++++ 6 files changed, 99 insertions(+) diff --git a/src/main/java/com/sqx/common/aspect/AppApiMethodAspect.java b/src/main/java/com/sqx/common/aspect/AppApiMethodAspect.java index 9fb41360..f75d9184 100644 --- a/src/main/java/com/sqx/common/aspect/AppApiMethodAspect.java +++ b/src/main/java/com/sqx/common/aspect/AppApiMethodAspect.java @@ -32,6 +32,14 @@ public class AppApiMethodAspect { long start = System.currentTimeMillis(); //避免回填 Object[] args = pjp.getArgs(); + + // 如果请求参数中包含HttpServletRequest,剔除HttpServletRequest + for (int i = 0; i < args.length; i++) { + if (args[i] instanceof HttpServletRequest) { + args[i] = null; + } + } + String params = new Gson().toJson(args); // 执行被拦截的方法 diff --git a/src/main/java/com/sqx/config/ShiroConfig.java b/src/main/java/com/sqx/config/ShiroConfig.java index 92ce0b02..375ece0d 100644 --- a/src/main/java/com/sqx/config/ShiroConfig.java +++ b/src/main/java/com/sqx/config/ShiroConfig.java @@ -59,6 +59,7 @@ public class ShiroConfig { filterMap.put("/captcha.jpg", "anon"); filterMap.put("/aaa.txt", "anon"); filterMap.put("/search/**", "anon"); + filterMap.put("/cashOutAudit/batchCashOutOrder", "anon"); filterMap.put("/**", "oauth2"); shiroFilter.setFilterChainDefinitionMap(filterMap); diff --git a/src/main/java/com/sqx/modules/discSpinning/controller/CashOutController.java b/src/main/java/com/sqx/modules/discSpinning/controller/CashOutController.java index 042cbe22..ba914449 100644 --- a/src/main/java/com/sqx/modules/discSpinning/controller/CashOutController.java +++ b/src/main/java/com/sqx/modules/discSpinning/controller/CashOutController.java @@ -1,6 +1,7 @@ package com.sqx.modules.discSpinning.controller; import com.sqx.common.utils.Constant; +import com.sqx.common.utils.IPUtils; import com.sqx.common.utils.PageUtils; import com.sqx.common.utils.Result; import com.sqx.modules.pay.entity.CashOut; @@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.Map; /** @@ -65,4 +67,14 @@ public class CashOutController { Map data = cashOutService.alipayTransferSummaryQuery(alipayAccountName); return Result.success().put("data", data); } + + @RequestMapping(value = "/batchCashOutOrder", method = RequestMethod.GET) + @ApiOperation("批量提现") + public Result batchCashOutOrder(HttpServletRequest request, Double maxMoney, Integer count) { + String ipAddr = IPUtils.getIpAddr(request); + if (!"127.0.0.1".equals(ipAddr)) { + return Result.error("非法请求"); + } + return cashOutService.batchCashOutOrder(maxMoney, count); + } } diff --git a/src/main/java/com/sqx/modules/pay/dao/CashOutDao.java b/src/main/java/com/sqx/modules/pay/dao/CashOutDao.java index fd4e8cb8..16bc0eed 100644 --- a/src/main/java/com/sqx/modules/pay/dao/CashOutDao.java +++ b/src/main/java/com/sqx/modules/pay/dao/CashOutDao.java @@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.sqx.modules.pay.entity.CashOut; +import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.Date; import java.util.List; +import java.util.Map; /** * @author fang diff --git a/src/main/java/com/sqx/modules/pay/service/CashOutService.java b/src/main/java/com/sqx/modules/pay/service/CashOutService.java index 2f62eae4..5e733f61 100644 --- a/src/main/java/com/sqx/modules/pay/service/CashOutService.java +++ b/src/main/java/com/sqx/modules/pay/service/CashOutService.java @@ -63,4 +63,6 @@ public interface CashOutService { void batchAudit(Long userId, Integer isAgree, String refund); Map alipayTransferSummaryQuery(String alipayAccountName); + + Result batchCashOutOrder(Double maxMoney, Integer count); } diff --git a/src/main/java/com/sqx/modules/pay/service/impl/CashOutServiceImpl.java b/src/main/java/com/sqx/modules/pay/service/impl/CashOutServiceImpl.java index 59820572..e6cb283e 100644 --- a/src/main/java/com/sqx/modules/pay/service/impl/CashOutServiceImpl.java +++ b/src/main/java/com/sqx/modules/pay/service/impl/CashOutServiceImpl.java @@ -5,8 +5,10 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapProxy; +import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -53,8 +55,11 @@ import weixin.popular.support.TokenManager; import javax.websocket.SendResult; import java.math.BigDecimal; +import java.sql.Time; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * 提现申请记录 @@ -674,5 +679,74 @@ public class CashOutServiceImpl extends ServiceImpl impleme return data; } + @Override + public Result batchCashOutOrder(Double maxMoney, Integer count) { + if (maxMoney == null || maxMoney <= 0) { + maxMoney = 20.00; + } + if (count == null || count <= 0) { + count = 1000; + } + // 查询 待审核的用户 id 列表 + QueryWrapper userIdQuery = Wrappers.query().select("user_id").eq("state", 3).isNotNull("user_id").groupBy("user_id"); + List cashOutList = baseMapper.selectList(userIdQuery); + if (CollUtil.isEmpty(cashOutList)) { + return Result.error("没有待审核的提现申请!"); + } + List userIdList = cashOutList.stream().map(CashOut::getUserId).collect(Collectors.toList()); + System.out.println("userIdList = " + userIdList); + + Double finalMaxMoney = maxMoney; + Integer finalCount = count; + ThreadUtil.execAsync(() -> batchSendCashMoney(userIdList, finalMaxMoney, finalCount, 30)); + + return Result.success(); + } + + private void batchSendCashMoney(List userIds, Double maxMoney, Integer count, int len) { + if (CollUtil.isEmpty(userIds)) { + return; + } + + List> partition = CollUtil.split(userIds, len); + + for (List userIdList : partition) { + // 查询需要提现的用户已经提现的金额和笔数 + QueryWrapper sumQuery = new QueryWrapper<>(); + sumQuery.select("user_id", "sum(money) as money", "count(1) as total"); + sumQuery.in("user_id", userIdList); + sumQuery.eq("state", 1); + sumQuery.groupBy("user_id"); + List> sumList = baseMapper.selectMaps(sumQuery); + + System.out.println("sumList = " + sumList); + + for (Map objectMap : sumList) { + Double totalMoney = Convert.toDouble(objectMap.get("money")); + Integer total = Convert.toInt(objectMap.get("total")); + + if (totalMoney >= maxMoney || total >= count) { + continue; + } + + Long userId = Convert.toLong(objectMap.get("user_id")); + + try { + // 查询用户待审核的列表 + List cashOutList = baseMapper.selectList(Wrappers.lambdaQuery().eq(CashOut::getUserId, userId).eq(CashOut::getState, 3)); + for (CashOut cashOut : cashOutList) { + cashOut.setIsAgree(1); + cashOut.setRefund(""); + queueAudit(cashOut); + } + + TimeUnit.SECONDS.sleep(1); + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + } }