示例#1
0
        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);
        }
示例#2
0
 private void WriteSyncInfo(SyncInfo syncInfo)
 {
     using (var writer = new StreamWriter(JsonFilename, false))
     {
         var json = JsonHelper.Serialize(syncInfo);
         writer.Write(json);
     }
 }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
 private void ClearData(SyncInfo syncInfo)
 {
     if (syncInfo.ServerWriteSuccess)
     {
         // 服务端已成功导入客户端数据
         // 则将其设置为 null,以减少
         // 后面向文件中写入内容的大小
         syncInfo.ClientData = null;
     }
     if (syncInfo.ClientWriteSuccess)
     {
         syncInfo.ServerData = null;
         syncInfo.PathList   = null;
     }
 }
示例#6
0
        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);
        }
示例#7
0
        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("未检测到机务运用管控系统的服务,请联系管理员");
            }
        }