提现策略改动
This commit is contained in:
@@ -1,78 +0,0 @@
|
||||
package com.sqx.modules.job.task;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.sqx.modules.app.entity.UserMoneyDetails;
|
||||
import com.sqx.modules.app.service.UserMoneyDetailsService;
|
||||
import com.sqx.modules.app.service.UserMoneyService;
|
||||
import com.sqx.modules.pay.dao.CashOutDao;
|
||||
import com.sqx.modules.pay.entity.CashOut;
|
||||
import com.sqx.modules.pay.entity.WithdrawTypeEnum;
|
||||
import com.sqx.modules.pay.wuyou.BaseResp;
|
||||
import com.sqx.modules.pay.wuyou.WuyouPay;
|
||||
import com.sqx.modules.utils.AliPayOrderUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class CashOutTask {
|
||||
|
||||
@Resource
|
||||
private CashOutDao cashOutDao;
|
||||
@Resource
|
||||
private UserMoneyService userMoneyService;
|
||||
@Resource
|
||||
private UserMoneyDetailsService userMoneyDetailsService;
|
||||
@Resource
|
||||
private WuyouPay wuyouPay;
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
public void run(String params) {
|
||||
logger.info("提现开始");
|
||||
List<CashOut> cashOuts = cashOutDao.selectYesterday();
|
||||
for (CashOut cashOut : cashOuts) {
|
||||
if (wuyouPay.checkCanCash(cashOut.getUserId(), WithdrawTypeEnum.RED_ENVELOPE, new BigDecimal(cashOut.getMoney()))) {
|
||||
cashOut.setState(4);
|
||||
String outOrderNo = AliPayOrderUtil.createOrderId();
|
||||
cashOut.setOrderNumber(outOrderNo);
|
||||
|
||||
boolean isUser = cashOut.getUserType() != 2;
|
||||
boolean isHistoryData = StrUtil.isEmpty(cashOut.getBankName());
|
||||
BaseResp baseResp = wuyouPay.extractOrderExt(isHistoryData, false, outOrderNo, cashOut.getUserId(), isUser, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName(), cashOut.getBankName());
|
||||
if (baseResp.getStatus() != null && baseResp.getStatus().equals(2)) {
|
||||
cashOut.setState(1);
|
||||
} else {
|
||||
cashOut.setState(2);
|
||||
cashOut.setRefund(StringUtils.isNotBlank(baseResp.getMsg()) ? baseResp.getMsg() : baseResp.getErrorMsg());
|
||||
if (cashOut.getRefund().contains("收款人账户号出款属性不匹配") || cashOut.getRefund().contains("已驳回")) {
|
||||
cashOut.setRefund("提现失败,请检查收款账号与收款人姓名后重试。");
|
||||
} else {
|
||||
cashOut.setRefund(baseResp.getErrorMsg());
|
||||
}
|
||||
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
|
||||
cashOut.getUserId(), null, null, "提现失败", 4, 1, 1,
|
||||
new BigDecimal(cashOut.getMoney()), "提现失败存入余额" + cashOut.getMoney() + "元", 1, cashOut.getId());
|
||||
|
||||
//存入余额 钱
|
||||
userMoneyService.updateAmount(1, cashOut.getUserId(), Double.parseDouble(cashOut.getMoney()));
|
||||
userMoneyDetailsService.save(userMoneyDetails);
|
||||
}
|
||||
} else {
|
||||
cashOut.setState(3);
|
||||
}
|
||||
cashOutDao.updateById(cashOut);
|
||||
}
|
||||
logger.info("提现结束");
|
||||
}
|
||||
|
||||
|
||||
public void test(String name, String age) {
|
||||
logger.info("name: {}, age: {}", name, age);
|
||||
}
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
package com.sqx.modules.job.task;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.sqx.modules.app.entity.UserMoneyDetails;
|
||||
import com.sqx.modules.app.service.UserMoneyDetailsService;
|
||||
import com.sqx.modules.app.service.UserMoneyService;
|
||||
import com.sqx.modules.pay.dao.CashOutDao;
|
||||
import com.sqx.modules.pay.entity.CashOut;
|
||||
import com.sqx.modules.pay.entity.WithdrawTypeEnum;
|
||||
import com.sqx.modules.pay.wuyou.BaseResp;
|
||||
import com.sqx.modules.pay.wuyou.WuyouPay;
|
||||
import com.sqx.modules.utils.AliPayOrderUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class CashOutTask2 {
|
||||
|
||||
@Resource
|
||||
private CashOutDao cashOutDao;
|
||||
@Resource
|
||||
private UserMoneyService userMoneyService;
|
||||
@Resource
|
||||
private UserMoneyDetailsService userMoneyDetailsService;
|
||||
@Resource
|
||||
private WuyouPay wuyouPay;
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
public void run(String params) {
|
||||
logger.info("提现开始");
|
||||
if (StringUtils.isBlank(params) || isValidDate(params)) {
|
||||
params = DateUtil.today();
|
||||
}
|
||||
List<CashOut> cashOuts = cashOutDao.selectList(new QueryWrapper<CashOut>()
|
||||
.eq("state", 0)
|
||||
.gt("create_at", params + " 00:00:00")
|
||||
.lt("create_at", params + " 23:59:59"));
|
||||
System.out.println(cashOuts.size());
|
||||
for (CashOut cashOut : cashOuts) {
|
||||
if (wuyouPay.checkCanCash(cashOut.getUserId(), WithdrawTypeEnum.RED_ENVELOPE, new BigDecimal(cashOut.getMoney()))) {
|
||||
cashOut.setState(4);
|
||||
String outOrderNo = AliPayOrderUtil.createOrderId();
|
||||
cashOut.setOrderNumber(outOrderNo);
|
||||
boolean isUser = cashOut.getUserType() != 2;
|
||||
boolean isHistoryData = StrUtil.isEmpty(cashOut.getBankName());
|
||||
BaseResp baseResp = wuyouPay.extractOrderExt(isHistoryData, false, outOrderNo, cashOut.getUserId(), isUser, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName(), cashOut.getBankName());
|
||||
if (baseResp.getStatus() != null && baseResp.getStatus().equals(2)) {
|
||||
cashOut.setState(1);
|
||||
} else {
|
||||
cashOut.setState(2);
|
||||
cashOut.setRefund(StringUtils.isNotBlank(baseResp.getMsg()) ? baseResp.getMsg() : baseResp.getErrorMsg());
|
||||
if (cashOut.getRefund().contains("收款人账户号出款属性不匹配") || cashOut.getRefund().contains("已驳回")) {
|
||||
cashOut.setRefund("提现失败,请检查收款账号与收款人姓名后重试。");
|
||||
} else {
|
||||
cashOut.setRefund(baseResp.getErrorMsg());
|
||||
}
|
||||
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
|
||||
cashOut.getUserId(), null, null, "提现失败", 4, 1, 1,
|
||||
new BigDecimal(cashOut.getMoney()), "提现失败存入余额" + cashOut.getMoney() + "元", 1, cashOut.getId());
|
||||
|
||||
//存入余额 钱
|
||||
userMoneyService.updateAmount(1, cashOut.getUserId(), Double.parseDouble(cashOut.getMoney()));
|
||||
userMoneyDetailsService.save(userMoneyDetails);
|
||||
}
|
||||
} else {
|
||||
cashOut.setState(3);
|
||||
}
|
||||
|
||||
cashOutDao.updateById(cashOut);
|
||||
}
|
||||
logger.info("提现结束");
|
||||
}
|
||||
|
||||
public static boolean isValidDate(String dateString) {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
try {
|
||||
sdf.parse(dateString);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -110,14 +110,6 @@ public class AppCashController {
|
||||
if (!in) {
|
||||
return Result.error(StrUtil.format("提现时间为每天{}", info.getValue()));
|
||||
}
|
||||
double money = Double.parseDouble(commonInfoService.findOne(929).getValue());
|
||||
Double v = cashOutService.queryUserTodayCashAmount(userId);
|
||||
if (v == null) {
|
||||
v = 0.0d;
|
||||
}
|
||||
if ((v + amount) >= money) {
|
||||
return Result.error("今日提现金额已达上限");
|
||||
}
|
||||
Result ret = Result.error();
|
||||
try {
|
||||
ret = cashOutService.withdraw(userId, amount, null, false);
|
||||
|
||||
@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.exceptions.ValidateException;
|
||||
import cn.hutool.core.thread.ThreadUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
@@ -510,7 +511,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result withdraw(Long userId, Double money, String msg, boolean isSys) {
|
||||
if (money == null || money <= 0.00) {
|
||||
return Result.error("请不要输入小于0的数字,请输入正确的提现金额!");
|
||||
@@ -604,7 +605,8 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
||||
if (sysUserMoney.getMoney().doubleValue() < money) {
|
||||
return Result.success("可提现余额不足!");
|
||||
}
|
||||
if (wuyouPay.checkCanCash(userId, WithdrawTypeEnum.MANUAL, new BigDecimal(money.toString()))) {
|
||||
try {
|
||||
wuyouPay.checkCanCash(userId, WithdrawTypeEnum.MANUAL, new BigDecimal(money.toString()));
|
||||
cashOut.setStatus(4);
|
||||
BaseResp baseResp = wuyouPay.extractOrder(outOrderNo, cashOut.getUserId(), false, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName(), cashOut.getBankName());
|
||||
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
|
||||
@@ -612,15 +614,16 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
||||
cashOut.setState(1);
|
||||
cashOut.setOutAt(DateUtil.date().toString());
|
||||
}
|
||||
|
||||
if (baseResp.getErrorMsg() != null) {
|
||||
return Result.error(baseResp.getErrorMsg());
|
||||
}
|
||||
} else {
|
||||
}catch (SqxException e){
|
||||
return Result.error(e.getMsg());
|
||||
}catch (ValidateException v){
|
||||
sysUserMoneyDetails.setContent("提现:" + money);
|
||||
cashOut.setState(3);
|
||||
cashOut.setRelationId(v.getMessage());
|
||||
}
|
||||
|
||||
sysUserMoneyDetailsService.save(sysUserMoneyDetails);
|
||||
baseMapper.insert(cashOut);
|
||||
sysUserMoneyService.updateSysMoney(2, userId, money);
|
||||
@@ -648,7 +651,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
||||
cashOut.setState(3);
|
||||
cashOut.setRelationId("提现黑名单用户,请谨慎审核!");
|
||||
} else {
|
||||
if (wuyouPay.checkCanCash(userId, WithdrawTypeEnum.MANUAL, new BigDecimal(money.toString()))) {
|
||||
try {
|
||||
cashOut.setStatus(4);
|
||||
BaseResp baseResp = wuyouPay.extractOrder(outOrderNo, cashOut.getUserId(), true, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName(), cashOut.getBankName());
|
||||
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
|
||||
@@ -656,13 +659,15 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
||||
cashOut.setState(1);
|
||||
cashOut.setOutAt(DateUtil.date().toString());
|
||||
}
|
||||
|
||||
if (baseResp.getErrorMsg() != null) {
|
||||
return Result.error(baseResp.getErrorMsg());
|
||||
}
|
||||
} else {
|
||||
}catch (SqxException e){
|
||||
return Result.error(e.getMsg());
|
||||
}catch (ValidateException v){
|
||||
userMoneyDetails.setContent("提现:" + money);
|
||||
cashOut.setState(3);
|
||||
cashOut.setRelationId(v.getMessage());
|
||||
}
|
||||
}
|
||||
userMoneyDetailsService.save(userMoneyDetails);
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
package com.sqx.modules.pay.wuyou;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.exceptions.ValidateException;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.sqx.common.exception.SqxException;
|
||||
import com.sqx.modules.common.entity.CommonInfo;
|
||||
import com.sqx.modules.common.service.CommonInfoService;
|
||||
import com.sqx.modules.pay.dao.CashOutDao;
|
||||
import com.sqx.modules.pay.entity.WithdrawTypeEnum;
|
||||
import com.sqx.modules.pay.service.CashOutService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@@ -32,13 +35,15 @@ public class WuyouPay {
|
||||
|
||||
private final CashOutDao cashOutDao;
|
||||
private final CommonInfoService commonInfoService;
|
||||
private final CashOutService cashOutService;
|
||||
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(WuyouPay.class);
|
||||
|
||||
public WuyouPay(CashOutDao cashOutDao, CommonInfoService commonInfoService) {
|
||||
public WuyouPay(CashOutDao cashOutDao, CommonInfoService commonInfoService, CashOutService cashOutService) {
|
||||
this.cashOutDao = cashOutDao;
|
||||
this.commonInfoService = commonInfoService;
|
||||
this.cashOutService = cashOutService;
|
||||
}
|
||||
|
||||
public BaseResp payOrder(String orderNo, Long userId, String amount, String userAgent, String allId, String payType) {
|
||||
@@ -92,34 +97,60 @@ public class WuyouPay {
|
||||
return JSONObject.parseObject(body, BaseResp.class);
|
||||
}
|
||||
|
||||
public boolean checkCanCash(long userId, WithdrawTypeEnum type, BigDecimal money) {
|
||||
public void checkCanCash(long userId, WithdrawTypeEnum type, BigDecimal money) {
|
||||
if (WithdrawTypeEnum.MANUAL.equals(type)) {
|
||||
// 查询当日体现次数
|
||||
Integer successCashCount = cashOutDao.selectTodayCashCount(userId, 1, DateUtil.today() + " 00:00:00");
|
||||
CommonInfo cashLimit = commonInfoService.findOne(922);
|
||||
if (cashLimit == null || StrUtil.isBlank(cashLimit.getValue())) {
|
||||
logger.warn("提现必要参数未配置,请联系管理员");
|
||||
return false;
|
||||
throw new ValidateException("【922】每日体现次数上限未配置");
|
||||
}
|
||||
|
||||
if (successCashCount >= Integer.parseInt(cashLimit.getValue())) {
|
||||
logger.warn("体现次数超限,当前限制{}次, 已经体现{}次", cashLimit.getValue(), successCashCount);
|
||||
return false;
|
||||
|
||||
throw new SqxException(StrUtil.format("超过当日提现限制次数{}次,请明天再试!", cashLimit.getValue()));
|
||||
}
|
||||
return checkCanCashByLimit(money);
|
||||
checkCanCashByLimit(money);
|
||||
todayTotalLimit(userId, money.doubleValue());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean checkCanCashByLimit(BigDecimal money) {
|
||||
public void checkCanCashByLimit(BigDecimal money) {
|
||||
CommonInfo info = commonInfoService.findOne(923);
|
||||
if (info == null || StrUtil.isBlank(info.getValue())) {
|
||||
logger.warn("未配置提现限制,请联系管理员配置");
|
||||
return false;
|
||||
throw new ValidateException("【923】单次提现超额未配置");
|
||||
}
|
||||
|
||||
return money.compareTo(new BigDecimal(info.getValue())) <= 0;
|
||||
boolean ret = money.compareTo(new BigDecimal(info.getValue())) <= 0;
|
||||
if(!ret){
|
||||
throw new ValidateException("单次提现超额");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 当日累计提现超过设定值时,需要人工审核
|
||||
*
|
||||
* @param userId
|
||||
* @param amount
|
||||
* @return
|
||||
*/
|
||||
public void todayTotalLimit(long userId, double amount) {
|
||||
CommonInfo info = commonInfoService.findOne(929);
|
||||
if (info == null || StrUtil.isBlank(info.getValue())) {
|
||||
logger.warn("未配置提现限制,请联系管理员配置");
|
||||
throw new ValidateException("【929】当日累计提现额未配置");
|
||||
}
|
||||
double money = Double.parseDouble(commonInfoService.findOne(929).getValue());
|
||||
Double v = cashOutService.queryUserTodayCashAmount(userId);
|
||||
if (v == null) {
|
||||
v = 0.0d;
|
||||
}
|
||||
if ((v + amount) >= money) {
|
||||
logger.warn("当日累计提现超过设定值时,当日累计提现金额:¥{}, 提现金额:¥{},设定值:¥{}", (v + amount), amount, money);
|
||||
throw new ValidateException("当日累计提现超额");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -241,7 +272,7 @@ public class WuyouPay {
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
WuyouPay pay = new WuyouPay(null, null);
|
||||
WuyouPay pay = new WuyouPay(null, null, null);
|
||||
|
||||
Map<String, Object> params = pay.getBaseParams();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user