private Dictionary <string, int> GetLastMaxIdDict(SyncInfo syncInfo) { var bll = new DbSyncStatusBll(); var startsDict = syncInfo.ExportMaxIdDict; if (syncInfo.ServerWriteSuccess) { // 由于上次导入的数据已成功同步至服务端 // 因此,将上将导出数据的最大 Id 写入数据库 // 以作为下次导出数据的依据 var models = startsDict.Select(couple => new DbSyncStatus { DbIdentity = string.Empty, TableName = couple.Key, Position = couple.Value, LastTime = DateTime.Now }); bll.BulkInsert(models); } else { startsDict = new Dictionary <string, int>(); var list = bll.QueryAll(); foreach (var o in list) { startsDict.Add(o.TableName, o.Position); } } return(startsDict); }
private void WriteSyncInfo(SyncInfo syncInfo) { using (var writer = new StreamWriter(JsonFilename, false)) { var json = JsonHelper.Serialize(syncInfo); writer.Write(json); } }
public SyncInfo Import(SyncInfo syncInfo) { if (!syncInfo.ServerNewDataFlag || syncInfo.ClientWriteSuccess) { syncInfo.ClientWriteSuccess = true; return(syncInfo); } var success = AddNewData(syncInfo.ServerData); syncInfo.ClientWriteSuccess = success; return(syncInfo); }
public SyncInfo Export(SyncInfo syncInfo) { var startsDict = GetLastMaxIdDict(syncInfo); var newData = GetNewData(startsDict); syncInfo.ClientData = newData; syncInfo.ClientNewDataFlag = newData.Any(); syncInfo.ServerWriteSuccess = false; var newStartsDict = GetNewStartsDict(); syncInfo.ExportMaxIdDict = newStartsDict; return(syncInfo); }
private void ClearData(SyncInfo syncInfo) { if (syncInfo.ServerWriteSuccess) { // 服务端已成功导入客户端数据 // 则将其设置为 null,以减少 // 后面向文件中写入内容的大小 syncInfo.ClientData = null; } if (syncInfo.ClientWriteSuccess) { syncInfo.ServerData = null; syncInfo.PathList = null; } }
public SyncInfo Export(SyncInfo syncInfo) { var dbLogMaxId = syncInfo.DbUpdateLogMaxId; var bll = new DbSyncStatusBll(); var status = bll.QuerySingle($"[DbIdentity]='{syncInfo.DbIdentity}'"); if (status == null) { status = new DbSyncStatus { DbIdentity = syncInfo.DbIdentity.ToString(), LastTime = DateTime.Now, Position = dbLogMaxId, TableName = nameof(DbUpdateLog) }; AddClientDbStatus(status); } if (syncInfo.ClientWriteSuccess) { status.Position = dbLogMaxId; status.LastTime = DateTime.Now; bll.Update(status); } else { dbLogMaxId = status.Position; } var newData = GetNewData(dbLogMaxId); syncInfo.ServerData = newData.Data; syncInfo.PathList = newData.PathList; syncInfo.ClientWriteSuccess = false; syncInfo.ServerNewDataFlag = newData.NewDataFlag; var dbLogBll = new DbUpdateLogBll(); syncInfo.DbUpdateLogMaxId = (int)dbLogBll.GetMaxId(); return(syncInfo); }
public void InitUsb() { try { var identityBll = new DbIdentityBll(); var list = identityBll.QueryAll().ToList(); if (!list.Any()) { // TODO: 向表 DbIdentity 新增数据库标识 // TODO: 将新增的数据插入 list 中 var identity = Utils.AddDbIdentity(); list.Add(identity); } var dbIdentity = list.First(); var maxId = (int)new DbUpdateLogBll().GetMaxId(); var syncDir = Path.Combine(RootDir, SyncDir); Directory.CreateDirectory(syncDir); var identityFile = Path.Combine(syncDir, IdentifyFilename); File.Create(identityFile); var syncInfo = new SyncInfo { DbIdentity = dbIdentity.UniqueId, ServerWriteSuccess = true, ClientNewDataFlag = false, DbUpdateLogMaxId = maxId }; WriteSyncInfo(syncInfo); } catch (Exception e) { throw new Exception("未检测到机务运用管控系统的服务,请联系管理员"); } }