Newer
Older
SensorHub / SensorHub.Well / Well.cs
root on 17 Sep 2021 5 KB first commit
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);
            }
            
        }
    }
}