批量机审

This commit is contained in:
GYJ
2024-12-28 11:55:28 +08:00
parent 55476d4936
commit d24826f4bb
6 changed files with 99 additions and 0 deletions

View File

@@ -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);
// 执行被拦截的方法

View File

@@ -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);

View File

@@ -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<String, Object> 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);
}
}

View File

@@ -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

View File

@@ -63,4 +63,6 @@ public interface CashOutService {
void batchAudit(Long userId, Integer isAgree, String refund);
Map<String,Object> alipayTransferSummaryQuery(String alipayAccountName);
Result batchCashOutOrder(Double maxMoney, Integer count);
}

View File

@@ -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<CashOutDao, CashOut> 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<CashOut> userIdQuery = Wrappers.<CashOut>query().select("user_id").eq("state", 3).isNotNull("user_id").groupBy("user_id");
List<CashOut> cashOutList = baseMapper.selectList(userIdQuery);
if (CollUtil.isEmpty(cashOutList)) {
return Result.error("没有待审核的提现申请!");
}
List<Long> 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<Long> userIds, Double maxMoney, Integer count, int len) {
if (CollUtil.isEmpty(userIds)) {
return;
}
List<List<Long>> partition = CollUtil.split(userIds, len);
for (List<Long> userIdList : partition) {
// 查询需要提现的用户已经提现的金额和笔数
QueryWrapper<CashOut> 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<Map<String, Object>> sumList = baseMapper.selectMaps(sumQuery);
System.out.println("sumList = " + sumList);
for (Map<String, Object> 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<CashOut> cashOutList = baseMapper.selectList(Wrappers.<CashOut>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();
}
}
}
}
}