package com.tofly.base.service.impl;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tofly.base.entity.DataBack;
import com.tofly.base.mapper.DataBackMapper;
import com.tofly.base.service.DataBackService;
import com.tofly.common.oauth.util.SecurityUtils;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

@Component
@Service("dataBackService")
@EnableScheduling
public class DataBackServiceImpl extends ServiceImpl<DataBackMapper, DataBack> implements DataBackService,SchedulingConfigurer {

	@Override
	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Page<Map> getDataBackPage(Page page, DataBack dataBack) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void backUpMysqlAuto() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void backUpMysqlManual() throws Exception {
		// TODO Auto-generated method stub
		
	}
	
//	/**
//	 * 数据库类型，支持mysql和oracle
//	 */
//    @Value("${dataBack.dbType}")
//    private String dbType;
//    
//    /**
//	 * 操作类型，支持windows和linux
//	 */
//    @Value("${dataBack.osType}")
//    private String osType;
//    
//    /**
//	 * 文件备份路径
//	 */
//    @Value("${dataBack.backPath}")
//    private String backPath;
//    
//    /**
//	 * 数据库IP
//	 */
//    @Value("${dataBack.dbIp}")
//    private String dbIp;
//
//    /**
//	 * 数据库端口
//	 */
//    @Value("${dataBack.dbPort}")
//    private String dbPort;
//    
//    /**
//	 * 数据库用户名
//	 */
//    @Value("${dataBack.dbUserName}")
//    private String dbUserName;
//        
//    /**
//	 * 数据库密码
//	 */
//    @Value("${dataBack.dbPwd}")
//    private String dbPwd;
//    
//    
//    /**
//	 * 数据库名称（mysql填数据库名，oracle填服务器名）
//	 */
//    @Value("${dataBack.dbName}")
//    private String dbName;
//    
//    
//    
//    @SneakyThrows
//    @Async("asyncPoolTaskExecutor") 
//    public void dataBackAsync(Long dbId) throws Exception { 
//    	
//    	String fileName = "";
//    	StringBuffer sb = new StringBuffer();
//    	
//    	if(dbType.equals("mysql")) {
//    		fileName ="dcsw-"+new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())+".sql";
//    		
//    		if(osType.equals("windows")) {
//    			sb.append("mysqldump");
//                sb.append(" -h"+dbIp);
//                sb.append(" -P"+dbPort);
//                sb.append(" -u"+dbUserName);
//                sb.append(" -p"+dbPwd);
//                sb.append(" --set-gtid-purged=OFF");
//                sb.append(" "+dbName+" > ");
//                sb.append(backPath + "/"+  fileName);
//    		}else if(osType.equals("linux")) {
//    			sb.append("mysqldump");
//    			sb.append(" -h").append(dbIp)
//    	        .append(" -P").append(dbPort)
//    	        .append(" -u").append(dbUserName)
//    	        .append(" -p").append(dbPwd)
//    	        .append(" --set-gtid-purged=OFF")
//    	        .append(" --column-statistics=0")
//    	        .append(" ").append(dbName).append(" | gzip");
//    			sb.append(" > ").append(backPath + "/"+ fileName);
//    		}
//
//    	}else if(dbType.equals("oracle")) {
//    		fileName ="dcsw-"+new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())+".dmp";
//    		sb.append( "exp " + dbUserName + "/" + dbPwd + "@" + dbIp + ":+ dbPort +/"+ dbName + " file=" + backPath + "/" + fileName);    		    		    		
//    	}
//    	
//    	File saveFile = new File(backPath);  
//        if (!saveFile.exists()) {// 如果目录不存在  
//            saveFile.mkdirs();// 创建文件夹  
//        }  
//
//        try {  
//        	
//        	Process process = null;
//        
//    		if(osType.equals("windows")) {
//        		process = Runtime.getRuntime().exec(sb.toString());  
//        	}else if(osType.equals("linux")) {
//        	    process = Runtime.getRuntime().exec(new String[] {"sh", "-c", sb.toString() });
//        	}
//        	
//        	
//        	if(process.waitFor() == 0){
//            	System.out.println("备份成功####################################");
//            	DataBack db =new DataBack();
//            	db.setId(dbId);
//            	db.setBackRemark("备份成功");
//            	db.setBackStatus(1);
//            	db.setBackDataName(fileName);
//            	
//            	baseMapper.updateById(db);
//            	
//            }
//              
//        } catch (IOException e) {  
//            e.printStackTrace();  
//        } 
//    }
//
//
//
//	@Override
//	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//		// TODO Auto-generated method stub
//		
//	}
//
//
//
//	@Override
//	public Page<Map> getDataBackPage(Page page, DataBack dataBack) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//
//
//	@Override
//	public void backUpMysqlAuto() {
//		// TODO Auto-generated method stub
//		
//	}
//
//
//
//	@Override
//	public void backUpMysqlManual() throws Exception {
//		
//		//数据新增
//		DataBack db =new DataBack();
//    	db.setCreateTime(new Date());
//    	db.setCreateUser(SecurityUtils.getUserId());
//    	db.setOperateType("人工");
//    	db.setBackType("全量备份");    	
//    	baseMapper.insert(db);
//    	
//    	
//    	dataBackAsync(db.getId());
//		
//	}
}