public ActionResult LoadRegionVehicleTable(int RegionType, string[] Vehicles, int SearchPage) { var model = new SearchDataWithPagedDatas <int, MapRegionSettingModel>(); if (RegionType < 1 || RegionType > 3 || Vehicles == null || Vehicles.Length == 0 || SearchPage <= 0)//非法请求 { model.PagedDatas = new AsiatekPagedList <MapRegionSettingModel>( new List <MapRegionSettingModel>(), 1, 5, 5 ); return(PartialView("Regions_DataTable", model)); } ViewBag.SubView = "Regions"; ViewBag.SubViewData = null; ViewBag.TreeViewShowCheckBox = true; var PlaterNums = new List <string>(); var PlaterNumAndTerminalCodes = new List <Tuple <string, string> >(); foreach (var v in Vehicles) { // Vehicles当中的记录为 PlateNum#TerminalCode string[] PlateNumAndTerminalCode = v.Split('#'); PlaterNums.Add(PlateNumAndTerminalCode[0]); PlaterNumAndTerminalCodes.Add(new Tuple <string, string>(PlateNumAndTerminalCode[0], PlateNumAndTerminalCode[1])); } var data = TerminalSettingsBLL.QueryMapRegionSettingsByUserID(base.CurrentUserID, SearchPage, RegionType, PlaterNums.ToArray()); model.PagedDatas = new AsiatekPagedList <MapRegionSettingModel>(data.Item1, SearchPage, 5, (int)data.Item2); return(PartialView("Regions_DataTable", model)); }
public ActionResult LoadLogs(TerminalSetupLogs_QueryModel conditions, int?searchPage) { var model = new SearchDataWithPagedDatas <TerminalSetupLogs_QueryModel, TerminalSetupLogs_DataModel>(); model.SearchModel = conditions; if (searchPage == null) { searchPage = 1; } var result = TerminalSettingsBLL.QueryTerminalSetupLogs( conditions.CompanyName, conditions.PlateNumber, conditions.TerminalCode, conditions.SettingType, conditions.StartTime, conditions.EndTime, searchPage.Value ); model.PagedDatas = result.Item1.ToPagedList(searchPage.Value, 10, result.Item2); ViewBag.Settings = ""; return(PartialView("Logs_DataTable", model)); }
public async Task <ActionResult> SendRegionSettings(int LineProperty, string[] Vehicles, long LineID) { OperationResult valid = null; var line = TerminalSettingsBLL.GetLinesByLineID((int)LineID); if (Vehicles == null || Vehicles.Length == 0) { valid = new OperationResult() { Success = false, Message = "未指定设置的车辆。" } } ; else if (line == null || line.Count == 0) { valid = new OperationResult() { Success = false, Message = "数据库中未找到指定的路线。" } } ; if (valid != null) { dynamic settingData = new ExpandoObject(); settingData.LineProperty = LineProperty; settingData.Vehicles = Vehicles; settingData.LineID = LineID; TerminalSettingsBLL.InsertTerminalOperationsLog( base.CurrentUserID, TerminalSettingType.RouteSettings_Add, null, null, false, JsonConvert.SerializeObject(settingData), valid.Message, GetRemoteAddress() ); return(Json(new OperationResult[] { valid })); } var tasks = new Task <OperationResult> [Vehicles.Length]; for (int i = 0; i != Vehicles.Length; i++) { string[] PlateNumAndTerminalCode = Vehicles[i].Split('#'); string PlateNum = PlateNumAndTerminalCode[0]; string TerminalCode = PlateNumAndTerminalCode[1]; var client = new TerminalOperationClient(); tasks[i] = InternalSendLineSettings((LineProperty)LineProperty, PlateNum, TerminalCode, line, client); } var result = await Task.WhenAll <OperationResult>(tasks); return(Json(result)); }
/// <summary> /// 获取当前用户可以操作的所有指定类型的路线 /// </summary> /// <param name="RegionType">路线类型</param> /// <returns>Tuple(RegionID, RegionName)[]</returns> public ActionResult GetAllLines(int LineType) { var regions = TerminalSettingsBLL.GetAllLines(base.CurrentUserID, LineType); return(Json(new SelectResult <Tuple <long, string>[]>() { DataResult = regions }, JsonRequestBehavior.AllowGet)); }
public ActionResult UpdateTerminalSetting( [ModelBinder(typeof(BasicArrayBinder <string>))] string[] Vehicles, [ModelBinder(typeof(ObjectBinder <TerminalSettingsModel>))] TerminalSettingsModel Settings) { int userid = GetUserSession().UserId; var client = new TerminalOperationClient(); var objResult = new List <dynamic>();// 记录每次下发设置的返回结果 foreach (var v in Vehicles) { dynamic result = new ExpandoObject(); // Vehicles当中的记录为 PlateNum#TerminalCode string[] PlateNumAndTerminalCode = v.Split('#'); string PlateNum = PlateNumAndTerminalCode[0]; string TerminalCode = PlateNumAndTerminalCode[1]; var response = client.SetTerminalParas(TerminalCode, new TerminalParasSettingData() { ParaItems = new TerminalParasData() { 终端心跳发送间隔 = Settings.HeartbeatInterval, 位置汇报策略 = (LocationReportingStrategy)Settings.LocationReportPolicy, 位置汇报方案 = (LocationReportingProgram)Settings.LocationReportTrigger, 驾驶员未登录汇报时间间隔 = Settings.StateRepotrInterval_NotLoggedIn, 休眠时汇报时间间隔 = Settings.StateRepotrInterval_Sleep, 紧急报警时汇报时间间隔 = Settings.StateRepotrInterval_Urgent, 缺省时间汇报间隔 = Settings.StateRepotrInterval_General, 最高速度 = Settings.MaximumSpeed, 超速持续时间 = Settings.OverspeedCheckTime, 超速报警预警差值 = Settings.DifferenceOfOverspeedValues, 连续驾驶时间门限 = Settings.MaximumDrivingTime, 当天累计驾驶时间门限 = Settings.MaximumDrivingTimeToday, 疲劳驾驶预警差值 = Settings.DifferenceOfFatigueDrivingTime, 最小休息时间 = Settings.MinimumBreakTime, 最长停车时间 = Settings.MaximumStoppingTime, 车辆里程表读数 = Settings.TotalODO, 监听电话号码 = new string[] { Settings.TelphoneNO } } }); // 记录日志 TerminalSettingsBLL.InsertTerminalOperationsLog( userid, TerminalSettingType.TerminalSetup_Update, PlateNum, TerminalCode, response.State, JsonConvert.SerializeObject(Settings), null, GetRemoteAddress() ); //保存下发结果以便后面转换为json返回给页面显示 result.state = response.State; result.message = response.Message; objResult.Add(result); } return(Content(JsonConvert.SerializeObject(objResult))); }
public ActionResult LogsDetail(long id) { var result = TerminalSettingsBLL.GetTerminalSettingLogDetailByID(id); if (result.DataResult == null) { return(Content(result.Message)); } return(PartialView("LogsDetail", result.DataResult)); }
private Task <OperationResult> InternalDeleteLineVehicleRelation(int RelationID, TerminalOperationClient client) { return(Task <OperationResult> .Run(() => { var LineInfo = TerminalSettingsBLL.GetLineInformation(base.CurrentUserID, RelationID); if (LineInfo.Item1) { string PlateNum = LineInfo.Item2; string TerminalCode = LineInfo.Item3; int LineType = LineInfo.Item4; long LineID = LineInfo.Item5; var response = client.DeleteLine(TerminalCode, new RegionLineDeletionData() { IDs = new uint[] { (uint)LineID } }); OperationResult resultElement = null; if (!response.State) { resultElement = new OperationResult() { Success = false, Message = response.Message }; } else { bool success = TerminalSettingsBLL.DeleteLineVehicleRelation(base.CurrentUserID, RelationID); resultElement = new OperationResult() { Success = success, Message = success ? DisplayText.OperationSucceeded : "车机端删除操作成功完成,删除数据库记录出错。" }; } TerminalSettingsBLL.InsertTerminalOperationsLog( base.CurrentUserID, TerminalSettingType.RouteSettings_Delete, PlateNum, TerminalCode, false, RelationID.ToString(), resultElement.Message, GetRemoteAddress() ); return resultElement; } else { string RecordNotExists = "数据库中找不到对应的设置记录。"; TerminalSettingsBLL.InsertTerminalOperationsLog( base.CurrentUserID, TerminalSettingType.RouteSettings_Delete, null, null, false, RelationID.ToString(), RecordNotExists, GetRemoteAddress() ); return new OperationResult() { Success = false, Message = RecordNotExists }; } })); }
public ActionResult QueryTerminalFlags( string Vehicle, int[] Settings ) { int userid = GetUserSession().UserId; var client = new TerminalOperationClient(); // Vehicle当中的记录为 PlateNum#TerminalCode string[] PlateNumAndTerminalCode = Vehicle.Split('#'); string PlateNum = PlateNumAndTerminalCode[0]; string TerminalCode = PlateNumAndTerminalCode[1]; TerminalParaID[] ParamIDs = new TerminalParaID[Settings.Length]; for (int i = 0; i != Settings.Length; i++) { ParamIDs[i] = (TerminalParaID)Settings[i]; } var response = client.QuerySpecifiedTerminalParas(TerminalCode, new QuerySpecifiedTerminalParasData() { TerminalParaIDs = ParamIDs }); var result = new TerminalSettingsModel() { HeartbeatInterval = response.ResultData.ParaItems.终端心跳发送间隔, LocationReportPolicy = (int)response.ResultData.ParaItems.位置汇报策略, LocationReportTrigger = (int)response.ResultData.ParaItems.位置汇报方案, StateRepotrInterval_NotLoggedIn = response.ResultData.ParaItems.驾驶员未登录汇报时间间隔, StateRepotrInterval_Sleep = response.ResultData.ParaItems.休眠时汇报时间间隔, StateRepotrInterval_Urgent = response.ResultData.ParaItems.紧急报警时汇报时间间隔, StateRepotrInterval_General = response.ResultData.ParaItems.缺省时间汇报间隔, MaximumSpeed = response.ResultData.ParaItems.最高速度, OverspeedCheckTime = response.ResultData.ParaItems.超速持续时间, DifferenceOfOverspeedValues = response.ResultData.ParaItems.超速报警预警差值, MaximumDrivingTime = response.ResultData.ParaItems.连续驾驶时间门限, MaximumDrivingTimeToday = response.ResultData.ParaItems.当天累计驾驶时间门限, DifferenceOfFatigueDrivingTime = response.ResultData.ParaItems.疲劳驾驶预警差值, MinimumBreakTime = response.ResultData.ParaItems.最小休息时间, MaximumStoppingTime = response.ResultData.ParaItems.最长停车时间, TotalODO = response.ResultData.ParaItems.车辆里程表读数, TelphoneNO = response.ResultData.ParaItems.监听电话号码.FirstOrDefault() }; TerminalSettingsBLL.InsertTerminalOperationsLog( userid, TerminalSettingType.TerminalSetup_Query, PlateNum, TerminalCode, response.State, JsonConvert.SerializeObject(new { Vehicle = Vehicle, Settings = Settings }), null, GetRemoteAddress() ); return(Content(JsonConvert.SerializeObject(result))); }
public ActionResult QueryLogs(TerminalSettingLogSearchModel model, int searchPage) { SearchDataWithPagedDatas <TerminalSettingLogSearchModel, TerminalSettingLogListModel> result = new SearchDataWithPagedDatas <TerminalSettingLogSearchModel, TerminalSettingLogListModel>(); // 根据查询条件查询数据 若没有符合条件的数据 则显示 “查无数据!”的提示 ViewBag.IsShow = 1; result.SearchModel = model; result.PagedDatas = TerminalSettingsBLL.GetPagedTerminalSettingLog(model, searchPage, this.PageSize); return(PartialView("LogsPagedGrid", result)); }
private List <TerminalWCfModel> GetWcfAddress(List <VehiclesModel> listVehicles) { List <string> listTerminal = new List <string>(); foreach (var item in listVehicles) { listTerminal.Add(item.TerminalCode); } // 根据终端号获取终端所属服务器的wcf链接地址 var listWCF = TerminalSettingsBLL.GetTerminalOfWCFAddress(listTerminal); return(listWCF); }
public ActionResult UpdatePhoneBookSetting( [ModelBinder(typeof(BasicArrayBinder <string>))] string[] Vehicles, [ModelBinder(typeof(ObjectBinder <PhoneBookSettingModel>))] PhoneBookSettingModel Settings ) { int userid = GetUserSession().UserId; var client = new TerminalOperationClient(); var objResult = new List <dynamic>();// 记录每次下发设置的返回结果 foreach (var v in Vehicles) { dynamic result = new ExpandoObject(); // Vehicles当中的记录为 PlateNum#TerminalCode string[] PlateNumAndTerminalCode = v.Split('#'); string PlateNum = PlateNumAndTerminalCode[0]; string TerminalCode = PlateNumAndTerminalCode[1]; var response = client.SetTelphone(TerminalCode, new TelphoneBookSettingData() { TelphoneBookSettingType = (TelphoneBookSettingType)Settings.SettingType, ContactItems = new ContactItem[] { new ContactItem() { Contact = Settings.Contact, ContactItemFlag = (ContactItemFlag)Settings.CallType, PhoneNumber = Settings.Tel } } }); // 记录日志 TerminalSettingsBLL.InsertTerminalOperationsLog( userid, TerminalSettingType.TextMessage, PlateNum, TerminalCode, response.State, JsonConvert.SerializeObject(Settings), null, GetRemoteAddress() ); //保存下发结果以便后面转换为json返回给页面显示 result.state = response.State; result.message = response.Message; objResult.Add(result); } return(Content(JsonConvert.SerializeObject(objResult))); }
/// <summary> /// 获取当前用户可以操作的所有指定类型的区域 /// </summary> /// <param name="RegionType">区域类型</param> /// <returns>Tuple(RegionID, RegionName)[]</returns> public ActionResult GetAllRegions(int RegionType) { if (RegionType < 1 || RegionType > 3) { return(Json(new SelectResult <Tuple <long, string>[]>() { Message = "非法的区域类型。" }, JsonRequestBehavior.AllowGet)); } var regions = TerminalSettingsBLL.GetAllRegions(base.CurrentUserID, RegionType); return(Json(new SelectResult <Tuple <long, string>[]>() { DataResult = regions }, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 根据条件获取当前用户能查看的所有车辆,参数的两个条件由 AND 组合 /// </summary> /// <param name="strucName">使用单位</param> /// <param name="plateNumOrTerminalCode">车牌号或终端号</param> private StrucVehiclesListModel[] InternalGetVehiclesListByCurrentUserID(string strucName, string plateNumOrTerminalCode) { var map = new Dictionary <string, List <KeyValuePair <string, string> > >(); List <VehiclesTerminalModel> list; if (base.VehicleViewMode) { list = TerminalSettingsBLL.GetDefaultVehiclesList(base.CurrentStrucID, strucName, plateNumOrTerminalCode); } else { list = TerminalSettingsBLL.GetVehiclesList(base.CurrentUserID, strucName, plateNumOrTerminalCode); } if (list != null && list.Count != 0) { foreach (var item in list) { var vehicle = new KeyValuePair <string, string>(item.PlateNum, item.TerminalCode); string StrucName = item.StrucName; List <KeyValuePair <string, string> > vehiclesList; if (!map.ContainsKey(StrucName)) { vehiclesList = new List <KeyValuePair <string, string> >(); map.Add(StrucName, vehiclesList); } else { vehiclesList = map[StrucName]; } vehiclesList.Add(vehicle); } } var ret = new StrucVehiclesListModel[map.Values.Count]; var Keys = map.Keys.ToArray(); for (int i = 0; i != Keys.Length; i++) { ret[i] = new StrucVehiclesListModel(); ret[i].CompanyName = Keys[i]; ret[i].Vehicles = map[Keys[i]].ToArray(); } return(ret); }
public ActionResult SendTextMessage( [ModelBinder(typeof(BasicArrayBinder <string>))] string[] Vehicles, [ModelBinder(typeof(ObjectBinder <TextMessageModel>))] TextMessageModel Settings) { int userid = GetUserSession().UserId; var client = new TerminalOperationClient(); var objResult = new List <dynamic>();// 记录每次下发设置的返回结果 foreach (var v in Vehicles) { dynamic result = new ExpandoObject(); // Vehicles当中的记录为 PlateNum#TerminalCode string[] PlateNumAndTerminalCode = v.Split('#'); string PlateNum = PlateNumAndTerminalCode[0]; string TerminalCode = PlateNumAndTerminalCode[1]; var response = client.SendTextInfo(TerminalCode, new TextInformationData() { Content = Settings.MessageText, TextInformationFlag = (TextInformationFlag)Settings.Flags }); // 记录日志 TerminalSettingsBLL.InsertTerminalOperationsLog( userid, TerminalSettingType.TextMessage, PlateNum, TerminalCode, response.State, JsonConvert.SerializeObject(Settings), null, GetRemoteAddress() ); //保存下发结果以便后面转换为json返回给页面显示 result.state = response.State; result.message = response.Message; objResult.Add(result); } return(Content(JsonConvert.SerializeObject(objResult))); }
/// <summary> /// 根据条件获取当前用户能查看的所有车辆,参数的两个条件由 AND 组合 /// </summary> /// <param name="CompanyName">公司名称</param> /// <param name="PlateNumOrTerminalCode">车牌号或终端号</param> private StrucVehiclesListModel[] InternalGetVehiclesListByCurrentUserID(string CompanyName, string PlateNumOrTerminalCode) { int userid = GetUserSession().UserId; var map = new Dictionary <string, List <KeyValuePair <string, string> > >(); var dt = TerminalSettingsBLL.GetVehicleList(userid, CompanyName, PlateNumOrTerminalCode); foreach (DataRow dr in dt.Rows) { var vehicle = new KeyValuePair <string, string>((string)dr["PlateNum"], (string)dr["TerminalCode"]); string StrucName = (string)dr["StrucName"]; List <KeyValuePair <string, string> > vehiclesList; if (!map.ContainsKey(StrucName)) { vehiclesList = new List <KeyValuePair <string, string> >(); map.Add(StrucName, vehiclesList); } else { vehiclesList = map[StrucName]; } vehiclesList.Add(vehicle); } var ret = new StrucVehiclesListModel[map.Values.Count]; var Keys = map.Keys.ToArray(); for (int i = 0; i != Keys.Length; i++) { ret[i] = new StrucVehiclesListModel(); ret[i].CompanyName = Keys[i]; ret[i].Vehicles = map[Keys[i]].ToArray(); } return(ret); }
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; })); }
/// <summary> /// 查询指定路线数据 /// </summary> /// <param name="RegionID">路线ID</param> /// <returns></returns> public ActionResult GetLineData(int LineID) { var lines = TerminalSettingsBLL.GetLinesByLineID(LineID); return(Json(lines, JsonRequestBehavior.AllowGet)); }
public async Task <ActionResult> SendRegionSettings(int OperationType, int RegionProperty, string[] Vehicles, long RegionID) { OperationResult valid = null; var region = TerminalSettingsBLL.GetRegionsByRegionID((int)RegionID); TerminalSettingType SettingType; if (OperationType == (int)RegionSettingType.更新区域) { SettingType = TerminalSettingType.RegionSettings_Update; } else if (OperationType == (int)RegionSettingType.追加区域) { SettingType = TerminalSettingType.RegionSettings_Add; } else { SettingType = TerminalSettingType.None; valid = new OperationResult() { Success = false, Message = "区域设置暂不支持除 更新、追加 之外的其它操作。" }; } if (Vehicles == null || Vehicles.Length == 0) { valid = new OperationResult() { Success = false, Message = "未指定设置的车辆。" } } ; else if (region == null || region.Count == 0) { valid = new OperationResult() { Success = false, Message = "数据库中未找到指定的区域。" } } ; else if (region[0].RegionsType < 1 || region[0].RegionsType > 3) { valid = new OperationResult() { Success = false, Message = "指定的区域类型不受支持。" } } ; else if (OperationType == (int)RegionSettingType.更新区域 && region[0].RegionsType == 3) { return(Json(new OperationResult[] { new OperationResult() { Success = false, Message = "多边形区域不支持更新操作。" } })); } if (valid != null) { dynamic settingData = new ExpandoObject(); settingData.OperationType = OperationType; settingData.RegionProperty = RegionProperty; settingData.Vehicles = Vehicles; settingData.RegionID = RegionID; TerminalSettingsBLL.InsertTerminalOperationsLog( base.CurrentUserID, SettingType, null, null, false, JsonConvert.SerializeObject(settingData), valid.Message, GetRemoteAddress() ); return(Json(new OperationResult[] { valid })); } var tasks = new Task <OperationResult> [Vehicles.Length]; for (int i = 0; i != Vehicles.Length; i++) { string[] PlateNumAndTerminalCode = Vehicles[i].Split('#'); string PlateNum = PlateNumAndTerminalCode[0]; string TerminalCode = PlateNumAndTerminalCode[1]; var client = new TerminalOperationClient(); if (OperationType == (int)RegionSettingType.更新区域) { tasks[i] = InternalUpdateRegionSettings((RegionProperty)RegionProperty, PlateNum, TerminalCode, region, client); } else if (OperationType == (int)RegionSettingType.追加区域) { tasks[i] = InternalAddRegionSettings((RegionProperty)RegionProperty, PlateNum, TerminalCode, region, client); } } var result = await Task.WhenAll <OperationResult>(tasks); return(Json(result)); }
/// <summary> /// 查询指定区域数据 /// </summary> /// <param name="RegionID">区域ID</param> /// <returns>MapRegionsEditModel[]</returns> public ActionResult GetRegionData(int RegionID) { var regions = TerminalSettingsBLL.GetRegionsByRegionID(RegionID); return(Json(regions, JsonRequestBehavior.AllowGet)); }
private Task <OperationResult> InternalDeleteRegionVehicleRelation(int RelationID, TerminalOperationClient client) { return(Task <OperationResult> .Run(() => { var RegionInfo = TerminalSettingsBLL.GetRegionInformation(base.CurrentUserID, RelationID); if (RegionInfo.Item1) { string PlateNum = RegionInfo.Item2; string TerminalCode = RegionInfo.Item3; int RegionType = RegionInfo.Item4; long RegionID = RegionInfo.Item5; OperationResultGeneralRep response; switch (RegionType) { case 1: response = client.DeleteCircularRegion(TerminalCode, new RegionLineDeletionData() { IDs = new uint[] { (uint)RegionID } }); break; case 2: response = client.DeleteRectangularRegion(TerminalCode, new RegionLineDeletionData() { IDs = new uint[] { (uint)RegionID } }); break; case 3: response = client.DeletePolygonRegion(TerminalCode, new RegionLineDeletionData() { IDs = new uint[] { (uint)RegionID } }); break; default: throw new ArgumentOutOfRangeException(); } OperationResult resultElement = null; if (!response.State) { resultElement = new OperationResult() { Success = false, Message = response.Message }; } else { bool success = TerminalSettingsBLL.DeleteRegionVehicleRelation(base.CurrentUserID, RelationID); resultElement = new OperationResult() { Success = success, Message = success ? DisplayText.OperationSucceeded : "车机端删除操作成功完成,删除数据库记录出错。" }; } TerminalSettingsBLL.InsertTerminalOperationsLog( base.CurrentUserID, TerminalSettingType.RegionSettings_Delete, PlateNum, TerminalCode, false, RelationID.ToString(), resultElement.Message, GetRemoteAddress() ); return resultElement; } else { string RecordNotExists = "数据库中找不到对应的设置记录。"; TerminalSettingsBLL.InsertTerminalOperationsLog( base.CurrentUserID, TerminalSettingType.RegionSettings_Delete, null, null, false, RelationID.ToString(), RecordNotExists, GetRemoteAddress() ); return new OperationResult() { Success = false, Message = RecordNotExists }; } })); }
private Task <OperationResult> InternalSendLineSettings( LineProperty LineProperty, string PlateNum, string TerminalCode, List <MapLinesDetailModel> LineModel, TerminalOperationClient client ) { return(Task <OperationResult> .Run(() => { dynamic settingData = new ExpandoObject(); settingData.LineProperty = LineProperty; settingData.Vehicles = new string[] { PlateNum }; settingData.LineID = LineModel[0].ID; var exists = TerminalSettingsBLL.LineVehicleRelationExists(PlateNum, TerminalCode, LineModel[0].ID); if (exists.Item1) { var r = new OperationResult() { Success = false, Message = "数据库中已存在与指定车辆、区域对应的设置记录。" }; TerminalSettingsBLL.InsertTerminalOperationsLog( base.CurrentUserID, TerminalSettingType.RouteSettings_Add, PlateNum, TerminalCode, false, JsonConvert.SerializeObject(settingData), r.Message, GetRemoteAddress() ); return r; } var LineInflectionPointItems = new LineInflectionPointItem[LineModel.Count]; for (int i = 0; i != LineModel.Count; i++) { LineInflectionPointItems[i] = new LineInflectionPointItem() { PointID = (uint)LineModel[i].OrderID, RoadID = (uint)LineModel[i].ID, PointLatitude = LineModel[i].Latitude, PointLongitude = LineModel[i].Longitude, RoadWidth = (byte)LineModel[i].RoadWidth.GetValueOrDefault(), DrivingTooLongThresholding = (ushort)LineModel[i].MaxSecond.GetValueOrDefault(), DrivingTooLackThresholding = (ushort)LineModel[i].MinSecond.GetValueOrDefault(), MaxSpeed = (ushort)LineModel[i].SpeedLimit.GetValueOrDefault(), OverSpeedDuration = (byte)LineModel[i].OverSpeedDuration.GetValueOrDefault() }; if (LineModel[i].IsCheckTime.HasValue && LineModel[i].IsCheckTime.Value) { LineInflectionPointItems[i].RoadProperty |= RoadProperty.行驶时间; } if (LineModel[i].IsCheckSpeed.HasValue && LineModel[i].IsCheckSpeed.Value) { LineInflectionPointItems[i].RoadProperty |= RoadProperty.限速; } } var response = client.SetLine(TerminalCode, new LineSettingData() { LineID = (uint)LineModel[0].ID, IsCyclical = false, LineProperty = LineProperty, StartDateTime = DateTime.Parse(LineModel[0].StartTime), EndDateTime = DateTime.Parse(LineModel[0].EndTime), LineInflectionPointItems = LineInflectionPointItems }); OperationResult resultElement = null; if (!response.State) { //车机端操作失败 resultElement = new OperationResult() { Success = false, Message = response.Message }; TerminalSettingsBLL.InsertTerminalOperationsLog( base.CurrentUserID, TerminalSettingType.RouteSettings_Add, PlateNum, TerminalCode, false, JsonConvert.SerializeObject(settingData), resultElement.Message, GetRemoteAddress() ); } else { bool success = TerminalSettingsBLL.AddLineVehicleRelation(PlateNum, TerminalCode, exists.Item2.Value, (ushort)LineProperty); resultElement = new OperationResult() { Success = success, Message = success ? DisplayText.OperationSucceeded : "车机端更新操作成功完成,更新数据库记录出错。" }; TerminalSettingsBLL.InsertTerminalOperationsLog( base.CurrentUserID, TerminalSettingType.RouteSettings_Add, PlateNum, TerminalCode, success, JsonConvert.SerializeObject(settingData), resultElement.Message, GetRemoteAddress() ); } return resultElement; })); }
public async Task <ActionResult> QueryTerminalFlags(TerminalSettingsReadModel model) { // 根据终端号获取终端所属服务器的wcf链接地址 ActionResult actionResult = null; List <TerminalWCfModel> wcfList = null; if (!this.CheckWCF(model.ListVehicles, out actionResult, out wcfList)) { return(actionResult); } // 记录错误信息 string errorMsg = string.Empty; OperationResultQueryTerminalParaRespData syncResult; try { var entity = wcfList[0]; var checkedParamArrayLength = model.CheckedParamArray.Length; TerminalParaID[] paramIDs = new TerminalParaID[checkedParamArrayLength]; var checkedParamArrayData = model.CheckedParamArray; string checkedTerminalPara = PromptInformation.QueryContent + ":"; for (int i = 0; i < checkedParamArrayLength; i++) { paramIDs[i] = (TerminalParaID)checkedParamArrayData[i]; checkedTerminalPara += (TerminalParaID)checkedParamArrayData[i] + ","; } var tempResult = await this.DoOperation <TerminalParaID[], OperationResultQueryTerminalParaRespData>(wcfList, paramIDs, SyncQuerySpecifiedTerminalParas); syncResult = tempResult.Single(); string setInfo = checkedTerminalPara.TrimEnd(','); string plateNum = entity.PlateNum; string resultResponse = "Code:" + (int)(OperationResultCode)syncResult.Code + ";Message:" + syncResult.Message; // 记录日志 文本消息下发 这里拼接sql语句 批量插入 string valuesSql = string.Format("('{0}','{1}',{2},'{3}',{4},'{5}','{6}',{7},'{8}'),", entity.TerminalCode, plateNum, (byte)TerminalSettingTypeEnum.TerminalSetup_Query, setInfo, syncResult.State ? 1 : 0, resultResponse, GetRemoteAddress(), base.CurrentUserID, DateTime.Now); if (!syncResult.State) { //errorMsg += string.Format("<div style='font-weight:bolder;'>{0}:{1}{2}{3}:{4}{5}</div>", // UIText.TerminalSetting_PlateNumber, plateNum, "<br/>", PromptInformation.FailReason,syncResult.Code.ToString(), "<hr/>"); errorMsg += ErrorMesage(plateNum, syncResult.Code.ToString()); } // 插入日志 TerminalSettingsBLL.BatchInsertTerminalOperationsLog(valuesSql.TrimEnd(',')); } catch (Exception ex) { LogHelper.TerminalSettingsErrorLog("终端设置读取异常:" + ex.Message); return(Json(new { Success = false, Message = PromptInformation.RemotingError })); } if (string.IsNullOrEmpty(errorMsg)) { #region 返回数据 var responseData = syncResult.ResultData.ParaItems; string plateColor = null; if (responseData.车牌颜色.HasValue) { plateColor = responseData.车牌颜色.ToString(); } dynamic result = new ExpandoObject(); result.HeartbeatInterval = responseData.终端心跳发送间隔; result.PrimaryServerIP = responseData.主服务器IP地址或域名; result.BackupServerIP = responseData.备份服务器IP地址或域名; result.ServerTCPPort = responseData.务器TCP端口; result.StateRepotrIntervalSleep = responseData.休眠时汇报时间间隔; result.StateRepotrIntervalUrgent = responseData.紧急报警时汇报时间间隔; result.StateRepotrIntervalGeneral = responseData.缺省时间汇报间隔; result.MaximumSpeed = responseData.最高速度; result.OverspeedCheckTime = responseData.超速持续时间; result.MaximumDrivingTime = responseData.连续驾驶时间门限; result.MaximumDrivingTimeToday = responseData.当天累计驾驶时间门限; result.MinimumBreakTime = responseData.最小休息时间; result.MaximumStoppingTime = responseData.最长停车时间; result.DifferenceOfOverspeedValues = responseData.超速报警预警差值; result.DifferenceOfFatigueDrivingTime = responseData.疲劳驾驶预警差值; result.TotalODO = responseData.车辆里程表读数; result.MotorNumberPlate = responseData.公安交通管理部门颁发的机动车号牌; result.LicensePlateColor = plateColor; #endregion return(Json(new { Success = true, Message = JsonConvert.SerializeObject(result) })); } else { return(Json(new { Success = false, Message = errorMsg })); } }
public async Task <ActionResult> UpdateTerminalSetting(TerminalSettingsIssuedModel model) { ActionResult result = null; List <TerminalWCfModel> wcfList = null; if (!this.CheckWCF(model.ListVehicles, out result, out wcfList)) { return(result); } // 记录错误信息 string errorMsg = string.Empty; bool updateTerminal = true; // 调用wcf服务 如果终端属于同一个wcf地址 那么可以公用一个client实例 try { var syncResult = await this.DoOperation <TerminalSettingsIssuedModel, OperationResultGeneralRep>(wcfList, model, SyncSetTerminalParas).ConfigureAwait(false); int index = 0; string valuesSql = string.Empty; string setInfo = GetProperties <TerminalSettingsIssuedModel>(model); string wanIP = GetRemoteAddress(); DateTime setDTime = DateTime.Now; List <string> listTerminalCode = new List <string>(); foreach (var item in syncResult) { string plateNum = wcfList[index].PlateNum; string terminalCode = wcfList[index].TerminalCode; string resultResponse = "Code:" + (int)(OperationResultCode)item.Code + ";Message:" + item.Message; // 记录日志 文本消息下发 这里拼接sql语句 批量插入 valuesSql += string.Format("('{0}','{1}',{2},'{3}',{4},'{5}','{6}',{7},'{8}'),", terminalCode, plateNum, (byte)TerminalSettingTypeEnum.TerminalSetup_Update, setInfo, item.State ? 1 : 0, resultResponse, wanIP, base.CurrentUserID, setDTime); if (!item.State) { //errorMsg += string.Format("<div style='font-weight:bolder;'>" + UIText.TerminalSetting_PlateNumber + // ":{0}{1},"+PromptInformation.FailReason+":{2}{3}</div>", plateNum, "<br/>", // item.Code.ToString(), "<hr/>"); errorMsg += ErrorMesage(plateNum, item.Code.ToString()); } else { //这里记录修改成功的终端值 listTerminalCode.Add(terminalCode); } index++; } //如果下发终端成功了 则修改TMS表中对应终端的数据 if (listTerminalCode.Count > 0) { TerminalSettingsSectionModel sectionModel = new TerminalSettingsSectionModel() { 最高速度 = model.最高速度, 超速持续时间 = model.最高速度, 连续驾驶时间门限 = model.最高速度, 最小休息时间 = model.最小休息时间, 当天累计驾驶时间门限 = model.当天累计驾驶时间门限, 最长停车时间 = model.最长停车时间 }; updateTerminal = TerminalBLL.UpdateTerminals(listTerminalCode, sectionModel); } // 批量插入日志 TerminalSettingsBLL.BatchInsertTerminalOperationsLog(valuesSql.TrimEnd(',')); } catch (Exception ex) { LogHelper.TerminalSettingsErrorLog("下发终端设置异常:" + ex.Message); return(Json(new { Success = false, Message = PromptInformation.RemotingError })); } if (!updateTerminal) { return(Json(new { Success = false, Message = PromptInformation.TerminalSetting_UpdateTerminalSettingFail })); } if (string.IsNullOrEmpty(errorMsg)) { return(Json(new { Success = true, Message = PromptInformation.TerminalSetting_UpdateTerminalSettingSuccess })); } else { return(Json(new { Success = false, Message = errorMsg })); } }
public async Task <ActionResult> SendTextMessage(SendTextMessageModel model) { ActionResult result = null; List <TerminalWCfModel> wcfList = null; if (!this.CheckWCF(model.ListVehicles, out result, out wcfList)) { return(result); } //升级指令包含<>,但是为了安全性是不允许提交<>这样的html字符的,虽然可以通过一下方式让MVC项目的请求允许通过html字符,但是不合适,所以 //这里呢要求数据本身是html编码,到后台再转回成已解码的字符串 //比如 升级指令 <EXT87DDE2B7AE0B45FX-GPS000000000000000000PP> ,在文本框里输入<EXT87DDE2B7AE0B45FX-GPS000000000000000000PP> //到后台再解码成<>就行了 /** * web.config里面加上 * * <system.web> * <httpRuntime requestValidationMode="2.0" /> * </system.web> */ var realMessageText = System.Web.HttpUtility.HtmlDecode(model.MessageText); model.MessageText = realMessageText; // 记录错误信息 string errorMsg = string.Empty; try { // 所有任务完成时获取返回结果 var syncResult = await this.DoOperation <SendTextMessageModel, OperationResultGeneralRep>(wcfList, model, SyncSendTextInfo).ConfigureAwait(false); int index = 0; string valuesSql = string.Empty; string setInfo = "Flags:" + (TextInformationFlag)model.Flags + ",MessageText:" + model.MessageText; string wanIP = GetRemoteAddress(); DateTime setDTime = DateTime.Now; foreach (var item in syncResult) { string plateNum = wcfList[index].PlateNum; string resultResponse = "Code:" + (int)(OperationResultCode)item.Code + ";Message:" + item.Message; // 记录日志 文本消息下发 这里拼接sql语句 批量插入 valuesSql += string.Format("('{0}','{1}',{2},'{3}',{4},'{5}','{6}',{7},'{8}'),", wcfList[index].TerminalCode, plateNum, (byte)TerminalSettingTypeEnum.TextMessage, setInfo, item.State ? 1 : 0, resultResponse, wanIP, base.CurrentUserID, setDTime); if (!item.State) { //errorMsg += string.Format("<div style='font-weight:bolder;'>" + UIText.TerminalSetting_PlateNumber + ":{0}{1}," + PromptInformation.FailReason+ ":{2}{3}</div>", plateNum, "<br/>", // item.Code.ToString(), "<hr/>"); errorMsg += ErrorMesage(plateNum, item.Code.ToString()); } index++; } // 批量插入日志 TerminalSettingsBLL.BatchInsertTerminalOperationsLog(valuesSql.TrimEnd(',')); } catch (Exception ex) { LogHelper.TerminalSettingsErrorLog("下发文本消息异常:" + ex.Message); return(Json(new { Success = false, Message = PromptInformation.RemotingError })); } if (string.IsNullOrEmpty(errorMsg)) { return(Json(new { Success = true, Message = PromptInformation.TerminalSetting_SendTextMessageSuccess })); } else { return(Json(new { Success = false, Message = errorMsg })); } }