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; }
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; }
/// <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; }
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; }
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); } } }
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; }
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; }
/// <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; } } }
/// <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)); }
/// <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); } }
private void AddCodeVehicleGpsData(string gpsCode, GPSDataEntity dataEntity) { lock (objLocker) { if (_CodeVehicleGpsData.ContainsKey(gpsCode)) { _CodeVehicleGpsData[gpsCode] = dataEntity; } else { _CodeVehicleGpsData.Add(gpsCode, dataEntity); } } }
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; }
/// <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)); } } } }
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; }
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); } }
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; }
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; }
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(); }
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; }
/// <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); } }
/// <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); } }
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); } }
/// <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; }
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(); }
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; }
/// <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; }
/// <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); } }
/// <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; }
/// <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); } }
/// <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); } }