DASCDataJob.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. using log4net;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using Quartz;
  5. using RDIFramework.Utilities;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Data;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Net;
  12. using System.Text;
  13. using TimedUpload.utils;
  14. namespace TimedUpload.QuartzJobs
  15. {
  16. /// <summary>
  17. /// 大安水厂出厂水定时上传任务
  18. /// </summary>
  19. [DisallowConcurrentExecution]
  20. public class DASCDataJob : IJob
  21. {
  22. private readonly ILog log = LogManager.GetLogger(typeof(DASCDataJob));
  23. static IDbProvider dbHelper
  24. {
  25. get
  26. {
  27. var DbDefine = DbFactoryProvider.GetProvider(CurrentDbType.SqlServer, SystemConfig.pipeLineDbConn);
  28. return DbDefine;
  29. }
  30. }
  31. private string manufacturerCode = SystemConfig.pipeLineManufacturerCode;
  32. private string uploadUrl = SystemConfig.pipeLineNewUploadUrl;
  33. public void Execute(IJobExecutionContext context)
  34. {
  35. //1.获取要上传的测定信息
  36. //2.清水池 237 获取出厂累计流量1、出厂瞬时流量1
  37. //3.流量压力 236 获取出厂累计流量2、出厂瞬时流量2、二号出水压力、出厂累计流量3、出厂瞬时流量3
  38. try
  39. {
  40. string sql = "",devId,devNo,devName,lastUpdateTime;
  41. sql = "Select ID,考核表编号,最后更新时间,名称 From 设备信息 Where 考核表编号<>''";
  42. DataTable dt = dbHelper.Fill(sql);
  43. for (int row = 0; row < dt.Rows.Count; row++)
  44. {
  45. devId = dt.Rows[row]["ID"].ToString();//ID
  46. devNo = dt.Rows[row]["考核表编号"].ToString();//考核表编号
  47. lastUpdateTime= dt.Rows[row]["最后更新时间"].ToString();
  48. devName = dt.Rows[row]["名称"].ToString();
  49. switch (devId)
  50. {
  51. case "237":
  52. DealQSC(devId, devNo, lastUpdateTime, devName);
  53. break;
  54. case "236":
  55. DealQSC2(devId, devNo, lastUpdateTime, devName);
  56. break;
  57. }
  58. }
  59. }
  60. catch(Exception ex)
  61. {
  62. log.Error("异常信息:" + ex.Message);
  63. }
  64. }
  65. //处理清水池流量
  66. public void DealQSC(string devId,string devNo,string lastUpdateTime,string devName)
  67. {
  68. try
  69. {
  70. int year = Convert.ToDateTime(lastUpdateTime).Year;
  71. string sql = "";
  72. string strTableName = GetHisTable(devId, year.ToString());
  73. if (string.IsNullOrEmpty(strTableName))
  74. return;
  75. //先取数据
  76. sql = "Select 采集时间,出厂累计流量1、出厂瞬时流量1 From " + strTableName + " Where 采集时间 > '" + lastUpdateTime + "' Order By 采集时间 asc";
  77. DataTable dtDevHis = dbHelper.Fill(sql);
  78. //接口是一条一条接收数据
  79. StringBuilder dataBuilder = new StringBuilder();
  80. for (int hisRow = 0; hisRow < dtDevHis.Rows.Count; hisRow++)
  81. {
  82. FlowEntity entity = new FlowEntity()
  83. {
  84. devId=devId,
  85. devName=devName,
  86. MeterAssessmentCode= devNo,
  87. GetDateTime=dtDevHis.Rows[hisRow]["采集时间"].ToString(),
  88. NetCumulativeFlow= dtDevHis.Rows[hisRow]["出厂累计流量1"].ToString(),
  89. PositiveCumulativeFlow= dtDevHis.Rows[hisRow]["出厂累计流量1"].ToString(),
  90. NegativeCumulativeFlow = "0",
  91. InstantaneousFlow= dtDevHis.Rows[hisRow]["出厂瞬时流量1"].ToString(),
  92. Pressure= "",
  93. BatteryVoltageValue= ""
  94. };
  95. CompactAndSendData(entity);
  96. }
  97. //跨年判断
  98. CrossYear(year, devId);
  99. }
  100. catch(Exception ex)
  101. {
  102. log.Error("设备名称:" + devName + ",出现异常:" + ex.Message);
  103. }
  104. //end
  105. }
  106. //处理流量压力
  107. public void DealQSC2(string devId,string devNo,string lastUpdateTime,string devName)
  108. {
  109. try
  110. {
  111. int year = Convert.ToDateTime(lastUpdateTime).Year;
  112. string sql = "";
  113. string strTableName = GetHisTable(devId, year.ToString());
  114. if (string.IsNullOrEmpty(strTableName))
  115. return;
  116. //先取数据
  117. sql = "Select 采集时间,出厂累计流量2、出厂瞬时流量2,二号出水压力、出厂累计流量3、出厂瞬时流量3 From " + strTableName + " Where 采集时间 > '" + lastUpdateTime + "' Order By 采集时间 asc";
  118. DataTable dtDevHis = dbHelper.Fill(sql);
  119. //接口是一条一条接收数据
  120. StringBuilder dataBuilder = new StringBuilder();
  121. for (int hisRow = 0; hisRow < dtDevHis.Rows.Count; hisRow++)
  122. {
  123. //2号管
  124. FlowEntity entity2 = new FlowEntity()
  125. {
  126. devId = devId,
  127. devName = devName,
  128. MeterAssessmentCode = devNo,
  129. GetDateTime = dtDevHis.Rows[hisRow]["采集时间"].ToString(),
  130. NetCumulativeFlow = dtDevHis.Rows[hisRow]["出厂累计流量2"].ToString(),
  131. PositiveCumulativeFlow = dtDevHis.Rows[hisRow]["出厂累计流量2"].ToString(),
  132. NegativeCumulativeFlow = "0",
  133. InstantaneousFlow = dtDevHis.Rows[hisRow]["出厂瞬时流量2"].ToString(),
  134. Pressure = dtDevHis.Rows[hisRow]["二号出水压力"].ToString(),
  135. BatteryVoltageValue = ""
  136. };
  137. CompactAndSendData(entity2);
  138. //3号管
  139. FlowEntity entity3 = new FlowEntity()
  140. {
  141. devId = devId,
  142. devName = devName,
  143. MeterAssessmentCode = devNo,
  144. GetDateTime = dtDevHis.Rows[hisRow]["采集时间"].ToString(),
  145. NetCumulativeFlow = dtDevHis.Rows[hisRow]["出厂累计流量3"].ToString(),
  146. PositiveCumulativeFlow = dtDevHis.Rows[hisRow]["出厂累计流量3"].ToString(),
  147. NegativeCumulativeFlow = "0",
  148. InstantaneousFlow = dtDevHis.Rows[hisRow]["出厂瞬时流量3"].ToString(),
  149. Pressure = "",
  150. BatteryVoltageValue = ""
  151. };
  152. CompactAndSendData(entity3);
  153. }
  154. //跨年判断
  155. CrossYear(year, devId);
  156. }
  157. catch (Exception ex)
  158. {
  159. log.Error("设备名称:" + devName + ",出现异常:" + ex.Message);
  160. }
  161. //end
  162. }
  163. #region 请求接口
  164. public string postSend(string url, string param)
  165. {
  166. string strResult = "";
  167. Encoding myEncode = Encoding.GetEncoding("UTF-8");
  168. byte[] postBytes = Encoding.UTF8.GetBytes(param);
  169. HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
  170. req.Method = "POST";
  171. req.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
  172. req.ContentLength = postBytes.Length;
  173. try
  174. {
  175. using (Stream reqStream = req.GetRequestStream())
  176. {
  177. reqStream.Write(postBytes, 0, postBytes.Length);
  178. }
  179. using (WebResponse res = req.GetResponse())
  180. {
  181. using (StreamReader sr = new StreamReader(res.GetResponseStream(), myEncode))
  182. {
  183. strResult = sr.ReadToEnd();
  184. return strResult;
  185. }
  186. }
  187. }
  188. catch (WebException ex)
  189. {
  190. log.Error("Post数据出错:" + ex.Message);
  191. return "";
  192. }
  193. }
  194. #endregion
  195. #region 组装数据发送数据
  196. public void CompactAndSendData(FlowEntity entity)
  197. {
  198. StringBuilder dataBuilder = new StringBuilder();
  199. dataBuilder.Clear();
  200. dataBuilder.Append("{");
  201. dataBuilder.Append("\"ManufacturerCode\":\"").Append(manufacturerCode).Append("\",");
  202. dataBuilder.Append("\"MeterAssessmentCode\":\"").Append(entity.MeterAssessmentCode).Append("\",");
  203. dataBuilder.Append("\"GetDateTime\":\"").Append(Convert.ToDateTime(DataBaseHelper.DataFormat(entity.GetDateTime)).ToString("yyyy-MM-dd HH:mm:ss")).Append("\",");
  204. dataBuilder.Append("\"NetCumulativeFlow\":\"").Append(DataBaseHelper.DataFormat(entity.NetCumulativeFlow)).Append("\",");
  205. dataBuilder.Append("\"PositiveCumulativeFlow\":\"").Append(DataBaseHelper.DataFormat(entity.PositiveCumulativeFlow)).Append("\",");
  206. dataBuilder.Append("\"NegativeCumulativeFlow\":\"").Append(DataBaseHelper.DataFormat(entity.NegativeCumulativeFlow)).Append("\",");
  207. dataBuilder.Append("\"InstantaneousFlow\":\"").Append(DataBaseHelper.DataFormat(entity.InstantaneousFlow)).Append("\",");
  208. dataBuilder.Append("\"Pressure\":\"").Append(DataBaseHelper.DataFormat(entity.Pressure)).Append("\",");
  209. dataBuilder.Append("\"BatteryVoltageValue\":\"").Append(DataBaseHelper.DataFormat(entity.BatteryVoltageValue)).Append("\",");
  210. dataBuilder.Append("\"MeterFault\":\"").Append("0").Append("\",");
  211. dataBuilder.Append("\"BoxDoorAlarm\":\"").Append("NULL").Append("\",");
  212. dataBuilder.Append("\"remark1\":\"").Append("NULL").Append("\",");
  213. dataBuilder.Append("\"remark2\":\"").Append("NULL").Append("\",");
  214. dataBuilder.Append("\"remark3\":\"").Append("NULL").Append("\",");
  215. dataBuilder.Append("\"remark4\":\"").Append("NULL").Append("\",");
  216. dataBuilder.Append("\"remark5\":\"").Append("NULL").Append("\"");
  217. dataBuilder.Append("}");
  218. string updateReuslt = postSend(uploadUrl, dataBuilder.ToString());
  219. JObject jo = (JObject)JsonConvert.DeserializeObject(updateReuslt);
  220. string execCode = jo["execCode"].ToString();//执行返回代码
  221. string execMsg = jo["execMsg"].ToString();//返回返回描述
  222. //执行成功
  223. if (execCode == "0")
  224. {
  225. //更新 记录表
  226. string UpdateHisSmartSql = "UPDATE 设备信息 SET 最后更新时间 = '" + entity.GetDateTime + "' WHERE ID = " + entity.devId;
  227. dbHelper.ExecuteNonQuery(UpdateHisSmartSql);
  228. }
  229. else
  230. {
  231. //插入异常表
  232. log.Debug("设备名称:" + entity.devName + ",插入异常:" + execMsg);
  233. }
  234. }
  235. #endregion
  236. #region 历史记录表判断
  237. public string GetHisTable(string devId,string year)
  238. {
  239. string tableName = "";
  240. tableName="历史记录_" + ("000000" + devId).Substring(devId.Length, 6) + "_" + year;
  241. if (DataBaseHelper.CheckTableExiste(tableName))
  242. {
  243. tableName = "";
  244. }
  245. return tableName;
  246. }
  247. #endregion
  248. #region 跨年判断
  249. public void CrossYear(int year,string devId)
  250. {
  251. int thisYear = DateTime.Now.Year;
  252. string sql = "";
  253. if (thisYear > year)
  254. {
  255. //跨年处理 记录表的更新时间 更新为新一年的 最初时间 例如"2019-01-01 00:00:00"
  256. sql = "UPDATE 设备信息 SET 最后更新时间 = '" + thisYear + "-01-01 00:00:00.000" + "' WHERE ID = " + devId;
  257. dbHelper.ExecuteNonQuery(sql);
  258. }
  259. }
  260. #endregion
  261. }
  262. }