protected SyncData(OracleDbOperation targetDb, OracleDbOperation localDb, string targetCode, string localCode, FtpHelper targetFtp, FtpHelper localFtp, StringBuilder sbLog) { this.targetDb = targetDb; this.localDb = localDb; this.targetCode = targetCode; this.localCode = localCode; this.targetFtp = targetFtp; this.localFtp = localFtp; this.sbLog = sbLog; dtOperation = new DataTableOperation(); deleteAction = () => { LogOperation.Append(sbLog, "删除成功"); }; totalAction = (tableName, count) => { LogOperation.Append(sbLog, "统计:" + tableName + "表共同步了" + count + "条数据"); }; deleteFileAction = (itemCode,fileName) => { LogOperation.Append(sbLog, string.Format("项目编号:{0}, 删除文件:{1}", itemCode, fileName)); }; ftpCopyAction = (itemCode, fileCount) => { LogOperation.Append(sbLog, string.Format("项目编号:{0}, 拷贝文件数:{1}", itemCode, fileCount.ToString())); }; }
public void CopyDirectory(string localParentPath, string localDirectoryName, FtpHelper targetFtpOperation, string targetParentPath, string targetDirectoryName,Action<string,int> CopyAction) { string localFullPath = localParentPath + localDirectoryName; string targetFullPath = targetParentPath + targetDirectoryName; if (CheckHaveDirectory(localFullPath)) { if (targetFtpOperation.CheckHaveDirectory(targetFullPath)) { targetFtpOperation.DeleteDirectory(targetFullPath); } targetFtpOperation.CreateDirectory(targetFullPath); List<string> fileNames = GetFileList(localFullPath, WebRequestMethods.Ftp.ListDirectory); foreach (var fileName in fileNames) { CopyFile(localFullPath + "/" + fileName, targetFtpOperation, targetFullPath + "/" + fileName); } if (CopyAction != null) { CopyAction(localDirectoryName, fileNames.Count); } } }
public SyncDataSystemInfo(OracleDbOperation targetDbOperation, OracleDbOperation localDbOperation, string targetCode, string localCode, FtpHelper targetFtpOperation, FtpHelper localFtpOperation, StringBuilder sbLog) : base(targetDbOperation, localDbOperation, targetCode, localCode, targetFtpOperation, localFtpOperation, sbLog) { }
public void CopyFile(string localFtpPath, FtpHelper targetFtpOperation, string targetFtpPath) { if (CheckHaveDirectory(localFtpPath)) { string targetDirectory = GetParentDirectory(targetFtpPath); if (!targetFtpOperation.CheckHaveDirectory(targetDirectory)) { targetFtpOperation.CreateDirectory(targetDirectory); } Stream downloadStream = GetResponseStream(localFtpPath, WebRequestMethods.Ftp.DownloadFile); Stream uploadStream = targetFtpOperation.GetRequestStream(targetFtpPath, WebRequestMethods.Ftp.UploadFile); byte[] buff = new byte[bufferSize]; int length; while ((length = downloadStream.Read(buff, 0, bufferSize)) != 0) { uploadStream.Write(buff, 0, length); if (length < bufferSize) { break; } } downloadStream.Close(); uploadStream.Close(); } }
/// <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; }
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; }