using System; using System.Collections.Generic; using System.Linq; using WX.CRM.Common; using WX.CRM.Model.EntitySync; namespace WX.CRM.BLL.Redis { public class REDIS_Util_BL { //获取 待同步数据 public List GetList(int topNum, WX.CRM.Model.Redis.RedisConfig redisdb) { using (WX.CRM.Model.EntitySync.Entities db = new WX.CRM.Model.EntitySync.Entities()) { string[] dbCodes = this.GetDbCodeList_SynsLog(redisdb); return db.REDIS_CACHE_SSODATASYNC.Where(m => dbCodes.Contains(m.TABLETYPE)).OrderBy(p => p.PKID).Skip(0).Take(topNum).ToList(); } } //获取 待同步数据记录数 public int GetList_Count(WX.CRM.Model.Redis.RedisConfig redisdb) { using (WX.CRM.Model.EntitySync.Entities db = new WX.CRM.Model.EntitySync.Entities()) { string[] dbCodes = this.GetDbCodeList_SynsLog(redisdb); return db.REDIS_CACHE_SSODATASYNC.Where(m => dbCodes.Contains(m.TABLETYPE)).Count(); } } /// /// 缓存字典表数据 /// /// public List GetTableType_CacheList() { string cacheKey = "cache_REDIS_CACHE_TABLETYPE_getList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (WX.CRM.Model.EntitySync.Entities db = new WX.CRM.Model.EntitySync.Entities()) { List list = db.REDIS_CACHE_TABLETYPE.ToList(); CacheHelper.Set(cacheKey, list); return list; } } /// /// 获取某个db类型的数据 /// /// public string[] GetDbCodeList_SynsLog(WX.CRM.Model.Redis.RedisConfig redisdb) { string dbname = string.Empty; switch (redisdb) { case WX.CRM.Model.Redis.RedisConfig.Redis0: dbname = "0"; break;//实例1 case WX.CRM.Model.Redis.RedisConfig.Redis1: dbname = "1"; break;//实例2 default: dbname = "0"; break; } return this.GetTableType_CacheList().Where(m => m.REDISDB == dbname).Select(m => m.TABLECODE).ToArray(); } /// /// 获取DB名称 (根据类型) /// /// 类型 /// public string GetTableRedisDb(string tableType) { WX.CRM.Model.EntitySync.REDIS_CACHE_TABLETYPE dataType = this.GetTableType_CacheList().Where(m => m.TABLECODE == tableType).FirstOrDefault(); return dataType == null ? "" : dataType.REDISDB; } /// /// 获取字典表信息 /// /// /// public WX.CRM.Model.EntitySync.REDIS_CACHE_TABLETYPE GetDataType(string tableCode) { return GetTableType_CacheList().Where(m => m.TABLECODE == tableCode).FirstOrDefault(); } /// /// 执行Ok转义到ok表数据去 /// /// 待处理记录 public void InsertOkData(WX.CRM.Model.EntitySync.REDIS_CACHE_SSODATASYNC info) { try { using (WX.CRM.Model.EntitySync.Entities db = new WX.CRM.Model.EntitySync.Entities()) { REDIS_CACHE_SSODATASYNC_OK model = new REDIS_CACHE_SSODATASYNC_OK() { PKID = info.PKID, KEYS = info.KEYS, LASTSYNCTIME = info.LASTSYNCTIME, ERRMSG = info.ERRMSG, ERRNUM = info.ERRNUM, OPTYPE = info.OPTYPE, TABLETYPE = info.TABLETYPE, TIME = info.TIME }; db.REDIS_CACHE_SSODATASYNC_OK.Add(model); REDIS_CACHE_SSODATASYNC entity = db.REDIS_CACHE_SSODATASYNC.FirstOrDefault(m => m.PKID == info.PKID); db.REDIS_CACHE_SSODATASYNC.Remove(entity); db.SaveChanges(); } } catch { throw; } } /// /// 执行Redis待同步出现错误,修改信息 /// /// public void UpdateErroData(WX.CRM.Model.EntitySync.REDIS_CACHE_SSODATASYNC info) { try { using (WX.CRM.Model.EntitySync.Entities db = new WX.CRM.Model.EntitySync.Entities()) { REDIS_CACHE_SSODATASYNC entity = db.REDIS_CACHE_SSODATASYNC.FirstOrDefault(m => m.PKID == info.PKID); if (info.ERRNUM >= 3) { REDIS_CACHE_SSODATASYNC_OK model = new REDIS_CACHE_SSODATASYNC_OK() { PKID = info.PKID, KEYS = info.KEYS, LASTSYNCTIME = info.LASTSYNCTIME, ERRMSG = info.ERRMSG, ERRNUM = info.ERRNUM, OPTYPE = info.OPTYPE, TABLETYPE = info.TABLETYPE, TIME = info.TIME }; db.REDIS_CACHE_SSODATASYNC_OK.Add(model); db.REDIS_CACHE_SSODATASYNC.Remove(entity); } else { entity.ERRNUM = info.ERRNUM; entity.LASTSYNCTIME = info.LASTSYNCTIME; entity.ERRMSG = info.ERRMSG; } db.SaveChanges(); } } catch (Exception ex) { LogHelper.Error(string.Concat("REDIS_Util_BL.UpdateErroData", ex.Message, ex.StackTrace)); } } } }