package com.nq.utils.task.user;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.github.pagehelper.PageInfo;
|
import com.nq.common.ServerResponse;
|
import com.nq.dao.FundFlowMapper;
|
import com.nq.dao.UserMapper;
|
import com.nq.pojo.FundFlow;
|
import com.nq.pojo.StockSubscribe;
|
import com.nq.pojo.User;
|
import com.nq.service.IUserService;
|
import com.nq.utils.DateTimeUtil;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import java.math.BigDecimal;
|
import java.util.Date;
|
import java.util.List;
|
|
|
@Component
|
public class FundFlowTask {
|
|
@Autowired
|
private FundFlowMapper fundFlowMapper;
|
|
@Autowired
|
UserMapper userMapper;
|
|
private static final Logger log = LoggerFactory.getLogger(FundFlowTask.class);
|
|
/**
|
* 第二天锁定金额转结可取
|
*/
|
//@Scheduled(cron = "0 1 0 * * ?")
|
@Scheduled(cron = "0 */5 * * * *")
|
public void flowTask(){
|
try {
|
QueryWrapper<FundFlow> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("status", 0);
|
queryWrapper.le("withdraw_date", DateTimeUtil.dateToStr1(new Date())).orderByAsc("withdraw_date");
|
List<FundFlow> fundFlowList = fundFlowMapper.selectList(queryWrapper);
|
if (fundFlowList.isEmpty()){
|
log.info("==flowTask===无待转结数据");
|
return;
|
}
|
fundFlowList.forEach(fundFlow -> {
|
BigDecimal amount = fundFlow.getAmount();
|
BigDecimal usedAmount = fundFlow.getUsedAmount();
|
//待转>0 & >已被使用
|
if (amount.compareTo(BigDecimal.ZERO) > 0
|
&& amount.compareTo(usedAmount) > 0) {
|
User user = this.userMapper.selectByPrimaryKey(fundFlow.getUserId());
|
if(user != null){
|
BigDecimal eWithdrawAmt =user.getEnaleWithdrawAmt();
|
BigDecimal userAmt =user.getEnableAmt().subtract(eWithdrawAmt);
|
if (userAmt.compareTo(BigDecimal.ZERO) == 0){
|
fundFlow.setStatus(2);
|
log.info("==flowTask==id{}=用户资金已用完无法转结", fundFlow.getId());
|
} else {
|
//用户资金足够转结
|
if (userAmt.compareTo(amount) >= 0) {
|
fundFlow.setStatus(1);
|
fundFlow.setRealAmount(amount);
|
user.setEnaleWithdrawAmt(eWithdrawAmt.add(amount));
|
log.info("==flowTask==id{}=用户资金足够,转结{}", fundFlow.getId(), fundFlow.getAmount());
|
} else {
|
fundFlow.setStatus(1);
|
user.setEnaleWithdrawAmt(eWithdrawAmt.add(userAmt));
|
//已使用
|
BigDecimal usedAmt = amount.subtract(userAmt);
|
fundFlow.setUsedAmount(usedAmount.add(usedAmt));
|
fundFlow.setRealAmount(userAmt);
|
log.info("==flowTask==id{}=用户资金不足,转结{},已使用{}", fundFlow.getId(), userAmt, fundFlow.getUsedAmount());
|
}
|
}
|
userMapper.updateByPrimaryKeySelective(user);
|
fundFlowMapper.updateById(fundFlow);
|
}
|
}
|
});
|
|
|
|
|
}catch (Exception e){
|
log.error(e.getMessage(), e);
|
}
|
}
|
|
}
|