You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
6.4 KiB

using System;
using GPSBusiness.Enum;
using GPSBusiness.Helper;
using GPSBusiness.GPSStandard;
using Newtonsoft.Json;
namespace GPSBusiness.BBGPSStandard
{
public static class BbGpsStandardService
{
/// <summary>
/// 获取返回给设备的数据
/// </summary>
/// <param name="bytes"></param>
/// <param name="standardToCarGpsHandler"></param>
/// <param name="conid"></param>
/// <param name="mdtText"></param>
/// <returns></returns>
public static GPSResponseData GetGpsResponseDataForEqu(byte[] bytes,
IStandardToCarGPSHandler standardToCarGpsHandler, IntPtr conid, string mdtText)
{
byte[] byteDataId = new byte[2];
//反转义
byte[] buffer = ByteConvert.Fzy(bytes);
Array.Copy(buffer, 1, byteDataId, 0, 2);
Array.Reverse(byteDataId);
UInt16 uint16DataId = BitConverter.ToUInt16(byteDataId, 0);
string dataId = uint16DataId.ToString("X2").PadLeft(4, '0');
string terminalNo = ByteConvert.ByteArrayToHexStr(buffer).Substring(11, 11);//设备号
"NO".Log().Debug(ByteConvert.ByteArrayToHexStr(buffer).ToString());
DataHead dataHead = new DataHead();
dataHead.Frombytes(dataHead, buffer);
"GetGpsResponseDataForEqu".Log().DebugFormat(" >terminalNo={0},uint16DataId=0x{1}", terminalNo, dataId);
//"GetGpsResponseDataForEqu".Log().DebugFormat(" >dataHead={0}", JsonConvert.SerializeObject(dataHead));
//接收信息(分类)
#region 0x0002,终端心跳
if (uint16DataId == 0x0002)
{
//平台通用应答
var responds = CommonResponse(dataHead);
//确定该心跳是否为沃瑞特的gps,是则后续进行:gps在线状态更新。MyGpsServer.UpdateGpsRealTimeGpsStateWrt(gpsModel);
//var vehicle = standardToCarGpsHandler.GetGps(bytes, terminalNo, conid, true);
//if (vehicle != null && vehicle.TerminalType == TerminalTypeEnum.C12.ToEnumInt())
//{
// responds.GpsInfo = vehicle;
//}
return responds;
}
#endregion
#region 0x0100,终端注册 0x0100
if (uint16DataId == 0x0100)
{
//注册消息
var model = new Data_0100();
model.FromBytes(model, dataHead.DataContent);
//应答消息
var model2 = new Data_8100
{
Mdt_SerialNo = dataHead.DataSerialNo,
Result = 0x00,
AuthorizationCode = "regist123"
};
//0:成功;1:车辆已被注册;2:数据库中无该车辆;3:终端已被注册;4:数据库中无该终端
var dataHeadModel = new DataHead
{
DataID = 0x8100,
CenterID = dataHead.CenterID,
MdtID = dataHead.MdtID
};
return new GPSResponseData()
{
ReturnData = model2.GetBytes(dataHeadModel),
};
}
#endregion
#region 0x0102,终端鉴权,鉴权7-8次不成功,终端为再次注册
if (uint16DataId == 0x0102)
{
return CommonResponse(dataHead);
}
#endregion
#region 0x0200,位置数据0x0200
if (uint16DataId == 0x0200)
{
var responds = CommonResponse(dataHead);
responds.GpsInfo = standardToCarGpsHandler.GetGps(bytes, terminalNo, conid, false);
"GetGpsResponseDataForEqu".Log().DebugFormat(" >GpsInfo={0}", JsonConvert.SerializeObject(responds.GpsInfo));
return responds;
}
#endregion
#region 0x0704,定位数据批量上传--0x0704,(沃瑞特:盲区补传)
if (uint16DataId == 0x0704)
{
//处理gps批量数据。然后通用回复。
return CommonResponse(dataHead) ;
}
#endregion
#region 0xA003,请求服务器时间0xA003,回应:0xB003。//沃瑞特gps
if (uint16DataId == 0xA003)
{
var now = DateTime.Now;
int year = Convert.ToInt32(now.Year.ToString().Substring(2, 2));
byte rYear = ByteConvert.IntToBcd(year);
byte rMonth = ByteConvert.IntToBcd(now.Month);
byte rDay = ByteConvert.IntToBcd(now.Day);
byte rHour = ByteConvert.IntToBcd(now.Hour);
byte rMinute = ByteConvert.IntToBcd(now.Minute);
byte rSecond = ByteConvert.IntToBcd(now.Second);
byte[] times = { rYear, rMonth, rDay, rHour, rMinute, rSecond };
var model = new Data_B003
{
Mdt_SerialNo = dataHead.DataSerialNo,
SysTime = times
};
var dataHeadModel = new DataHead
{
DataID = 0xB003,
CenterID = dataHead.CenterID,
MdtID = dataHead.MdtID,
};
return new GPSResponseData()
{
ReturnData = model.GetBytes(dataHeadModel),
};
}
#endregion
//0x8001,平台通用应答
return CommonResponse(dataHead);
}
/// <summary>
/// 通用回复
/// </summary>
/// <param name="dataHead"></param>
/// <returns></returns>
private static GPSResponseData CommonResponse(DataHead dataHead)
{
var model2 = new Data_8001
{
Mdt_SerialNo = dataHead.DataSerialNo,
Mdt_DataID = dataHead.DataID,
Result = 0x00
};
var dataHeadModel = new DataHead
{
DataID = 0x8001,
CenterID = dataHead.CenterID,
MdtID = dataHead.MdtID
};
var responds = new GPSResponseData()
{
ReturnData = model2.GetBytes(dataHeadModel)
};
return responds;
}
}
}