Esempio n. 1
0
        private void AddPolicy(object parameter)
        {
            if (CheckDayOfWeek())
            {
                return;
            }

            CurrentPolicy.SelectedTime = (DateTime)parameter;//通过绑定无法获取到值 原因不明
            BackUpPolicy policy = Policys.FirstOrDefault(x => x.BackUpType == CurrentPolicy.BackUpType);

            if (policy == null)
            {
                Policys.Add(new BackUpPolicy()
                {
                    Sunday    = CurrentPolicy.Sunday,
                    Monday    = CurrentPolicy.Monday,
                    Tuesday   = CurrentPolicy.Tuesday,
                    Wednesday = CurrentPolicy.Wednesday,
                    Thursday  = CurrentPolicy.Thursday,
                    Friday    = CurrentPolicy.Friday,
                    Saturday  = CurrentPolicy.Saturday,

                    SelectedTime         = CurrentPolicy.SelectedTime,
                    IsTaskBackUpDataBase = CurrentPolicy.IsTaskBackUpDataBase,
                    IsTaskBackUpTables   = CurrentPolicy.IsTaskBackUpTables,
                    ItemString           = CurrentPolicy.PolicyToString
                });

                Notice.Show("策略已添加成功", "通知");
            }
            else
            {
                policy.Sunday               = CurrentPolicy.Sunday;
                policy.Monday               = CurrentPolicy.Monday;
                policy.Tuesday              = CurrentPolicy.Tuesday;
                policy.Wednesday            = CurrentPolicy.Wednesday;
                policy.Thursday             = CurrentPolicy.Thursday;
                policy.Friday               = CurrentPolicy.Friday;
                policy.Saturday             = CurrentPolicy.Saturday;
                policy.SelectedTime         = CurrentPolicy.SelectedTime;
                policy.IsTaskBackUpDataBase = CurrentPolicy.IsTaskBackUpDataBase;
                policy.IsTaskBackUpTables   = CurrentPolicy.IsTaskBackUpTables;
                policy.ItemString           = CurrentPolicy.PolicyToString;

                Notice.Show("策略已更新成功", "通知", 3, MessageBoxIcon.Success);
            }

            if (CurrentPolicy.BackUpType == BackUpType.DataBase)
            {
                ConfigHelper.WriterAppConfig("DataBaseBackUpJob", ConvertToCron(CurrentPolicy));
            }
            else
            {
                ConfigHelper.WriterAppConfig("TablesBackUpJob", ConvertToCron(CurrentPolicy));
            }

            WriteConfig();
        }
 /// <summary>
 /// 从配置文件读取策略
 /// </summary>
 /// <returns></returns>
 public void ReadPolicyConfig()
 {
     Policys.Clear();
     EnvironmentInfo.BackUpJobConfigs.ForEach(x =>
     {
         BackUpPolicy policy         = ConvertToPolicy(x);
         policy.Id                   = x.Id;
         policy.IsTaskBackUpTables   = x.BackUpType == 1 ? true : false;
         policy.IsTaskBackUpDataBase = x.BackUpType == 0 ? true : false;
         policy.ItemString           = policy.PolicyToString;
         Policys.Add(policy);
     });
 }
        private void AddPolicy(object parameter)
        {
            if (CheckDayOfWeek())
            {
                return;
            }

            CurrentPolicy.SelectedTime = (DateTime)parameter;//通过绑定无法获取到值 原因不明
            BackUpPolicy policy = Policys.FirstOrDefault(x => x.Id == CurrentPolicy.Id);

            if (policy == null)
            {
                Policys.Add(new BackUpPolicy()
                {
                    Id                   = Guid.NewGuid().ToString(),
                    Sunday               = CurrentPolicy.Sunday,
                    Monday               = CurrentPolicy.Monday,
                    Tuesday              = CurrentPolicy.Tuesday,
                    Wednesday            = CurrentPolicy.Wednesday,
                    Thursday             = CurrentPolicy.Thursday,
                    Friday               = CurrentPolicy.Friday,
                    Saturday             = CurrentPolicy.Saturday,
                    SelectedTime         = CurrentPolicy.SelectedTime,
                    IsTaskBackUpDataBase = CurrentPolicy.IsTaskBackUpDataBase,
                    IsTaskBackUpTables   = CurrentPolicy.IsTaskBackUpTables,
                    ItemString           = CurrentPolicy.PolicyToString,
                    DataBaseName         = CurrentPolicy.DataBaseName
                });
                Notice.Show("策略已添加成功", "通知", 3, MessageBoxIcon.Success);
            }
            else
            {
                policy.Id                   = CurrentPolicy.Id;
                policy.Sunday               = CurrentPolicy.Sunday;
                policy.Monday               = CurrentPolicy.Monday;
                policy.Tuesday              = CurrentPolicy.Tuesday;
                policy.Wednesday            = CurrentPolicy.Wednesday;
                policy.Thursday             = CurrentPolicy.Thursday;
                policy.Friday               = CurrentPolicy.Friday;
                policy.Saturday             = CurrentPolicy.Saturday;
                policy.SelectedTime         = CurrentPolicy.SelectedTime;
                policy.IsTaskBackUpDataBase = CurrentPolicy.IsTaskBackUpDataBase;
                policy.IsTaskBackUpTables   = CurrentPolicy.IsTaskBackUpTables;
                policy.ItemString           = CurrentPolicy.PolicyToString;
                policy.DataBaseName         = CurrentPolicy.DataBaseName;
                Notice.Show("策略已更新成功", "通知", 3, MessageBoxIcon.Success);
            }

            WritePolicyConfig();
            WriteTablesConfig(CurrentPolicy.DataBaseName);
        }
        private BackUpPolicy ConvertToPolicy(BackUpJobConfig backUpJobConfig)
        {
            BackUpPolicy policy = new BackUpPolicy();

            string[] cronArry = backUpJobConfig.Cron.Split(' ');
            int      second   = int.Parse(cronArry[0]);
            int      minute   = int.Parse(cronArry[1]);
            int      hour     = int.Parse(cronArry[2]);

            policy.SelectedTime = DateTime.Now.Date.AddHours(hour).AddMinutes(minute).AddSeconds(second);
            string dayOfWeek = cronArry[5];

            string[] week = dayOfWeek.Split(',');
            foreach (var day in week)
            {
                switch (day)
                {
                case "1":
                    policy.Sunday = true;
                    break;

                case "2":
                    policy.Monday = true;
                    break;

                case "3":
                    policy.Tuesday = true;
                    break;

                case "4":
                    policy.Wednesday = true;
                    break;

                case "5":
                    policy.Thursday = true;
                    break;

                case "6":
                    policy.Friday = true;
                    break;

                case "7":
                    policy.Saturday = true;
                    break;
                }
            }
            policy.DataBaseName = backUpJobConfig.DataBaseName;
            return(policy);
        }
Esempio n. 5
0
        private MySqlBackUpViewModel()
        {
            TaskStartCommand      = new DelegateCommand();
            TaskStopCommand       = new DelegateCommand();
            ManualExecuteCommand  = new DelegateCommand();
            RemovePolicyCommand   = new DelegateCommand();
            AddPolicyCommand      = new DelegateCommand();
            ChooseAllCommand      = new DelegateCommand();
            RecoverDefaultCommand = new DelegateCommand();

            TaskStartCommand.ExecuteAction     = Start;
            TaskStopCommand.ExecuteAction      = Stop;
            ManualExecuteCommand.ExecuteAction = ManualExecute;
            RemovePolicyCommand.ExecuteAction  = RemovePolicy;

            AddPolicyCommand.ExecuteAction      = AddPolicy;
            ChooseAllCommand.ExecuteAction      = ChooseAll;
            RecoverDefaultCommand.ExecuteAction = RecoverDefault;


            Policys       = new ObservableCollection <BackUpPolicy>();
            CurrentPolicy = new BackUpPolicy();
            Tables        = new List <BackUpTable>();

            string cron = ConfigHelper.ReadAppConfig("TablesBackUpJob");

            if (!string.IsNullOrEmpty(cron))
            {
                BackUpPolicy policy = ConvertToPolicy(cron);
                policy.IsTaskBackUpTables = true;
                policy.ItemString         = policy.PolicyToString;
                Policys.Add(policy);
            }

            cron = ConfigHelper.ReadAppConfig("DataBaseBackUpJob");
            if (!string.IsNullOrEmpty(cron))
            {
                BackUpPolicy policy = ConvertToPolicy(cron);
                policy.IsTaskBackUpDataBase = true;
                policy.ItemString           = policy.PolicyToString;
                Policys.Add(policy);
            }

            GetTables();

            ProcessHelper.ShowOutputMessage += ProcessHelper_ShowOutputMessage;

            Message = "说明:1)全库备份,是完整备份,基础业务备份,是只备份核心业务数据。\r\n2)哪些表数据属于核心业务,系统已经默认配置了,也可以自行勾选,但是建议只多不少。\r\n3)如果要全部勾选,建议就不要配置为基础业务备份,直接使用全库备份即可。\r\n4)基础业务的备份频率一定要高于全库备份,因为全库备份包含了一些历史表,会很大。\r\n5)配置策略之后,重新启动不需要再去点执行任务,系统会自动执行。\r\n";
        }
        private void RemovePolicy(object parameter)
        {
            BackUpPolicy policy = Policys.FirstOrDefault(x => x.Id == CurrentPolicy.Id);

            if (policy != null)
            {
                Policys.Remove(policy);
                manger.RemoveBackUpJobConfig(policy.Id);
                Clear();
                Notice.Show("策略已移除成功", "通知", 3, MessageBoxIcon.Success);
            }
            else
            {
                MessageBoxHelper.MessageBoxShowWarning("请选择你需要移除的策略");
            }
        }
        private MySqlBackUpViewModel()
        {
            TaskStartCommand      = new DelegateCommand();
            TaskStopCommand       = new DelegateCommand();
            ManualExecuteCommand  = new DelegateCommand();
            RemovePolicyCommand   = new DelegateCommand();
            AddPolicyCommand      = new DelegateCommand();
            ChooseAllCommand      = new DelegateCommand();
            RecoverDefaultCommand = new DelegateCommand();

            TaskStartCommand.ExecuteAction     = Start;
            TaskStopCommand.ExecuteAction      = Stop;
            ManualExecuteCommand.ExecuteAction = ManualExecute;
            RemovePolicyCommand.ExecuteAction  = RemovePolicy;

            AddPolicyCommand.ExecuteAction      = AddPolicy;
            ChooseAllCommand.ExecuteAction      = ChooseAll;
            RecoverDefaultCommand.ExecuteAction = RecoverDefault;


            Policys       = new ObservableCollection <BackUpPolicy>();
            CurrentPolicy = new BackUpPolicy();
            Tables        = new List <BackUpTable>();

            string cron = ConfigHelper.ReadAppConfig("TablesBackUpJob");

            if (!string.IsNullOrEmpty(cron))
            {
                BackUpPolicy policy = ConvertToPolicy(cron);
                policy.IsTaskBackUpTables = true;
                policy.ItemString         = policy.PolicyToString;
                Policys.Add(policy);
            }

            cron = ConfigHelper.ReadAppConfig("DataBaseBackUpJob");
            if (!string.IsNullOrEmpty(cron))
            {
                BackUpPolicy policy = ConvertToPolicy(cron);
                policy.IsTaskBackUpDataBase = true;
                policy.ItemString           = policy.PolicyToString;
                Policys.Add(policy);
            }

            GetTables();

            ProcessHelper.ShowOutputMessage += ProcessHelper_ShowOutputMessage;
        }
        private MySqlBackUpViewModel()
        {
            manger                = new BackUpJobConfigManger();
            TaskStartCommand      = new DelegateCommand();
            TaskStopCommand       = new DelegateCommand();
            ManualExecuteCommand  = new DelegateCommand();
            RemovePolicyCommand   = new DelegateCommand();
            AddPolicyCommand      = new DelegateCommand();
            ChooseAllCommand      = new DelegateCommand();
            RecoverDefaultCommand = new DelegateCommand();
            EditPolicyCommand     = new DelegateCommand();
            SaveFileDayCommand    = new DelegateCommand();

            manager = new KeyValueSettingManager();

            TaskStartCommand.ExecuteAction     = Start;
            TaskStopCommand.ExecuteAction      = Stop;
            ManualExecuteCommand.ExecuteAction = ManualExecute;
            RemovePolicyCommand.ExecuteAction  = RemovePolicy;

            AddPolicyCommand.ExecuteAction      = AddPolicy;
            ChooseAllCommand.ExecuteAction      = ChooseAll;
            RecoverDefaultCommand.ExecuteAction = RecoverDefault;
            EditPolicyCommand.ExecuteAction     = EditPolicy;

            SaveFileDayCommand.ExecuteAction = SaveFileDayAction;

            Policys       = new ObservableCollection <BackUpPolicy>();
            Tables        = new ObservableCollection <BackUpTable>();
            Databases     = new ObservableCollection <BackUpDatabase>();
            CurrentPolicy = new BackUpPolicy();
            CurrentPolicy.DataBaseName = EnvironmentInfo.DbConnEntity.DbName;
            CurrentPolicyBak           = DeepCopy(CurrentPolicy);

            ReadPolicyConfig();
            GetTables();

            int saveday = 7;

            int.TryParse(EnvironmentInfo.Settings.FirstOrDefault(x => x.KeyId == "SaveFileDay")?.ValueText, out saveday);
            SaveFileDay = saveday;

            ProcessHelper.ShowOutputMessage += ProcessHelper_ShowOutputMessage;

            Message = "说明:\r\n1)全库备份,是完整备份。基础业务备份,是只备份核心业务数据。\r\n2)哪些表数据属于核心业务,系统已经默认配置了,也可以自行勾选,但是建议只多不少。\r\n3)如果要全部勾选,建议就不要配置为基础业务备份,直接使用全库备份即可。\r\n4)基础业务的备份频率一定要高于全库备份,因为全库备份包含了一些历史表,会很大。\r\n5)配置策略之后,重新启动不需要再去点执行任务,系统会自动执行。\r\n";
        }
        /// <summary>
        /// 深拷贝
        /// </summary>
        /// <param name="currentPolicy"></param>
        /// <returns></returns>
        public BackUpPolicy DeepCopy(BackUpPolicy currentPolicy)
        {
            var model = new BackUpPolicy()
            {
                Id                   = currentPolicy.Id,
                Sunday               = currentPolicy.Sunday,
                Monday               = currentPolicy.Monday,
                Tuesday              = currentPolicy.Tuesday,
                Wednesday            = currentPolicy.Wednesday,
                Thursday             = currentPolicy.Thursday,
                Friday               = currentPolicy.Friday,
                Saturday             = currentPolicy.Saturday,
                SelectedTime         = currentPolicy.SelectedTime,
                IsTaskBackUpDataBase = currentPolicy.IsTaskBackUpDataBase,
                IsTaskBackUpTables   = currentPolicy.IsTaskBackUpTables,
                ItemString           = currentPolicy.PolicyToString,
                DataBaseName         = currentPolicy.DataBaseName
            };

            return(model);
        }
        private string ConvertToCron(BackUpPolicy policy)
        {
            //周日 1 周一 2...
            //0 15 10 ? * 1,5 每周日,周四 上午10:15分执行
            string second    = policy.SelectedTime.ToString("ss");//秒
            string minute    = policy.SelectedTime.ToString("mm");
            string hour      = policy.SelectedTime.ToString("HH");
            string dayOfWeek = "";

            if (policy.Sunday)
            {
                dayOfWeek += "1,";
            }
            if (policy.Monday)
            {
                dayOfWeek += "2,";
            }
            if (policy.Tuesday)
            {
                dayOfWeek += "3,";
            }
            if (policy.Wednesday)
            {
                dayOfWeek += "4,";
            }
            if (policy.Thursday)
            {
                dayOfWeek += "5,";
            }
            if (policy.Friday)
            {
                dayOfWeek += "6,";
            }
            if (policy.Saturday)
            {
                dayOfWeek += "7";
            }

            return($"{second} {minute} {hour} ? * {dayOfWeek.Trim(',')}");
        }