public override void execute(Tag tag) { //TODO LIST:解析流量数据保存流量数据 UploadTag flowTag = tag as UploadTag; int itv = flowTag.CollectInter; String collecTime = flowTag.CollectTime; int len = flowTag.Len; String dataValue = flowTag.DataValue; AdlerCmd.adlerSession.Logger.Info("流量数据上传TAG:oid:" + flowTag.Oid + " 采集间隔: " + itv + "采集时间:" + collecTime + "上传数值:" + dataValue); int num = len / 12; //上传的流量数据个数 List <Model.DjFlowInfo> djs = new List <DjFlowInfo>(); DateTime baseTime = Convert.ToDateTime(AdlerCmd.currentSystemDate + " " + collecTime); for (int i = 0; i < num; i++) { DjFlowInfo flowInfo = new DjFlowInfo(); String insFlow = strHexToFloat(dataValue.Substring(i * 24, 8)).ToString(); String posFlow = strHexToFloat(dataValue.Substring(i * 24 + 8, 8)).ToString(); String negFlow = strHexToFloat(dataValue.Substring(i * 24 + 16, 8)).ToString(); flowInfo.INSDATA = insFlow; flowInfo.POSDATA = posFlow; flowInfo.NEGDATA = negFlow; flowInfo.NETDATA = (float.Parse(posFlow) + float.Parse(negFlow)) + ""; //TODO LIST:电池电量的获取 flowInfo.LOGTIME = DateTime.Now; flowInfo.UPTIME = baseTime.AddMinutes(i * itv); flowInfo.DEVID = AdlerCmd.devCode; djs.Add(flowInfo); } new BLL.DjFlow().insert(djs); new BLL.DjFlow().saveAlarmInfo(djs); new BLL.DjFlow().updateDevStatus(AdlerCmd.devCode); AdlerCmd.adlerSession.Logger.Info("流量数据保存成功"); }
/// <summary> /// An internal function to bind values parameters for insert /// </summary> /// <param name="parms">Database parameters</param> /// <param name="flow">Values to bind to parameters</param> private void SetAdapterParameters(OracleParameter[] parms, DjFlowInfo flow) { parms[0].Value = flow.DEVID; if (null != flow.INSDATA) { parms[1].Value = flow.INSDATA; } else { parms[1].Value = DBNull.Value; } if (null != flow.NETDATA) { parms[2].Value = flow.NETDATA; } else { parms[2].Value = DBNull.Value; } if (null != flow.POSDATA) { parms[3].Value = flow.POSDATA; } else { parms[3].Value = DBNull.Value; } if (null != flow.NEGDATA) { parms[4].Value = flow.NEGDATA; } else { parms[4].Value = DBNull.Value; } if (null != flow.SIGNAL) { parms[5].Value = flow.SIGNAL; } else { parms[5].Value = DBNull.Value; } if (null != flow.CELL) { parms[6].Value = flow.CELL; } else { parms[6].Value = DBNull.Value; } if (null != flow.STATUS) { parms[7].Value = flow.STATUS; } else { parms[7].Value = DBNull.Value; } if (null != flow.UPTIME) { parms[8].Value = flow.UPTIME; } else { parms[8].Value = DBNull.Value; } if (null != flow.LOGTIME) { parms[9].Value = flow.LOGTIME; } else { parms[9].Value = DBNull.Value; } }
public override void ExecuteCommand(DGNSZSession session, StringRequestInfo requestInfo) { try { //session.Logger.Info("==================================================================="); session.Logger.Info("多功能漏损监测仪:流量数据已经上传!"); session.Logger.Info(requestInfo.Body); string[] data = requestInfo.Body.Split(','); if (string.IsNullOrEmpty(session.MacID)) { session.MacID = data[5]; } string cfg = data[6]; string flow = data[10]; //获取采集时间 string year = (Int32.Parse(data[9].Substring(8, 2), System.Globalization.NumberStyles.HexNumber) + 2000).ToString(); string mon = Int32.Parse(data[9].Substring(6, 2), System.Globalization.NumberStyles.HexNumber).ToString(); string day = Int32.Parse(data[9].Substring(4, 2), System.Globalization.NumberStyles.HexNumber).ToString(); string hor = Int32.Parse(data[9].Substring(2, 2), System.Globalization.NumberStyles.HexNumber).ToString(); string min = Int32.Parse(data[9].Substring(0, 2), System.Globalization.NumberStyles.HexNumber).ToString(); DateTime upTime = Convert.ToDateTime(year + "-" + mon + "-" + day + " " + hor + ":" + min + ":00"); //采集间隔 int interval = Int16.Parse(cfg.Substring(0, 4), System.Globalization.NumberStyles.HexNumber); //获取一共有多少个瞬时流量数据 int count = 24 * 60 / Int16.Parse(cfg.Substring(4, 4), System.Globalization.NumberStyles.HexNumber) / Int16.Parse(cfg.Substring(0, 4), System.Globalization.NumberStyles.HexNumber); List <Model.DjFlowInfo> djs = new List <DjFlowInfo>(); for (int i = 0; i < count; i++) { Model.DjFlowInfo dj = new DjFlowInfo(); //设备ID dj.DEVID = session.MacID; //瞬时流量 string insStr = flow.Substring(i * 8, 8); byte[] insBt = { byte.Parse(insStr.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(insStr.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(insStr.Substring(6, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(insStr.Substring(4, 2), System.Globalization.NumberStyles.HexNumber) }; float finsData = BitConverter.ToSingle(insBt, 0); if (finsData < -6000) { dj.INSDATA = "0"; } else { dj.INSDATA = finsData.ToString(); } //获取净累计流量 string netStr = flow.Substring(8 * count + 8 * i, 8); byte[] ntBt = { byte.Parse(netStr.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(netStr.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(netStr.Substring(6, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(netStr.Substring(4, 2), System.Globalization.NumberStyles.HexNumber) }; dj.NETDATA = BitConverter.ToSingle(ntBt, 0).ToString(); //获取正累计流量 string psStr = flow.Substring(8 * 2 * count + 8 * i, 8); byte[] psBt = { byte.Parse(psStr.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(psStr.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(psStr.Substring(6, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(psStr.Substring(4, 2), System.Globalization.NumberStyles.HexNumber) }; dj.POSDATA = BitConverter.ToSingle(psBt, 0).ToString(); //获取负累计流量 string ngStr = flow.Substring(8 * 3 * count + 8 * i, 8); byte[] ngBt = { byte.Parse(ngStr.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(ngStr.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(ngStr.Substring(6, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse(ngStr.Substring(4, 2), System.Globalization.NumberStyles.HexNumber) }; float fnegData = BitConverter.ToSingle(ngBt, 0); if (fnegData < -6000) { dj.NEGDATA = "0"; } else { dj.NEGDATA = fnegData.ToString(); } //电池电量 dj.CELL = Int16.Parse(data[11], System.Globalization.NumberStyles.HexNumber).ToString(); //采集时间 dj.UPTIME = upTime; //记录时间 dj.LOGTIME = DateTime.Now; djs.Add(dj); upTime = upTime.AddMinutes(-interval * (count - i - 1)); } new BLL.DjFlow().insert(djs); session.Logger.Info("多功能漏损监测仪器:流量数据已经保存!"); } catch (Exception e) { session.Logger.Error("==================================================================="); session.Logger.Error("多功能漏损监测仪器:流量数据保存失败!"); session.Logger.Error(requestInfo.Body); session.Logger.Error(e.ToString()); session.Logger.Error("==================================================================="); } finally { session.Logger.Info("==================================================================="); } }