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 })); } }
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 })); } }
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; })); }