提现 / 定时任务

This commit is contained in:
2024-12-04 18:18:38 +08:00
parent 32a8eb78d6
commit d26a250761
16 changed files with 338 additions and 69 deletions

View File

@@ -471,5 +471,11 @@ public class CashController {
}
@GetMapping(value = "/withdraw")
@ApiOperation("发起提现 余额 金钱")
public Result withdraw(Long userId,Double amount)
{
return cashOutService.withdraw(userId,amount);
}
}

View File

@@ -1,20 +1,26 @@
package com.sqx.modules.pay.controller.app;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sqx.common.utils.DateUtils;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.entity.UserEntity;
import com.sqx.modules.app.entity.UserMoney;
import com.sqx.modules.app.service.UserService;
import com.sqx.modules.invite.service.InviteService;
import com.sqx.modules.orders.entity.Orders;
import com.sqx.modules.orders.service.OrdersService;
import com.sqx.modules.pay.dao.CashOutDao;
import com.sqx.modules.pay.dao.PayDetailsDao;
import com.sqx.modules.pay.entity.CashOut;
import com.sqx.modules.pay.entity.PayDetails;
import com.sqx.modules.pay.service.CashOutService;
import com.sqx.modules.pay.wuyou.*;
import com.sqx.modules.utils.AliPayOrderUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@@ -37,14 +43,16 @@ public class WuyouController {
private final PayDetailsDao payDetailsDao;
private final UserService userService;
private final InviteService inviteService;
private final CashOutDao cashOutDao;
private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
WuyouController(OrdersService ordersService, PayDetailsDao payDetailsDao, UserService userService, InviteService inviteService) {
WuyouController(OrdersService ordersService, PayDetailsDao payDetailsDao, UserService userService, InviteService inviteService, CashOutDao cashOutDao) {
this.ordersService = ordersService;
this.payDetailsDao = payDetailsDao;
this.userService = userService;
this.inviteService = inviteService;
this.cashOutDao = cashOutDao;
}
@ApiOperation("支付订单")
@@ -99,7 +107,14 @@ public class WuyouController {
log.error("无忧支付提现回调签名错误, 参数: {},签名结果:{}", JSONObject.toJSONString(notifyDto), sign);
return "签名错误";
}
CashOut cashOut = cashOutDao.selectOne(new QueryWrapper<CashOut>().eq("order_number", notifyDto.getOut_trade_no()));
if (cashOut != null) {
if(notifyDto.getStatus().equals("2")){
cashOut.setState(1);
}else {
cashOut.setRefund(notifyDto.getMsg());
}
}
return "success";
}

View File

@@ -19,6 +19,8 @@ public interface CashOutDao extends BaseMapper<CashOut> {
List<CashOut> selectCashOutLimit3();
List<CashOut> selectYesterday();
Double selectCashOutSum(@Param("userId") Long userId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
Double sumMoney(@Param("time") String time, @Param("flag") Integer flag);

View File

@@ -42,4 +42,12 @@ public interface CashOutService {
Result sysCashMoney(Long userId, Double money);
/**
*
* @param userId 用户Id tb_user的id
* @param money 提现金额
* @return
*/
Result withdraw(Long userId, Double money);
}

View File

@@ -19,8 +19,11 @@ import com.sqx.modules.message.entity.MessageInfo;
import com.sqx.modules.pay.dao.CashOutDao;
import com.sqx.modules.pay.entity.CashOut;
import com.sqx.modules.pay.service.CashOutService;
import com.sqx.modules.pay.wuyou.BaseResp;
import com.sqx.modules.pay.wuyou.WuyouPay;
import com.sqx.modules.sys.entity.SysUserEntity;
import com.sqx.modules.sys.service.SysUserService;
import com.sqx.modules.utils.AliPayOrderUtil;
import com.sqx.modules.utils.AmountCalUtils;
import com.sqx.modules.utils.excel.ExcelData;
import org.apache.commons.lang.StringUtils;
@@ -45,7 +48,7 @@ import java.util.List;
* 提现申请记录
*/
@Service
public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> implements CashOutService {
public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> implements CashOutService{
/**
* 提现申请记录
@@ -74,8 +77,8 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
private SysUserService sysUserService;
@Override
public PageUtils selectCashOutList(Integer page,Integer limit,CashOut cashOut) {
return new PageUtils(baseMapper.selectCashOutPage(new Page<>(page,limit),cashOut));
public PageUtils selectCashOutList(Integer page, Integer limit, CashOut cashOut) {
return new PageUtils(baseMapper.selectCashOutPage(new Page<>(page, limit), cashOut));
}
@@ -85,34 +88,43 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
ExcelData data = new ExcelData();
data.setName("提现列表");
List<String> titles = new ArrayList();
titles.add("编号");titles.add("用户类型");titles.add("用户名称");titles.add("支付宝账号");titles.add("支付宝名称");
titles.add("提现金豆");titles.add("状态");
titles.add("拒绝原因");titles.add("申请时间");titles.add("转账/拒绝时间");titles.add("转账订单号");
titles.add("编号");
titles.add("用户类型");
titles.add("用户名称");
titles.add("支付宝账号");
titles.add("支付宝名称");
titles.add("提现金豆");
titles.add("状态");
titles.add("拒绝原因");
titles.add("申请时间");
titles.add("转账/拒绝时间");
titles.add("转账订单号");
data.setTitles(titles);
List<List<Object>> rows = new ArrayList();
for(CashOut cashOut:cashOutList){
for (CashOut cashOut : cashOutList) {
List<Object> row = new ArrayList();
row.add(cashOut.getId());
if (cashOut.getUserType()==1){
if (cashOut.getUserType() == 1) {
row.add("用户");
row.add(cashOut.getUserName());
}else{
} else {
row.add("分销商");
row.add(cashOut.getSysUserName());
}
row.add(cashOut.getZhifubao());row.add(cashOut.getZhifubaoName());
row.add(cashOut.getZhifubao());
row.add(cashOut.getZhifubaoName());
row.add(cashOut.getMoney());
if(cashOut.getState()==-1){
if (cashOut.getState() == -1) {
row.add("已拒绝");
}else if(cashOut.getState()==0){
} else if (cashOut.getState() == 0) {
row.add("待转账");
}else{
} else {
row.add("成功");
}
row.add(cashOut.getRefund()==null?"":cashOut.getRefund());
row.add(cashOut.getRefund() == null ? "" : cashOut.getRefund());
row.add(cashOut.getCreateAt());
row.add(StringUtils.isEmpty(cashOut.getOutAt())?"":cashOut.getOutAt());
row.add(StringUtils.isEmpty(cashOut.getOutAt()) ? "" : cashOut.getOutAt());
row.add(cashOut.getOrderNumber());
rows.add(row);
}
@@ -141,7 +153,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
@Override
public void cashOutSuccess(String openId, String date, String money, String payWay, String url) {
UserEntity userByWxId = userService.queryByWxOpenId(openId);
if(userByWxId!=null){
if (userByWxId != null) {
MessageInfo messageInfo = new MessageInfo();
messageInfo.setState(String.valueOf(5));
messageInfo.setIsSee("0");
@@ -232,7 +244,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
@Override
public void updateMayMoney(int i, Long userId, Double money) {
cashOutDao.updateMayMoney(i,userId,money);
cashOutDao.updateMayMoney(i, userId, money);
}
@@ -268,43 +280,43 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
@Override
@Transactional
public Result cashMoney(Long userId, Double money){
if(money==null || money<=0.00){
public Result cashMoney(Long userId, Double money) {
if (money == null || money <= 0.00) {
return Result.error("请不要输入小于0的数字,请输入正确的提现金豆!");
}
//最低提现金豆
CommonInfo one = commonInfoService.findOne(112);
if(one!=null && money<Double.parseDouble(one.getValue())){
if (one != null && money < Double.parseDouble(one.getValue())) {
return Result.error("输入金豆不满足最低提现金豆,请重新输入!");
}
//最高提现金豆
CommonInfo one2 = commonInfoService.findOne(153);
if(one2!=null && money>=Double.parseDouble(one2.getValue())){
return Result.error(-100,"输入金豆过大,不能大于"+one2.getValue()+",请重新输入!");
if (one2 != null && money >= Double.parseDouble(one2.getValue())) {
return Result.error(-100, "输入金豆过大,不能大于" + one2.getValue() + ",请重新输入!");
}
//手续费
CommonInfo one1 = commonInfoService.findOne(152);
Double mul = AmountCalUtils.mul(money, Double.parseDouble(one1.getValue()));
if(mul<0.01){
mul=0.01;
if (mul < 0.01) {
mul = 0.01;
}
// UserMoney userMoney=userMoneyService.selectUserMoneyByUserId(userId);
InviteMoney inviteMoney = inviteMoneyService.selectInviteMoneyByUserId(userId);
UserEntity userEntity = userService.selectUserById(userId);
//提现判断金豆是否足够
Double moneySum = AmountCalUtils.add(new BigDecimal(money), new BigDecimal(mul)).doubleValue(); //金豆=提现金豆+手续费
if(inviteMoney.getMoney()>=moneySum){ //用户金豆足够
if (inviteMoney.getMoney() >= moneySum) { //用户金豆足够
//扣除可提现金豆
inviteMoneyService.updateInviteMoneyCashOut(2,moneySum,userId);
inviteMoneyService.updateInviteMoneyCashOut(2, moneySum, userId);
//增加金豆操作记录
UserMoneyDetails userMoneyDetails=new UserMoneyDetails();
UserMoneyDetails userMoneyDetails = new UserMoneyDetails();
userMoneyDetails.setUserId(userId);
userMoneyDetails.setTitle("提现:"+money);
userMoneyDetails.setContent("支付宝提现:"+money+",手续费:"+mul+",总计:"+moneySum);
userMoneyDetails.setTitle("提现:" + money);
userMoneyDetails.setContent("支付宝提现:" + money + ",手续费:" + mul + ",总计:" + moneySum);
userMoneyDetails.setType(2);
userMoneyDetails.setClassify(2);
userMoneyDetails.setMoney(new BigDecimal(moneySum));
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
userMoneyDetails.setCreateTime(sdf.format(new Date()));
userMoneyDetailsService.save(userMoneyDetails);
CashOut cashOut = new CashOut();
@@ -320,50 +332,50 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
baseMapper.insert(cashOut);
// inviteMoneyDao.updateInviteMoneyCashOut(1,money,userId);
return Result.success("提现成功,将在三个工作日内到账,请耐心等待!");
}else{
} else {
return Result.error("金豆不足,请输入正确的提现金豆!");
}
}
@Override
@Transactional
public Result sysCashMoney(Long userId, Double money){
if(money==null || money<=0.00){
public Result sysCashMoney(Long userId, Double money) {
if (money == null || money <= 0.00) {
return Result.error("请不要输入小于0的数字,请输入正确的提现金豆!");
}
//最低提现金豆
CommonInfo one = commonInfoService.findOne(112);
if(one!=null && money<Double.parseDouble(one.getValue())){
if (one != null && money < Double.parseDouble(one.getValue())) {
return Result.error("输入金豆不满足最低提现金豆,请重新输入!");
}
//最高提现金豆
CommonInfo one2 = commonInfoService.findOne(153);
if(one2!=null && money>=Double.parseDouble(one2.getValue())){
return Result.error(-100,"输入金豆过大,不能大于"+one2.getValue()+",请重新输入!");
if (one2 != null && money >= Double.parseDouble(one2.getValue())) {
return Result.error(-100, "输入金豆过大,不能大于" + one2.getValue() + ",请重新输入!");
}
//手续费
CommonInfo one1 = commonInfoService.findOne(152);
Double mul = AmountCalUtils.mul(money, Double.parseDouble(one1.getValue()));
if(mul<0.01){
mul=0.01;
if (mul < 0.01) {
mul = 0.01;
}
UserMoney userMoney=userMoneyService.selectSysUserMoneyByUserId(userId);
UserMoney userMoney = userMoneyService.selectSysUserMoneyByUserId(userId);
SysUserEntity sysUserEntity = sysUserService.getById(userId);
//提现判断金豆是否足够
Double moneySum = AmountCalUtils.add(new BigDecimal(money), new BigDecimal(mul)).doubleValue(); //金豆=提现金豆+手续费
if(userMoney.getMoney().doubleValue()>=moneySum){ //用户金豆足够
if (userMoney.getMoney().doubleValue() >= moneySum) { //用户金豆足够
//扣除可提现金豆
userMoneyService.updateSysMoney(2,userId,moneySum);
userMoneyService.updateSysMoney(2, userId, moneySum);
//增加金豆操作记录
UserMoneyDetails userMoneyDetails=new UserMoneyDetails();
UserMoneyDetails userMoneyDetails = new UserMoneyDetails();
userMoneyDetails.setSysUserId(userId);
userMoneyDetails.setTitle("提现:"+money);
userMoneyDetails.setContent("提现:"+money+",手续费:"+mul+",总计:"+moneySum);
userMoneyDetails.setTitle("提现:" + money);
userMoneyDetails.setContent("提现:" + money + ",手续费:" + mul + ",总计:" + moneySum);
userMoneyDetails.setType(2);
userMoneyDetails.setClassify(2);
userMoneyDetails.setMoney(new BigDecimal(moneySum));
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
userMoneyDetails.setCreateTime(sdf.format(new Date()));
userMoneyDetailsService.save(userMoneyDetails);
CashOut cashOut = new CashOut();
@@ -380,9 +392,64 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
baseMapper.insert(cashOut);
// inviteMoneyDao.updateInviteMoneyCashOut(1,money,userId);
return Result.success("提现成功,将在三个工作日内到账,请耐心等待!");
}else{
} else {
return Result.error("金豆不足,请输入正确的提现金豆!");
}
}
@Override
@Transactional
public Result withdraw(Long userId, Double money) {
if (money == null || money <= 0.00) {
return Result.error("请不要输入小于0的数字,请输入正确的提现金额!");
}
UserEntity userInfo = userService.queryByUserId(userId);
//最低提现金额
// CommonInfo one = commonInfoService.findOne(112);
// if(one!=null && money<Double.parseDouble(one.getValue())){
// return Result.error("不满足最低提现金额,请重新输入!");
// }
CashOut cashOut = new CashOut();
cashOut.setIsOut(false);
cashOut.setMoney(money.toString());
cashOut.setUserId(userInfo.getUserId());
cashOut.setZhifubao(userInfo.getZhiFuBao());
cashOut.setZhifubaoName(userInfo.getZhiFuBaoName());
cashOut.setState(0);
cashOut.setRate(0.00);
cashOut.setUserType(1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = sdf.format(new Date());
cashOut.setCreateAt(date);
String outOrderNo = AliPayOrderUtil.createOrderId();
UserMoneyDetails userMoneyDetails = new UserMoneyDetails();
userMoneyDetails.setSysUserId(userId);
userMoneyDetails.setTitle("提现:" + money);
userMoneyDetails.setType(2);
userMoneyDetails.setState(1);
userMoneyDetails.setClassify(4);
userMoneyDetails.setMoney(new BigDecimal(money));
userMoneyDetails.setCreateTime(date);
UserMoney userMoney = userMoneyService.selectUserMoneyByUserId(userId);
//提现判断余额是否足够
if (userMoney.getAmount().doubleValue() >= money) { //用户金豆足够
//扣除可提现余额
userMoneyService.updateAmount(2, userId, money);
}else {
return Result.success("可提现余额不足!");
}
BaseResp baseResp = WuyouPay.extractOrder(outOrderNo, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName());
if (baseResp.getStatus().equals(2)) {
userMoneyDetails.setContent("成功提现:" + money);
userMoneyDetails.setState(2);
cashOut.setState(1);
}
userMoneyDetailsService.save(userMoneyDetails);
baseMapper.insert(cashOut);
return Result.success("提现成功,将在三个工作日内到账,请耐心等待!");
}
}

View File

@@ -43,6 +43,12 @@ public class WuyouPay {
return JSONObject.parseObject(body, BaseResp.class);
}
/**
* 提现
* @param account 支付宝账号
* @param userName 支付宝名称
* @return
*/
public static BaseResp extractOrder(String outOrderNo, String amount, String account, String userName) {
Map<String, Object> params = getBaseParams();