NBSubscribeListenerService.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. using LeaRun.Data;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Data;
  8. using LeaRun.Util;
  9. using Newtonsoft.Json.Linq;
  10. namespace LeaRun.Application.Service.NBManage
  11. {
  12. public class NBSubscribeListenerService
  13. {
  14. SqlHelper sqlHelper = new SqlHelper("NBDB");
  15. public void GetMeterHistory()
  16. {
  17. try
  18. {// 更新表维护 看看有无新设备加入
  19. string taskSql = "SELECT * FROM RMRS_MeterInfo AS rmi WHERE rmi.IOT_Code IS NOT NULL AND rmi.IOT_Code NOT IN ( SELECT rmt.IOT_Code FROM dbo.RMRS_HistoryTask AS rmt)";
  20. DataTable dtIsNewMeter = sqlHelper.ExecuteDataTable(taskSql, CommandType.Text, null);
  21. if (dtIsNewMeter.Rows.Count > 0)
  22. {
  23. //新设备插入 维护表
  24. for (int row = 0; row < dtIsNewMeter.Rows.Count; row++)
  25. {
  26. string IOT_Code = dtIsNewMeter.Rows[row]["IOT_Code"].ToString();
  27. string insertTask = "INSERT INTO RMRS_HistoryTask(IOT_Code,LastUpdateTime) VALUES('" + IOT_Code + "','2018/04/01 00:00:00')";
  28. sqlHelper.ExecuteNoParams(insertTask, CommandType.Text);
  29. }
  30. }
  31. string selTask = "SELECT * FROM dbo.RMRS_HistoryTask";
  32. DataTable dtTasl = sqlHelper.ExecuteDataTable(selTask, CommandType.Text, null);
  33. for (int row = 0; row < dtTasl.Rows.Count; row++)
  34. {
  35. DateTime dtLastTime = DateTime.Parse(dtTasl.Rows[row]["LastUpdateTime"].ToString());
  36. DateTime endTime = DateTime.Now;
  37. string IOT_Code = dtTasl.Rows[row]["IOT_Code"].ToString();
  38. //根据IOT_Code 查找设备信息
  39. string selMeter = "SELECT * FROM RMRS_MeterInfo AS rmi WHERE rmi.IOT_Code = '" + IOT_Code + "'";
  40. DataTable dtMeter = sqlHelper.ExecuteDataTable(selMeter, CommandType.Text, null);
  41. if (dtMeter.Rows.Count != 1)
  42. {
  43. continue;
  44. }
  45. string meterId = dtMeter.Rows[0]["MeterID"].ToString();
  46. //华为平台数据
  47. JObject jObj = NBCommon.GetDeviceHistoryData(IOT_Code, dtLastTime.ToString(), endTime.ToString());
  48. DataTable dtHistory = NBCommon.FormatJObjectHistoryData(jObj,"1");
  49. //历史数据保存
  50. for (int i = 0; i < dtHistory.Rows.Count; i++)
  51. {
  52. string total = dtHistory.Rows[i]["total"].ToString();//净累计
  53. string read_time = dtHistory.Rows[i]["read_time"].ToString();//读取时间
  54. string fa_status = dtHistory.Rows[i]["fa_status"].ToString();//阀门状态
  55. string batteryLevel = dtHistory.Rows[i]["batteryLevel"].ToString();//电池电压
  56. string total_up = dtHistory.Rows[i]["total_up"].ToString();//正累计
  57. string total_down = dtHistory.Rows[i]["total_down"].ToString();//负累计
  58. string instance = dtHistory.Rows[i]["instance"].ToString();//瞬时流量
  59. string battery_status = dtHistory.Rows[i]["battery_status"].ToString();//电池状态
  60. string attack = dtHistory.Rows[i]["attack"].ToString();//磁攻击报警
  61. string attack_ever = dtHistory.Rows[i]["attack_ever"].ToString();//曾经磁攻击报警
  62. string q4 = dtHistory.Rows[i]["q4"].ToString();//水流量超过水表Q4值
  63. string rsrp = dtHistory.Rows[i]["rsrp"].ToString();//信号强度
  64. string ecl = dtHistory.Rows[i]["ecl"].ToString();//信号覆盖等级
  65. string snr = dtHistory.Rows[i]["snr"].ToString();//信噪比
  66. if (read_time == "2000-00-00 00:00:00")
  67. {
  68. continue;
  69. }
  70. string insertHisSql = "INSERT INTO RMRS_HistoryRecord (MeterID,ValveStatus,Reading,ReadingDT,Total,TotalUp,TotalDown,Instance,BatteryStatus,Attack,AttackEver,Q4,Rsrp,Ecl,Snr,BatteryLevel) VALUES("
  71. + meterId + ",'" + fa_status + "' , " + total + ",'" + read_time + "',"+total+","+total_up+","+total_down+","+instance+", '"+battery_status+"' , '"+attack+"' , '"+attack_ever+"' , '"+q4+"' , '"+rsrp+"' , '"+ecl+"' , '"+snr+"' , '"+batteryLevel+"')";
  72. sqlHelper.ExecuteNoQuery(insertHisSql, null);
  73. //将最新数据同步更新到MeterInfo 表中
  74. string upSQL = "UPDATE RMRS_MeterInfo SET NowReading = '"+ total + "', NowRadingDT = '"+ read_time + "', BatteryVoltage = " + batteryLevel + "WHERE MeterID = " +meterId;
  75. sqlHelper.ExecuteNoParams(upSQL,CommandType.Text);
  76. }
  77. //taskHistory 表维护
  78. string udpateTask = "UPDATE RMRS_HistoryTask SET LastUpdateTime = '" + DateTime.Now.ToString() + "' WHERE IOT_Code='" + IOT_Code + "'";
  79. sqlHelper.ExecuteNoParams(udpateTask, CommandType.Text);
  80. }
  81. }
  82. catch (Exception ex)
  83. {
  84. throw ex;
  85. }
  86. }
  87. /// <summary>
  88. /// 消息订阅列表
  89. /// </summary>
  90. /// <returns></returns>
  91. public DataTable GetNotiryLists()
  92. {
  93. try
  94. {
  95. string selSql = "SELECT * FROM dbo.RMRS_ApplicationNotify";
  96. DataTable dtResult = sqlHelper.ExecuteDataTable(selSql, CommandType.Text, null);
  97. return dtResult;
  98. }
  99. catch (Exception ex)
  100. {
  101. return null;
  102. }
  103. }
  104. /// <summary>
  105. /// 更新消息订阅状态
  106. /// </summary>
  107. /// <param name="notityId"></param>
  108. /// <returns></returns>
  109. public bool UpdateNotifyStatus(string notityId)
  110. {
  111. try
  112. {
  113. string updateSql = "UPDATE RMRS_ApplicationNotify SET NotiryStatus='已订阅', NotifyTime=GETDATE() WHERE NotifyId = " + notityId ;
  114. return sqlHelper.ExecuteNonQuery(updateSql,CommandType.Text,null)>0;
  115. }
  116. catch (Exception ex)
  117. {
  118. return false;
  119. }
  120. }
  121. /// <summary>
  122. /// 更新设备绑定状态
  123. /// </summary>
  124. /// <param name="iot_code"></param>
  125. /// <returns></returns>
  126. public bool UpdateMeterStatus(string iot_code)
  127. {
  128. try
  129. {
  130. string updateSql = "UPDATE RMRS_MeterInfo SET CommunicationState = 1 WHERE IOT_Code = '"+iot_code+"'";
  131. string updateforBatchRegister = "UPDATE RMRS_NBBatchRegister SET CommunicationState = 1 WHERE DeviceID = '" + iot_code + "'";
  132. sqlHelper.ExecuteNoParams(updateforBatchRegister, CommandType.Text);
  133. return sqlHelper.ExecuteNoParams(updateSql,CommandType.Text)>0;
  134. }
  135. catch (Exception ex)
  136. {
  137. return false;
  138. }
  139. }
  140. }
  141. }