package com.tanpu.fund.job;

import com.tanpu.common.resp.CommonResp;
import com.tanpu.common.utils.DateUtils;
import com.tanpu.common.utils.JsonUtil;
import com.tanpu.common.utils.RedisUtils;
import com.tanpu.fund.feign.hangjia.FeignForHangjia;
import com.tanpu.fund.service.impl.FundLatestNavService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * @author: zyh
 * <p>
 */
@Slf4j
@Component
public class FundNavCacheJob {

    @Resource
    private FeignForHangjia feignForHangjia;
    @Value("${tanpu.fund.nav.cache.ifa:}")
    private String ifaIdList;
    @Value("${tanpu.most.used.fund.nav.cache.limit:200}")
    private int limit;
    @Value("${tanpu.fund.nav.cache.invoke.repeat:10}")
    private int repeat;

    @Scheduled(cron = "10 1/30 * * * ?")
    public void execute() {
        long start = System.currentTimeMillis();
        String sign = DateUtils.format(DateUtils.nowDate()).replace(" ", "");
        try {
            if (StringUtils.isNotBlank(ifaIdList)) {
                log.info("刷新指定ifa的基金净值缓存job开始");
                String[] ss = ifaIdList.split(",");
                for (String id : ss) {
                    for (int i = 0; i < repeat; i++) {
                        log.info("开始刷新ifa=" + id + "的基金净值缓存, repeat: " + repeat);
                        CommonResp resp = feignForHangjia.reloadFundNav4Ifa(sign, id);
                        log.info("ifa=" + id + "的基金净值缓存刷新结果: " + JsonUtil.toJson(resp));
                        Thread.sleep(500);
                    }
                    Thread.sleep(1000);
                }
            }
        } catch (Exception e) {
            log.error("", e);
        } finally {
            log.info("私募基金最新净值更新job结束, 耗时: {}ms", System.currentTimeMillis() - start);
        }

        try {
            for (int i = 0; i < repeat; i++) {
                log.info("开始刷新使用最多基金净值缓存, limit: " + limit);
                sign = DateUtils.format(DateUtils.nowDate()).replace(" ", "");
                CommonResp resp = feignForHangjia.reloadMostUsedFundNav(sign, limit);
                log.info("使用最多基金净值缓存刷新结果: " + JsonUtil.toJson(resp));
                Thread.sleep(500);
            }
        } catch (Exception e) {
            log.error("", e);
        } finally {
            log.info("基金净值缓存刷新触发job结束, 耗时: {}ms", System.currentTimeMillis() - start);
        }
    }
}