コード例 #1
0
ファイル: CabinetLogController.cs プロジェクト: qianyaozu/bxg
        public IHttpActionResult DepartAlarmTypeStatistics(DepartAlarmStatisticsModel query)
        {
            if (query == null || string.IsNullOrEmpty(query.From) || string.IsNullOrEmpty(query.To))
            {
                return(BadRequest());
            }
            try
            {
                if (!UserController.LoginDictionary.ContainsKey(GetCookie("token")))
                {
                    return(Logout());
                }
                UserInfo userCookie = UserController.LoginDictionary[GetCookie("token")];
                if (userCookie == null)
                {
                    return(Logout());
                }
                if (query.DepartmentID == 0)
                {
                    query.DepartmentID = userCookie.DepartmentID;
                }

                query.From = Convert.ToDateTime(query.From).ToString("yyyy-MM-dd 00:00:00");
                query.To   = Convert.ToDateTime(query.To).ToString("yyyy-MM-dd  23:59:59");
                var result = CabinetLog.DepartAlarmTypeStatistics(query.DepartmentID, query.From, query.To);
                return(Success(result));
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                return(Failure("提交失败"));
            }
        }
コード例 #2
0
 public IHttpActionResult GetAll()
 {
     try
     {
         var cabinetList = Cabinet.GetAll().FindAll(m => (m.Status == 1 || m.Status == 4));
         foreach (var m in cabinetList)
         {
             var log = CabinetLog.GetOpenLog(m.ID);
             if (log == null || log.CreateTime.AddSeconds(60) < DateTime.Now)
             {
                 m.Status = 3;
                 Cabinet.Update(m);
                 _logger.Info("自动重置关闭");
             }
         }
         var list  = Cabinet.GetAll();
         var model = list.Select(m => new BxgModel
         {
             Name           = m.Name,
             Mac            = m.AndroidMac,
             IP             = m.IP,
             IsOnline       = m.IsOnline ?? false,
             LastOnlineTime = (m.LastOnlineTime == null) ? "" : m.LastOnlineTime?.ToString("yyyy-MM-dd HH:mm:ss"),
             //正常开门 = 1,
             //正常关门 = 3,
             //非工作时间开门 = 4,
             //非工作时间关门 = 5,
             //外部电源断开 = 6,
             //备份电源电压低 = 7,
             //未按规定关门 = 8,
             //强烈震动 = 9,
             //网络断开 = 10,
             Status    = (m.Status == 1 || m.Status == 4) ? 1 : 0,
             StatusDes = (m.Status == null ? "" : Enum.GetName(typeof(OperatorTypeEnum), m.Status)),
         }).ToList();
         var item = new ResultModel()
         {
             Success = 1,
             Message = "",
             Data    = model
         };
         return(Json <ResultModel>(item));
     }
     catch (Exception ex)
     {
         logger.Error(ex);
         var item = new ResultModel()
         {
             Success = 0,
             Message = "获取数据失败",
             Data    = null
         };
         return(Json <ResultModel>(item));
     }
 }
コード例 #3
0
        private void AddLog(Cabinet cabinet, CommandRequest request)
        {
            var log = new CabinetLog
            {
                CabinetID     = cabinet.ID,
                DepartmentID  = cabinet.DepartmentID,
                OperatorName  = request.UserName,
                OperateTime   = DateTime.Now,
                OperationType = request.OperatorType,
                CreateTime    = DateTime.Now,
                CabinetIP     = GetIP(),
                EventContent  = JsonConvert.SerializeObject(request)
            };

            CabinetLog.Add(log);
        }
コード例 #4
0
ファイル: CabinetLogController.cs プロジェクト: qianyaozu/bxg
 public IHttpActionResult DeleteCabinetLog(List <int> ids)
 {
     try
     {
         if (ids?.Count == 0)
         {
             return(BadRequest());
         }
         CabinetLog.Delete(ids);
         return(Success());
     }
     catch (Exception ex)
     {
         _logger.Error(ex);
         return(Failure("查询失败"));
     }
 }
コード例 #5
0
ファイル: CabinetLogController.cs プロジェクト: qianyaozu/bxg
        public IHttpActionResult DepartMonthAlarmStatistics(DepartAlarmStatisticsModel query)
        {
            if (query == null || string.IsNullOrEmpty(query.From) || string.IsNullOrEmpty(query.To))
            {
                return(BadRequest());
            }
            try
            {
                if (!UserController.LoginDictionary.ContainsKey(GetCookie("token")))
                {
                    return(Logout());
                }
                UserInfo userCookie = UserController.LoginDictionary[GetCookie("token")];
                if (userCookie == null)
                {
                    return(Logout());
                }
                if (query.DepartmentID == 0)
                {
                    query.DepartmentID = userCookie.DepartmentID;
                }
                MonthAlarmStatisticsModel model = new Models.MonthAlarmStatisticsModel();
                model.Year = DateTime.Parse(query.From).Year.ToString();
                model.Data = new List <int>();

                query.From = Convert.ToDateTime(query.From).ToString("yyyy-MM-dd 00:00:00");
                query.To   = Convert.ToDateTime(query.To).ToString("yyyy-MM-dd  23:59:59");

                var result = CabinetLog.DepartMonthAlarmStatistics(query.DepartmentID, query.From, query.To);
                if (result.Count > 0)
                {
                    for (int i = 1; i <= 12; i++)
                    {
                        var item = result.Find(m => m.Month == i);
                        model.Data.Add(item == null ? 0 : item.Count);
                    }
                }
                return(Success(model));
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                return(Failure("查询失败"));
            }
        }
コード例 #6
0
ファイル: CabinetLogController.cs プロジェクト: qianyaozu/bxg
 public IHttpActionResult QueryCabinetLog(CabinetLogSearchModel search)
 {
     try
     {
         if (search == null)
         {
             return(BadRequest());
         }
         if (search.PageIndex == 0)
         {
             search.PageIndex = 1;
         }
         if (search.PageSize == 0)
         {
             search.PageSize = 20;
         }
         if (!UserController.LoginDictionary.ContainsKey(GetCookie("token")))
         {
             return(Logout());
         }
         UserInfo userCookie = UserController.LoginDictionary[GetCookie("token")];
         if (userCookie == null)
         {
             return(Logout());
         }
         List <Department> departList = new List <Department>();
         if ((search.DepartmentID ?? 0) != 0)
         {
             departList = Department.GetAllChildren(search.DepartmentID.Value);
         }
         else
         {
             departList = Department.GetAllChildren(userCookie.DepartmentID);
         }
         var result = CabinetLog.GetCabinets(search, departList.Select(m => m.ID).ToList());
         if (result.Items.Count > 0)
         {
             var cabinet = Cabinet.GetCabinetByIds(result.Items.Select(m => m.CabinetID).ToList());
             var depart  = Department.GetAll(result.Items.Select(m => m.DepartmentID ?? 0).ToList());
             result.Items.ForEach(m =>
             {
                 m.OperationType  = m.OperationType;
                 m.CabinetName    = cabinet.Find(n => n.ID == m.CabinetID)?.Name;
                 m.DepartmentName = depart.Find(n => n.ID == m.DepartmentID)?.Name;
                 m.CabinetCode    = cabinet.Find(n => n.ID == m.CabinetID)?.Code;
                 if (!string.IsNullOrEmpty(m.EventContent) && m.EventContent.ToLower().Contains("photos"))
                 {
                     //有事件
                     CommandRequest req = JsonConvert.DeserializeObject <CommandRequest>(m.EventContent);
                     if (req != null && req.Photos != null && req.Photos.Count > 0)
                     {
                         for (int i = 0; i < req.Photos.Count; i++)
                         {
                             req.Photos[i] = ImgToBase64String(req.Photos[i]);
                         }
                         m.EventContent = JsonConvert.SerializeObject(req);
                     }
                 }
             });
         }
         return(Success(result));
     }
     catch (Exception ex)
     {
         _logger.Error(ex);
         return(Failure("查询失败"));
     }
 }
コード例 #7
0
ファイル: CabinetLogController.cs プロジェクト: qianyaozu/bxg
 public IHttpActionResult SubmitLog(CommandDeal cmd)
 {
     if (cmd == null)
     {
         return(BadRequest());
     }
     try
     {
         if (!UserController.LoginDictionary.ContainsKey(GetCookie("token")))
         {
             return(Logout());
         }
         UserInfo userCookie = UserController.LoginDictionary[GetCookie("token")];
         if (userCookie == null)
         {
             return(Logout());
         }
         _logger.Warn(JsonConvert.SerializeObject(cmd));
         if (cmd.OperationType == (int)OperatorTypeEnum.允许开门 ||
             cmd.OperationType == (int)OperatorTypeEnum.拒绝开门 ||
             cmd.OperationType == (int)OperatorTypeEnum.接受语音 ||
             cmd.OperationType == (int)OperatorTypeEnum.拒绝语音 ||
             cmd.OperationType == (int)OperatorTypeEnum.允许终端修改信息 ||
             cmd.OperationType == (int)OperatorTypeEnum.拒绝终端修改信息 ||
             cmd.OperationType == (int)OperatorTypeEnum.允许人员注册 ||
             cmd.OperationType == (int)OperatorTypeEnum.拒绝人员注册)
         {
             string authcode = cmd.AuthCode;
             lock (AndroidController.CommandDictionaryLock)
             {
                 AndroidController.CommandDictionary.Add(new CommandResponse {
                     OperationType = cmd.OperationType, AuthCode = cmd.AuthCode, ID = cmd.CabinetID, CreateTime = DateTime.Now
                 });
             }
             //if (AndroidController.CommandDictionary.ContainsKey(cmd.CabinetID))
             //    AndroidController.CommandDictionary[cmd.CabinetID] =new CommandResponse { OperationType= cmd.OperationType ,AuthCode=authcode} ;
             //else
             //    AndroidController.CommandDictionary.TryAdd(cmd.CabinetID, new CommandResponse { OperationType = cmd.OperationType, AuthCode = authcode });
         }
         CabinetLog log = new CabinetLog();
         log.CabinetID     = cmd.CabinetID;
         log.OperationType = cmd.OperationType;
         log.OperatorName  = userCookie.Name;
         log.DepartmentID  = userCookie.DepartmentID;
         log.EventContent  = cmd.EventContent;
         log.OperateTime   = DateTime.Now;
         log.CreateTime    = DateTime.Now;
         log.Remark        = cmd.Remark;
         CabinetLog.Add(log);
         if (cmd.OperationType == (int)OperatorTypeEnum.解除报警)
         {
             var cab = Cabinet.GetOne(cmd.CabinetID);
             if (cab != null)
             {
                 cab.Alarm  = "";
                 cab.Status = 23;
                 Cabinet.Update(cab);
             }
         }
         return(Success());
     }
     catch (Exception ex)
     {
         _logger.Error(ex);
         return(Failure("提交失败"));
     }
 }
コード例 #8
0
ファイル: Global.asax.cs プロジェクト: qianyaozu/bxg
        private void SyncCabinet()
        {
            int interval = 30;

            if (!string.IsNullOrEmpty(pingInterval))
            {
                int.TryParse(pingInterval, out interval);
            }
            Thread.Sleep(interval * 1000);
            while (true)
            {
                try
                {
                    //删除5分钟之前的命令
                    lock (AndroidController.logLock)
                        AndroidController.CabinetLogQueue.RemoveAll(m => m.CreateTime.AddMinutes(5) < DateTime.Now);
                    //List<string> keys = UserController.LoginDictionary.Keys.ToList();
                    //foreach (var key in keys)
                    //{
                    //    if (UserController.LoginDictionary.ContainsKey(key))
                    //    {
                    //        if(  UserController.LoginDictionary[key].LastLoginTime!=null&&(DateTime.Now- UserController.LoginDictionary[key].LastLoginTime.Value).TotalHours > 24)
                    //        {
                    //            logger.Error("自动退出 " + key + " " + UserController.LoginDictionary[key].LastLoginTime.Value.ToString("yyyy.MM.dd HH:mm:ss"));
                    //            UserController.LoginDictionary.Remove(key);
                    //        }
                    //    }
                    //}
                }
                catch (Exception ex)
                {
                    logger.Error(ex);
                }
                try
                {
                    //List<int> onLine = new List<int>();
                    //List<int> offLine = new List<int>();
                    List <CabinetData.Entities.CabinetLog> logs = new List <CabinetData.Entities.CabinetLog>();
                    var cabinetList = CabinetData.Entities.Cabinet.GetAll();
                    foreach (var cabinet in cabinetList)
                    {
                        bool isOnline = false;
                        if (cabinet.IsOnline ?? false)//在线
                        {
                            //如果保险柜在线,检测是否下线
                            if (!AndroidController.HeartDictionary.ContainsKey(cabinet.ID) || (AndroidController.HeartDictionary.ContainsKey(cabinet.ID) && AndroidController.HeartDictionary[cabinet.ID].AddSeconds(interval) < DateTime.Now))
                            {
                                //string host = cabinet.IP;
                                //Ping p1 = new Ping();
                                //PingReply reply = p1.Send(host); //发送主机名或Ip地址
                                //if (reply.Status != IPStatus.Success)
                                //{
                                logger.Warn("03保险柜在线,心跳不在且ping不通下线" + cabinet.ID + ":" + cabinet.IP);
                                //offLine.Add(cabinet.ID);
                                var log = new CabinetData.Entities.CabinetLog
                                {
                                    CabinetID     = cabinet.ID,
                                    DepartmentID  = cabinet.DepartmentID,
                                    OperatorName  = "",
                                    OperateTime   = DateTime.Now,
                                    OperationType = (int)OperatorTypeEnum.线,
                                    CreateTime    = DateTime.Now,
                                    CabinetIP     = "",
                                    EventContent  = "超时下线"
                                };
                                logs.Add(log);
                                CabinetData.Entities.Cabinet.UpdateOffLine(new List <int> {
                                    cabinet.ID
                                });
                                lock (AndroidController.logLock)
                                {
                                    AndroidController.msgID++;
                                    log.ID = AndroidController.msgID;
                                    AndroidController.CabinetLogQueue.Add(log);
                                }
                                DateTime dt;
                                AndroidController.HeartDictionary.TryRemove(cabinet.ID, out dt);
                                //}
                            }
                        }
                        else
                        {
                            if (AndroidController.HeartDictionary.ContainsKey(cabinet.ID) && AndroidController.HeartDictionary[cabinet.ID].AddSeconds(interval) > DateTime.Now)//如果存在
                            {
                                logger.Warn("01保险柜不在线,心跳上线" + cabinet.ID + ":" + cabinet.IP);
                                isOnline = true;
                            }
                            else
                            {
                                //string host = cabinet.IP;
                                //Ping p1 = new Ping();
                                //PingReply reply = p1.Send(host); //发送主机名或Ip地址
                                //if (reply.Status == IPStatus.Success)
                                //{
                                //    logger.Warn("02保险柜不在线,ping上线" + cabinet.ID + ":" + cabinet.IP);
                                //    isOnline = true;
                                //}
                            }
                            if (isOnline)
                            {
                                //onLine.Add(cabinet.ID);
                                var log = new CabinetData.Entities.CabinetLog
                                {
                                    CabinetID     = cabinet.ID,
                                    DepartmentID  = cabinet.DepartmentID,
                                    OperatorName  = "",
                                    OperateTime   = DateTime.Now,
                                    OperationType = (int)OperatorTypeEnum.线,
                                    CreateTime    = DateTime.Now,
                                    CabinetIP     = "",
                                    EventContent  = ""
                                };
                                logs.Add(log);
                                CabinetData.Entities.Cabinet.UpdateOnLine(new List <int> {
                                    cabinet.ID
                                });
                                lock (AndroidController.logLock)
                                {
                                    AndroidController.msgID++;
                                    log.ID = AndroidController.msgID;
                                    AndroidController.CabinetLogQueue.Add(log);
                                }
                            }
                        }
                    }
                    if (logs.Count > 0)
                    {
                        CabinetLog.Add(logs);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error(ex);
                }
                finally
                {
                    Thread.Sleep(3000);
                }
            }
        }
コード例 #9
0
        public IHttpActionResult Command(CommandRequest request)
        {
            if (request == null)
            {
                return(Failure("请求命令无效"));
            }
            if (string.IsNullOrEmpty(request.Mac))
            {
                return(Failure("必须指定mac地址"));
            }
            try
            {
                _logger.Info(JsonConvert.SerializeObject(request));
                var cabinet = Cabinet.GetByMac(request.Mac);
                if (cabinet == null)
                {
                    return(Failure("未找到指定保险柜"));
                }

                #region 心跳
                if (request.OperatorType == (int)OperatorTypeEnum.心跳)
                {
                    if (HeartDictionary.ContainsKey(cabinet.ID))
                    {
                        HeartDictionary[cabinet.ID] = DateTime.Now;
                    }
                    else
                    {
                        HeartDictionary.TryAdd(cabinet.ID, DateTime.Now);
                    }
                    CommandResponse res  = null;
                    int             type = -1;
                    lock (CommandDictionaryLock)
                    {
                        var item = CommandDictionary.Find(m => m.ID == cabinet.ID);
                        if (item != null)
                        {
                            res = item;
                            CommandDictionary.Remove(item);
                        }
                    }

                    if (res != null)
                    {
                        type = res.OperationType;
                        var msg = "AuthCode-" + res.AuthCode;

                        if (type == (int)OperatorTypeEnum.允许开门)
                        {
                            //cabinet.Status = (int)OperatorTypeEnum.允许开门;
                            //cabinet.Alarm = "";
                            //cabinet.IsOpen = true;
                            //Cabinet.Update(cabinet);
                            return(Success1("允许开门", msg));
                        }
                        else if (type == (int)OperatorTypeEnum.拒绝开门)
                        {
                            return(Success1("拒绝开门", msg));
                        }
                        else if (type == (int)OperatorTypeEnum.拒绝语音)
                        {
                            return(Success1("拒绝语音", msg));
                        }
                        else if (type == (int)OperatorTypeEnum.接受语音)
                        {
                            return(Success1("接受语音", msg));
                        }
                        else if (type == (int)OperatorTypeEnum.允许终端修改信息)
                        {
                            return(Success1("允许终端修改信息", msg));
                        }
                        else if (type == (int)OperatorTypeEnum.拒绝终端修改信息)
                        {
                            return(Success1("拒绝终端修改信息", msg));
                        }
                        else if (type == (int)OperatorTypeEnum.允许人员注册)
                        {
                            return(Success1("允许人员注册", msg));
                        }
                        else if (type == (int)OperatorTypeEnum.拒绝人员注册)
                        {
                            return(Success1("拒绝人员注册", msg));
                        }
                    }
                    return(Success());
                }
                #endregion

                #region 增加请求日志
                var log = new CabinetLog
                {
                    CabinetID     = cabinet.ID,
                    DepartmentID  = cabinet.DepartmentID,
                    OperatorName  = request.UserName,
                    OperateTime   = DateTime.Now,
                    OperationType = request.OperatorType,
                    CreateTime    = DateTime.Now,
                    CabinetIP     = GetIP(),
                    EventContent  = JsonConvert.SerializeObject(request),
                    Remark        = request.AuthCode
                };
                CabinetLog.Add(log);

                #endregion
                #region 开门申请
                if (request.OperatorType == (int)OperatorTypeEnum.申请开门)
                {
                    if (!(cabinet.NeedConfirm ?? true))
                    {
                        lock (CommandDictionaryLock)
                        {
                            CommandDictionary.Add(new CommandResponse {
                                OperationType = (int)OperatorTypeEnum.允许开门, AuthCode = request.AuthCode, ID = cabinet.ID, CreateTime = DateTime.Now
                            });
                        }
                        request.OperatorType = (int)OperatorTypeEnum.允许开门;
                        request.EventContent = "不需要审核自动开门";
                        AddLog(cabinet, request);
                        return(Success());
                    }
                    #region 密码开门
                    else if (request.Method == 0)
                    {
                        if (string.IsNullOrEmpty(request.Password))
                        {
                            CabinetLog.Add(new CabinetLog
                            {
                                CabinetID     = cabinet.ID,
                                DepartmentID  = cabinet.DepartmentID,
                                OperatorName  = request.UserName,
                                OperateTime   = DateTime.Now,
                                OperationType = (int)OperatorTypeEnum.密码错误,
                                CreateTime    = DateTime.Now,
                                CabinetIP     = GetIP(),
                                EventContent  = JsonConvert.SerializeObject(request)
                            });
                            _loggerError.Error("密码不得为空");
                            return(Failure("密码不得为空"));
                        }
                        var first  = string.IsNullOrEmpty(cabinet.FirstContactPassword) ? "" : AESAlgorithm.Decrypto(cabinet.FirstContactPassword);
                        var second = string.IsNullOrEmpty(cabinet.SecondContactPassword) ? "" : AESAlgorithm.Decrypto(cabinet.SecondContactPassword);
                        if (first != request.Password && second != request.Password)
                        {
                            CabinetLog.Add(new CabinetLog
                            {
                                CabinetID     = cabinet.ID,
                                DepartmentID  = cabinet.DepartmentID,
                                OperatorName  = request.UserName,
                                OperateTime   = DateTime.Now,
                                OperationType = (int)OperatorTypeEnum.密码错误,
                                CreateTime    = DateTime.Now,
                                CabinetIP     = GetIP(),
                                EventContent  = JsonConvert.SerializeObject(request)
                            });
                            _loggerError.Error("密码错误 " + request.Password + "  [" + cabinet.FirstContactPassword + ":" + first + "]  [" + cabinet.SecondContactPassword + ":" + second + "]");
                            return(Failure("密码错误"));
                        }
                    }
                    #endregion

                    #region 加入前台提醒
                    lock (logLock)
                    {
                        msgID++;
                        log.ID = msgID;
                        CabinetLogQueue.Add(log);
                    }
                    return(Success("等待审核"));

                    #endregion
                }

                #endregion

                #region 语音申请||终端修改信息||申请人员注册
                else if (request.OperatorType == (int)OperatorTypeEnum.请求语音 || request.OperatorType == (int)OperatorTypeEnum.终端修改信息 || request.OperatorType == (int)OperatorTypeEnum.申请人员注册)
                {
                    lock (logLock)
                    {
                        msgID++;
                        log.ID = msgID;
                        CabinetLogQueue.Add(log);
                    }
                    return(Success("等待审核"));
                }
                #endregion


                #region 关门确认
                else if (request.OperatorType == (int)OperatorTypeEnum.正常关门)
                {
                    if (DateTime.Now.Hour < 9 || DateTime.Now.Hour > 17 || DateTime.Now.DayOfWeek == DayOfWeek.Sunday || DateTime.Now.DayOfWeek == DayOfWeek.Saturday)
                    {
                        cabinet.Status = (int)OperatorTypeEnum.非工作时间关门;
                        cabinet.Alarm  = OperatorTypeEnum.非工作时间关门.ToString();
                    }
                    else
                    {
                        cabinet.Status = (int)OperatorTypeEnum.正常关门;
                        cabinet.Alarm  = "";
                    }
                    cabinet.IsOpen = false;
                    Cabinet.Update(cabinet);
                }
                #endregion

                #region 开门确认
                else if (request.OperatorType == (int)OperatorTypeEnum.正常开门)
                {
                    if (DateTime.Now.Hour < 9 || DateTime.Now.Hour > 17 || DateTime.Now.DayOfWeek == DayOfWeek.Sunday || DateTime.Now.DayOfWeek == DayOfWeek.Saturday)
                    {
                        cabinet.Status = (int)OperatorTypeEnum.非工作时间开门;
                        cabinet.Alarm  = OperatorTypeEnum.非工作时间开门.ToString();
                    }
                    else
                    {
                        cabinet.Status = (int)OperatorTypeEnum.正常开门;
                        cabinet.Alarm  = "";
                    }
                    cabinet.IsOpen = true;
                    Cabinet.Update(cabinet);
                }
                #endregion

                #region 应急钥匙开门
                else if (request.OperatorType == (int)OperatorTypeEnum.应急钥匙开门)
                {
                    cabinet.Status = (int)OperatorTypeEnum.应急钥匙开门;
                    cabinet.Alarm  = OperatorTypeEnum.应急钥匙开门.ToString();
                    cabinet.IsOpen = true;
                    Cabinet.Update(cabinet);
                }
                #endregion

                #region 其他请求
                else
                {
                    cabinet.Status = request.OperatorType;
                    cabinet.Alarm  = Enum.GetName(typeof(OperatorTypeEnum), cabinet.Status);
                    Cabinet.Update(cabinet);
                }
                #endregion

                lock (logLock)
                {
                    msgID++;
                    log.ID = msgID;
                    CabinetLogQueue.Add(log);
                }
                return(Success());
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                return(Failure("上报失败"));
            }
        }