package com.jeeplus.modules.supply.utils;

import com.jeeplus.common.config.Global;
import com.jeeplus.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 定时任务
 */
@Service
@Lazy(false)
public class TaskTime {


    /** 主机 */
    private final static String host = Global.getConfig("remoteServer.host");

    public static final Logger logger = LoggerFactory.getLogger(TaskTime.class);

    private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");


    /**
     * 定时任务删除两天前的数据（物料库/项目信息）   每天凌晨三点执行任务
     */
    @Scheduled(cron = "0 0 3 * * ?")
    public void deleteFileByCron(){
        try{
            logger.info("定时删除物料库/项目信息文件任务开始......");
            long begin = System.currentTimeMillis();
            String dates = formatter.format(new Date());
            logger.info("now="+dates);

            if(StringUtils.isNotBlank(host) && ("127.0.0.1".equals(host) || "localhost".equals(host))){
                String path = null;
                if(System.getProperty("os.name").toLowerCase().contains("win")){
                    path = Global.getConfig("remoteServer.winDirectory");
                }else{
                    path = Global.getConfig("remoteServer.directory");
                }
                //删除  路径名
                File file = new File(path);
                File[] files = file.listFiles();
                //获取要删除的时间
                Calendar date = Calendar.getInstance();
                date.add(Calendar.DAY_OF_MONTH,-2);
                String oldOneTime = new SimpleDateFormat("yyyy_MM_dd").format(date.getTime());
                date.add(Calendar.DAY_OF_MONTH,-1);
                String oldTwoTime = new SimpleDateFormat("yyyy_MM_dd").format(date.getTime());
                //遍历获取全部文件名
                for(File fi:files){
                    if(fi.isFile()){  //如果是文件  取到名称集合
                        String fileName = fi.getName();
                        if(fileName.contains(oldOneTime) || fileName.contains(oldTwoTime)){  //删除前两天的文件 例子：3.4 删除3.1/3.2
                            fi.delete();
                        }
                    }
                }
            }
            long end = System.currentTimeMillis();
            logger.info("定时删除物料库/项目信息文件任务结束，共耗时：[" + (end-begin) / 1000 + "]秒");
        } catch (Exception e) {
            logger.error("-------------定时删除两天前物料库/项目信息文件发生异常-------------");
        }
    }
}
