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 queryWrapper = new QueryWrapper<>(); queryWrapper.eq("status", 0); queryWrapper.le("withdraw_date", DateTimeUtil.dateToStr1(new Date())).orderByAsc("withdraw_date"); List 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); } } }