/// <summary> /// 读 /// </summary> /// <returns></returns> public SyncConfig Read() { SyncConfig SyncSetting = new SyncConfig(); RegistryKey root = GetRoot(); if (regHelper.KeyExists(root, SysConfig.SyncServiceName)) { RegistryKey serviceKey = root.OpenSubKey(SysConfig.SyncServiceName); SyncSetting.TimerInterval = regHelper.GetValue<int>(serviceKey, SysConfig.RegistryTimerInterval); SyncSetting.WriteLog = regHelper.GetValue<bool>(serviceKey, SysConfig.RegistryWriteLog); SyncSetting.SyncType = regHelper.GetValue<int>(serviceKey, SysConfig.RegistrySyncType); SyncSetting.SyncGisData = regHelper.GetValue<bool>(serviceKey, SysConfig.RegistrySyncGisData); SyncSetting.ServiceUrl = regHelper.GetValue<string>(serviceKey, SysConfig.RegistryServiceUrl); SyncSetting.ServiceMethod = regHelper.GetValue<string>(serviceKey, SysConfig.RegistryServiceMethod); RegistryKey localKey = serviceKey.OpenSubKey(SysConfig.RegistryLocals); foreach (var keyName in localKey.GetSubKeyNames()) { RegistryKey localCodeKey = localKey.OpenSubKey(keyName); SyncConfigLocal localSetting = new SyncConfigLocal() { Code = keyName, Name = regHelper.GetValue<string>(localCodeKey, SysConfig.RegistryName), DbConfig = new DbConfig() { Ip = regHelper.GetValue<string>(localCodeKey, SysConfig.RegistryDbIp), Name = regHelper.GetValue<string>(localCodeKey, SysConfig.RegistryDbName), Username = regHelper.GetValue<string>(localCodeKey, SysConfig.RegistryDbUsername), Password = regHelper.GetValue<string>(localCodeKey, SysConfig.RegistryDbPassword) }, FtpConfig = new FtpConfig() { Ip = regHelper.GetValue<string>(localCodeKey, SysConfig.RegistryFtpIp), Port = regHelper.GetValue<int>(localCodeKey, SysConfig.RegistryFtpPort), Username = regHelper.GetValue<string>(localCodeKey, SysConfig.RegistryFtpUsername), Password = regHelper.GetValue<string>(localCodeKey, SysConfig.RegistryFtpPassword) } }; SyncSetting.LocalData.Add(localSetting); } RegistryKey targetKey = serviceKey.OpenSubKey(SysConfig.RegistryTargets); foreach (var keyName in targetKey.GetSubKeyNames()) { RegistryKey targetCodeKey = targetKey.OpenSubKey(keyName); SyncConfigTarget targetSetting = new SyncConfigTarget() { Code = keyName, Name = regHelper.GetValue<string>(targetCodeKey, SysConfig.RegistryName), DbConfig = new DbConfig() { Ip = regHelper.GetValue<string>(targetCodeKey, SysConfig.RegistryDbIp), Name = regHelper.GetValue<string>(targetCodeKey, SysConfig.RegistryDbName), Username = regHelper.GetValue<string>(targetCodeKey, SysConfig.RegistryDbUsername), Password = regHelper.GetValue<string>(targetCodeKey, SysConfig.RegistryDbPassword) }, FtpConfig = new FtpConfig() { Ip = regHelper.GetValue<string>(targetCodeKey, SysConfig.RegistryFtpIp), Port = regHelper.GetValue<int>(targetCodeKey, SysConfig.RegistryFtpPort), Username = regHelper.GetValue<string>(targetCodeKey, SysConfig.RegistryFtpUsername), Password = regHelper.GetValue<string>(targetCodeKey, SysConfig.RegistryFtpPassword) }, Jg = regHelper.GetValue<string>(targetCodeKey, SysConfig.RegistryJg), Time = regHelper.GetValue<string>(targetCodeKey, SysConfig.RegistryTime) }; SyncSetting.TargetData.Add(targetSetting); } } return SyncSetting; }
/// <summary> /// 同步。 /// </summary> /// <param name="setting">同步配置。</param> /// <param name="log">日志信息。</param> /// <returns>同步是否成功。</returns> public bool Sync(SyncConfig syncConfig, SyncConfigTarget targetConfig, SyncConfigLocal localConfig, ref StringBuilder sbLog) { bool result = false; LogOperation.Append(sbLog, string.Format("开始同步数据:{0}({1}) 开始时间:{2}", targetConfig.Name, targetConfig.Code, DateTime.Now)); OracleDbOperation localDb = new OracleDbOperation(localConfig.DbConfig.ConnStr); FtpHelper localFtp = new FtpHelper(localConfig.FtpConfig.Ip, localConfig.FtpConfig.Port, localConfig.FtpConfig.Username, localConfig.FtpConfig.Password); OracleDbOperation targetDb = new OracleDbOperation(targetConfig.DbConfig.ConnStr); FtpHelper targetFtp = new FtpHelper(targetConfig.FtpConfig.Ip, targetConfig.FtpConfig.Port, targetConfig.FtpConfig.Username, targetConfig.FtpConfig.Password); try { targetDb.BeginTransaction(); localDb.BeginTransaction(); List<SyncData> syncDataList = new List<SyncData>(); ////系统数据 syncDataList.Add(new SyncDataSystemInfo(targetDb, localDb, targetConfig.Code, localConfig.Code, targetFtp, localFtp, sbLog)); ////项目数据 syncDataList.Add(new SyncDataItem(syncConfig, targetDb, localDb, targetConfig.Code, localConfig.Code, targetFtp, localFtp, sbLog)); ////流程数据 syncDataList.Add(new SyncDataWorkflow(targetDb, localDb, targetConfig.Code, localConfig.Code, targetFtp, localFtp, sbLog)); ////Syncs.Add(new SyncXtxx(targetDbOperation, localDbOperation, targetSetting.Code, localSetting.Code, targetFtpOperation, localFtpOperation, sbLog)); foreach (var syncData in syncDataList) { syncData.Sync(); } targetDb.Commit(); localDb.Commit(); result = true; } catch (Exception e) { targetDb.Rollback(); localDb.Rollback(); LogOperation.WriteExceptionLog(sbLog, e); } sbLog.AppendLine(); sbLog.AppendLine("结束时间:" + DateTime.Now); return result; }
/// <summary> /// 写 /// </summary> /// <param name="sysConfig"></param> public void Write(SyncConfig sysConfig) { RegistryKey root = GetRoot(); if (regHelper.KeyExists(root, SysConfig.SyncServiceName)) { root.DeleteSubKeyTree(SysConfig.SyncServiceName); } RegistryKey serviceKey = root.CreateSubKey(SysConfig.SyncServiceName); serviceKey.SetValue(SysConfig.RegistryTimerInterval, sysConfig.TimerInterval); serviceKey.SetValue(SysConfig.RegistryWriteLog, sysConfig.WriteLog); serviceKey.SetValue(SysConfig.RegistrySyncType, sysConfig.SyncType); serviceKey.SetValue(SysConfig.RegistrySyncGisData, sysConfig.SyncGisData); serviceKey.SetValue(SysConfig.RegistryServiceUrl, sysConfig.ServiceUrl); serviceKey.SetValue(SysConfig.RegistryServiceMethod, sysConfig.ServiceMethod); RegistryKey localKey = serviceKey.CreateSubKey(SysConfig.RegistryLocals); foreach (var localSetting in sysConfig.LocalData) { RegistryKey localCodeKey = localKey.CreateSubKey(localSetting.Code); localCodeKey.SetValue(SysConfig.RegistryName, localSetting.Name); if (localSetting.DbConfig != null) { regHelper.SetValue(localCodeKey, SysConfig.RegistryDbIp, localSetting.DbConfig.Ip); regHelper.SetValue(localCodeKey, SysConfig.RegistryDbName, localSetting.DbConfig.Name); regHelper.SetValue(localCodeKey, SysConfig.RegistryDbUsername, localSetting.DbConfig.Username); regHelper.SetValue(localCodeKey, SysConfig.RegistryDbPassword, localSetting.DbConfig.Password); } if (localSetting.FtpConfig != null) { regHelper.SetValue(localCodeKey, SysConfig.RegistryFtpIp, localSetting.FtpConfig.Ip); regHelper.SetValue(localCodeKey, SysConfig.RegistryFtpPort, localSetting.FtpConfig.Port); regHelper.SetValue(localCodeKey, SysConfig.RegistryFtpUsername, localSetting.FtpConfig.Username); regHelper.SetValue(localCodeKey, SysConfig.RegistryFtpPassword, localSetting.FtpConfig.Password); } } RegistryKey targetKey = serviceKey.CreateSubKey(SysConfig.RegistryTargets); foreach (var targetSetting in sysConfig.TargetData) { RegistryKey targetCodeKey = targetKey.CreateSubKey(targetSetting.Code); targetCodeKey.SetValue(SysConfig.RegistryName, targetSetting.Name); if (targetSetting.DbConfig != null) { regHelper.SetValue(targetCodeKey, SysConfig.RegistryDbIp, targetSetting.DbConfig.Ip); regHelper.SetValue(targetCodeKey, SysConfig.RegistryDbName, targetSetting.DbConfig.Name); regHelper.SetValue(targetCodeKey, SysConfig.RegistryDbUsername, targetSetting.DbConfig.Username); regHelper.SetValue(targetCodeKey, SysConfig.RegistryDbPassword, targetSetting.DbConfig.Password); } if (targetSetting.DbConfig != null) { regHelper.SetValue(targetCodeKey, SysConfig.RegistryFtpIp, targetSetting.FtpConfig.Ip); regHelper.SetValue(targetCodeKey, SysConfig.RegistryFtpPort, targetSetting.FtpConfig.Port); regHelper.SetValue(targetCodeKey, SysConfig.RegistryFtpUsername, targetSetting.FtpConfig.Username); regHelper.SetValue(targetCodeKey, SysConfig.RegistryFtpPassword, targetSetting.FtpConfig.Password); } if (!string.IsNullOrEmpty(targetSetting.Jg)) { regHelper.SetValue(targetCodeKey, SysConfig.RegistryJg, targetSetting.Jg); } if (!string.IsNullOrEmpty(targetSetting.Time)) { regHelper.SetValue(targetCodeKey, SysConfig.RegistryTime, targetSetting.Time); } } }
public SyncDataItem(SyncConfig SyncConfig, OracleDbOperation targetDb, OracleDbOperation localDb, string targetCode, string localCode, FtpHelper targetFtp, FtpHelper localFtp, StringBuilder sbLog) : base(targetDb, localDb, targetCode, localCode, targetFtp, localFtp, sbLog) { this.syncConfig = SyncConfig; }