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);
            }
        }
예제 #2
0
        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();
        }