protected override bool UpdateItemsToDb(List <Jc_BInfo> updateItems) { try { IEnumerable <IGrouping <string, Jc_BInfo> > groupYYYYMM = updateItems.GroupBy(p => p.Stime.ToString("yyyyMM")); foreach (IGrouping <string, Jc_BInfo> info in groupYYYYMM) { var alarminfolist = info.ToList(); var alarmModels = ObjectConverter.CopyList <Jc_BInfo, Jc_BModel>(alarminfolist); if (!alarmRepository.BulkUpdate("KJ_DataAlarm" + info.Key, alarmModels, BuildDataColumn(columns), "ID")) { int isconn = alarmRepository.GetTotalRecord("DataToDb_GetDbServerIsNormal"); if (isconn <= 0) { if (alarminfolist.Any()) { AddDataToLocal(alarminfolist); } else { LogHelper.Error("报警记录分组为空,需要分析原因。 key 为:" + info.Key + "数据为:" + JSONHelper.ToJSONString(updateItems)); } } } //查找报警记录中是否存在开始时间和结束时间一样的记录,有则删除 foreach (Jc_BInfo jcbinfo in alarminfolist) { if (jcbinfo.Stime.ToString("yyyy-MM-dd HH:mm:ss") == jcbinfo.Etime.ToString("yyyy-MM-dd HH:mm:ss")) { LogHelper.Warn("检测到无用报警记录,进行清除处理,报警测点号:" + jcbinfo.Point + ",开始时间:" + jcbinfo.Stime + ",结束时间:" + jcbinfo.Etime); var alarmmodel = ObjectConverter.Copy <Jc_BInfo, Jc_BModel>(jcbinfo); alarmRepository.Delete(alarmmodel.ID); } } //更新报警数据的同时,删除数据库中开始时间和结束时间一样的记录 List <Jc_BInfo> alarms = alarmCacheService.GetAllAlarmCache(new Request.Cache.AlarmCacheGetAllRequest()).Data.FindAll(a => a.Stime.ToString("yyyy-MM-dd HH:mm:ss") == a.Etime.ToString("yyyy-MM-dd HH:mm:ss")); Request.Cache.AlarmCacheBatchDeleteRequest request = new Request.Cache.AlarmCacheBatchDeleteRequest(); request.AlarmInfos = alarms; alarmCacheService.BatchDeleteAlarmCache(request); alarmRepository.ExecuteNonQuery("global_DeleteJCAlarmForStimeEtime", info.Key); } return(true); } catch (Exception ex) { LogHelper.Error("报警数据更新失败:" + "\r\n" + ex.Message); return(false); } }
protected override void DoWork() { //删除已结束,并超过5分钟的报警数据,Etime=1900-01-01 00:00:00 表示未结束 20170616 AlarmCacheGetByConditonRequest request = new AlarmCacheGetByConditonRequest { Predicate = alarm => DateTime.Now - alarm.Etime > delaytime && alarm.Etime != DateTime.Parse("1900-01-01 00:00:00") }; var alarmRespnse = alarmCacheService.GetAlarmCache(request); if (alarmRespnse.IsSuccess && alarmRespnse.Data != null && alarmRespnse.Data.Any()) { AlarmCacheBatchDeleteRequest deleteRequest = new AlarmCacheBatchDeleteRequest { AlarmInfos = alarmRespnse.Data }; alarmCacheService.BatchDeleteAlarmCache(deleteRequest); } base.DoWork(); }