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