Esempio n. 1
0
        /// <summary>
        /// 业主设备报警推送处理 (电话短信+极光推送)
        /// </summary>
        /// <param name="UserModel">业主信息</param>
        /// <param name="DevID">设备ID</param>
        /// <returns></returns>
        public static string GetPushStr(People UserModel, string DevID, string TitleID)
        {
            //语音电话模板是通过集合方式发送请求的 可以在数据库中添加模板 ,后期维护的话可直接改成数据表查询方式
            //先判断设备类型
            var NewType = "";
            var DevName = ""; //设备名称简称
            FireControl_DeviceBLL DevBll = new FireControl_DeviceBLL();
            var str          = "";
            var Message      = ""; //短信报警解释
            var PhoneMessage = "";
            var DevResult    = DevBll.GetObjByKey(DevID);

            if (DevResult.ResultCode == ResultCode.Succ)
            {
                var        Device     = DevResult.ResultData;
                DeviceType deviceType = CommHelper.StringToDeviceType(Device.TypeID);
                switch (deviceType)
                {
                case DeviceType.单相电气火灾探测器:
                    //电气 不同报警类型提示文字不同
                    //电气开始时间
                    var DQStart = "09:00";
                    //电气推送结束时间
                    var DQEnd = "22:00";
                    str     = "";
                    NewType = "6";
                    DevName = "电气";
                    if (Convert.ToDateTime(DQStart) > DateTime.Now && DateTime.Now < Convert.ToDateTime(DQEnd))
                    {    //可以进行推送
                         // 同一个设备一天只推送两次 间隔最少一小时
                        FireControl_PushRecordBLL pushRecBLL = new FireControl_PushRecordBLL();
                        var PushRecResult = pushRecBLL.GetPushRecordOneDayByDevIDAndUserID(DevID, UserModel.UserID);
                        if (PushRecResult.ResultCode == ResultCode.UnSucc)
                        {
                            var pushRec = PushRecResult.ResultData;
                            //找到记录 极光一天两次 间隔最少一小时   短信和电话一天一次
                            if (pushRec.Count == 1)
                            {    //只有极光可以发送
                                //还需要判断该报警是否是一小时以前的
                                var time     = pushRec.FirstOrDefault().CreateTime;
                                var timeDiff = Utility.ExecDateDiff(DateTime.Now, time);
                                if (timeDiff > 60)
                                {    //此时可以再推送一次
                                    SendDQ(UserModel, TitleID, NewType, DevName, DevID, "2");
                                }
                            }
                            else if (pushRec.Count == 0)
                            {
                                //都可以发送
                                SendDQ(UserModel, TitleID, NewType, DevName, DevID, "1");
                            }
                        }
                        else
                        {
                            //未找到记录直接推送
                            SendDQ(UserModel, TitleID, NewType, DevName, DevID, "1");
                        }
                    }
                    break;

                case DeviceType.独立式光电感烟火灾探测报警器:
                    // 烟感  1-4个烟感同时报警 三种推送的文字不同
                    FireControl_DevBindUserBLL devUserBLL = new FireControl_DevBindUserBLL();
                    var NumberResult = devUserBLL.GetYGAlarmNumberByDevID(DevID);    //
                    var Number       = Convert.ToInt32(NumberResult.ResultData);

                    str     = "";
                    NewType = "1";
                    DevName = "烟感";
                    //推送
                    APPPush(UserModel, TitleID, NewType, DevName, DevID);
                    if (Number <= 1)
                    {
                        PhoneMessage = UserModel.Name.Replace("&", "") + "&" + UserModel.Address.Replace(UserModel.Province, "").Replace("&", "") + "&" + "烟感探测器&正在报警&置小火于不顾终会酿成大灾,";
                        //玉龙小区1号楼二单元403室 的感烟探测器正在报警,友情提示电气火灾先断电、燃气火灾关阀门、家具火灾用水泼
                        DevName = "烟感设备";
                        Message = "电气火灾先断电、燃气火灾关阀门、家具火灾用水泼";
                    }
                    else if (Number == 2)
                    {
                        PhoneMessage = UserModel.Name.Replace("&", "") + "&" + UserModel.Address.Replace(UserModel.Province, "").Replace("&", "") + "&" + "两个烟感探测器&正在报警&";
                        //玉龙小区1号楼二单元403室 的两个感烟探测器同时在报警,友情提示应争分夺秒扑灭初期火灾,火势凶猛要迅速逃离现场
                        DevName = "两个感烟设备";
                        Message = "应争分夺秒扑灭初期火灾,火势凶猛要迅速逃离现场";
                    }
                    else if (Number >= 3)
                    {
                        PhoneMessage = UserModel.Name.Replace("&", "") + "&" + UserModel.Address.Replace(UserModel.Province, "").Replace("&", "") + "&" + "三个烟感探测器&正在报警&";
                        //玉龙小区1号楼二单元403室的三个感烟探测器同时在报警,友情提示您先冷静判断火灾类型、火势大小,报警电话要讲全
                        DevName = "多个感烟设备";
                        Message = "您先冷静判断火灾类型、火势大小,报警电话要讲全";
                    }

                    //短信
                    #region 短信
                    SendSmsModel SendSmsModel = new SendSmsModel();
                    SendSmsModel.AddressDetail = UserModel.Address.Replace(UserModel.Province + UserModel.City + UserModel.Area + UserModel.StreetName + UserModel.VillageName, "");
                    SendSmsModel.DevName       = DevName;
                    SendSmsModel.PushName      = "正在报警";
                    SendSmsModel.Phone         = UserModel.Phone;
                    SendSmsModel.VillageName   = UserModel.VillageName;
                    SendSmsModel.Message       = Message;
                    HttpSend.sendSmsP1(SendSmsModel);
                    #endregion

                    #region 电话
                    //地址去掉省
                    HttpSend.TalePhoneP1(DevName, UserModel.Phone, UserModel.Address.Replace(UserModel.Province, ""), UserModel.Name, DevID, "1", PhoneMessage);

                    #endregion

                    //首页弹窗
                    FireControl_YGAlarmPromptBLL YGBLL = new FireControl_YGAlarmPromptBLL();
                    var YGList = YGBLL.GetList();
                    if (YGList.ResultCode == ResultCode.Succ)
                    {
                        var YGText = YGList.ResultData;
                        var mod    = YGText.Where(f => f.Number == Number).FirstOrDefault();
                        if (mod == null || string.IsNullOrWhiteSpace(mod.APID))
                        {
                            mod = YGText.OrderBy(f => f.Number).LastOrDefault();
                        }
                        FireControl_AlarmWindow AlarmWindow = new FireControl_AlarmWindow();
                        AlarmWindow.Address     = UserModel.Address.Replace(UserModel.Province + UserModel.City + UserModel.Area + UserModel.StreetName, ""); //小区名+详细地址
                        AlarmWindow.AWID        = CommHelper.CreatePKID("aw");
                        AlarmWindow.DevID       = DevID;
                        AlarmWindow.DevName     = DevName;
                        AlarmWindow.DevNum      = Device.DevNum;
                        AlarmWindow.DevTypeID   = Device.TypeID;
                        AlarmWindow.DevTypeName = "";
                        AlarmWindow.PromptText  = mod.PromptText;
                        AlarmWindow.RecordID    = TitleID;
                        AlarmWindow.Title       = "您的" + DevName + "正在报警";
                        AlarmWindow.UserID      = UserModel.UserID;

                        AddAlarmWindow(AlarmWindow);
                    }
                    break;

                case DeviceType.独立式可燃气体探测器:
                    var PushName = "";
                    str     = "";
                    NewType = "1";
                    DevName = "燃气";
                    //燃气 不同浓度报警提示不同
                    //没浓度的燃气报警显示最高报警信息
                    //查询当前报警的浓度
                    FireControl_WarninsPushBLL pushBll = new FireControl_WarninsPushBLL();
                    var PushResult  = pushBll.GetObjByKey(TitleID);
                    var PushModel   = PushResult.ResultData;
                    var RecordValue = Convert.ToInt32(PushModel.RecordValue);     //浓度值

                    if (RecordValue >= 0 && RecordValue < 5)
                    {
                        /*
                         * 报警语音(王志您好,您家玉龙小区的燃气正在泄漏,如遇到明火会引起微型火灾,请尽快处理!)
                         * 报警短信(【全民消防】玉龙小区1号楼二单元403室的燃气正在泄漏,友情提示您立即关闭燃气阀门,开窗疏散燃气浓度)
                         */
                        PushName     = "正在泄漏";
                        Message      = "您立即关闭燃气阀门,开窗疏散燃气浓度";
                        PhoneMessage = UserModel.Name.Replace("&", "") + "&" + UserModel.Address.Replace(UserModel.Province, "").Replace("&", "") + "&" + "燃气&正在泄漏&如遇到明火会引起微型火灾,";
                    }
                    else if (RecordValue >= 5 && RecordValue < 15)
                    {
                        /*
                         * 报警语音(王志您好,石家庄市玉龙小区1号楼二单元403室的燃气泄漏浓度已超过5%,如遇热源和明火有爆炸的危险,请尽快处理!)
                         * 报警短信(【全民消防】玉龙小区1号楼二单元403室的燃气泄漏浓度已超过5%,友情提示您不要开关电器,泄漏区不要出现热源和明火
                         */
                        PushName     = "泄漏浓度已超过5%";
                        Message      = "您不要开关电器,泄漏区不要出现热源和明火";
                        PhoneMessage = UserModel.Name.Replace("&", "") + "&" + UserModel.Address.Replace(UserModel.Province, "").Replace("&", "") + "&" + "燃气&泄漏浓度已超过百分之五&如遇热源和明火有爆炸的危险,";
                    }
                    else if (RecordValue >= 15 && RecordValue < 30)
                    {
                        /*
                         * 报警语音(王志您好,石家庄市玉龙小区1号楼二单元403室的燃气泄漏浓度已超过15%,如吸入大量甲烷会使人窒息,请尽快处理!)
                         * 报警短信(【全民消防】玉龙小区1号楼二单元403室的燃气泄漏浓度已超过15%,友情提示您立即关闭燃气阀门,离开燃气泄漏区)
                         */
                        PushName     = "泄漏浓度已超过15%";
                        Message      = "您立即关闭燃气阀门,离开燃气泄漏区";
                        PhoneMessage = UserModel.Name.Replace("&", "") + "&" + UserModel.Address.Replace(UserModel.Province, "").Replace("&", "") + "&" + "燃气&泄漏浓度已超过百分之十五&如吸入大量甲烷会使人窒息,";
                    }
                    else if (RecordValue >= 30 && RecordValue <= 100)
                    {
                        /*
                         *   报警语音(王志您好,石家庄市玉龙小区1号楼二单元403室的燃气泄漏浓度已超过30%,有中毒窒息和火灾爆炸的双重危险,请尽快处理!)
                         *   报警短信(【全民消防】玉龙小区1号楼二单元403室的燃气泄漏浓度已超过30%,友情提示您立即远离泄漏区打电话给物业处理)
                         */
                        PushName     = "泄漏浓度已超过30%";
                        Message      = "您立即远离泄漏区打电话给物业处理";
                        PhoneMessage = UserModel.Name.Replace("&", "") + "&" + UserModel.Address.Replace(UserModel.Province, "").Replace("&", "") + "&" + "燃气&泄漏浓度已超过百分之三十&有中毒窒息和火灾爆炸的双重危险,";
                    }
                    //推送
                    APPPush(UserModel, TitleID, NewType, DevName, DevID);


                    #region 短信
                    SendSmsModel SendSmsRQModel = new SendSmsModel();
                    SendSmsRQModel.AddressDetail = UserModel.Address.Replace(UserModel.Province + UserModel.City + UserModel.Area + UserModel.StreetName + UserModel.VillageName, "");
                    SendSmsRQModel.DevName       = DevName;
                    SendSmsRQModel.PushName      = PushName;
                    SendSmsRQModel.Phone         = UserModel.Phone;
                    SendSmsRQModel.VillageName   = UserModel.VillageName;
                    SendSmsRQModel.Message       = Message;
                    HttpSend.sendSmsP1(SendSmsRQModel);
                    #endregion

                    #region 电话
                    HttpSend.TalePhoneP1(DevName, UserModel.Phone, UserModel.Address.Replace(UserModel.Province, ""), UserModel.Name, DevID, "2", PhoneMessage);
                    #endregion


                    //首页弹窗
                    //添加弹窗一条记录
                    //增加一个自定义推送

                    FireControl_RQAlarmPromptBLL RQBLL = new FireControl_RQAlarmPromptBLL();
                    var RQList = RQBLL.GetList();
                    if (RQList.ResultCode == ResultCode.Succ)
                    {
                        var RQText = RQList.ResultData;
                        var mod    = RQText.Where(f => f.MinValue < RecordValue && f.MaxValue >= RecordValue).FirstOrDefault();
                        if (mod == null || string.IsNullOrWhiteSpace(mod.APID))
                        {
                            mod = RQText.OrderBy(f => f.MaxValue).LastOrDefault();
                        }
                        FireControl_AlarmWindow AlarmWindow = new FireControl_AlarmWindow();
                        AlarmWindow.Address     = UserModel.Address.Replace(UserModel.Province + UserModel.City + UserModel.Area + UserModel.StreetName, "");;  //小区名+详细地址
                        AlarmWindow.AWID        = CommHelper.CreatePKID("aw");
                        AlarmWindow.DevID       = DevID;
                        AlarmWindow.DevName     = DevName;
                        AlarmWindow.DevNum      = Device.DevNum;
                        AlarmWindow.DevTypeID   = Device.TypeID;
                        AlarmWindow.DevTypeName = "";
                        AlarmWindow.PromptText  = mod.PromptText;
                        AlarmWindow.RecordID    = TitleID;
                        AlarmWindow.Title       = "您的" + DevName + PushName;
                        AlarmWindow.UserID      = UserModel.UserID;
                        AddAlarmWindow(AlarmWindow);
                    }
                    break;
                }

                //所有设备的不同报警极光推送都一样
                //紧急通知!您的{1}设备发生报警,地址{2},请尽快处理{1.设备类型简称;2.省市区+小区名称;
            }


            return("");
        }