Ejemplo n.º 1
0
        public override List<GPSDataEntity> GetResultList()
        {
            List<GPSDataEntity> list = new List<GPSDataEntity>();

            foreach (var item in Fault.FaultDATAs)
            {
                GPSDataEntity data = new GPSDataEntity();
                data.IsFetchData = false;
                data.IsOBDFaultData = true;
                data.Direction = 0;
                data.GPSCode = base.FullGpsCode;
                data.Latitude = 0;
                data.Longitude = 0;
                data.ReceiveTime = base.ReceiveTime;
                data.ReportTime = this.DeviceTime;
                data.OBDDeviceTime = this.DeviceTime;
                data.SourceData = base.SourceData;

                data.OBDFaultType = item.FaultType;
                list.Add(data);
            }

            return list;
           
        }
Ejemplo n.º 2
0
 private GPSDataEntity GetDataEntity()
 {
     GPSDataEntity entity = new GPSDataEntity();
     entity.GPSCode = GpsCode;
     entity.ACCState = 0;
     entity.AntennaState = 1;
     entity.Direction = new Random().Next(1, 360);
     entity.DoorStatus = 1;
     entity.ID = Guid.NewGuid();
     entity.Latitude = 22.51193m;
     entity.Longitude = 114.05320m;
     entity.Mileage = 0;
     entity.OilBearing = new Random().Next(1,1000);
     entity.OilState = 0;
     entity.PhotoPath = "";
     entity.PlunderState = 1;
     entity.PowerState = 1;
     entity.ReceiveTime = DateTime.Now;
     entity.ReportTime = DateTime.Now.AddMinutes(-5);
     entity.Speed = new Random().Next(1,255);
     entity.StarkMileage = 0;
     Guid vehicleCode1 = Guid.NewGuid();
     entity.VehicleCode = null;
     return entity;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 构造函数
        /// </summary>
        public DiBiaoData()
        {
            _BaseData = new GPSDataEntity();

            BaseData.GPSCode = "";
            BaseData.ACCState = 0;
            BaseData.PlunderState = 1;
            BaseData.AntennaState = 0;
            BaseData.PowerState = 0;
            BaseData.Mileage = 0;
            BaseData.OilBearing = 0;
            BaseData.DoorStatus = 0;
            BaseData.IsLocatedData = false;
        }
Ejemplo n.º 4
0
 public override GPSDataEntity GetResult()
 {
     GPSDataEntity data = new GPSDataEntity();
     data.IsFetchData = this.GpsData.IsFetchData;
     data.IsLocatedData = true;
     data.Direction = this.GpsData.Direction;
     data.GPSCode = base.FullGpsCode;
     data.Latitude = this.GpsData.Latitude;
     data.Longitude = this.GpsData.Longitude;
     data.ReceiveTime = base.ReceiveTime;
     data.ReportTime = this.GpsData.ReportTime;
     data.SourceData = base.SourceData;
     data.Speed = this.GpsData.Speed;
     data.StarkMileage = this.STATDATA.StarkMileage;
     data.BatteryVoltage = this.STATDATA.BatteryVoltage;
     return data;
 }
Ejemplo n.º 5
0
 public void Set(GPSDataEntity data)
 {
     if (data != null)
     {
         try
         {
             if (mongo.State == MongoServerState.Disconnected)
             {
                 mongo.Connect();
             }
             MongoDB.Driver.MongoDatabase db = mongo.GetDatabase(dbName);
             MongoDB.Driver.MongoCollection table = db.GetCollection(tableName);
             table.Insert(data);
         }
         catch (System.Exception ex)
         {
             Logger.Error(ex);
         }
     }
 }
Ejemplo n.º 6
0
 public override GPSDataEntity GetResult()
 {
     GPSDataEntity last = Common.GetLastCurrentInfo(base.FullGpsCode);
     GPSDataEntity data = new GPSDataEntity();
     data.IsFetchData = false;
     data.IsOBDRouteData = true;
     data.Direction = 0;
     data.GPSCode = base.FullGpsCode;
     data.Latitude = last == null ? 0 : last.Latitude;
     data.Longitude = last == null ? 0 : last.Longitude;
     data.ReceiveTime = base.ReceiveTime;
     data.ReportTime = this.DeviceTime;
     data.OBDDeviceTime = this.DeviceTime;
     data.SourceData = base.SourceData;
     data.StarkMileage = 0;
     data.OBDRouteNo = this.RouteNo;
     data.OBDRouteStart = false;
     data.OBDRouteMileage = this.RouteMileage;
     data.OBDRouteFuel = this.RouteFuel;
     return data;
 }
Ejemplo n.º 7
0
        public override GPSDataEntity GetResult()
        {
            GPSDataEntity data = new GPSDataEntity();
            data.IsFetchData = false;
            data.IsOBDDataStream = true;
            data.Direction = 0;
            data.GPSCode = base.FullGpsCode;
            data.Latitude = 0;
            data.Longitude = 0;
            data.ReceiveTime = base.ReceiveTime;
            data.ReportTime = this.DeviceTime;
            data.OBDDeviceTime = this.DeviceTime;
            data.SourceData = base.SourceData;
            data.StarkMileage = 0;

            data.OBDCurrentEngineCoolantTemperature = OBDDATA.EngineCoolantTemperature;
            data.OBDCurrentEngineRotateSpeed = OBDDATA.EngineRotateSpeed;
            data.OBDCurrentIntakeAirTemperature = OBDDATA.IntakeAirTemperature;
            data.OBDCurrentSpeed = OBDDATA.CurrentSpeed;

            return data;
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 检查异常漂移
        /// </summary>
        /// <param name="aGPSInfo"></param>
        /// <param name="aPreviousValidGPSData"></param>
        /// <param name="MaxSpeedMeterPerSecond"></param>
        private void ComputeMileAgeAndVerifyData(
            ref KaiYanData aGPSInfo,
            GPSDataEntity aPreviousValidGPSData,
            double MaxSpeedMeterPerSecond)
        {
            if (aGPSInfo.BaseData.IsLocatedData)
            {

                bool blnIsFirstGPSData = false;
                if (aPreviousValidGPSData == null)
                {
                    blnIsFirstGPSData = true;
                }

                System.TimeSpan dtSpan;

                double dclMileage = 0;
                bool blnIsGPSOverflow = false;
                bool blnShoudBeStillness = false; //是否要记录里程
                bool blnIsArrivalDelayed = false; //是否前条时间超过后一条时间

                if (!blnIsFirstGPSData)
                {

                    if (DateTime.Compare(aGPSInfo.BaseData.ReportTime, aPreviousValidGPSData.ReportTime) <= 0)
                    {
                        blnIsArrivalDelayed = true;
                    }

                    double CurrentLatitude = Convert.ToDouble(aGPSInfo.BaseData.Latitude);
                    double CurrentLongitude = Convert.ToDouble(aGPSInfo.BaseData.Longitude);
                    double LastLatitude = Convert.ToDouble(aPreviousValidGPSData.Latitude);
                    double LastLongitude = Convert.ToDouble(aPreviousValidGPSData.Longitude);

                    if ((CurrentLatitude != LastLatitude) || (CurrentLongitude != LastLongitude))
                    {
                        dclMileage = Transfer.GetDistance(LastLatitude, LastLongitude, CurrentLatitude, CurrentLongitude);
                    }

                    dtSpan = aGPSInfo.BaseData.ReportTime - aPreviousValidGPSData.ReportTime;
                    double dclMaxMileage = Math.Abs(Convert.ToDouble(MaxSpeedMeterPerSecond * dtSpan.TotalSeconds));

                    if (dclMileage > dclMaxMileage)
                    {
                        //异常:GPS漂移数据 
                        blnIsGPSOverflow = true;
                        aGPSInfo.BaseData.IsOverflowGPSData = blnIsGPSOverflow;

                    }

                    //对速度的判断
                    if (aGPSInfo.BaseData.Speed > (decimal)(MaxSpeedMeterPerSecond * 3.6))
                    {
                        blnIsGPSOverflow = true;
                        aGPSInfo.BaseData.IsOverflowGPSData = blnIsGPSOverflow;
                    }

                    //是否要记录里程
                    if ((aGPSInfo.BaseData.Speed == 0) && (aPreviousValidGPSData.Speed == 0) && (dtSpan.TotalMinutes < 30))
                    {
                        blnShoudBeStillness = true;
                    }                   
                    aGPSInfo.BaseData.ControlTime = aPreviousValidGPSData.ControlTime;
                }


                if (((!blnIsGPSOverflow) && (!blnIsFirstGPSData) && (!blnShoudBeStillness)) && (!blnIsArrivalDelayed))
                {
                    aGPSInfo.BaseData.Mileage = (decimal)dclMileage;
                    //aGPSInfo.AbsoluteMileage = aGPSInfo.AbsoluteMileage + aGPSInfo.Mileage;
                }
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 获取GPSDataEntity
        /// </summary>
        /// <param name="fullGpsCode"></param>
        /// <param name="LR"></param>
        /// <param name="entity"></param>
        private void GetGPSDataEntity(string fullGpsCode, LocationReport LR, ref GPSDataEntity entity)
        {
            entity.GPSCode = fullGpsCode;
            entity.Longitude = Convert.ToDecimal(LR.Longitude / Math.Pow(10, 6));
            entity.Latitude = Convert.ToDecimal(LR.Latitude / Math.Pow(10, 6));
            entity.Speed = LR.Speed / 10;
            entity.Direction = LR.Direction;
            entity.ReportTime = LR.Time;
            entity.OilState = LR.VehicleOilStatus == 0 ? 1 : 0;
            entity.ACCState = LR.ACCStatus;
            entity.IsLocatedData = LR.LocationStatus == 0 ? false : true;
            //高度暂存,部标检测
            entity.Detector2 = LR.Elevation;
            entity.IsOnCar = false;

            if (LR.AdditionMsgList != null && LR.AdditionMsgList.Count > 0)
            {
                //部标使用
                //entity.AdditionalInfo = Encoding.ASCII.GetString(LR.AdditionMsgByte);

                if (LR.AdditionMsgList.Exists(o => o.MsgID == AdditionMsgIDType.Mileage))
                {
                    AdditionMsgItem item = LR.AdditionMsgList.Find(o => o.MsgID == AdditionMsgIDType.Mileage);
                    Mileage aMileage = new Mileage();
                    item.ParseItem(ref aMileage);
                    entity.StarkMileage = aMileage.Value * 100;
                }
                if (LR.AdditionMsgList.Exists(o => o.MsgID == AdditionMsgIDType.OilMass))
                {
                    AdditionMsgItem item = LR.AdditionMsgList.Find(o => o.MsgID == AdditionMsgIDType.OilMass);
                    OilMass aOilMass = new OilMass();
                    item.ParseItem(ref aOilMass);
                    entity.OilBearing = aOilMass.Value / 10;
                }
                if (LR.AdditionMsgList.Exists(o => o.MsgID == AdditionMsgIDType.TachographSpeed))
                {
                    //行驶记录功能获取的速度 部标暂存
                    AdditionMsgItem item = LR.AdditionMsgList.Find(o => o.MsgID == AdditionMsgIDType.TachographSpeed);
                    TachographSpeed aSpeed = new TachographSpeed();
                    item.ParseItem(ref aSpeed);
                    entity.Detector1 = aSpeed.Value / 10;
                }

                if (LR.AdditionMsgList.Exists(o => o.MsgID == AdditionMsgIDType.YWExtensionStatus))
                {
                    //IsOnCar 是否上车(0否,1是)
                    AdditionMsgItem item = LR.AdditionMsgList.Find(o => o.MsgID == AdditionMsgIDType.YWExtensionStatus);
                    YWExtensionStatus aYWStatus = new YWExtensionStatus();
                    item.ParseItem(ref aYWStatus);
                    if (aYWStatus.IsOnCar == 1)
                        entity.IsOnCar = true;


                }

            }
            //所有报警的状态位(部标)            
            //entity.BlackBoxAlarmType = LR.AlarmStatus;
            entity.Mileage = 0;
            entity.PowerState = LR.VehicleEleStatus == 0 ? 1 : 0; ;
            entity.AntennaState = 1;
            entity.DoorStatus = LR.VehicleLockStatus == 0 ? 1 : 0;
            entity.PlunderState = LR.EmergencyAlarm == 1 ? 0 : 1;
            entity.ReceiveTime = DateTime.Now;


            //报警标志;状态;高程;行驶记录议速度
            string strExtensionData = LR.AlarmStatus + ";" + LR.Status + ";" + entity.Detector2 + ";" + entity.Detector1;
            entity.SourceData = Encoding.ASCII.GetBytes(strExtensionData);


            base.OnDebugDataEvent(base.TransfersType.ToString(), fullGpsCode, "[Status]:" + LR.Status + "[AlarmStatus]:" + LR.AlarmStatus + "[OnCar]:" + entity.IsOnCar);

            //base.OnDebugDataEvent(base.TransfersType.ToString(), fullGpsCode, string.Format("[EmergencyAlarm]:{0};[ACCStatus]:{1}", LR.EmergencyAlarm, LR.ACCStatus));
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 根据车辆编号获取单条GPS实时信息。
        /// </summary>
        public static GPSDataEntity GetSingleGpsDynamicData(string vehicleCode)
        {
            DbConnection dbConnection = null;

            string strSQL = "select ID,GPSCode,Longitude,Latitude,Speed,Direction,ReportTime,";
            strSQL += "OilState,ACCState,Mileage,PowerState,ExtensionData,StarkMileage,";
            strSQL += "AntennaState,OilBearing,DoorStatus,PhotoPath,VehicleCode,PlunderState,ReceiveTime from gps_currentinfo ";

            string gpsCode = GetGPSCodeByVehicleCode(vehicleCode);
            if (!string.IsNullOrEmpty(gpsCode))
            {
                strSQL += "where VehicleCode ='" + vehicleCode + "'";
            }
            else
            {
                return null;
            }
            GPSDataEntity entity = new GPSDataEntity();
            try
            {
                DataTable table = new DataTable();
                dbConnection = GetConnection(EnumDBOperationType.GlobalDB);
                if (dbConnection == null)
                    return null;
                if (dbConnection.State != ConnectionState.Open)
                    dbConnection.Open();
                DbCommand command = dbConnection.CreateCommand();
                command.CommandText = strSQL;

                DbDataAdapter adapter = new MySqlDataAdapter();
                adapter.SelectCommand = command;
                DataSet ds = new DataSet();
                adapter.Fill(ds, "currentinfo");
                table = ds.Tables["currentinfo"];

                if (table.Rows.Count == 0)
                    return null;

                DataRow row = table.Rows[0];
                entity.ACCState = TryParseInt32(row["ACCState"].ToString());
                entity.AntennaState = TryParseInt32(row["AntennaState"].ToString());
                entity.Direction = TryParseInt32(row["Direction"].ToString());
                entity.DoorStatus = TryParseInt32(row["DoorStatus"].ToString());
                entity.GPSCode = row["GPSCode"].ToString();
                entity.ID = TryParseGuid(row["ID"].ToString());
                entity.Latitude = TryParseDecimal(row["Latitude"].ToString());
                entity.Longitude = TryParseDecimal(row["Longitude"].ToString());
                entity.Mileage = TryParseDecimal(row["Mileage"].ToString());
                entity.OilBearing = TryParseDecimal(row["OilBearing"].ToString());
                entity.OilState = TryParseInt32(row["OilState"].ToString());
                entity.PhotoPath = row["PhotoPath"].ToString();
                entity.PlunderState = TryParseInt32(row["PlunderState"].ToString());
                entity.PowerState = TryParseInt32(row["PowerState"].ToString());
                entity.ReceiveTime = TryParseDateTime(row["ReceiveTime"].ToString());
                entity.ReportTime = TryParseDateTime(row["ReportTime"].ToString());
                entity.Speed = TryParseInt32(row["Speed"].ToString());
                entity.StarkMileage = TryParseDecimal(row["StarkMileage"].ToString());
                entity.VehicleCode = TryParseGuid(row["VehicleCode"].ToString());
                table.Dispose();
                ds.Dispose();
                adapter.Dispose();
                return entity;
            }
            catch (Exception ex)
            {
                Loggers.LogInfo("GPSDataHelper.GetSingleGpsDynamicData:" + ex.ToString());
                return null;
            }
            finally
            {
                //Loggers.LogInfo("GPSDataHelper.GetSingleGpsDynamicData:" + strSQL);
                CloseDBConnection(dbConnection);
            }

        }
Ejemplo n.º 11
0
 private void AddCodeVehicleGpsData(string gpsCode, GPSDataEntity dataEntity)
 {
     lock (objLocker)
     {
         if (_CodeVehicleGpsData.ContainsKey(gpsCode))
         {
             _CodeVehicleGpsData[gpsCode] = dataEntity;
         }
         else
         {
             _CodeVehicleGpsData.Add(gpsCode, dataEntity);
         }
     }
 }
Ejemplo n.º 12
0
        public override List<GPSDataEntity> GetResultList()
        {
            List<GPSDataEntity> list = new List<GPSDataEntity>();

            foreach (var item in ALARM.ALARMDATAs)
            {
                GPSDataEntity data = new GPSDataEntity();
                data.IsFetchData = false;
                data.IsOBDAlarmData = true;
                data.Direction = 0;
                data.GPSCode = base.FullGpsCode;
                data.Latitude = 0;
                data.Longitude = 0;
                data.ReceiveTime = base.ReceiveTime;
                data.ReportTime = base.ReceiveTime;
                data.SourceData = base.SourceData;

                data.OBDAlarmType = item.AlarmType;

                switch (data.OBDAlarmType)
                {
                    case "01":
                        data.OBDAlarmType = OBDAlarmType.OverSpeed.ToString("X2");
                        break;
                    case "02":
                        data.OBDAlarmType = OBDAlarmType.LowBattery.ToString("X2");
                        break;
                    case "03":
                        data.OBDAlarmType = OBDAlarmType.EngineCoolantTempHigh.ToString("X2");
                        break;
                    case "04":
                        data.OBDAlarmType = OBDAlarmType.SpeedUp.ToString("X2");
                        break;
                    case "05":
                        data.OBDAlarmType = OBDAlarmType.SlowDown.ToString("X2");
                        break;
                    case "06":
                        data.OBDAlarmType = OBDAlarmType.EngineCoolantTempTooHigh.ToString("X2");
                        break;
                    case "07":
                        data.OBDAlarmType = OBDAlarmType.TowingAlarm.ToString("X2");
                        break;
                    case "08":
                        data.OBDAlarmType = OBDAlarmType.SpeedTooHigh.ToString("X2");
                        break;
                    case "11":
                        data.OBDAlarmType = OBDAlarmType.CollisionWarning.ToString("X2");
                        break;
                    case "0A":
                        data.OBDAlarmType = OBDAlarmType.GasExceedsBid.ToString("X2");
                        break;
                    case "0B":
                        data.OBDAlarmType = OBDAlarmType.ChangeLan.ToString("X2");
                        break;
                    case "0C":
                        data.OBDAlarmType = OBDAlarmType.TurnTo.ToString("X2");
                        break;
                    case "0D":
                        data.OBDAlarmType = OBDAlarmType.LongDrive.ToString("X2");
                        break;
                    default:
                        break;
                }


                list.Add(data);
            }

            return list;

        }
Ejemplo n.º 13
0
        /// <summary>
        /// 数据分类
        /// </summary>
        /// <param name="aGPSData"></param>
        private void HandleCategory(GPSDataEntity aGPSData)
        {
            GPSDataEntity gpsEntity = aGPSData;            
            if (gpsEntity.IsPhotoData)
            {
                Logger.Trace("HandleCategory() 图像数据 gpsEntity.IsPhotoData:true");
                //camera.Add(gpsEntity);
            }
            else
            {
                Logger.Trace("HandleCategory() gpsEntity.IsPhotoData:false");
                if (!gpsEntity.IsFetchData)
                {
                    Logger.Trace("HandleCategory() gpsEntity.IsFetchData:false(不是补传数据)");
                    if (gpsEntity.IsLocatedData && !gpsEntity.IsOverflowGPSData)
                    {
                        Logger.Trace("HandleCategory() gpsEntity.IsLocatedData:true(定位数据) && gpsEntity.IsOverflowGPSData:false(不是漂移数据)");
                        current.Add(gpsEntity);
                        history.Add(gpsEntity);
                        Logger.Trace("HandleCategory() VehicleCode:" + gpsEntity.VehicleCode);
                        if (gpsEntity.VehicleCode != null)
                        {
                            lock (AlarmDataProcessorForActiveMQ.GetQueue())
                            {
                                AlarmDataProcessorForActiveMQ.GetQueue().Enqueue(gpsEntity);  
                            }
                            
                            //alarm.Add(gpsEntity);
                            
                        }
                        Logger.Trace(string.Format("HandleCategory() -> Common.SetCache() gpsEntity: [GPSCode:{0}] [Latitude:{1}] [Longitude:{2}] [Mileage:{3}] [StarkMileage:{4}]",
                            gpsEntity.GPSCode, gpsEntity.Latitude, gpsEntity.Longitude, gpsEntity.Mileage, gpsEntity.StarkMileage));
                        Common.SetCache(new GPSDataEntity
                        {
                            GPSCode = gpsEntity.GPSCode,
                            ACCState = gpsEntity.ACCState,
                            CoolerStatus = gpsEntity.CoolerStatus,
                            Direction = gpsEntity.Direction,
                            DoorStatus = gpsEntity.DoorStatus,
                            IsSendLongIntervalMessage = gpsEntity.IsSendLongIntervalMessage,

                            IsStartStopCarTime = gpsEntity.IsStartStopCarTime,
                            Latitude = gpsEntity.Latitude,
                            Longitude = gpsEntity.Longitude,
                            OilState = gpsEntity.OilState,
                            PowerState = gpsEntity.PowerState,

                            ReportTime = gpsEntity.ReportTime,
                            Speed = gpsEntity.Speed,
                            Mileage = gpsEntity.Mileage,
                            StarkMileage = gpsEntity.StarkMileage,
                            StartStopCarTime = gpsEntity.StartStopCarTime,
                            BatteryVoltage = gpsEntity.BatteryVoltage
                        });
                    }
                    else if (gpsEntity.IsOBDDataStream)
                    {
                        obdDataStream.Add(gpsEntity);
                    }
                    else if (gpsEntity.IsOBDRouteData)
                    {
                        obdRoute.Add(gpsEntity);
                    }
                    else if (gpsEntity.IsOBDFaultData)
                    {
                        obdFault.Add(gpsEntity);
                    }
                    else if (gpsEntity.IsOBDAlarmData)
                    {
                        obdAlarm.Add(gpsEntity);
                    }
                    else
                    {
                        Logger.Trace(string.Format("HandleCategory() 无效数据 gpsEntity: [GPSCode:{0}] [Latitude:{1}] [Longitude:{2}] [Mileage:{3}] [StarkMileage:{4}]", gpsEntity.GPSCode, gpsEntity.Latitude, gpsEntity.Longitude, gpsEntity.Mileage, gpsEntity.StarkMileage));
                    }
                }
            }
        }
Ejemplo n.º 14
0
        public GPSDataEntity Parse(byte[] buffer, out List<byte[]> responseList, out string fullGpsCode, string sessionID)
        {
            GPSDataEntity dataEntity = null;
            dataEntity = new GPSDataEntity();

            responseList = new List<byte[]>();
            fullGpsCode = string.Empty;
            string debuggerLog = string.Empty;//测试期间用到的LOG,待LianHuaYingKe网关稳定后删除
            try
            {
                int nextStartPos = 0;

                string strYear = "";
                string strMonth = "";
                string strDay = "";
                string strHour = "";
                string strMinute = "";
                string strSecond = "";

                string strLatitude = "";//纬度
                string strLongitude = "";//经度

                string strSpeed = "";
                string strDirection = "";

                //24,40,06,00,17,30,05,21,59,09,04,12,22,30,74,42,00,11,40,31,20,8E,00,00,00,FF,FF,F9,FF,FF,00,BA
                if (buffer[0] == 0x24)//定位数据
                {
                    for(int i=0;i<5;i++)
                    {
                        fullGpsCode += changeByteTo16Code(buffer[i + 1], true, 2, '0'); //Convert.ToString(buffer[1], 16).PadLeft(2, '0') + Convert.ToString(buffer[2], 16).PadLeft(2, '0') + Convert.ToString(buffer[3], 16).PadLeft(2, '0') + Convert.ToString(buffer[4], 16).PadLeft(2, '0') + Convert.ToString(buffer[5], 16).PadLeft(2, '0');
                    }

                    dataEntity.GPSCode = fullGpsCode;
                    
                    nextStartPos = 6;

                    getDateTimeHHMMSS(buffer, ref nextStartPos, out strHour, out strMinute, out strSecond);
                    getDateTimeYYMMDD(buffer, ref nextStartPos, out strYear, out strMonth, out strDay);

                    getLatAndLot(buffer, ref nextStartPos, out strLatitude, out strLongitude);
                                        
                    string isValidLocate = changeByteTo16Code(buffer[nextStartPos], true, 2, '0').Substring(1, 1);

                    string isValidLocate2 = change16StringTo2String(isValidLocate);
                    //1:A 定位 0:V 不定位
                    dataEntity.IsLocatedData = isValidLocate2.Substring(2, 1) == "1" ? true : false;
                    nextStartPos++;

                    //速度为海里/小时,转换为公里/小时要乘以1.852
                    string temp = changeByteTo16Code(buffer[nextStartPos + 1], true, 2, '0');
                    strSpeed = Convert.ToString(Convert.ToInt32(changeByteTo16Code(buffer[nextStartPos], true, 2, '0') + temp.Substring(0, 1)) * 1.852);
                    nextStartPos+=2;

                    strDirection = temp.Substring(1,1) + changeByteTo16Code(buffer[nextStartPos], true, 2, '0');
                    nextStartPos++;

                    getVehicleStatus(buffer, ref nextStartPos, ref dataEntity);
                }
                //2A,48,51,2C,34,30,30,36,30,30,31,37,33,30,2C,56,31,2C,30,35,32,35,30,30,2C,41,2C,32,32,33,30,2E,37,34,34,32,2C,4E,2C,31,31,34,30,33,2E,31,32,30,38,2C,45,2C,30,30,30,2E,30,30,2C,30,30,30,2C,30,39,30,34,31,32,2C,46,46,46,46,46,39,46,46,23
                //* HQ,YYYYYYYYYY,V1,HHMMSS,S,latitude,D,longitude,G,speed,direction,DDMMYY,vehicle_status#
                else if (buffer[0] == 0x2A && buffer[15] == 0x56 && buffer[16] == 0x31)//心跳
                {
                    fullGpsCode = changeASCIITo10String(10, buffer,4);

                    nextStartPos += 10;

                    dataEntity.GPSCode = fullGpsCode;
                    nextStartPos+=4;//*HQ,
                    nextStartPos+=4;//,V1,

                    getDateTimeHHMMSS(buffer, ref nextStartPos, out strHour, out strMinute, out strSecond);

                    nextStartPos++;//,

                    //S:数据有效位(A/V),A表示GPS数据是有效定位数据,V表示GPS数据是无效定位数据 A的ASCII=65
                    dataEntity.IsLocatedData = changeASCIITo10String(1, buffer, nextStartPos) == "65" ? true : false;
                    nextStartPos += 2;//S,

                    getLatAndLot(buffer, ref nextStartPos, out strLatitude, out strLongitude);

                    if (buffer[nextStartPos] == 0x2C)
                    {
                        strSpeed = "0";
                        nextStartPos++;
                    }
                    else
                    {
                        strSpeed = changeASCIITo10String(3, buffer, nextStartPos) + ".";
                        nextStartPos += 4;
                        strSpeed += changeASCIITo10String(2, buffer, nextStartPos);
                        strSpeed = Convert.ToString(Convert.ToDouble(strSpeed) * 1.852);
                        nextStartPos += 3;
                    }

                    if (buffer[nextStartPos] == 0x2C)
                    {
                        strDirection = "0";
                        nextStartPos++;
                    }
                    else
                    {
                        strDirection = changeASCIITo10String(3, buffer, nextStartPos);
                        nextStartPos += 4;
                    }

                    getDateTimeYYMMDD(buffer, ref nextStartPos, out strYear, out strMonth, out strDay);
                    nextStartPos++;//,

                    getVehicleStatus(buffer, ref nextStartPos, ref dataEntity);

                    //设备第一次上线时,将上报时间改为10秒
                    if (!_CodeVehicleGpsData.ContainsKey(base.CodePrefix + fullGpsCode))
                    {
                        string setTimeSpan = "*HQ,0000000000,S17,200341,10,1#";
                        byte[] reponseStr = Encoding.ASCII.GetBytes(setTimeSpan);

                        responseList.Add(reponseStr);
                    }
                }
                //*HQ, 4006001969,V2,050316,A,2212.8745,N,11346.6574,E,14.28,028,220902,FFFFFBFF
                else if (buffer[0] == 0x2A && buffer[15] == 0x56 && buffer[16] == 0x32)//查询位置信息
                {
                    fullGpsCode = changeASCIITo10String(10, buffer, 4);

                    nextStartPos += 10;

                    dataEntity.GPSCode = fullGpsCode;
                    nextStartPos += 4;//*HQ,
                    nextStartPos += 4;//,V2,

                    getDateTimeHHMMSS(buffer, ref nextStartPos, out strHour, out strMinute, out strSecond);

                    nextStartPos++;//,

                    dataEntity.IsLocatedData = true;
                    nextStartPos += 2;//A,

                    getLatAndLot(buffer, ref nextStartPos, out strLatitude, out strLongitude);

                    strSpeed = changeASCIITo10String(3, buffer, nextStartPos) + ".";
                    nextStartPos += 4;
                    strSpeed += changeASCIITo10String(2, buffer, nextStartPos);
                    strSpeed = Convert.ToString(Convert.ToDouble(strSpeed) * 1.852);
                    nextStartPos += 3;

                    strDirection = changeASCIITo10String(3, buffer, nextStartPos);
                    nextStartPos += 4;

                    getDateTimeYYMMDD(buffer, ref nextStartPos, out strYear, out strMonth, out strDay);
                    nextStartPos++;//,

                    getVehicleStatus(buffer, ref nextStartPos, ref dataEntity);

                    string retAddress = "位置:";
                    retAddress += WebRequestHelper.InverseGeocoding(strLatitude, strLongitude);

                    //*HQ,0000000000,I0,hhmmss,MsgLength,MsgBody#
                    string responseAddressData = "*HQ,0000000000,I0,";

                    responseAddressData += DateTime.Now.Hour.ToString().PadLeft(2, '0');
                    responseAddressData += DateTime.Now.Minute.ToString().PadLeft(2, '0');
                    responseAddressData += DateTime.Now.Second.ToString().PadLeft(2, '0');

                    responseAddressData += ",";
                    responseAddressData += retAddress.Length.ToString().PadLeft(2, '0');
                    responseAddressData += ",";

                    byte[] byteAddressPre = Encoding.ASCII.GetBytes(responseAddressData);

                    string chsAddressStr = ChsHex.GetHexFromChs(retAddress,"Unicode");
                    byte[] chsAddressByte =new byte[chsAddressStr.Length / 2];

                    getByteHexChs(chsAddressStr, ref chsAddressByte);

                    byte[] responseAddressByte = new byte[byteAddressPre.Length + chsAddressByte.Length + 1];

                    appendByteDataToOtherByteData(ref responseAddressByte, byteAddressPre, 0);
                    appendByteDataToOtherByteData(ref responseAddressByte, chsAddressByte, byteAddressPre.Length);

                    byte[] temp = Encoding.ASCII.GetBytes("#");

                    responseAddressByte[responseAddressByte.Length - 1] = temp[0];

                    responseList.Add(responseAddressByte);
                }

                if (strYear != "")
                {
                    dataEntity.IsFetchData = false;

                    fullGpsCode = base.CodePrefix + fullGpsCode;

                    dataEntity.ReportTime = Convert.ToDateTime(strYear + "-" + strMonth + "-" + strDay + " " + strHour + ":" + strMinute + ":" + strSecond);
                    dataEntity.ReceiveTime = DateTime.Now;
                    dataEntity.Latitude = Convert.ToDecimal(strLatitude);
                    dataEntity.Longitude = Convert.ToDecimal(strLongitude);
                    dataEntity.Speed = Convert.ToDecimal(strSpeed);
                    dataEntity.Direction = Convert.ToDecimal(strDirection);

                    //判断是否是补传数据
                    //设备补传数据与实时数据是混合传输,只能通过ReportTime判断
                    TimeSpan ts = DateTime.Now.Subtract(dataEntity.ReportTime);
                    if (ts.TotalMinutes > 30)
                    {
                        //补传数据
                        dataEntity.IsFetchData = true;
                    }
                    else if (ts.TotalMinutes < -30)
                    {
                        //异常数据
                        dataEntity = null;
                    }

                    //将连接加入关系表
                    OnAddConnectionEvent(fullGpsCode, sessionID);

                    AddCodeVehicleGpsData(fullGpsCode, dataEntity);
                    _CodeVehicleGpsData[fullGpsCode] = dataEntity;
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            if (dataEntity != null)
            {
                debuggerLog += "--dataEntity:" + GetStringByGPSDataEntity(dataEntity);
            }
            Logger.Warn(debuggerLog);
            return dataEntity;
        }
Ejemplo n.º 15
0
 public void SavePhotoData(GPSDataEntity entity)
 {
     try
     {
         if (entity.IsPhotoData)
         {
             ECameraPhotoInfo photo = new ECameraPhotoInfo();
             photo.CameraID = entity.CameraId;
             photo.DoorStatus = entity.DoorStatus;
             photo.GPSCode = entity.GPSCode;
             photo.Latitude = entity.Latitude;
             photo.Longitude = entity.Longitude;
             photo.PhotoPath = entity.PhotoPath;
             photo.PhotoType = entity.RealTimePhotoType;
             photo.PlunderState = entity.PlunderState;
             photo.ReceiveTime = entity.ReceiveTime;
             photo.RecordID = Guid.NewGuid();
             photo.ReportTime = entity.ReportTime;
             ICameraPhotoService service = new CameraPhotoService();
             service.Add(photo);
             entity = null;
         }
     }
     catch (Exception ex)
     {
         Loggers.LogInfo("GPSDataHelper.SavePhotoData:" + ex);
     }
 }
Ejemplo n.º 16
0
        public List<GPSDataEntity> Parse(byte[] buffer, out List<byte[]> responseList, out string fullGpsCode, string sessionID)
        {
            List<GPSDataEntity> ObjectList = new List<GPSDataEntity>();
            string strReceivedOrgMsg = Encoding.ASCII.GetString(buffer);
            responseList = new List<byte[]>();
            fullGpsCode = string.Empty;

            string[] strPosMsgCollection = strReceivedOrgMsg.Split(new string[1] { "##" }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string strPosMsg in strPosMsgCollection)
            {
                string[] strPosInfo = strPosMsg.Split('#');
                if (strPosInfo.Length >= 11 && (strPosInfo.Length - 11) % 4 == 0)
                {
                    int msgCount = (strPosInfo.Length - 11) / 4 + 1;
                    try
                    {
                        string gpscode = GetHexString(long.Parse(strPosInfo[1]), 30);
                        fullGpsCode = base.CodePrefix + gpscode;

                        if (!string.IsNullOrEmpty(fullGpsCode))
                        {
                            OnAddConnectionEvent(fullGpsCode, sessionID);
                        }
                        string strDataType = strPosInfo[5].Trim();
                        //string strCellNo = strPosInfo[7];
                        bool locatedData = true;
                        if (strPosInfo[3].Trim() == "0")
                            locatedData = false;
                        //string[] strPos = strPosInfo[8].Split(',');
                        //string strDate = strPosInfo[9];
                        //string strTime = strPosInfo[10];

                        //DateTime ReportTime = DateTime.ParseExact(strTime, "HHmmss", new System.Globalization.CultureInfo("zh-CN", true));
                        //ReportTime = ReportTime.AddHours(8);
                        for (var i = 0; i < msgCount; i++)
                        {
                            Logger.Info(strDataType);
                            string strCellNo = strPosInfo[7 + 4 * i];
                            string[] strPos = strPosInfo[8 + 4 * i].Split(',');
                            string strDate = strPosInfo[9 + 4 * i];
                            string strTime = strPosInfo[10 + 4 * i];

                            DateTime ReportTime = DateTime.ParseExact(strTime, "HHmmss", new System.Globalization.CultureInfo("zh-CN", true));
                            ReportTime = ReportTime.AddHours(8);
                            GPSDataEntity gpsData = new GPSDataEntity();
                            gpsData.GPSCode = gpscode;
                            gpsData.IsLocatedData = locatedData;
                            gpsData.ReceiveTime = DateTime.Now;
                            gpsData.ReportTime = DateTime.ParseExact(strDate + ReportTime.ToString("HH:mm:ss"), "ddMMyyHH:mm:ss", new System.Globalization.CultureInfo("zh-CN", true));
                            gpsData.Longitude = Convert2Longitude(strPos[0]);
                            gpsData.Latitude = Convert2Latitude(strPos[2]);
                            gpsData.Speed = decimal.Parse(strPos[4]);
                            gpsData.Direction = decimal.Parse(strPos[5]);
                            gpsData.ACCState = 1;
                            gpsData.OilState = 1; 
                            if (strDataType == "POWER")
                            {
                                gpsData.PowerState = 1;
                                Logger.Trace(fullGpsCode + "断电");
                            }
                            else
                            {
                                gpsData.PowerState = 0;
                            }
                            if (strDataType == "SOS" || strDataType == "LPSOS")
                            {
                                gpsData.PlunderState = 0;
                                Logger.Trace(fullGpsCode + "劫警");
                            }
                            else
                                gpsData.PlunderState = 1;

                            //下一步需要将此解析换成异步模式
                            if (strDataType == "SMS" || strDataType == "LPSMS")
                            {
                                string strParsedAddress = InverseGeocoding(gpsData);
                                if (strParsedAddress.Length > 0)
                                {
                                    Logger.Trace("Tracker地址解析(" + fullGpsCode + "):" + strParsedAddress);
                                    responseList.Add(Encoding.ASCII.GetBytes(strParsedAddress));
                                }
                            }
                            ObjectList.Add(gpsData);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(ex);
                    }


                }
            }

            return ObjectList;
        }
Ejemplo n.º 17
0
        private GPSDataEntity ConvertNewEntityToOldEntity(GpsDataCachedEntity? entity)
        {
            if (entity == null) return null;

            GPSDataEntity data = new GPSDataEntity()
            {
                ACCState = entity.Value.ACCState,
                CoolerStatus = entity.Value.CoolerStatus,
                Direction = entity.Value.Direction,
                DoorStatus = entity.Value.DoorStatus,
                IsSendLongIntervalMessage = entity.Value.IsSendLongIntervalMessage,

                IsStartStopCarTime = entity.Value.IsStartStopCarTime,
                Latitude = entity.Value.Latitude,
                Longitude = entity.Value.Longitude,
                OilState = entity.Value.OilState,
                PowerState = entity.Value.PowerState,

                ReportTime = entity.Value.ReportTime,
                Speed = entity.Value.Speed,
                StarkMileage = entity.Value.StarkMileage,
                StartStopCarTime = entity.Value.StartStopCarTime
            };

            return data;
        }
Ejemplo n.º 18
0
        private string InverseGeocoding(GPSDataEntity gpsData)
        {
            StringBuilder sb = new StringBuilder();
            try
            {
                string strAddress = WebRequestHelper.InverseGeocoding(gpsData.Latitude.ToString(), gpsData.Longitude.ToString());


                sb.Append("#LOC#1#");
                sb.Append(Format2BigEndian(Encoding.Unicode.GetBytes(strAddress)));
                sb.Append("##");
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            return sb.ToString();
        }
Ejemplo n.º 19
0
        public override List<GPSDataEntity> GetResultList()
        {


            
            List<GPSDataEntity> list = new List<GPSDataEntity>();
            bool isFetchData = false;
            //OBD数据流信息
            GPSDataEntity dataStream = new GPSDataEntity();
            if (this.ReportTime.AddMinutes(30) < this.ReceiveTime)
            {
                isFetchData = true;
            }
            dataStream.IsFetchData = isFetchData;
            dataStream.IsOBDDataStream = true;
            dataStream.Direction = 0;
            dataStream.GPSCode = base.FullGpsCode;
            dataStream.Latitude = 0;
            dataStream.Longitude = 0;
            dataStream.ReceiveTime = base.ReceiveTime;
            dataStream.ReportTime = this.ReportTime;
            dataStream.OBDDeviceTime = this.ReportTime;
            dataStream.SourceData = base.SourceData;
            dataStream.StarkMileage = 0;

            dataStream.OBDCurrentSpeed =DataStream.CurrentSpeed;
            dataStream.OBDCurrentEngineCoolantTemperature = DataStream.EngineCoolantTemperature;
            dataStream.OBDCurrentEngineRotateSpeed = DataStream.EngineRotateSpeed;
            dataStream.OBDCurrentIntakeAirTemperature = DataStream.IntakeAirTemperature;
            dataStream.OBDCurrentLoadValue =DataStream.LoadValue;
            dataStream.OBDCurrentAirFlow =DataStream.AirFlow;
            dataStream.OBDCurrentThrottleAbsolutePosition = DataStream.ThrottleAbsolutePosition;

            dataStream.OBDCurrentEnvironmentTemperature = DataStream.EnvironmentTemperature;
            dataStream.OBDCurrentLongTermFuelCorrection = DataStream.LongTermFuelCorrection;
            dataStream.OBDCurrentCylinder1IgnitionAdvanceAngle = DataStream.Cylinder1IgnitionAdvanceAngle;
            dataStream.OBDCurrentManifoldAbsolutePressure = DataStream.ManifoldAbsolutePressure;
            dataStream.OBDCurrentInstantFuelConsumption =  DataStream.InstantFuelConsumption;


            list.Add(dataStream);

            //GPS数据
            GPSDataEntity last = Common.GetLastCurrentInfo(base.FullGpsCode);

            GPSDataEntity gpsData = new GPSDataEntity();
            gpsData.IsFetchData = isFetchData;
            gpsData.IsLocatedData = true;
            gpsData.Direction = this.GpsData.Direction;
            gpsData.GPSCode = base.FullGpsCode;
            gpsData.Latitude = this.GpsData.Latitude;
            gpsData.Longitude = this.GpsData.Longitude;
            gpsData.ReceiveTime = base.ReceiveTime;
            gpsData.ReportTime = this.ReportTime;
            gpsData.SourceData = base.SourceData;
            gpsData.Speed = this.GpsData.Speed;
            gpsData.StarkMileage = 0;
            gpsData.BatteryVoltage = 0;

            if ((gpsData.Latitude == 0 || gpsData.Longitude == 0) && last != null)
            {
                gpsData.Latitude = last.Latitude;
                gpsData.Longitude = last.Longitude;
            }

            list.Add(gpsData);


            //故障码
            foreach (var item in Fault.FaultDATAs)
            {
                GPSDataEntity data = new GPSDataEntity();
                data.IsFetchData = isFetchData;
                data.IsOBDFaultData = true;
                data.Direction = 0;
                data.GPSCode = base.FullGpsCode;
                data.Latitude = 0;
                data.Longitude = 0;
                data.ReceiveTime = base.ReceiveTime;
                data.ReportTime = this.ReportTime;
                data.OBDDeviceTime = this.ReportTime;
                data.SourceData = base.SourceData;

                data.OBDFaultType = item.FaultType;
                list.Add(data);
            }

            //警情数据
            foreach (var item in Alarm.AlarmDATAs)
            {
                GPSDataEntity data = new GPSDataEntity();
                data.IsFetchData = isFetchData;
                data.IsOBDAlarmData = true;
                data.Direction = 0;
                data.GPSCode = base.FullGpsCode;
                data.Latitude = 0;
                data.Longitude = 0;
                data.ReceiveTime = base.ReceiveTime;
                data.ReportTime = this.ReportTime;
                data.SourceData = base.SourceData;

                data.OBDAlarmType = item.AlarmType;
                list.Add(data);
            }

            return list;

        }
Ejemplo n.º 20
0
        /// <summary> 获取所有GPS当前表信息
        /// 
        /// </summary>
        internal static List<GPSDataEntity> GetAllProfessionalGpsDynamicData()
        {
            List<GPSDataEntity> gpsDynamicDataList = new List<GPSDataEntity>();
            DbConnection dbConnection = null;
            string strSQL = "select ID,t2.GPSCode,Longitude,Latitude,Speed,Direction,ReportTime,";
            strSQL += "OilState,ACCState,Mileage,PowerState,ExtensionData,StarkMileage,AntennaState,";
            strSQL += "OilBearing,DoorStatus,PhotoPath,t2.VehicleCode,PlunderState,ReceiveTime from gps_currentinfo ";
            strSQL += "t1,gps_installation_info t2 where t1.vehicleCode=t2.vehicleCode and t2.abolish=0";

            try
            {
                DataTable table = new DataTable();
                dbConnection = GetConnection(EnumDBOperationType.CurrentDataDB);
                if (dbConnection == null)
                    return gpsDynamicDataList;
                if (dbConnection.State != ConnectionState.Open)
                    dbConnection.Open();
                DbCommand command = dbConnection.CreateCommand();
                command.CommandText = strSQL;
                DbDataAdapter adapter = new MySqlDataAdapter();
                adapter.SelectCommand = command;
                DataSet ds = new DataSet();
                adapter.Fill(ds, "currentinfo2");

                foreach (DataRow row in ds.Tables["currentinfo2"].Rows)
                {
                    GPSDataEntity entity = new GPSDataEntity();
                    entity.ACCState = TryParseInt32(row["ACCState"].ToString());
                    entity.AntennaState = TryParseInt32(row["AntennaState"].ToString());
                    entity.Direction = TryParseInt32(row["Direction"].ToString());
                    entity.DoorStatus = TryParseInt32(row["DoorStatus"].ToString());
                    entity.GPSCode = row["GPSCode"].ToString();
                    entity.ID = TryParseGuid(row["ID"].ToString());
                    entity.Latitude = TryParseDecimal(row["Latitude"].ToString());
                    entity.Longitude = TryParseDecimal(row["Longitude"].ToString());
                    entity.Mileage = TryParseDecimal(row["Mileage"].ToString());
                    entity.OilBearing = TryParseDecimal(row["OilBearing"].ToString());
                    entity.OilState = TryParseInt32(row["OilState"].ToString());
                    entity.PhotoPath = row["PhotoPath"].ToString();
                    entity.PlunderState = TryParseInt32(row["PlunderState"].ToString());
                    entity.PowerState = TryParseInt32(row["PowerState"].ToString());
                    entity.ReceiveTime = TryParseDateTime(row["ReceiveTime"].ToString());
                    entity.ReportTime = TryParseDateTime(row["ReportTime"].ToString());
                    entity.Speed = TryParseInt32(row["Speed"].ToString());
                    entity.StarkMileage = TryParseDecimal(row["StarkMileage"].ToString());
                    entity.VehicleCode = TryParseGuid(row["VehicleCode"].ToString());
                    gpsDynamicDataList.Add(entity);
                }
                ds.Dispose();
                adapter.Dispose();
                return gpsDynamicDataList;
            }
            catch (Exception ex)
            {
                Loggers.LogInfo("GPSDataHelper.GetAllGpsDynamicData:" + ex);
                return gpsDynamicDataList;
            }
            finally
            {
                CloseDBConnection(dbConnection);
            }
        }
Ejemplo n.º 21
0
        /// <summary>
        /// 将拍照数据写成图片文件
        /// </summary>
        private void WritePicFile(string gpsCode, string CameraID, byte[] Data, byte MediaEncode, byte EventCode, FileMode fileMode,
                                 ref GPSDataEntity entity, ref string DistFileName)
        {
            //图片存放目录名
            string folderName = DateTime.Now.ToString("yyyMMdd");
            //图片存放文件名
            string picFileName = DateTime.Now.ToString("yyyyMMddHHmmss");
            //web端查询图片目录
            string httpFileName = folderName;
            int nIndex = PhotoPath.IndexOf("|");
            string strTmpCode = gpsCode.Substring(4);

            string folder = PhotoPath.Substring(0, nIndex) + "\\" + strTmpCode + "\\" + folderName;
            FileStream stream = null;

            if (Directory.Exists(folder) == false)
            {
                Directory.CreateDirectory(folder);
            }

            try
            {
                string picFileExtension = ".jpg";
                //photoType = 3; 上车或开门拍照  1--定时拍照
                int iType = 2;
                switch (MediaEncode)
                {
                    case 0:
                        if (EventCode == 2)
                            iType = 0;
                        else if (EventCode == 34) //有为部标
                            iType = 3;
                        break;
                    case 1:
                        picFileExtension = ".tif";
                        break;
                    case 2:
                        iType = 8;
                        picFileExtension = ".mp3";
                        break;
                    case 3:
                        iType = 8;
                        picFileExtension = ".wav";
                        break;
                    case 4:
                        iType = 9;
                        picFileExtension = ".wmv";
                        break;
                }


                DistFileName = folder + "\\" + picFileName + "_" + CameraID + picFileExtension;
                stream = new FileStream(DistFileName, fileMode);
                stream.Write(Data, 0, Data.Length);
                stream.Close();
                Logger.Trace("[部标:多媒体数据存储]" + DistFileName);

                //if (MediaEncode == 0 || MediaEncode == 1)
                //{
                //    try
                //    {
                //        Bitmap bmp = new Bitmap(DistFileName);
                //    }
                //    catch
                //    {
                //        Logger.Trace(string.Format("[{0}]图片无法显示", gpsCode));
                //        return;
                //    }
                //}

                if (entity != null)
                {
                    entity.GPSCode = gpsCode;
                    httpFileName += "/" + picFileName + "_" + CameraID + picFileExtension;
                    entity.PhotoPath = httpFileName;
                    entity.IsPhotoData = true;
                    entity.CameraId = Convert.ToInt32(CameraID);
                    entity.RealTimePhotoType = iType;
                }


            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Ejemplo n.º 22
0
        private static void InsertBatchHistoryData(List<GPSDataEntity> entityList)
        {
            HistoryStoreConfig config = CacheUtility.GetHistoryConfigByVehicleCodeFromHT(entityList[0].VehicleCode.ToString());
            if (config == null)
            {
                string log = string.Format("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData:车辆编号为{0}找不到历史存储表。", entityList[0].VehicleCode);
                Loggers.LogInfo(log);
                return;
            }
            else
            {
                Loggers.LogInfo("数据库连接:" + config.AddConStr);
            }
            DbConnection dbConnection = null;
            string tableName = config.TableName;
            int beginIndex = 0;
            int endIndex = Math.Min(ExecuteSQLCount, entityList.Count);
            SQLCreator sqlCreator = new SQLCreator();
            //将list中的数据写入数据库,每次写入IntMinExcuteCount条,直到将list中的数据全部写入为止 
            StringBuilder stringBuilder = null;
            try
            {
                List<List<GPSDataEntity>> lists = new List<List<GPSDataEntity>>();

                if (entityList.Count <= ExecuteSQLCount)
                    lists.Add(entityList);
                else
                {
                    int count = entityList.Count / ExecuteSQLCount;
                    int orthercount = entityList.Count % ExecuteSQLCount;
                    for (int i = 0; i < count; i++)
                    {
                        List<GPSDataEntity> tempEntityList = null;
                        GPSDataEntity[] gpsdatas = new GPSDataEntity[ExecuteSQLCount];
                        entityList.CopyTo(i * ExecuteSQLCount, gpsdatas, 0, ExecuteSQLCount);
                        tempEntityList = new List<GPSDataEntity>(gpsdatas);
                        lists.Add(tempEntityList);
                    }
                    if (orthercount != 0)
                    {
                        int orthercountx = entityList.Count - count * ExecuteSQLCount;
                        GPSDataEntity[] gpsdatas = new GPSDataEntity[orthercountx];
                        entityList.CopyTo(count * ExecuteSQLCount, gpsdatas, 0, orthercountx);
                        List<GPSDataEntity> tempEntityList = new List<GPSDataEntity>(gpsdatas);
                        lists.Add(tempEntityList);
                    }
                }
                Logger.Warn("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData   ConnStr=" + config.AddConStr.Trim());
                dbConnection = GetConnection(config.AddConStr.Trim());
                if (dbConnection == null)
                    return;
                if (dbConnection.State != ConnectionState.Open)
                    dbConnection.Open();
                foreach (List<GPSDataEntity> entitys in lists)
                {
                    stringBuilder = sqlCreator.BuildInsertHistSQL(config, entitys);
                    Logger.Warn("savehistorydata-Sql:" + stringBuilder.ToString());
                    if (stringBuilder != null)
                    {
                        DbTransaction trans = dbConnection.BeginTransaction();
                        DbCommand cmd = dbConnection.CreateCommand();
                        cmd.CommandText = stringBuilder.ToString();
                        cmd.Transaction = trans;
                        try
                        {
                            cmd.ExecuteNonQuery();
                            trans.Commit();
                            Loggers.LogInfo("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData Commit");
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            Loggers.LogInfo("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData rollback:" + ex);
                        }
                    }
                    stringBuilder = null;
                }
            }
            catch (Exception ex)
            {
                Logger.Warn("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData error:" + stringBuilder.ToString());
                Logger.Warn("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData error:" + ex);
            }
            finally
            {
                CloseDBConnection(dbConnection);
            }

        }
Ejemplo n.º 23
0
        /// <summary> 
        /// 分析GPS数据包
        /// </summary>
        /// <param name="buffer">收到的原始数据</param>
        /// <param name="responseList">应答数据</param>
        /// <param name="fullGpsCode">解析后加前缀的GPSCode</param>
        /// <param name="sessionID">会话ID:IP地址+端口号</param>
        /// <returns></returns>
        public GPSDataEntity Parse(byte[] buffer, out List<byte[]> responseList, out string fullGpsCode, string sessionID)
        {
            //传进去赋值,必须在外面创建对象
            GPSDataEntity dataEntity = null;
            responseList = new List<byte[]>();
            string strPicFile = "";
            //GPRS信息帧数据
            GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrame = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame();
            gprsFrame.ReadBuffer(buffer);
            if (!gprsFrame.IsValidData)
            {
                fullGpsCode = "";
                return null;
            }
            fullGpsCode = gprsFrame.GPSCode;
            //将连接加入关系表
            if (!string.IsNullOrEmpty(fullGpsCode))
            {
                OnAddConnectionEvent(fullGpsCode, sessionID);
            }

            if (gprsFrame.IsMutiPackage)
            {

                byte[] bSerialNum = gprsFrame.SerialNum;
                gprsFrame.InitData();

                if (gprsFrame.MsgID == BuBiaoMsgIdType.MediaDataReport)
                {
                    //上传一帧,保存一帧
                    if (gprsFrame.PackageIndex == 1)
                    {
                        //第一帧已包括图片信息定位信息
                        MediaDataReport aMediaDataReport = new MediaDataReport();
                        aMediaDataReport.dataBuffer = gprsFrame.Data;
                        aMediaDataReport.ReadBuffer(gprsFrame.DataLength);

                        dataEntity = new GPSDataEntity();
                        GetGPSDataEntity(fullGpsCode, aMediaDataReport.PhotoLocation, ref dataEntity);

                        WritePicFile(fullGpsCode, aMediaDataReport.ChannelID.ToString(), aMediaDataReport.Data, aMediaDataReport.MediaFomat, aMediaDataReport.EventCode, FileMode.OpenOrCreate, ref dataEntity, ref strPicFile);

                        if (dicCurPicCameraId.ContainsKey(fullGpsCode))
                        {
                            dicCurPicCameraId.Remove(fullGpsCode);
                        }
                        dicCurPicCameraId.Add(fullGpsCode, strPicFile);
                    }
                    else
                    {
                        if (dicCurPicCameraId.ContainsKey(fullGpsCode))
                        {
                            strPicFile = dicCurPicCameraId[fullGpsCode];
                            WritePicFile(strPicFile, gprsFrame.Data, FileMode.Append);
                            dataEntity = null;
                        }
                    }
                }


                Logger.Trace("[部标:分包消息]" + fullGpsCode + "  " + string.Format("消息类型:{0}总包数:{1}, 包序号{2}", gprsFrame.MsgID.ToString(), gprsFrame.PackageCount, gprsFrame.PackageIndex));
                if (_LongMsgProcessor.AddFrame(ref gprsFrame) == false)
                {
                    //最后一包不发送通用应答
                    TMLOrPFCommonRsp PCMPackage = GetTMLOrPFCommonRsp(bSerialNum, BuBiaoMsgIdType.MediaDataReport, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameMPackage = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCMPackage.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCMPackage.dataBuffer);
                    responseList.Add(gprsFrameMPackage.WriteBuffer());

                    return dataEntity;
                }

            }


            //转义之后的数据帧
            byte[] sendBuffer = null;

            switch (gprsFrame.MsgID)
            {
                case BuBiaoMsgIdType.BSJBlindZoneUpload:
                    //博实结盲区补传,跟厂家确认需要给应答,否则会导致终端重发
                    TMLOrPFCommonRsp PCBSJRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.BSJBlindZoneUpload, 0);
                    AddSerialNum(fullGpsCode); ;
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameBSJ = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCBSJRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCBSJRsp.dataBuffer);

                    responseList.Add(gprsFrameBSJ.WriteBuffer());

                    break;

                //终端通用应答
                case BuBiaoMsgIdType.TMLCommonRsp:
                    TMLOrPFCommonRsp TCRsp = new TMLOrPFCommonRsp();
                    TCRsp.dataBuffer = gprsFrame.Data;
                    TCRsp.ReadBuffer();

                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().SaveBubiaoCommonRsp(TCRsp,fullGpsCode);
                    //base.OnDebugDataEvent(base.TransfersType.ToString(), fullGpsCode, "[通用应答] 消息类型:" + TCRsp.RspID.ToString() + " 消息流水号:" + TCRsp.SerialNum.ToString() + " 结果:" + TCRsp.Result.ToString());                    
                    Logger.Trace("[部标:通用应答]" + fullGpsCode + "  " + string.Format("消息类型:{0},消息流水号:{1}, 结果{2}", TCRsp.RspID.ToString(), TCRsp.SerialNum.ToString(), TCRsp.Result.ToString()));
                    break;
                //提问应答消息
                case BuBiaoMsgIdType.TMLAnwerQuestion:
                    TMLAnswerQuestion aTMLAnswerQuestion = new TMLAnswerQuestion();
                    aTMLAnswerQuestion.ReadBuffer(gprsFrame.Data);
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().UpdateBubiaoQuestion(aTMLAnswerQuestion, fullGpsCode);

                    TMLOrPFCommonRsp PCAnswerRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.TMLAnwerQuestion, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameAnswer = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCAnswerRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCAnswerRsp.dataBuffer);
                    responseList.Add(gprsFrameAnswer.WriteBuffer());

                    Logger.Trace("[部标:提问应答]" + fullGpsCode + "  " + gprsFrame.Data[0]);
                    break;
                //事件上报
                case BuBiaoMsgIdType.TMLEventReport:
                    //base.OnDebugDataEvent(base.TransfersType.ToString(), fullGpsCode, "[事件报告]:" + gprsFrame.Data[0]);
                    int iEventId = (int)gprsFrame.Data[0];
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().SaveEventReport(iEventId, fullGpsCode);

                    TMLOrPFCommonRsp PCEventRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.TMLEventReport, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameEvent = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCEventRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCEventRsp.dataBuffer);
                    responseList.Add(gprsFrameEvent.WriteBuffer());

                    Logger.Trace("[部标:事件报告]" + fullGpsCode + "  " + gprsFrame.Data[0]);
                    break;
                //车辆控制应答
                case BuBiaoMsgIdType.TMLVehicleControlRsp:
                    byte[] RspSerialNum = new byte[2];
                    Array.Copy(gprsFrame.Data, 0, RspSerialNum, 0, 2);
                    UInt16 iSerialNum = BitConverter.ToUInt16(BuBiaoData.LocalByteToNetByteOrder(RspSerialNum), 0);

                    byte[] locData = new byte[gprsFrame.Data.Length - 2];
                    Array.Copy(gprsFrame.Data, 2, locData, 0, locData.Length);
                    LocationReport VC_LR = new LocationReport();
                    VC_LR.ReadBuffer(locData, locData.Length);

                    dataEntity = new GPSDataEntity();
                    GetGPSDataEntity(fullGpsCode, VC_LR, ref dataEntity);
                    TMLOrPFCommonRsp TCVehicle = new TMLOrPFCommonRsp();
                    TCVehicle.RspID = BuBiaoMsgIdType.TMLVehicleControl;
                    TCVehicle.SerialNum = iSerialNum;
                    TCVehicle.Result = 0;
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().SaveBubiaoCommonRsp(TCVehicle, fullGpsCode);

                    TMLOrPFCommonRsp PCControlRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.TMLVehicleControlRsp, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameControl = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCControlRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCControlRsp.dataBuffer);
                    responseList.Add(gprsFrameControl.WriteBuffer());

                    //base.OnDebugDataEvent(base.TransfersType.ToString(), fullGpsCode, "[车辆控制应答]:" + iSerialNum.ToString());
                    Logger.Trace("[部标:车辆控制应答]" + fullGpsCode + "  " + iSerialNum.ToString());
                    break;
                //信息点播或取消
                case BuBiaoMsgIdType.TMLInfoPlayOrCancel:
                    TMLMediaPlayOrCancel TCPc = new TMLMediaPlayOrCancel();
                    TCPc.dataBuffer = gprsFrame.Data;
                    TCPc.ReadBuffer();
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().UpdateInfoPlay(TCPc, fullGpsCode);                                        

                    TMLOrPFCommonRsp PCInfoPlayRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.TMLInfoPlayOrCancel, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameInfoPlay = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCInfoPlayRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCInfoPlayRsp.dataBuffer);
                    responseList.Add(gprsFrameInfoPlay.WriteBuffer());

                    //Add2InfoService(TCPc, fullGpsCode);
                    Logger.Trace("[部标:信息点播或取消]" + fullGpsCode + "  " + string.Format("消息类型:{0},flag:{1}", TCPc.InfoType.ToString(), TCPc.InfoFlag.ToString()));
                    break;
                //心跳
                case BuBiaoMsgIdType.TMLKeepAlive:
                    TMLOrPFCommonRsp PCHeartRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.TMLKeepAlive, 0);
                    AddSerialNum(fullGpsCode); ;
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameHeart = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCHeartRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCHeartRsp.dataBuffer);
                    responseList.Add(gprsFrameHeart.WriteBuffer());
                    break;
                //终端注册
                case BuBiaoMsgIdType.TMLRegisterReq:
                    //解析终端注册消息
                    //if (!dicDeviceHasRegiste.ContainsKey(fullGpsCode))
                    //{
                    //    dicDeviceHasRegiste.Add(fullGpsCode, 0);
                    //}

                    //byte hasRegiste = dicDeviceHasRegiste[fullGpsCode];

                    TMLRegisterFrameReq RstReq = new TMLRegisterFrameReq();
                    RstReq.ReadBuffer(gprsFrame.Data, gprsFrame.DataLength);

                    Logger.Trace("终端注册(Device):" + RstReq.LicenceNum + " " + RstReq.DeviceId);

                    TMLRegisterFrameRsp RstRsp = new TMLRegisterFrameRsp();
                    RstRsp.SerialNumByte = gprsFrame.SerialNum;
                    //0--成功 1--车辆已注册 2--数据库无此车辆 3--终端已注册 4--数据库无此终端 
                    RstRsp.Result = 0;
                    RstRsp.Akey = gprsFrame.GPSCode;

                    //if (CheckDeviceIsVaild(fullGpsCode, RstReq.LicenceNum, RstReq.DeviceId))
                    //{
                    //    if (hasRegiste == 1)
                    //    {
                    //        //已经注册                        
                    //        RstRsp.Result = 3;
                    //    }
                    //    else
                    //    {
                    //        RstRsp.Result = 0;
                    //        RstRsp.Akey = gprsFrame.GPSCode;
                    //        dicDeviceHasRegiste[fullGpsCode] = 1;

                    //        lock (dicNeedSaveDeviceRegiste)
                    //        {
                    //            if (dicNeedSaveDeviceRegiste.ContainsKey(fullGpsCode))
                    //                dicNeedSaveDeviceRegiste.Remove(fullGpsCode);
                    //            dicNeedSaveDeviceRegiste.Add(fullGpsCode, RstReq);
                    //        }
                    //    }
                    //}
                    //else
                    //{
                    //        RstRsp.Result = 4;
                    //}

                    RstRsp.WriteBuffer();
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameSendRstRsp = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.TMLRegisterRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(RstRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, RstRsp.dataBuffer);
                    responseList.Add(gprsFrameSendRstRsp.WriteBuffer());

                    Logger.Trace("[部标:终端注册]" + fullGpsCode + " " + RstRsp.Result);
                    break;
                //终端注销
                case BuBiaoMsgIdType.TMLCancelReq:
                    TMLOrPFCommonRsp PCCancelRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.TMLCancelReq, 0);
                    AddSerialNum(fullGpsCode); ;
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameCancel = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCCancelRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCCancelRsp.dataBuffer);
                    responseList.Add(gprsFrameCancel.WriteBuffer());

                    if (dicDeviceHasRegiste.ContainsKey(fullGpsCode))
                    {
                        dicDeviceHasRegiste.Remove(fullGpsCode);
                    }
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().RemoveDeviceRegInfo(fullGpsCode);
                    Logger.Trace("[部标:终端注销]" + fullGpsCode);
                    break;
                //数据透传
                case BuBiaoMsgIdType.DataTransparentUp:
                    TransparentTranData aTransparentTranData = new TransparentTranData();
                    aTransparentTranData.dataBuffer = gprsFrame.Data;
                    aTransparentTranData.ReadBuffer();
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().SaveTransparentTranInfo(aTransparentTranData,fullGpsCode);

                    TMLOrPFCommonRsp PCTTRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.DataTransparentUp, 0);
                    AddSerialNum(fullGpsCode); ;
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameTT = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCTTRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCTTRsp.dataBuffer);
                    responseList.Add(gprsFrameTT.WriteBuffer());
                    Logger.Trace("[部标:数据透传]" + aTransparentTranData.DataType);

                    break;
                //鉴权
                case BuBiaoMsgIdType.TMLAuthenticationReq:

                    TMLAuthenticationReq aTMLAuthenticationReq = new TMLAuthenticationReq();
                    aTMLAuthenticationReq.ReadBuffer(gprsFrame.Data);
                    //取得鉴权码,去判断是否已经合法车辆
                    byte bResult = 0;

                    //改为从内存鉴权
                    //正式环境暂不认证
                    //if (dicPlatformAllVehilceInfo.ContainsKey(aTMLAuthenticationReq.Akey))
                    //    bResult = 0;
                    //else
                    //    bResult = 1;
                    TMLOrPFCommonRsp PCRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.TMLAuthenticationReq, bResult);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameSend = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCRsp.dataBuffer);
                    responseList.Add(gprsFrameSend.WriteBuffer());

                    //设置参数默认值,统一通过终端参数设置

                    SetTMLPara setPara = new SetTMLPara();
                    List<TMLParaItem> paraList = new List<TMLParaItem>();
                    TMLParaItem item;
                    int BufferLen = 0;
                    //终端心跳发送间隔,单位为秒(s)
                    //item = new TMLParaItem(ParaIDType.TMLKeepAlive, 4, BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(0x0000003c)));
                    //BufferLen += item.GetItemLen();
                    //paraList.Add(item);

                    //位置汇报策略
                    item = new TMLParaItem(ParaIDType.LocationReportStrategy, 4, BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(0)));
                    BufferLen += item.GetItemLen();
                    paraList.Add(item);

                    //位置汇报方案
                    item = new TMLParaItem(ParaIDType.LocationReportProgram, 4, BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(0)));
                    BufferLen += item.GetItemLen();
                    paraList.Add(item);

                    //缺省时间汇报间隔
                    item = new TMLParaItem(ParaIDType.DefaultReportInterval, 4, BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(15)));
                    BufferLen += item.GetItemLen();
                    paraList.Add(item);

                    item = new TMLParaItem(ParaIDType.SleepReportInterval, 4, BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(60)));
                    BufferLen += item.GetItemLen();
                    paraList.Add(item);

                    item = new TMLParaItem(ParaIDType.DriverNoLoginReportInterval, 4, BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(60))); ;
                    BufferLen += item.GetItemLen();
                    paraList.Add(item);

                    setPara.AddTMLParaItem(paraList, BufferLen);
                    AddSerialNum(fullGpsCode);
                    gprsFrameSend = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.SetTMLPara, false, EncryptType.NoEncrypt, Convert.ToUInt16(setPara.dataBuffer.Length)
                        , gprsFrame.TMLPhoneNumByte, BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, setPara.dataBuffer);

                    byte[] sendbuffer = gprsFrameSend.WriteBuffer();
                    responseList.Add(sendbuffer);

                    Logger.Trace("[部标:终端签权]" + fullGpsCode + "  " + bResult);
                    break;
                //查询终端参数应答
                case BuBiaoMsgIdType.QueryTMLParaRsp:

                    CmdData cmdData = new CmdData();
                    cmdData.Data.Cmd = ControlCmdType.QueryTerminalParamRsp;
                    cmdData.DataBuffer = gprsFrame.Data;
                    cmdData.Data.DataLen = (ushort)gprsFrame.Data.Length;

                    byte[] RspBuffer = new byte[cmdData.GetLenth()];
                    cmdData.WriteBuffer(0, RspBuffer);


                    //生成公共应答
                    //QueryTMLPara tmlparam = new QueryTMLPara();
                    //tmlparam.ReadBuffer(gprsFrame.Data);
                    //TMLOrPFCommonRsp TCQuery = new TMLOrPFCommonRsp();
                    //TCQuery.RspID = BuBiaoMsgIdType.QueryTMLParaReq;
                    //TCQuery.SerialNum = tmlparam.RspSerialNumber;
                    //TCQuery.Result = 0;
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().SaveBubiaoCommonRsp(TCQuery, fullGpsCode);

                    TMLOrPFCommonRsp PCQuery = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.QueryTMLParaRsp, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameQuery = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCQuery.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCQuery.dataBuffer);
                    responseList.Add(gprsFrameQuery.WriteBuffer());

                    base.OnPostAckMsgHandlerEvent(fullGpsCode, RspBuffer);
                    //base.OnDebugDataEvent(base.TransfersType.ToString(), fullGpsCode, "查询终端参数应答" + gprsFrame.DataLength);
                    Logger.Trace("[部标:查询终端参数应答]" + gprsFrame.DataLength);

                    break;
                case BuBiaoMsgIdType.LocationReport:

                    LocationReport LR = new LocationReport();
                    LR.ReadBuffer(gprsFrame.Data, gprsFrame.DataLength);

                    dataEntity = new GPSDataEntity();
                    GetGPSDataEntity(fullGpsCode, LR, ref dataEntity);
                    DealWithAlarm(LR, gprsFrame, ref responseList);

                    //TO DO

                    break;
                //驾驶员上报
                case BuBiaoMsgIdType.DriverInfoReport:
                    DriverInfoReport aDriverInfoReport = new DriverInfoReport();
                    aDriverInfoReport.dataBuffer = gprsFrame.Data;
                    aDriverInfoReport.ReadBuffer();
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().SaveDriverReport(aDriverInfoReport, fullGpsCode);

                    TMLOrPFCommonRsp PCVehicleRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.DriverInfoReport, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameVehilce = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCVehicleRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCVehicleRsp.dataBuffer);
                    responseList.Add(gprsFrameVehilce.WriteBuffer());
                    Logger.Trace("[部标:驾驶员身份上报]" + fullGpsCode + "  " + aDriverInfoReport.DriverName);

                    break;
                //电子运单上报
                case BuBiaoMsgIdType.ConsignOrderReport:
                    ConsignOrderReport aConsignOrderReport = new ConsignOrderReport();
                    aConsignOrderReport.dataBuffer = gprsFrame.Data;
                    aConsignOrderReport.ReadBuffer();
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().SaveETransForm(aConsignOrderReport, fullGpsCode);

                    TMLOrPFCommonRsp PCOrderRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.ConsignOrderReport, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameOrder = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCOrderRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCOrderRsp.dataBuffer);
                    responseList.Add(gprsFrameOrder.WriteBuffer());

                    Logger.Trace("[部标:电子运单上报]" + fullGpsCode);
                    break;
                //多媒体事件信息上传
                case BuBiaoMsgIdType.MediaEventInfoReport:
                    MediaEventInfoReport aMediaEventInfoReport = new MediaEventInfoReport();
                    aMediaEventInfoReport.ReadBuffer(gprsFrame.Data);

                    TMLOrPFCommonRsp PCMediaReportRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.MediaEventInfoReport, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameMediaReport = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCMediaReportRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCMediaReportRsp.dataBuffer);
                    responseList.Add(gprsFrameMediaReport.WriteBuffer());

                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().SaveMediaEventInfo(aMediaEventInfoReport, fullGpsCode);
                    Logger.Trace("[部标:多媒体事件信息上传]" + fullGpsCode);
                    break;
                //多媒体数据检索应答
                case BuBiaoMsgIdType.MediaDataSearchRsp:

                    CmdData cmdData1 = new CmdData();
                    cmdData1.Data.Cmd = ControlCmdType.MediaDataSearchRsp;
                    cmdData1.DataBuffer = gprsFrame.Data;
                    cmdData1.Data.DataLen = (ushort)gprsFrame.Data.Length;

                    byte[] RspBuffer1 = new byte[cmdData1.GetLenth()];
                    cmdData1.WriteBuffer(0, RspBuffer1);
                    base.OnPostAckMsgHandlerEvent(fullGpsCode, RspBuffer1);


                    TMLOrPFCommonRsp PCMediaSearchRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.MediaDataSearchRsp, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameMediaSearch = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCMediaSearchRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCMediaSearchRsp.dataBuffer);
                    responseList.Add(gprsFrameMediaSearch.WriteBuffer());

                    MediaDataSearchRsp aMediaDataSearchRsp = new MediaDataSearchRsp();
                    aMediaDataSearchRsp.ReadBuffer(gprsFrame.Data);
                    TMLOrPFCommonRsp TCDataSearch = new TMLOrPFCommonRsp();
                    TCDataSearch.RspID = BuBiaoMsgIdType.MediaDataSearch;
                    TCDataSearch.SerialNum = aMediaDataSearchRsp.SerialNumber;
                    TCDataSearch.Result = 0;
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().SaveBubiaoCommonRsp(TCDataSearch, fullGpsCode);

                    Logger.Trace("[部标:多媒体数据检索应答] " + fullGpsCode);

                    break;
                //多媒体数据上传
                case BuBiaoMsgIdType.MediaDataReport:
                    MediaDataReport aMediaDataReport = new MediaDataReport();
                    aMediaDataReport.dataBuffer = gprsFrame.Data;
                    aMediaDataReport.ReadBuffer(gprsFrame.DataLength);

                    //将图片数据写成图片文件存入指定位置
                    if (dicCurPicCameraId.ContainsKey(fullGpsCode))
                    {
                        strPicFile = dicCurPicCameraId[fullGpsCode];
                        WritePicFile(strPicFile, aMediaDataReport.Data, FileMode.OpenOrCreate);
                    }

                    //应答0x8800
                    AddSerialNum(fullGpsCode);
                    byte[] bMediaDataRsp = GetMediaDataReportRsp(aMediaDataReport, null);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameSend3 = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.MediaDataReportRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(bMediaDataRsp.Length), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, bMediaDataRsp);
                    responseList.Add(gprsFrameSend3.WriteBuffer());

                    //平台下发拍照指令
                    if (aMediaDataReport.EventCode == 0)
                    {
                        if (CheckTaskThread.GetInstance().PicTaskPool.ContainsKey(fullGpsCode))
                        {
                            if (CheckTaskThread.GetInstance().PicTaskPool[fullGpsCode].Count > 0)
                            {
                                TakePicTask task = CheckTaskThread.GetInstance().PicTaskPool[fullGpsCode].Peek();
                                if (task != null)
                                {
                                    task.Status = TakePicTaskStatus.LastPicFinished;
                                    CheckTaskThread.GetInstance().DoShoot(fullGpsCode, false);
                                    Logger.Trace("[拍照]完成,更改任务状态 ChannelID" + aMediaDataReport.ChannelID + "--" + task.CameraList[task.CurrentCameraIndex]);
                                }
                            }
                        }
                    }

                    Logger.Trace("[部标:多媒体上传完成]" + fullGpsCode);
                    break;
                //行驶记录上传
                case BuBiaoMsgIdType.TravelRecordReport:
                    TravelRecordReport aTravelRecReport = new TravelRecordReport();
                    aTravelRecReport.DataBuffer = gprsFrame.Data;
                    aTravelRecReport.ReadBuffer();
                    //GPSGatewayServer.DataAccess.FetchData.GetInstance().UpdateTravelRecordReport(aTravelRecReport, fullGpsCode);


                    TMLOrPFCommonRsp PCTravelRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.TravelRecordReport, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFrameTravel = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCTravelRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCTravelRsp.dataBuffer);
                    responseList.Add(gprsFrameTravel.WriteBuffer());
                    Logger.Trace("[部标:行驶记录数据上报]" + fullGpsCode);
                    break;
                case BuBiaoMsgIdType.QueryPositionRsp:
                    QueryPositionRsp aQueryPositionRsp = new QueryPositionRsp();
                    aQueryPositionRsp.dataBuffer = gprsFrame.Data;
                    aQueryPositionRsp.ReadBuffer(gprsFrame.DataLength);
                    //FetchData.GetInstance().UpdateTMLResponse(fullGpsCode, aQueryPositionRsp.SerialNum, DateTime.Now, 0);

                    dataEntity = new GPSDataEntity();
                    GetGPSDataEntity(fullGpsCode, aQueryPositionRsp.LR, ref dataEntity);

                    TMLOrPFCommonRsp PCPositionRsp = GetTMLOrPFCommonRsp(gprsFrame.SerialNum, BuBiaoMsgIdType.QueryPositionRsp, 0);
                    AddSerialNum(fullGpsCode);
                    GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame gprsFramePosition = new GPSGatewayServer.DataModel.BuBiaoData.GPRSFrame(BuBiaoMsgIdType.PFCommonRsp, false, EncryptType.NoEncrypt
                        , Convert.ToByte(PCPositionRsp.getLength()), gprsFrame.TMLPhoneNumByte
                        , BuBiaoData.LocalByteToNetByteOrder(BitConverter.GetBytes(GetSerialNum(fullGpsCode))), 0, 0, PCPositionRsp.dataBuffer);
                    responseList.Add(gprsFramePosition.WriteBuffer());


                    Logger.Trace("[部标:点名]" + fullGpsCode);
                    //DealWithAlarm(aQueryPositionRsp.LR, gprsFrame, ref responseList);
                    break;

            }
            return dataEntity;
        }
Ejemplo n.º 24
0
 private string GetStringByGPSDataEntity(GPSDataEntity entity)
 {
     StringBuilder sb = new StringBuilder();
     if (entity != null)
     {
         sb.Append("gpsCode:");
         sb.Append(entity.GPSCode);
         sb.Append(" IsLocateData:");
         sb.Append(entity.IsLocatedData.ToString());
         sb.Append(" IsFetchData:");
         sb.Append(entity.IsFetchData.ToString());
         sb.Append(" Latitude:");
         sb.Append(entity.Latitude.ToString());
         sb.Append(" Longitude:");
         sb.Append(entity.Longitude.ToString());
         sb.Append(" Speed:");
         sb.Append(entity.Speed.ToString());
         sb.Append(" Direction:");
         sb.Append(entity.Direction.ToString());
         sb.Append(" StarkMileage:");
         sb.Append(entity.StarkMileage.ToString());
         sb.Append(" PowerState:");
         sb.Append(entity.PowerState.ToString());
         sb.Append(" PlunderState:");
         sb.Append(entity.PlunderState.ToString());
         sb.Append(" OilState:");
         sb.Append(entity.OilState.ToString());
         sb.Append(" ACCState:");
         sb.Append(entity.ACCState.ToString());
     }
     return sb.ToString();
 }
Ejemplo n.º 25
0
        private EGPSCurrentInfo ConvertEntity(GPSDataEntity gpsData)
        {
            EGPSCurrentInfo result = new EGPSCurrentInfo();

            result.VehicleCode = gpsData.VehicleCode;
            result.StarkMileage = gpsData.StarkMileage;
            result.Speed = gpsData.Speed;
            result.ReportTime = gpsData.ReportTime;
            result.PowerState = gpsData.PowerState;
            result.PlunderState = gpsData.PlunderState;
            result.PhotoPath = gpsData.PhotoPath;
            result.OilState = gpsData.OilState;
            result.OilBearing = gpsData.OilBearing;
            result.Mileage = gpsData.Mileage;
            result.Longitude = gpsData.Longitude;
            result.Latitude = gpsData.Latitude;
            result.GPSCode = gpsData.GPSCode;

            result.DoorStatus = gpsData.DoorStatus;
            result.Direction = gpsData.Direction;
            result.AntennaState = gpsData.AntennaState;
            result.ACCState = gpsData.ACCState;
            result.Detector1 = gpsData.Detector1;
            result.Detector2 = gpsData.Detector2;

            result.Detector3 = gpsData.Detector3;
            result.Detector4 = gpsData.Detector4;

            return result;
        }
Ejemplo n.º 26
0
 /// <summary>
 /// 设置GPSDataEntity各个状态的默认值,当收到心跳包时,将上一点的定位数据当为当前的定位数据处理
 /// </summary>
 /// <param name="dataEntity"></param>
 /// <returns></returns>
 private GPSDataEntity SetStatusValue4GPSDataEntity(GPSDataEntity dataEntity)
 {
     dataEntity.ReportTime = DateTime.Now;
     dataEntity.ReceiveTime = DateTime.Now;
     dataEntity.StarkMileage = 0;
     dataEntity.Mileage = 0;
     dataEntity.Speed = 0;
     dataEntity.ACCState = 0;
     dataEntity.IsLocatedData = true;
     dataEntity.PlunderState = 1;
     dataEntity.OilState = 1;
     dataEntity.PowerState = 0;
     dataEntity.IsFetchData = false;
     return dataEntity;
 }
Ejemplo n.º 27
0
        /// <summary>
        /// 预处理数据,计算里程,数据类型判断
        /// </summary>
        /// <param name="g"></param>
        private void CountMileageAndCheckData(ref GPSDataEntity g)
        {
            try
            {

                GPSDataEntity last = Common.GetLastCurrentInfo(g.GPSCode);
                GPSGatewayServer.CmdType.GPSIntervalType GPSIntervalType = GPSGatewayServer.CmdType.GPSIntervalType.Ignore;

                //预处理数据
                _PreProcessor.PreProcess(ref g, last, ref GPSIntervalType);
            }
            catch (System.Exception ex)
            {
                PES.Beehive.Logging.Logger.Trace("CountMileageAndCheckData Error:" + ex.StackTrace);
                PES.Beehive.Logging.Logger.Error(ex);
            }
        }
Ejemplo n.º 28
0
 /// <summary>
 /// 根据GPSDataEntity的经纬度,解析得到中文地址
 /// </summary>
 /// <param name="gpsData"></param>
 /// <returns></returns>
 private string InverseGeocoding(GPSDataEntity gpsData)
 {
     string strAddress = string.Empty;
     try
     {
         strAddress = WebRequestHelper.InverseGeocoding(gpsData.Latitude.ToString(), gpsData.Longitude.ToString());
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
     }
     return strAddress;
 }
Ejemplo n.º 29
0
        /// <summary>
        /// 获取车辆状态
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="bufferStartPos"></param>
        /// <param name="data"></param>
        private void getVehicleStatus(byte[] buffer, ref int bufferStartPos, ref GPSDataEntity data)
        {
            string strVehicleStatus1 = "";
            string strVehicleStatus2 = "";
            string strVehicleStatus3 = "";

            try
            {
                if (buffer[0] == 0x24)//定位数据
                {
                    strVehicleStatus1 = change16StringTo2String(changeByteTo16Code(buffer[bufferStartPos], true, 2, '0'));
                    bufferStartPos++;
                    data.PowerState = strVehicleStatus1.Substring(3, 1) == "0" ? 0 : 1;
                    data.OilState = strVehicleStatus1.Substring(4, 1) == "0" ? 0 : 1;

                    strVehicleStatus2 = change16StringTo2String(changeByteTo16Code(buffer[bufferStartPos], true, 2, '0'));
                    bufferStartPos++;
                    //data.PowerState = strVehicleStatus2.Substring(4, 1) == "0" ? 1 : 0;

                    strVehicleStatus3 = change16StringTo2String(changeByteTo16Code(buffer[bufferStartPos], true, 2, '0'));
                    bufferStartPos++;
                    data.ACCState = strVehicleStatus3.Substring(5, 1) == "0" ? 0 : 1;
                }
                else if (buffer[0] == 0x2A && buffer[15] == 0x56 && (buffer[16] == 0x31 || buffer[16] == 0x32))//心跳、短信查询位置
                {
                    strVehicleStatus1 = change16StringTo2String(changeASCIITo10String(2, buffer, bufferStartPos));
                    bufferStartPos += 2;
                    data.PowerState = strVehicleStatus1.Substring(3, 1) == "0" ? 0 : 1;
                    data.OilState = strVehicleStatus1.Substring(4, 1) == "0" ? 0 : 0;

                    strVehicleStatus2 = change16StringTo2String(changeASCIITo10String(2, buffer, bufferStartPos));
                    bufferStartPos += 2;
                    //data.PowerState = strVehicleStatus2.Substring(4, 1) == "0" ? 1 : 0;

                    strVehicleStatus3 = change16StringTo2String(changeASCIITo10String(2, buffer, bufferStartPos));
                    bufferStartPos += 2;
                    data.ACCState = strVehicleStatus3.Substring(5, 1) == "0" ? 0 : 1;                    
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Ejemplo n.º 30
0
        /// <summary> 保存单个车辆的历史记录
        /// 
        /// </summary>
        private static void InsertHistoryData(GPSDataEntity entity)
        {
            List<GPSDataEntity> entityList = new List<GPSDataEntity>();
            entityList.Add(entity);

            HistoryStoreConfig config = CacheUtility.GetGPSHistoryStoreTable(entity.VehicleCode.ToString());
            if (config == null)
            {
                string log = string.Format("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData:车辆编号为{0}找不到历史存储表。", entity.VehicleCode);
                Loggers.LogInfo(log);
                return;
            }
            //DbConnection dbConnection = GetHistoryConnection(config);
            DbConnection dbConnection = null;
            string tableName = config.TableName;

            SQLCreator sqlCreator = new SQLCreator();
            //将list中的数据写入数据库,每次写入IntMinExcuteCount条,直到将list中的数据全部写入为止 
            StringBuilder stringBuilder = null;
            try
            {
                stringBuilder = sqlCreator.BuildInsertHistSQL(config, entityList);
                Logger.Warn("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData:" + stringBuilder.ToString());
                if (stringBuilder != null)
                {
                    dbConnection = GetConnection(EnumDBOperationType.HistoryDataDB);
                    if (dbConnection == null)
                        return;
                    if (dbConnection.State != ConnectionState.Open)
                        dbConnection.Open();
                    DbTransaction trans = dbConnection.BeginTransaction();

                    DbCommand cmd = dbConnection.CreateCommand();
                    cmd.Transaction = trans;
                    cmd.CommandText = stringBuilder.ToString();
                    try
                    {
                        cmd.ExecuteNonQuery();
                        trans.Commit();
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        Loggers.LogInfo("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData rollback:" + ex);
                    }
                }
            }
            catch (Exception ex)
            {
                Loggers.LogInfo("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData error:" + stringBuilder.ToString());
                Loggers.LogInfo("PES.GPS.GPSStorage.GPSDataHelper.InsertHistoryData error:" + ex);
            }
            finally
            {
                stringBuilder = null;
                CloseDBConnection(dbConnection);
            }
        }