示例#1
0
        public async Task <ActionResult> SendVolice(string terminalCode, string voliceMsg)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(terminalCode) || string.IsNullOrWhiteSpace(voliceMsg))
                {
                    return(Json(new OperationResult()
                    {
                        Message = PromptInformation.UnknownError
                    }));
                }

                #region 调用WCF服务进行操作
                //查询终端对应的WCF地址
                var temp = ServerManagerBLL.GetTerminalServerInfo(terminalCode);
                if (temp.DataResult == null)
                {
                    return(Json(new OperationResult()
                    {
                        Message = PromptInformation.DBError
                    }));
                }
                var serverInfo = temp.DataResult;
                if (string.IsNullOrWhiteSpace(serverInfo.WCFAddress))
                {
                    return(Json(new OperationResult()
                    {
                        Message = PromptInformation.TerminalSetting_WCFError
                    }));
                }
                //调用服务下发声音
                OperationResultGeneralRep result = null;
                var realMessageText = System.Web.HttpUtility.HtmlDecode(voliceMsg.Trim());
                using (var client = base.GetTerminalOperationClient(serverInfo.WCFAddress))
                {
                    result = await client.SendTextInfoAsync(terminalCode, new TextInformationData()
                    {
                        Content             = realMessageText,
                        TextInformationFlag = TextInformationFlag.紧急 | TextInformationFlag.终端TTS播读
                    });
                }
                #endregion

                bool   success = false;
                string msg     = "{0}";
                if (result.State)//操作成功,看终端应答
                {
                    #region 操作成功
                    switch (result.ResultData.Value.Result)
                    {
                    case Asiatek.TMS.TerminalOperation.TerminalGeneralRepResult.成功或确认:    //需要更新
                        msg = string.Format(msg, PromptInformation.OperationSuccess);
                        break;

                    case Asiatek.TMS.TerminalOperation.TerminalGeneralRepResult.失败:
                        msg = string.Format(msg, PromptInformation.OperationFailure);
                        break;

                    case Asiatek.TMS.TerminalOperation.TerminalGeneralRepResult.消息有误:
                        msg = string.Format(msg, PromptInformation.MessageWrong);
                        break;

                    case Asiatek.TMS.TerminalOperation.TerminalGeneralRepResult.支持:
                        msg = string.Format(msg, PromptInformation.NotSupport);
                        break;
                    }
                    #endregion
                }
                else//操作失败
                {
                    #region 操作失败
                    switch (result.Code)
                    {
                    case Asiatek.TMS.TerminalOperation.OperationResultCode.终端号格式有误:
                        msg = string.Format(msg, PromptInformation.TerminalCodeFormatError);
                        break;

                    case Asiatek.TMS.TerminalOperation.OperationResultCode.终端号不存在:
                        msg = string.Format(msg, PromptInformation.TerminalCodeNotExist);
                        break;

                    case Asiatek.TMS.TerminalOperation.OperationResultCode.未知错误:
                        msg = string.Format(msg, PromptInformation.UnknownError);
                        break;

                    case Asiatek.TMS.TerminalOperation.OperationResultCode.终端离线:
                        msg = string.Format(msg, PromptInformation.TerminalIsOffline);
                        break;

                    case Asiatek.TMS.TerminalOperation.OperationResultCode.终端通讯异常:
                        msg = string.Format(msg, PromptInformation.CommunicationError);
                        break;

                    case Asiatek.TMS.TerminalOperation.OperationResultCode.等待应答超时:    //需要更新
                        msg = string.Format(msg, PromptInformation.Timeout);
                        break;

                    default:
                        msg = string.Format(msg, PromptInformation.UnknownError);
                        break;
                    }
                    #endregion
                }
                return(Json(new OperationResult()
                {
                    Success = success, Message = msg
                }));
            }
            catch
            {
                return(Json(new OperationResult()
                {
                    Success = false, Message = PromptInformation.RemotingError
                }));
            }
        }
示例#2
0
        public async Task <ActionResult> DealEmergencyAlarm(long id, string terminalCode, string dealInfo)
        {
            try
            {
                #region 调用WCF服务进行操作
                //查询终端对应的WCF地址
                var temp = ServerManagerBLL.GetTerminalServerInfo(terminalCode);
                if (temp.DataResult == null)
                {
                    return(Json(new OperationResult()
                    {
                        Message = PromptInformation.DBError
                    }));
                }
                var serverInfo = temp.DataResult;
                //调用服务确认紧急报警
                OperationResultGeneralRep result = null;
                using (var client = base.GetTerminalOperationClient(serverInfo.WCFAddress))
                {
                    //使用终端号执行人工确认报警消息方法
                    result = await client.ConfirmAlarmAsync(terminalCode, new TerminalOperation.ManualConfirmAlarmData()
                    {
                        ManualConfirmAlarmType = TerminalOperation.ManualConfirmAlarmType.确认紧急报警,
                        SerialNumber           = 0//在808协议中流水号0相当于确认所有相同类型报警
                    });
                }
                #endregion

                bool   success    = false;
                bool   needUpdate = false;
                string msg        = "{0}";

                //根据结果更新数据库
                //只有成功和超时需要更新处理记录
                if (result.State)//操作成功,看终端应答
                {
                    #region 操作成功
                    switch (result.ResultData.Value.Result)
                    {
                    case Asiatek.TMS.TerminalOperation.TerminalGeneralRepResult.成功或确认:    //需要更新
                        msg        = string.Format(msg, PromptInformation.OperationSuccess);
                        needUpdate = success = true;
                        break;

                    case Asiatek.TMS.TerminalOperation.TerminalGeneralRepResult.失败:
                        msg = string.Format(msg, PromptInformation.OperationFailure);
                        break;

                    case Asiatek.TMS.TerminalOperation.TerminalGeneralRepResult.消息有误:
                        msg = string.Format(msg, PromptInformation.MessageWrong);
                        break;

                    case Asiatek.TMS.TerminalOperation.TerminalGeneralRepResult.支持:
                        msg = string.Format(msg, PromptInformation.NotSupport);
                        break;
                    }
                    #endregion
                }
                else//操作失败
                {
                    #region 操作失败
                    switch (result.Code)
                    {
                    case Asiatek.TMS.TerminalOperation.OperationResultCode.终端号格式有误:
                        msg = string.Format(msg, PromptInformation.TerminalCodeFormatError);
                        break;

                    case Asiatek.TMS.TerminalOperation.OperationResultCode.终端号不存在:
                        msg = string.Format(msg, PromptInformation.TerminalCodeNotExist);
                        break;

                    case Asiatek.TMS.TerminalOperation.OperationResultCode.未知错误:
                        msg = string.Format(msg, PromptInformation.UnknownError);
                        break;

                    case Asiatek.TMS.TerminalOperation.OperationResultCode.终端离线:
                        msg = string.Format(msg, PromptInformation.TerminalIsOffline);
                        break;

                    case Asiatek.TMS.TerminalOperation.OperationResultCode.终端通讯异常:
                        msg = string.Format(msg, PromptInformation.CommunicationError);
                        break;

                    case Asiatek.TMS.TerminalOperation.OperationResultCode.等待应答超时:    //需要更新
                        msg        = string.Format(msg, PromptInformation.Timeout);
                        needUpdate = true;
                        break;

                    default:
                        msg = string.Format(msg, PromptInformation.UnknownError);
                        break;
                    }
                    #endregion
                }

                #region 更新处理记录
                if (needUpdate)//更新异常记录的处理信息
                {
                    ExceptionBLL.UpdateEmergencyAlarm(new UpdateEmergencyAlarmModel()
                    {
                        ID               = id,
                        DealUserID       = base.UserIDForLog,
                        DealInfo         = dealInfo,
                        LinkedServerName = serverInfo.LinkedServerName,
                        Timeout          = !success
                    });
                }
                #endregion

                return(Json(new OperationResult()
                {
                    Success = success, Message = msg
                }));
            }
            catch
            {
                return(Json(new OperationResult()
                {
                    Success = false, Message = PromptInformation.RemotingError
                }));
            }
        }
示例#3
0
        private Task <OperationResult> InternalAddRegionSettings(
            RegionProperty RegionProperty,
            string PlateNum,
            string TerminalCode,
            List <MapRegionsEditModel> RegionModel,
            TerminalOperationClient client
            )
        {
            return(Task <OperationResult> .Run(() =>
            {
                dynamic settingData = new ExpandoObject();
                settingData.OperationType = RegionSettingType.追加区域;
                settingData.RegionProperty = RegionProperty;
                settingData.Vehicles = new string[] { PlateNum };
                settingData.RegionID = RegionModel[0].ID;

                var exists = TerminalSettingsBLL.RegionVehicleRelationExists(PlateNum, TerminalCode, RegionModel[0].ID);
                if (exists.Item1)
                {
                    var r = new OperationResult()
                    {
                        Success = false,
                        Message = "数据库中已存在与指定车辆、区域对应的设置记录。"
                    };
                    TerminalSettingsBLL.InsertTerminalOperationsLog(
                        base.CurrentUserID,
                        TerminalSettingType.RegionSettings_Add,
                        PlateNum,
                        TerminalCode,
                        false,
                        JsonConvert.SerializeObject(settingData),
                        r.Message,
                        GetRemoteAddress()
                        );
                    return r;
                }

                StringBuilder start = new StringBuilder(), end = new StringBuilder();
                start.Append(RegionModel[0].StartDate == null ? "1601.01.01" : RegionModel[0].StartDate);
                start.Append(" ");
                start.Append(RegionModel[0].StartTime == null ? "00:00:00.000" : RegionModel[0].StartTime);

                end.Append(RegionModel[0].EndDate == null ? "1601.01.01" : RegionModel[0].EndDate);
                end.Append(" ");
                end.Append(RegionModel[0].EndTime == null ? "00:00:00.000" : RegionModel[0].EndTime);

                OperationResultGeneralRep response = null;
                switch (RegionModel[0].RegionsType)
                {
                case 1:        //圆形
                    response = client.SetCircularRegion(TerminalCode, new CircularRegionSettingData()
                    {
                        RegionSettingType = RegionSettingType.追加区域,
                        CircularRegionItems = new CircularRegionItem[]
                        {
                            new CircularRegionItem()
                            {
                                RegionID = (uint)RegionModel[0].ID,
                                CentralPointLatitude = RegionModel[0].CenterLatitude,
                                CentralPointLongitude = RegionModel[0].CenterLongitude,
                                Radius = Convert.ToUInt32(RegionModel[0].Radius),
                                MaxSpeed = Convert.ToUInt16(RegionModel[0].SpeedLimit),
                                OverSpeedDuration = (byte)RegionModel[0].OverSpeedDuration,
                                IsCyclical = RegionModel[0].Periodic,
                                StartDateTime = DateTime.Parse(start.ToString()),
                                EndDateTime = DateTime.Parse(end.ToString()),
                                RegionProperty = (RegionProperty)RegionProperty,
                            }
                        }
                    });
                    break;

                case 2:        //矩形
                    response = client.SetRectangularRegion(TerminalCode, new RectangularRegionSettingData()
                    {
                        RegionSettingType = RegionSettingType.追加区域,
                        RectangularRegionItems = new RectangularRegionItem[]
                        {
                            new RectangularRegionItem()
                            {
                                RegionID = (uint)RegionModel[0].ID,
                                TopLeftPointLatitude = RegionModel[0].LeftUpperLatitude,
                                TopLeftPointLongitude = RegionModel[0].LeftUpperLongitude,
                                BottomRightPointLatitude = RegionModel[0].RightLowerLatitude,
                                BottomRightPointLongitude = RegionModel[0].RightLowerLongitude,
                                MaxSpeed = Convert.ToUInt16(RegionModel[0].SpeedLimit),
                                OverSpeedDuration = (byte)RegionModel[0].OverSpeedDuration,
                                IsCyclical = RegionModel[0].Periodic,
                                StartDateTime = DateTime.Parse(start.ToString()),
                                EndDateTime = DateTime.Parse(end.ToString()),
                                RegionProperty = (RegionProperty)RegionProperty,
                            }
                        }
                    });
                    break;

                case 3:        //多边形
                    break;

                default:
                    break;
                }

                OperationResult resultElement = null;

                if (!response.State)
                {
                    //车机端操作失败
                    resultElement = new OperationResult()
                    {
                        Success = false,
                        Message = response.Message
                    };
                    TerminalSettingsBLL.InsertTerminalOperationsLog(
                        base.CurrentUserID,
                        TerminalSettingType.RegionSettings_Update,
                        PlateNum,
                        TerminalCode,
                        false,
                        JsonConvert.SerializeObject(settingData),
                        resultElement.Message,
                        GetRemoteAddress()
                        );
                }
                else
                {
                    bool success = TerminalSettingsBLL.AddRegionVehicleRelation(PlateNum, TerminalCode, RegionModel[0].ID, (ushort)RegionProperty);
                    resultElement = new OperationResult()
                    {
                        Success = success,
                        Message = success ? DisplayText.OperationSucceeded : "车机端更新操作成功完成,添加数据库记录出错。"
                    };
                    TerminalSettingsBLL.InsertTerminalOperationsLog(
                        base.CurrentUserID,
                        TerminalSettingType.RegionSettings_Update,
                        PlateNum,
                        TerminalCode,
                        success,
                        JsonConvert.SerializeObject(settingData),
                        resultElement.Message,
                        GetRemoteAddress()
                        );
                }
                return resultElement;
            }));
        }