Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        /// <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));
        }
Exemplo n.º 5
0
        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)));
        }
Exemplo n.º 6
0
        public ActionResult LogsDetail(long id)
        {
            var result = TerminalSettingsBLL.GetTerminalSettingLogDetailByID(id);

            if (result.DataResult == null)
            {
                return(Content(result.Message));
            }
            return(PartialView("LogsDetail", result.DataResult));
        }
Exemplo n.º 7
0
 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
             };
         }
     }));
 }
Exemplo n.º 8
0
        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)));
        }
Exemplo n.º 9
0
        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));
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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)));
        }
Exemplo n.º 12
0
        /// <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));
        }
Exemplo n.º 13
0
        /// <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);
        }
Exemplo n.º 14
0
        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)));
        }
Exemplo n.º 15
0
        /// <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);
        }
Exemplo n.º 16
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;
            }));
        }
Exemplo n.º 17
0
        /// <summary>
        /// 查询指定路线数据
        /// </summary>
        /// <param name="RegionID">路线ID</param>
        /// <returns></returns>
        public ActionResult GetLineData(int LineID)
        {
            var lines = TerminalSettingsBLL.GetLinesByLineID(LineID);

            return(Json(lines, JsonRequestBehavior.AllowGet));
        }
Exemplo n.º 18
0
        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));
        }
Exemplo n.º 19
0
        /// <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));
        }
Exemplo n.º 20
0
        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
                    };
                }
            }));
        }
Exemplo n.º 21
0
        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;
            }));
        }
Exemplo n.º 22
0
        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 }));
            }
        }
Exemplo n.º 23
0
        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 }));
            }
        }
Exemplo n.º 24
0
        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> ,在文本框里输入&lt;EXT87DDE2B7AE0B45FX-GPS000000000000000000PP&gt;
            //到后台再解码成<>就行了

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