package com.jxy.marketall.task;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jxy.common.core.utils.StringUtils;
import com.jxy.common.redis.service.RedisService;
import com.jxy.marketall.dto.*;
import com.jxy.marketall.entity.*;
import com.jxy.marketall.mapper.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

import java.util.ArrayList;
import java.util.List;


/**
 * @Description TODO
 * @Date 2022/7/7 18:03
 * @Author 杜懿
 */
@Configuration
@EnableScheduling
public class DataCheckTask {


    @Autowired
    private BTCBigAmountVoutMapper bigAmountVoutMapper;

    @Autowired
    private HolderMapper holderMapper;

    @Autowired
    private HolderBalanceMapper holderBalanceMapper;

    @Autowired
    private UtxosMapper utxosMapper;

    @Autowired
    private Utxos2ndMapper utxos2ndMapper;

    @Autowired
    private Arh99Mapper arh99Mapper;

    @Autowired
    private Arh99DayMapper arh99DayMapper;

    @Autowired
    private Jzr60Mapper jzr60Mapper;

    @Autowired
    private Jzr60DayMapper jzr60DayMapper;

    @Autowired
    private ETHMapper ethMapper;

    @Autowired
    private ETHRTMapper ethrtMapper;

    @Autowired
    private RedisService redisService;


    /** 查询每张表最新数据 谢工 */
    @Scheduled(cron = "0 1,6,11 0 * * ?")
    //@Scheduled(cron = "0 0 0/2 * * ?")
    public void xieDataToRedis(){

        List<DataCheckDto> list = new ArrayList<>();
        DataCheckDto dto = new DataCheckDto();
        int id = 1;

        /** 112服务器上的表 */
        dto.setTableServer("112服务器");
        dto.setDb("btcdb4");
        //blockamount表
        //BlockAmountDto lastBlockAmount = blockAmountMapper.getLastBlockAmount();
        //dto.setId(id);
        //dto.setTableName("blockamount");
        //if(StringUtils.isNotNull(lastBlockAmount)) {
        //    dto.setDateTime(lastBlockAmount.getDateTime());
        //}
        //list.add(dto);
        //dto = new DataCheckDto();
        //dto.setTableServer("112服务器");
        //dto.setDb("btcdb4");
        //id++;


        //dailybuysell表
        //DailyBuySellDto lastDailyBuySell = dailyBuySellMapper.getLastDailyBuySell();
        //dto.setId(id);
        //dto.setTableName("dailybuysell");
        //if(StringUtils.isNotNull(lastDailyBuySell)) {
        //    dto.setDateTime(lastDailyBuySell.getDateTime());
        //}
        //list.add(dto);
        //dto = new DataCheckDto();
        //dto.setTableServer("112服务器");
        //dto.setDb("btcdb4");
        //id++;

        /** 112服务器 4418端口上的表 */
        /** btcdb */
        dto.setTableServer("112服务器");
        dto.setDb("btcdb");
        //bigamountvout表
        BTCBigAmountVout lastBigAmountVout = bigAmountVoutMapper.getLastBigAmountVout();
        dto.setId(id);
        dto.setTableName("bigamountvout");
        if(StringUtils.isNotNull(lastBigAmountVout)) {
            dto.setDateTime(lastBigAmountVout.getDate());
        }
        list.add(dto);
        dto = new DataCheckDto();
        id++;

        //holder表
        HolderDto newHolder = holderMapper.getNewHolder();
        dto.setId(id);
        dto.setTableName("holder");
        if(StringUtils.isNotNull(newHolder)) {
            dto.setDateTime(newHolder.getDateTime());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("112服务器");
        dto.setDb("btcdb");
        id++;

        //holder_balance表
        LambdaQueryWrapper<HolderBalance> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.orderByDesc(HolderBalance::getDateTime).last("limit 1");
        HolderBalance holderBalance = holderBalanceMapper.selectOne(lambdaQueryWrapper);
        dto.setId(id);
        dto.setTableName("holder_balance");
        if(StringUtils.isNotNull(holderBalance)) {
            dto.setDateTime(holderBalance.getDateTime());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("112服务器");
        dto.setDb("btcdb");
        id++;

        //utxos表
        UtxosDto newUtxos = utxosMapper.getNewUtxos();
        dto.setId(id);
        dto.setTableName("utxos");
        if(StringUtils.isNotNull(newUtxos)) {
            dto.setDateTime(newUtxos.getDateTime());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("112服务器");
        dto.setDb("btcdb");
        id++;

        //utxos2nd表
        Utxos2ndDto newUtxos2nd = utxos2ndMapper.getNewUtxos2nd();
        dto.setId(id);
        dto.setTableName("utxos2nd");
        if(StringUtils.isNotNull(newUtxos2nd)) {
            dto.setDateTime(newUtxos2nd.getDateTime());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("112服务器");
        dto.setDb("btcdb");
        id++;

        /** 132服务器上的表 */
        /** btcdb */
        dto.setTableServer("132服务器");
        dto.setDb("btcdb");

        //arh99表
        LambdaQueryWrapper<Arh99> arh99W = new LambdaQueryWrapper<>();
        arh99W.orderByDesc(Arh99::getDate).last("limit 1");
        Arh99 arh99 = arh99Mapper.selectOne(arh99W);
        dto.setId(id);
        dto.setTableName("arh99");
        if(StringUtils.isNotNull(arh99)) {
            dto.setDateTime(arh99.getDate());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("btcdb");
        id++;

        //arh99day表
        LambdaQueryWrapper<Arh99Day> arh99DayW = new LambdaQueryWrapper<>();
        arh99DayW.orderByDesc(Arh99Day::getDate).last("limit 1");
        Arh99Day arh99Day = arh99DayMapper.selectOne(arh99DayW);
        dto.setId(id);
        dto.setTableName("arh99day");
        if(StringUtils.isNotNull(arh99Day)) {
            dto.setDateTime(arh99Day.getDate());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("btcdb");
        id++;

        //jzr60表
        LambdaQueryWrapper<Jzr60> jzr60W = new LambdaQueryWrapper<>();
        jzr60W.orderByDesc(Jzr60::getDate).last("limit 1");
        Jzr60 jzr60 = jzr60Mapper.selectOne(jzr60W);
        dto.setId(id);
        dto.setTableName("jzr60");
        if(StringUtils.isNotNull(jzr60)) {
            dto.setDateTime(jzr60.getDate());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("btcdb");
        id++;

        //jzr60day表
        LambdaQueryWrapper<Jzr60Day> jzr60DayW = new LambdaQueryWrapper<>();
        jzr60DayW.orderByDesc(Jzr60Day::getDate).last("limit 1");
        Jzr60Day jzr60Day = jzr60DayMapper.selectOne(jzr60DayW);
        dto.setId(id);
        dto.setTableName("jzr60Day");
        if(StringUtils.isNotNull(jzr60Day)) {
            dto.setDateTime(jzr60Day.getDate());
        }
        list.add(dto);
        dto = new DataCheckDto();
        id++;

        /** ethrtdb */
        dto.setTableServer("132服务器");
        dto.setDb("ethrtdb");

        //ethbigtx表
        EthBigTx lastEthBigTx = ethMapper.selectLastETHBigTx();
        dto.setId(id);
        dto.setTableName("ethbigtx");
        if(StringUtils.isNotNull(lastEthBigTx)) {
            dto.setDateTime(lastEthBigTx.getDate());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("ethdb");
        id++;

        //usdtbigtx表
        USDTBigTx usdtBigTx = ethMapper.selectLastUSDTBigTx();
        dto.setId(id);
        dto.setTableName("usdtbigtx");
        if(StringUtils.isNotNull(usdtBigTx)) {
            dto.setDateTime(usdtBigTx.getDate());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("ethdb");
        id++;

        //usdcbigtx表
        USDCBigTx usdcBigTx = ethMapper.selectLastUSDCBigTx();
        dto.setId(id);
        dto.setTableName("usdcbigtx");
        if(StringUtils.isNotNull(usdcBigTx)) {
            dto.setDateTime(usdcBigTx.getDate());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("ethdb");
        id++;

        //usdtvolume表
        USDVolumeDto usdtVolumeDto = ethMapper.selectLastUSDTVolume();
        dto.setId(id);
        dto.setTableName("usdtvolume");
        if(StringUtils.isNotNull(usdtVolumeDto)) {
            dto.setDateTime(usdtVolumeDto.getDateTime());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("ethdb");
        id++;

        //usdcvolume表
        USDVolumeDto usdcVolumeDto = ethMapper.selectLastUSDCVolume();
        dto.setId(id);
        dto.setTableName("usdcvolume");
        if(StringUtils.isNotNull(usdcVolumeDto)) {
            dto.setDateTime(usdcVolumeDto.getDateTime());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("ethdb");
        id++;

        //tronusdtbigtx表
        TronUSDTBigTx tronUSDTBigTx = ethMapper.selectLastTronUSDTBigTx();
        dto.setId(id);
        dto.setTableName("tronusdtbigtx");
        if(StringUtils.isNotNull(tronUSDTBigTx)) {
            dto.setDateTime(tronUSDTBigTx.getDate());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("ethrtdb");
        id++;

        //tronusdcbigtx表
        TronUSDCBigTx tronUSDCBigTx = ethMapper.selectLastTronUSDCBigTx();
        dto.setId(id);
        dto.setTableName("tronusdcbigtx");
        if(StringUtils.isNotNull(tronUSDCBigTx)) {
            dto.setDateTime(tronUSDCBigTx.getDate());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("ethrtdb");
        id++;

        //tronusdtvolume表
        TronVolumeDto tronUSDTVolumeDto = ethMapper.selectLastTronUSDTVolume();
        dto.setId(id);
        dto.setTableName("tronusdtvolume");
        if(StringUtils.isNotNull(tronUSDTVolumeDto)) {
            dto.setDateTime(tronUSDTVolumeDto.getDateTime());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("ethrtdb");
        id++;

        //tronusdcvolume表
        TronVolumeDto tronUSDCVolumeDto = ethMapper.selectLastTronUSDCVolume();
        dto.setId(id);
        dto.setTableName("tronusdcvolume");
        if(StringUtils.isNotNull(tronUSDCVolumeDto)) {
            dto.setDateTime(tronUSDCVolumeDto.getDateTime());
        }
        list.add(dto);
        dto = new DataCheckDto();
        dto.setTableServer("132服务器");
        dto.setDb("ethrtdb");
        id++;

        /** 56服务器上的表 */

        if(StringUtils.isNotEmpty(list)){
            //存入redis 先删除原有数据再重新插入数据
            redisService.deleteObject("NewDataList");
            redisService.setCacheList("NewDataList",list);
       }else{
            System.out.println("holder数据存储失败");
        }
    }

}
