Esempio n. 1
0
        /// <summary>
        /// 跨天处理
        /// </summary>
        private void CrossDay(DateTime nowTime, DateTime tomorrowTime)
        {
            try
            {
                //DateTime nowTime = time;
                //nowTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 23, 59, 59);

                //DateTime tomorrowTime = nowTime.AddDays(1);
                //tomorrowTime = new DateTime(tomorrowTime.Year, tomorrowTime.Month, tomorrowTime.Day, 0, 0, 0);

                List <Jc_DefInfo> pointDefineItems;
                List <Jc_DevInfo> pointDevItems;
                Jc_DevInfo        pointDevItem;
                IDriver           driverObj = null;

                pointDefineItems = CacheDataHelper.GetAllSystemPointDefineItems();
                pointDefineItems = pointDefineItems.Where(a => a.DevPropertyID == (int)DeviceProperty.Substation).ToList();
                pointDevItems    = CacheDataHelper.GetAllDevItems();

                foreach (Jc_DefInfo station in pointDefineItems)
                {
                    pointDevItem = pointDevItems.FirstOrDefault(a => a.Devid == station.Devid);
                    if (pointDevItem != null)
                    {
                        if (GlobleStaticVariable.driverHandle.DriverItems.ContainsKey(pointDevItem.Sysid))
                        {
                            driverObj = GlobleStaticVariable.driverHandle.DriverItems[pointDevItem.Sysid].DLLObj;
                            DriverTransferInterface.Drv_CrossDayPro(driverObj, station.Fzh, nowTime, tomorrowTime);
                        }
                    }
                }
                //人员定位报警表跨天处理  20171206
                KJ237CacheHelper.Drv_CrossDayPro(nowTime, tomorrowTime);
            }
            catch (Exception ex)
            {
                LogHelper.Error("CrossDay Error:" + ex.Message);
            }
        }
        private void DataProc()
        {
            List <Jc_DefInfo>             pointDefineItems         = null;
            SettingInfo                   settingInfo              = null;
            string                        settingTime              = ""; //上次加载倍率报警配置时间
            List <JC_MultiplesettingInfo> multiplesettingInfotems  = null;
            JC_MultiplesettingInfo        multiplesettingInfotem   = null;
            List <RatioAlarmConditions>   ratioAlarmConditionItems = null;
            RatioAlarmConditions          ratioAlarmConditionItem  = null;
            double                        sszValue   = 0;
            double                        basicValue = 0;
            int              alarmType         = 0;
            JC_MbInfo        ratioAlarm        = null;
            DateTime         getBasicValueDate = DateTime.Now.AddDays(-1); //上次获取周平均值的时间
            List <JC_MbInfo> alarm_AddItems    = new List <JC_MbInfo>();
            List <JC_MbInfo> alarm_DelItems    = new List <JC_MbInfo>();
            List <JC_MbInfo> alarm_UpdateItems = new List <JC_MbInfo>();

            DateTime lastProcData = DateTime.Now; //最后一次处理数据的日期
            DateTime nowTime      = DateTime.Now; //本次处理时间

            for (; ;)
            {
                try
                {
                    nowTime = DateTime.Now;
                    if (isStop)
                    {
                        break;
                    }
                    //获取定义信息
                    pointDefineItems = CacheDataHelper.GetKJPointDefineItems();

                    //判断是否重载倍率报警定义
                    settingInfo = CacheDataHelper.GetSettingByKeyStr("MultipleSettingUpdateTime");
                    if (settingInfo != null)
                    {
                        if (settingTime != settingInfo.StrValue)
                        {
                            //重新加载倍率报警定义信息
                            multiplesettingInfotems = GetAllMultiplesettingInfo();
                            settingTime             = settingInfo.StrValue;
                        }
                    }
                    else
                    {
                        Thread.Sleep(timeSpan * 1000);
                        continue;
                    }

                    //筛选模拟量
                    pointDefineItems = pointDefineItems.Where(a => (a.DevPropertyID == (int)DeviceProperty.Analog) &&
                                                              (multiplesettingInfotems.FirstOrDefault(b => b.Devid == a.Devid) != null)).ToList();

                    if (pointDefineItems.Count == 0)
                    {
                        Thread.Sleep(timeSpan * 1000); continue;
                    }


                    //重载周平均值
                    if (getBasicValueDate.Date != nowTime.Date)
                    {
                        ReloadBasicValues(pointDefineItems);
                        getBasicValueDate = nowTime;
                    }

                    if (pointDefineItems == null)
                    {
                        Thread.Sleep(timeSpan * 1000); continue;
                    }
                    if (pointDefineItems.Count == 0)
                    {
                        Thread.Sleep(timeSpan * 1000); continue;
                    }



                    alarm_AddItems    = new List <JC_MbInfo>();
                    alarm_DelItems    = new List <JC_MbInfo>();
                    alarm_UpdateItems = new List <JC_MbInfo>();

                    if (lastProcData.Date != nowTime.Date)
                    {
                        //结束报警重新生成
                        CrossDay(pointDefineItems, multiplesettingInfotems, new DateTime(lastProcData.Year, lastProcData.Month, lastProcData.Day, 23, 59, 59), new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 0, 0, 0));
                        lastProcData = nowTime;
                    }

                    foreach (Jc_DefInfo def in pointDefineItems)
                    {
                        if (isStop)
                        {
                            break;
                        }
                        if (double.TryParse(def.Ssz, out sszValue))
                        {
                            multiplesettingInfotem = multiplesettingInfotems.FirstOrDefault(a => a.Devid == def.Devid);
                            if (multiplesettingInfotem == null)
                            {
                                continue;
                            }                                                                                  //未定义该设备类型的倍率报警
                            ratioAlarmConditionItems = GetRatioAlarmConditionsFromStr(multiplesettingInfotem); //解析倍率报警配置
                            if (ratioAlarmConditionItems == null)
                            {
                                continue;
                            }                                       //提取倍率报警定义出错,不继续计算
                            basicValue = GetBasicValueByDef(def);   //获取周平均值
                            if (basicValue == 0)
                            {
                                continue;
                            }                                   //没有基础值,不计算
                            //计算报警等级
                            alarmType = JudgeAlarmType(sszValue, ratioAlarmConditionItems, basicValue);
                            if (alarmType != 0)
                            {
                                ratioAlarmConditionItem = ratioAlarmConditionItems[alarmType - 1];  //获取当前报警的倍率信息配置
                            }
                            ratioAlarm = GetAlarmInfo(def.Point);
                            #region ----报警处理----

                            if (ratioAlarm == null)
                            {
                                if (alarmType > 0)
                                {
                                    //之前没有报警 现在有报警(新增报警)
                                    ratioAlarm         = new JC_MbInfo();
                                    ratioAlarm.Id      = IdHelper.CreateLongId().ToString();
                                    ratioAlarm.Point   = def.Point;
                                    ratioAlarm.PointID = def.PointID;
                                    ratioAlarm.Fzh     = def.Fzh.ToString();
                                    ratioAlarm.Kh      = def.Kh.ToString();
                                    ratioAlarm.Dzh     = def.Dzh.ToString();
                                    ratioAlarm.Devid   = def.Devid;
                                    ratioAlarm.Wzid    = def.Wzid;
                                    ratioAlarm.Type    = alarmType.ToString();
                                    ratioAlarm.Bstj    = "[" + ratioAlarmConditionItem.minValue + "," + ratioAlarmConditionItem.maxValue + "," + ratioAlarmConditionItem.ratioValue + "]";
                                    ratioAlarm.Bsz     = ratioAlarmConditionItem.ratioValue;
                                    ratioAlarm.Stime   = nowTime;
                                    ratioAlarm.Ssz     = Convert.ToDouble(def.Ssz);
                                    ratioAlarm.Pjz     = basicValue;
                                    ratioAlarm.Zdz     = sszValue;
                                    ratioAlarm.Zdzs    = nowTime;

                                    alarm_AddItems.Add(ratioAlarm);
                                }
                            }
                            else
                            {
                                if (alarmType == 0)
                                {
                                    //之前有报警 现在没有报警(结束报警)
                                    ratioAlarm.Etime = nowTime;
                                    alarm_DelItems.Add(ratioAlarm);
                                }
                                else
                                {
                                    if (alarmType.ToString() != ratioAlarm.Type)
                                    {
                                        //之前有报警 报警切换(结束旧报警,生成新报警)
                                        ratioAlarm.Etime = nowTime;
                                        alarm_DelItems.Add(ratioAlarm);

                                        //生成新报警
                                        ratioAlarm         = new JC_MbInfo();
                                        ratioAlarm.Id      = IdHelper.CreateLongId().ToString();
                                        ratioAlarm.Point   = def.Point;
                                        ratioAlarm.PointID = def.PointID;
                                        ratioAlarm.Fzh     = def.Fzh.ToString();
                                        ratioAlarm.Kh      = def.Kh.ToString();
                                        ratioAlarm.Dzh     = def.Dzh.ToString();
                                        ratioAlarm.Devid   = def.Devid;
                                        ratioAlarm.Wzid    = def.Wzid;
                                        ratioAlarm.Type    = alarmType.ToString();
                                        ratioAlarm.Bstj    = "[" + ratioAlarmConditionItem.minValue + "," + ratioAlarmConditionItem.maxValue + "," + ratioAlarmConditionItem.ratioValue + "]";
                                        ratioAlarm.Bsz     = ratioAlarmConditionItem.ratioValue;
                                        ratioAlarm.Stime   = nowTime;
                                        ratioAlarm.Ssz     = Convert.ToDouble(def.Ssz);
                                        ratioAlarm.Pjz     = basicValue;
                                        ratioAlarm.Zdz     = sszValue;
                                        ratioAlarm.Zdzs    = nowTime;

                                        alarm_AddItems.Add(ratioAlarm);
                                    }
                                    else
                                    {
                                        //报警状态持续,更新报警期间最大值
                                        if (sszValue > ratioAlarm.Zdz)
                                        {
                                            ratioAlarm.Zdz  = sszValue;
                                            ratioAlarm.Zdzs = nowTime;
                                            //更新报警
                                            alarm_UpdateItems.Add(ratioAlarm);
                                        }
                                    }
                                }
                            }

                            #endregion
                        }
                    }
                    if (alarm_DelItems.Count > 0)
                    {
                        EndAlarmItems(alarm_DelItems);
                    }
                    if (alarm_AddItems.Count > 0)
                    {
                        StartAlarms(alarm_AddItems);
                    }
                    if (alarm_UpdateItems.Count > 0)
                    {
                        UpdateAlarm(alarm_UpdateItems);
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Error("RatioAlarmProcHandle DataProc Error" + ex.Message);
                }
                Thread.Sleep(timeSpan * 1000);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 跨天和五分钟处理方法
        /// </summary>
        private void CrossDayAndFiveMinite()
        {
            DateTime          fiveMiniteProcMinite = DateTime.Now;
            DateTime          nowTime = DateTime.Now;
            List <Jc_DefInfo> pointDefineItems;
            List <Jc_DevInfo> pointDevItems;
            Jc_DevInfo        pointDevItem;
            IDriver           driverObj = null;
            int totalcount = 0;

            bool doFiveMinData = false; //是否要处理五分钟数据  2017.9.15 by

            for (; ;)
            {
                try
                {
                    doFiveMinData = false;

                    if (isStop)
                    {
                        LogHelper.Info("停止数据处理模块【跨天和五分钟处理方法处理完成】!");
                        break;
                    }

                    if (DateTime.Now.Day != nowTime.Day)
                    {
                        //2017.12.18 by 异常处理跨天(手动修改电脑时间)
                        CrossDay(new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 23, 59, 59),
                                 new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0));
                    }

                    nowTime = DateTime.Now;

                    //if (nowTime.Hour == 0 && nowTime.Minute == 0)
                    //{
                    //    doFiveMinData = false;  //刚跨天00:00:00 满足写记录条件,但不应该写记录
                    //}
                    //else  if (nowTime.Hour == 23 && nowTime.Minute == 59 && nowTime.Second > 40 && nowTime.Minute != fiveMiniteProcMinite.Minute) //2017.9.15 by
                    //{
                    //    doFiveMinData = true;
                    //}
                    //else
                    if ((nowTime.Minute % 5 == 0) && (nowTime.Minute != fiveMiniteProcMinite.Minute))
                    {
                        doFiveMinData = true;
                    }

                    //if ((nowTime.Minute % 5 == 0) && (nowTime.Minute != fiveMiniteProcMinite.Minute))
                    if (doFiveMinData)
                    {
                        fiveMiniteProcMinite = nowTime;
                        #region ----五分钟数据处理----
                        pointDefineItems = CacheDataHelper.GetKJPointDefineItems();
                        pointDefineItems = pointDefineItems.Where(a => a.DevPropertyID == (int)DeviceProperty.Substation).ToList();
                        pointDevItems    = CacheDataHelper.GetAllDevItems();

                        foreach (Jc_DefInfo station in pointDefineItems)
                        {
                            pointDevItem = pointDevItems.FirstOrDefault(a => a.Devid == station.Devid);
                            if (pointDevItem != null)
                            {
                                if (GlobleStaticVariable.driverHandle.DriverItems.ContainsKey(pointDevItem.Sysid))
                                {
                                    driverObj = GlobleStaticVariable.driverHandle.DriverItems[pointDevItem.Sysid].DLLObj;
                                    DriverTransferInterface.Drv_FiveMinPro(driverObj, station.Fzh, nowTime);
                                }
                            }
                        }

                        #endregion
                    }
                    if (nowTime.Hour == 23 && nowTime.Minute == 59 && nowTime.Second > 50)
                    {
                        isCrossDay = true;
                        #region ----跨天处理----
                        //判断数据处理线程数据是否处理完成,处理完成才继续进行跨天处理  20170703
                        while (DataProcHandle.Instance.GetArriveDataCount() > 0)
                        {
                            Thread.Sleep(200);
                        }
                        //处理时已跨天  输出日志  20170703
                        if (DateTime.Now.Day != nowTime.Day)
                        {
                            Basic.Framework.Logging.LogHelper.Error("处理跨天数据时,时间已到第二天!");
                        }

                        //DateTime nowTime = time;
                        //nowTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 23, 59, 59);

                        //DateTime tomorrowTime = nowTime.AddDays(1);
                        //tomorrowTime = new DateTime(tomorrowTime.Year, tomorrowTime.Month, tomorrowTime.Day, 0, 0, 0);
                        CrossDay(new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 23, 59, 59),
                                 new DateTime(nowTime.AddDays(1).Year, nowTime.AddDays(1).Month, nowTime.AddDays(1).Day, 0, 0, 0)); //2017.12.18 by  增加手动修改电脑日期处理时增加

                        while (true)
                        {
                            Thread.Sleep(200);
                            if (DateTime.Now.Hour != 23)
                            {
                                CreatDayTable(DateTime.Now);
                                break;
                            }
                        }

                        #endregion
                        isCrossDay = false;
                        nowTime    = DateTime.Now; //正常跨天处理完成,将时间赋值到第二天
                    }
                    totalcount++;
                    if (totalcount >= 20)//每4秒记算一次馈电信息
                    {
                        totalcount = 0;
                        CheckAlarmFeeding();
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Error("CrossDayAndFiveMinite Error:" + ex.Message);
                }
                Thread.Sleep(200);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 判断需要向交换机下发的命令,  修改支持命令同时发送  20171207
        /// </summary>
        /// <param name="mac"></param>
        /// <param name="macItems"></param>
        /// <returns></returns>
        public static List <MasProtocol> GetMacSendData(string mac, List <Jc_MacInfo> macItems)
        {
            List <MasProtocol> masProtocolList = new List <MasProtocol>();

            try
            {
                Jc_MacInfo macInfo = macItems.FirstOrDefault(a => a.MAC == mac);
                if (macInfo != null)
                {
                    if ((macInfo.NCommandbz & 0x02) == 0x02)
                    {
                        #region ----下发模拟报警----

                        ResetDeviceCommandRequest resetDeviceCommandRequest = new ResetDeviceCommandRequest();
                        resetDeviceCommandRequest.DeviceCode     = mac;
                        resetDeviceCommandRequest.LastAcceptFlag = (byte)macInfo.testAlarmFlag;
                        resetDeviceCommandRequest.Mac            = mac;

                        MasProtocol masProtocol = null;
                        masProtocol          = new MasProtocol(SystemType.Security, DirectionType.Down, ProtocolType.ResetNetWorkDeviceRequest);
                        masProtocol.Protocol = resetDeviceCommandRequest;
                        masProtocolList.Add(masProtocol);

                        Dictionary <string, object> updateItems = new Dictionary <string, object>();
                        updateItems.Add("sendAlarmCount", macInfo.sendAlarmCount--);
                        if (macInfo.sendAlarmCount <= 0)
                        {
                            updateItems.Add("NCommandbz", (macInfo.NCommandbz & 0xFD));
                        }

                        CacheDataHelper.UpdateNetworkModeuleCacheByPropertys(macInfo.MAC, updateItems);
                        LogHelper.Info(macInfo.MAC + "下发模拟报警,待下发" + macInfo.sendAlarmCount + "次");

                        #endregion
                    }

                    if (((macInfo.NCommandbz & 0x01) == 0x01) || macInfo.SendBatteryControlCount > 0)
                    {
                        #region ----获取智能电源箱数据----
                        if ((DateTime.Now - macInfo.SendDtime).TotalSeconds <= 15)
                        {
                            if (macInfo.Type == 0 && macInfo.Bz4 == "1")//Bz4 = 1表示带智能电源箱
                            {
                                QueryBatteryRealDataRequest queryBatteryRealDataRequest = GetQueryBatteryRealDataRequest(macInfo);

                                MasProtocol masProtocol = null;
                                masProtocol          = new MasProtocol(SystemType.Security, DirectionType.Down, ProtocolType.QueryBatteryRealDataRequest);
                                masProtocol.Protocol = queryBatteryRealDataRequest;
                                masProtocolList.Add(masProtocol);
                            }
                        }
                        #endregion
                    }

                    #region ----人员定位呼叫命令(屏蔽  20180307) ----
                    //R_CallInfo tempCallInfo;
                    //string[] startAndEnd;
                    //int tempInt = 0;
                    //string tempStr;
                    //List<R_CallInfo> callItems = KJ237CacheHelper.GetCallItems().Where(a => a.CallType != 2).OrderBy(a => a.CallTime).ToList();
                    //if (callItems.Count > 0)//下发紧急呼叫及一般呼叫  20171206
                    //{
                    //    //先查找人员的全员呼叫命令并下发(呼叫所有设备与呼叫所有人员为同一命令)(优先级最高)
                    //    List<R_CallInfo> sendCallList = callItems.FindAll(a => a.CallType == 1 && (a.CallPersonDefType == 0 || a.CallPersonDefType == 3));
                    //    if (sendCallList.Count > 0)//全员呼叫下发
                    //    {
                    //        if (sendCallList[0].SendCount > 0)//判断是否还需要下发  20171213
                    //        {
                    //            CallPersonRequest request = new CallPersonRequest();
                    //            request.HJ_Type = 0;
                    //            request.HJ_State = 2;
                    //            request.DeviceCode = mac;
                    //            request.HJ_KH = new ushort[12];

                    //            MasProtocol masProtocol = null;
                    //            masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //            masProtocol.Protocol = request;


                    //            masProtocolList.Add(masProtocol);
                    //        }
                    //    }
                    //    else
                    //    {
                    //        #region//紧急呼叫井下设备
                    //        List<R_CallInfo> sendCallListByPoint = callItems.FindAll(a => a.CallType == 1 && (a.CallPersonDefType == 4));
                    //        if (sendCallListByPoint.Count > 0)
                    //        {
                    //            if (sendCallListByPoint[0].SendCount > 0)//判断是否还需要下发  20171213
                    //            {
                    //                CallPersonRequest request = new CallPersonRequest();
                    //                request.HJ_Type = 4;
                    //                request.HJ_State = 2;
                    //                request.DeviceCode = mac;
                    //                List<ushort> callContent = new List<ushort>();
                    //                foreach (R_CallInfo call in sendCallListByPoint)
                    //                {
                    //                    string[] callList = call.PointList.Split(',');
                    //                    foreach (string tempCall in callList)
                    //                    {
                    //                        callContent.Add(Convert.ToUInt16(((Convert.ToInt64(tempCall.Substring(0, 3)) << 8)) + Convert.ToInt64(tempCall.Substring(4, 2))));
                    //                        if (callContent.Count == 12)
                    //                        {
                    //                            request.HJ_KH = callContent.ToArray();
                    //                            MasProtocol masProtocol = null;
                    //                            masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                            masProtocol.Protocol = request;
                    //                            masProtocolList.Add(masProtocol);

                    //                            callContent = new List<ushort>();
                    //                        }
                    //                    }
                    //                }
                    //                if (callContent.Count > 0)
                    //                {
                    //                    request.HJ_KH = new ushort[12];
                    //                    for (int i = 0; i < callContent.Count; i++)
                    //                    {
                    //                        request.HJ_KH[i] = callContent[i];
                    //                    }
                    //                    MasProtocol masProtocol = null;
                    //                    masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                    masProtocol.Protocol = request;
                    //                    masProtocolList.Add(masProtocol);
                    //                }
                    //            }
                    //        }
                    //        #endregion
                    //        #region//紧急呼叫指定人员及指定卡号段下发,卡号段也按指定人员下发
                    //        List<R_CallInfo> sendCallListByPerson = callItems.FindAll(a => a.CallType == 1 && (a.CallPersonDefType == 1 || a.CallPersonDefType == 2));
                    //        if (sendCallListByPerson.Count > 0)
                    //        {
                    //            if (sendCallListByPerson[0].SendCount > 0)//判断是否还需要下发  20171213
                    //            {
                    //                CallPersonRequest request = new CallPersonRequest();
                    //                request.HJ_Type = 2;
                    //                request.HJ_State = 2;
                    //                request.DeviceCode = mac;
                    //                List<ushort> callContent = new List<ushort>();
                    //                foreach (R_CallInfo call in sendCallListByPerson)
                    //                {
                    //                    if (call.BhContent.Contains("-"))
                    //                    {//指定卡号段呼叫
                    //                        ushort sBh = ushort.Parse(call.BhContent.Split('-')[0]);
                    //                        ushort eBh = ushort.Parse(call.BhContent.Split('-')[1]);
                    //                        for (ushort i = sBh; i <= eBh; i++)
                    //                        {
                    //                            callContent.Add(i);
                    //                            if (callContent.Count == 12)
                    //                            {
                    //                                request.HJ_KH = callContent.ToArray();
                    //                                MasProtocol masProtocol = null;
                    //                                masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                                masProtocol.Protocol = request;
                    //                                masProtocolList.Add(masProtocol);

                    //                                callContent = new List<ushort>();
                    //                            }
                    //                        }
                    //                    }
                    //                    else//指定卡号呼叫
                    //                    {
                    //                        string[] callList = call.BhContent.Split(',');
                    //                        foreach (string tempCall in callList)
                    //                        {
                    //                            callContent.Add(ushort.Parse(tempCall));
                    //                            if (callContent.Count == 12)
                    //                            {
                    //                                request.HJ_KH = callContent.ToArray();
                    //                                MasProtocol masProtocol = null;
                    //                                masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                                masProtocol.Protocol = request;
                    //                                masProtocolList.Add(masProtocol);

                    //                                callContent = new List<ushort>();
                    //                            }
                    //                        }
                    //                    }
                    //                }
                    //                if (callContent.Count > 0)
                    //                {
                    //                    request.HJ_KH = new ushort[12];
                    //                    for (int i = 0; i < callContent.Count; i++)
                    //                    {
                    //                        request.HJ_KH[i] = callContent[i];
                    //                    }
                    //                    MasProtocol masProtocol = null;
                    //                    masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                    masProtocol.Protocol = request;
                    //                    masProtocolList.Add(masProtocol);
                    //                }
                    //            }
                    //        }
                    //        #endregion

                    //        if (sendCallListByPerson.Count == 0 && sendCallListByPoint.Count == 0)
                    //        {//如果不存在紧急呼叫,则判断一般呼叫并下发
                    //            List<R_CallInfo> sendGeneralCallListAll = callItems.FindAll(a => a.CallType == 0 && (a.CallPersonDefType == 0 || a.CallPersonDefType == 3));
                    //            if (sendGeneralCallListAll.Count > 0)//全员呼叫下发
                    //            {
                    //                if (sendGeneralCallListAll[0].SendCount > 0)//判断是否还需要下发  20171213
                    //                {
                    //                    CallPersonRequest request = new CallPersonRequest();
                    //                    request.HJ_Type = 0;
                    //                    request.HJ_State = 1;
                    //                    request.DeviceCode = mac;
                    //                    request.HJ_KH = new ushort[12];

                    //                    MasProtocol masProtocol = null;
                    //                    masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                    masProtocol.Protocol = request;


                    //                    masProtocolList.Add(masProtocol);
                    //                }
                    //            }
                    //            #region//一般呼叫井下设备
                    //            List<R_CallInfo> sendGeneralCallListByPoint = callItems.FindAll(a => a.CallType == 0 && (a.CallPersonDefType == 4));
                    //            if (sendGeneralCallListByPoint.Count > 0)
                    //            {
                    //                if (sendGeneralCallListByPoint[0].SendCount > 0)//判断是否还需要下发  20171213
                    //                {
                    //                    CallPersonRequest request = new CallPersonRequest();
                    //                    request.HJ_Type = 4;
                    //                    request.HJ_State = 1;
                    //                    request.DeviceCode = mac;
                    //                    List<ushort> callContent = new List<ushort>();
                    //                    foreach (R_CallInfo call in sendGeneralCallListByPoint)
                    //                    {
                    //                        string[] callList = call.PointList.Split(',');
                    //                        foreach (string tempCall in callList)
                    //                        {
                    //                            callContent.Add(Convert.ToUInt16(((Convert.ToInt64(tempCall.Substring(0, 3)) << 8)) + Convert.ToInt64(tempCall.Substring(4, 2))));
                    //                            if (callContent.Count == 12)
                    //                            {
                    //                                request.HJ_KH = callContent.ToArray();
                    //                                MasProtocol masProtocol = null;
                    //                                masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                                masProtocol.Protocol = request;
                    //                                masProtocolList.Add(masProtocol);

                    //                                callContent = new List<ushort>();
                    //                            }
                    //                        }
                    //                    }
                    //                    if (callContent.Count > 0)
                    //                    {
                    //                        request.HJ_KH = new ushort[12];
                    //                        for (int i = 0; i < callContent.Count; i++)
                    //                        {
                    //                            request.HJ_KH[i] = callContent[i];
                    //                        }
                    //                        MasProtocol masProtocol = null;
                    //                        masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                        masProtocol.Protocol = request;
                    //                        masProtocolList.Add(masProtocol);
                    //                    }
                    //                }
                    //            }
                    //            #endregion
                    //            #region//一般呼叫指定人员及指定卡号段下发,卡号段也按指定人员下发
                    //            List<R_CallInfo> sendGeneralCallListByPerson = callItems.FindAll(a => a.CallType == 0 && (a.CallPersonDefType == 1 || a.CallPersonDefType == 2));
                    //            if (sendGeneralCallListByPerson.Count > 0)
                    //            {
                    //                if (sendGeneralCallListByPerson[0].SendCount > 0)//判断是否还需要下发  20171213
                    //                {
                    //                    CallPersonRequest request = new CallPersonRequest();
                    //                    request.HJ_Type = 2;
                    //                    request.HJ_State = 1;
                    //                    request.DeviceCode = mac;
                    //                    List<ushort> callContent = new List<ushort>();
                    //                    foreach (R_CallInfo call in sendGeneralCallListByPerson)
                    //                    {
                    //                        if (call.BhContent.Contains("-"))
                    //                        {//指定卡号段呼叫
                    //                            ushort sBh = ushort.Parse(call.BhContent.Split('-')[0]);
                    //                            ushort eBh = ushort.Parse(call.BhContent.Split('-')[1]);
                    //                            for (ushort i = sBh; i <= eBh; i++)
                    //                            {
                    //                                callContent.Add(i);
                    //                                if (callContent.Count == 12)
                    //                                {
                    //                                    request.HJ_KH = callContent.ToArray();
                    //                                    MasProtocol masProtocol = null;
                    //                                    masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                                    masProtocol.Protocol = request;
                    //                                    masProtocolList.Add(masProtocol);

                    //                                    callContent = new List<ushort>();
                    //                                }
                    //                            }
                    //                        }
                    //                        else//指定卡号呼叫
                    //                        {
                    //                            string[] callList = call.BhContent.Split(',');
                    //                            foreach (string tempCall in callList)
                    //                            {
                    //                                callContent.Add(ushort.Parse(tempCall));
                    //                                if (callContent.Count == 12)
                    //                                {
                    //                                    request.HJ_KH = callContent.ToArray();
                    //                                    MasProtocol masProtocol = null;
                    //                                    masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                                    masProtocol.Protocol = request;
                    //                                    masProtocolList.Add(masProtocol);

                    //                                    callContent = new List<ushort>();
                    //                                }
                    //                            }
                    //                        }
                    //                    }
                    //                    if (callContent.Count > 0)
                    //                    {
                    //                        request.HJ_KH = new ushort[12];
                    //                        for (int i = 0; i < callContent.Count; i++)
                    //                        {
                    //                            request.HJ_KH[i] = callContent[i];
                    //                        }
                    //                        MasProtocol masProtocol = null;
                    //                        masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //                        masProtocol.Protocol = request;
                    //                        masProtocolList.Add(masProtocol);
                    //                    }
                    //                }
                    //            }
                    //            #endregion
                    //        }
                    //    }

                    //}
                    //else//如果不存在紧急呼叫和一般呼叫命令则下发解除呼叫命令  20171206
                    //{
                    //    callItems = KJ237CacheHelper.GetCallItems().Where(a => a.CallType == 2).OrderBy(a => a.CallTime).ToList();
                    //    if (callItems.Count > 0)
                    //    {
                    //        CallPersonRequest request = new CallPersonRequest();
                    //        request.HJ_Type = 0;
                    //        request.HJ_State = 0;
                    //        request.DeviceCode = mac;
                    //        request.HJ_KH = new ushort[12];

                    //        MasProtocol masProtocol = null;
                    //        masProtocol = new MasProtocol(SystemType.Personnel, DirectionType.Down, ProtocolType.CallPersonRequest);
                    //        masProtocol.Protocol = request;

                    //        masProtocolList.Add(masProtocol);
                    //    }
                    //}
                    #endregion
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("获取向交换机下发的命令失败,原因:" + ex);
            }

            return(masProtocolList);
        }