using SensorHub.Servers; using SensorHub.Servers.Commands.CASICCommands; using SensorHub.Servers.JsonFormat; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SensorHub.Well { public class Well : CommandBase<CasicSession, StringRequestInfo> { public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; String leng = requestInfo.Parameters[2]; String devCode = requestInfo.Parameters[3]; String routeFlag = requestInfo.Parameters[4]; String dstNodeAddr = requestInfo.Parameters[5]; String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; String source = requestInfo.Parameters[9]; String devName = "Well"; if (source.Contains("-")) { session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); session.Close(); } //print the receving data String devType = "井盖状态监测仪"; String operType = Common.getOpeTypeByPdu(pduType); session.Logger.Info("AD接收数据:" + requestInfo.Body); session.Logger.Info("设备类型:" + devType); session.Logger.Info("操作类型:" + operType); session.Logger.Info("会话:" + session.HubAddr + "," + session.SessionID); List<Tag> tags = Common.getTags(settings, session); //具体业务处理 String collectDate = ""; List<String> eventList = new List<String>(); List<DatasJson> datasList = new List<DatasJson>(); List<String> startupList = new List<String>(); foreach (Tag tag in tags) { if (!(tag is UploadTag)) { //非业务处理 if (tag != null && tag is SystemDateTag) { SystemDateTag systemDateTag = tag as SystemDateTag; collectDate = systemDateTag.CollectDate; continue; } if (tag != null && tag is SensorStartupTag) { SensorStartupTag sensorStartup = tag as SensorStartupTag; String imei = sensorStartup.IMEI; String iccid = sensorStartup.ICCID; startupList.Add(imei); startupList.Add(iccid); session.Logger.Info("设备开机上报,设备编号DEVCODE:" + devCode + " IMEI:" + imei + " ICCID:" + iccid); continue; } } else { //业务处理 UploadTag uploadTag = tag as UploadTag; switch (uploadTag.BizType) { case 7: //开关状态 TagHandler wellHandler = new WellTagHandler(); wellHandler.resolve(tag, session); if(wellHandler.DataList.Count > 0) { DateTime upTime = Convert.ToDateTime(collectDate + " " + wellHandler.CollecTime); String uptime = upTime.ToString("yyyy") + upTime.ToString("MM") + upTime.ToString("dd") + upTime.ToString("HH") + upTime.ToString("mm") + upTime.ToString("ss"); switch ((byte)wellHandler.DataList[0]) { case 0: datasList.Add(new WellDatasJson(uptime, "00")); break; case 1: eventList.Add("WellOpenAlarm");//井盖开启 break; case 2: eventList.Add("WellDeviceBadAlarm");//设备故障 break; case 3: //eventList.Add("WellLowBatteryAlarm");//低电量 break; default: eventList.Add("WellUnknown");//未知异常 break; } } break; default: session.Logger.Info("未知业务类型!"); break; } } } //Common.sendMessage(session, "Well", devCode, -1, eventList, datasList, startupList); Common.kafkaProduce(session, devName, devCode, -1, null, null, null, eventList, datasList, startupList); if (source != "433") //433井盖不要求回复 { byte[] btPdu = new byte[2]; //2个字节 if (operType == "TrapRequest") { btPdu[0] = 0x05; } else if (operType == "StartupRequest") { btPdu[0] = 0x09; } btPdu[1] = 0x86; Common.sendConfig(session, devCode, routeFlag, source, btPdu); } } } }