//package com.tofly.base.service.impl;
//
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.tofly.base.config.BackDataProperty;
//import com.tofly.base.config.ConfigProperty;
//import com.tofly.base.config.Constant;
//import com.tofly.base.entity.DataBack;
//import com.tofly.base.entity.DataBackPolicy;
//import com.tofly.base.mapper.DataBackMapper;
//import com.tofly.base.mapper.DataBackPolicyMapper;
//import com.tofly.base.service.DataBackService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Async;
//import org.springframework.scheduling.annotation.EnableScheduling;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.scheduling.annotation.SchedulingConfigurer;
//import org.springframework.scheduling.config.ScheduledTaskRegistrar;
//import org.springframework.scheduling.support.CronTrigger;
//import org.springframework.stereotype.Service;
//
//import java.io.File;
//import java.math.BigDecimal;
//import java.text.DecimalFormat;
//import java.text.SimpleDateFormat;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//
//@Slf4j
//@Service("dataBackService")
//@EnableScheduling
//public class DataBackServiceImpl1 extends ServiceImpl<DataBackMapper, DataBack> implements DataBackService,SchedulingConfigurer {
//
//	@Autowired
//    private BackDataProperty backDataProperty;
//	
//	@Autowired
//    private ConfigProperty configProperty;
//	
//	@Autowired
//    private DataBackPolicyMapper dataBackPolicyMapper;
//		
//    @Override
//    @Scheduled(cron = "0 0 0 */7 * ?")
//    public void backUpMysqlAuto() {
//    	HashMap<String,String> returnMap =new HashMap<String,String>();
//    	HashMap<String,String> paramMap =new HashMap<String,String>();
//    	paramMap.put("operateType", "自动备份");
//        try {
//            if("windows".equals(backDataProperty.getOsType())){  //操作系统是window备份程序
//            	backUpMysqlInWin(paramMap);
//            }else if("linux".equals(backDataProperty.getOsType())){  //操作系统是linux备份程序
//            	backUpMysqlInLinux(paramMap);
//            }
//        }catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    
//    @Override
//	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//      //方法报错了，启动不起来
//        /*taskRegistrar.addTriggerTask(
//				//1.添加任务内容(Runnable)
//				() -> {
//					backUpMysqlAuto();
//				},
//				//2.设置执行周期(Trigger)
//				triggerContext -> {
//					//2.1 从数据库获取执行周期
//					//这里的意思是数据库查出对应的cron属性
//					String cron = dataBackPolicyMapper.selectById(1).getCronVal();
//					//2.2 合法性校验.
//					if (StringUtils.isBlank(cron)) {
//						//如果为空则赋默认值
//						cron = "0 0 0 * /7 * ?";
//					}
//					//2.3 返回执行周期(Date)
//					return new CronTrigger(cron).nextExecutionTime(triggerContext);
//				}
//		);*/
//	}
//    
//    
//    
//    
//    
//    
//    /**
//     * windows数据库备份
//     * @param paramsMap
//     * @throws Exception
//     */
//    public HashMap<String,String> backUpMysqlInWin(Map<String, String> paramsMap) throws Exception {
//    	HashMap<String,String> returnMap =new HashMap<String,String>();
//    	String fileName ="dcsw-"+new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())+".sql";
//        String backPath = configProperty.getUploadPath()+"dataBack/";
//        File fileSql = new File(backPath);
//        
//        if (!fileSql.exists()){
//            fileSql.mkdirs();
//        }
//        
//        //mysqldump -hlocalhost -uroot -p123456 db > /home/back.sql
//        StringBuffer sb = new StringBuffer();
//        sb.append("mysqldump");
//        sb.append(" -h"+backDataProperty.getDbIp());
//        sb.append(" -P"+backDataProperty.getDbPort());
//        sb.append(" -u"+backDataProperty.getDbUserName());
//        sb.append(" -p"+backDataProperty.getDbPassWord());
//        sb.append(" --set-gtid-purged=OFF");
//        sb.append(" "+backDataProperty.getDbName()+" > ");
//        sb.append(backPath+fileName);
//        
//        Runtime runtime = Runtime.getRuntime();
//        Process p = runtime.exec("cmd /c d:/"+sb.toString());
//        
//        
//        DataBackPolicy dbp= dataBackPolicyMapper.selectById(1);
//        dbp.setIsBack("1");
//        dataBackPolicyMapper.updateById(dbp);
//        
//        
//        if(p.waitFor()==0){
//        	DataBack db =new DataBack();
//        	db.setCreateTime(new Date());
////        	db.setCreateUser(SecurityUtils.getUserId());
//        	db.setBackDataPath("/dataBack/"+fileName);
//        	db.setBackDataName(fileName);
//        	db.setOperateType(paramsMap.get("operateType"));
//        	db.setBackType("全量备份");
//        	
//        	File file = new File(backPath+fileName);
//        	db.setBackDataLength(readableFileSize(file.length()));
//        	baseMapper.insert(db);
//        	
//        	
//        	
//            dbp.setIsBack("2");
//            dataBackPolicyMapper.updateById(dbp);
//             
//        	       	
//        }
//        return returnMap;
//    }
//    
//    
//    
//    
//            
//    /**
//     * linux数据库备份
//     * @param paramsMap
//     * @throws Exception
//     */
//    public HashMap<String,String> backUpMysqlInLinux(Map<String, String> paramsMap) throws Exception {
//    	HashMap<String,String> returnMap =new HashMap<String,String>();
//        String fileName ="csps-"+ new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())+".gz";
//        File saveFile = new File(configProperty.getUploadPath()+"dataBack/");
//        if (!saveFile.exists()) {// 如果目录不存在
//            saveFile.mkdirs();// 创建文件夹
//        }
//        
//        //mysqldump -uroot -pDhcc1024 hrp_ecs > /ecs/back/.sql
//        StringBuilder stringBuilder = new StringBuilder();
//        stringBuilder.append("mysqldump");
//        stringBuilder.append(" -h").append(backDataProperty.getDbIp())
//        .append(" -P").append(backDataProperty.getDbPort())
//        .append(" -u").append(backDataProperty.getDbUserName())
//        .append(" -p").append(backDataProperty.getDbPassWord())
//        .append(" --set-gtid-purged=OFF")
//        .append(" --column-statistics=0")
//
//        .append(" --add-drop-table")        
//        .append(" ").append(backDataProperty.getDbName()).append(" | gzip");
//        stringBuilder.append(" > ").append(configProperty.getUploadPath()+"dataBack/" + fileName);
//        Process process = Runtime.getRuntime().exec(new String[] {"sh", "-c", stringBuilder.toString() });
//        
//        DataBackPolicy dbp= dataBackPolicyMapper.selectById(1);
//        dbp.setIsBack("1");
//        dataBackPolicyMapper.updateById(dbp);
//        
//        if (process.waitFor() == 0) {// 0 表示线程正常终止。
//        	
//        	DataBack db =new DataBack();
//        	db.setCreateTime(new Date());
////        	db.setCreateUser(SecurityUtils.get);
//        	db.setBackDataPath("/dataBack/" + fileName);
//        	db.setBackDataName(fileName);
//        	db.setOperateType(paramsMap.get("operateType"));
//        	db.setBackType("全量备份");
//        	
//        	File file = new File(configProperty.getUploadPath()+"dataBack/" + fileName);
//        	db.setBackDataLength(readableFileSize(file.length()));
//        	baseMapper.insert(db);       
//        	
//        	dbp.setIsBack("2");
//            dataBackPolicyMapper.updateById(dbp);
//        }
//        return returnMap;
//    }
//
//	@Override
//	@Async
//	public void backUpMysqlManual() {
//    	HashMap<String,String> paramMap =new HashMap<String,String>();
//    	paramMap.put("operateType", "人工备份");
//        try {
//            if(configProperty.getOperateOS().equals(Constant.OPERATE_OS_WINDOW)){  //操作系统是window备份程序
//            	backUpMysqlInWin(paramMap);
//            }else if(configProperty.getOperateOS().equals(Constant.OPERATE_OS_LINUX)){  //操作系统是linux备份程序
//            	backUpMysqlInLinux(paramMap);
//            }
//        }catch (Exception e) {
//            e.printStackTrace();
//        }
//	}
//	
//	public static String readableFileSize(long size) {
//		DecimalFormat df=new DecimalFormat("0.00");
//		String fileSize = Double.valueOf((double)size / 1024 / 1024).toString();		
//		String premium  = df.format(new BigDecimal(fileSize ));				
//		return premium+"MB";
//	}
//
//
//	@Override
//	public Page<Map> getDataBackPage(Page page, DataBack dataBack) {
//		return page.setRecords(baseMapper.getDataBackPage(page, dataBack));
//	}
//}