DbUpload.cs 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. using com.hnshituo.core.webapp.vo;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. namespace RailLocalMeter
  10. {
  11. public class DbUpload
  12. {
  13. Log lg = Log.GetInstance();
  14. private bool blThreadFlag = true;
  15. Thread DataCollectThread = null;//采集进程
  16. MeterWorkRailwayActFirstService firstService = new MeterWorkRailwayActFirstService();
  17. MeterWorkRailwayActualService netService = new MeterWorkRailwayActualService();
  18. ImageOption imgControl = new ImageOption();
  19. public DbUpload()
  20. {
  21. DataCollectThread = new Thread(new ThreadStart(DataCollect));
  22. }
  23. public void start()
  24. {
  25. DataCollectThread.Start();
  26. }
  27. public void stop()
  28. {
  29. blThreadFlag = false;
  30. }
  31. private void DataCollect()
  32. {
  33. if (!blThreadFlag) return;
  34. Dictionary<string, string> dic = new Dictionary<string, string>();
  35. while (blThreadFlag)
  36. {
  37. try
  38. {
  39. //重量小于500且网络正常时触发
  40. if (CacleCls.weight < 500 && CacleCls.serverFlag)
  41. {
  42. dic.Clear();
  43. //若本地存在计量数据未进行上传的,则进行数据上传并得到返回的结果
  44. //得到结果后构造成Dictionary然后进行图片操作,修改图片名称及位置
  45. bool bReadFlag = false;
  46. string strRtMsgInfo = "";
  47. try
  48. {
  49. List<MeterWorkRailwayActFirst> lm = FileOption.ReadDb<MeterWorkRailwayActFirst>(FileTypeEnum.一次数据, ref bReadFlag, ref strRtMsgInfo);
  50. if (bReadFlag)
  51. {
  52. //进行数据上传操作
  53. RESTfulResult<List<DjPbModel>> rmRst = firstService.doDbUpload(lm);
  54. if (rmRst.Succeed)
  55. {
  56. if (rmRst.Data.Count == lm.Count)
  57. {
  58. //直接重写文件
  59. FileOption.clearFile();
  60. //然后对图片进行压缩及修改名称处理
  61. foreach (DjPbModel dm in rmRst.Data)
  62. {
  63. dic.Add(dm.key, dm.value);
  64. }
  65. }
  66. else
  67. {
  68. //清理下文件
  69. FileOption.clearFile();
  70. //重写下未成功的数据
  71. foreach (MeterWorkRailwayActFirst first in lm)
  72. {
  73. DjPbModel pm = rmRst.Data.Where(s => s.key == first.actualFirstNo).FirstOrDefault();
  74. if (pm == null || string.IsNullOrEmpty(pm.key) || string.IsNullOrEmpty(pm.value))
  75. {
  76. //Thread.Sleep(100);
  77. bool flag = FileOption.WriterDb(first, FileTypeEnum.一次数据, out string msgInfo);
  78. if (!flag)
  79. {
  80. lg.WriteLog(LogType.serverLog, $"重写失败:{msgInfo},数据:{JsonConvert.SerializeObject(first, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }) }");
  81. }
  82. }
  83. else
  84. {
  85. dic.Add(pm.key, pm.value);
  86. }
  87. }
  88. }
  89. if (dic.Count > 0) imgControl.ZipFiles(dic);
  90. }
  91. else
  92. {
  93. //计量失败,播报失败,然后写led屏幕及日志
  94. lg.WriteLog(LogType.serverLog, rmRst.ResultMessage);
  95. }
  96. }
  97. }
  98. catch (Exception e)
  99. {
  100. lg.WriteLog(LogType.serverLog, "一次数据上传异常:" + e.Message);
  101. }
  102. bReadFlag = false;
  103. strRtMsgInfo = "";
  104. try
  105. {
  106. List<MeterWorkRailwayActual> lmNet = FileOption.ReadDb<MeterWorkRailwayActual>(FileTypeEnum.结净数据, ref bReadFlag, ref strRtMsgInfo);
  107. if (bReadFlag)
  108. {
  109. //进行数据上传操作
  110. RESTfulResult<List<DjPbModel>> rmRst = netService.doDbUpload(lmNet);
  111. if (rmRst.Succeed)
  112. {
  113. if (rmRst.Data.Count == lmNet.Count)
  114. {
  115. //直接重写文件
  116. FileOption.clearFile();
  117. //然后对图片进行压缩及修改名称处理
  118. foreach (DjPbModel dm in rmRst.Data)
  119. {
  120. dic.Add(dm.key, dm.value);
  121. }
  122. }
  123. else
  124. {
  125. //清理下文件
  126. FileOption.clearFile();
  127. //重写下未成功的数据
  128. foreach (MeterWorkRailwayActual net in lmNet)
  129. {
  130. DjPbModel pm = rmRst.Data.Where(s => s.key == net.actualNo).FirstOrDefault();
  131. if (pm == null || string.IsNullOrEmpty(pm.key) || string.IsNullOrEmpty(pm.value))
  132. {
  133. //Thread.Sleep(100);
  134. bool flag = FileOption.WriterDb(net, FileTypeEnum.结净数据, out string msgInfo);
  135. if (!flag)
  136. {
  137. lg.WriteLog(LogType.serverLog, $"重写失败:{msgInfo},数据:{JsonConvert.SerializeObject(net, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }) }");
  138. }
  139. }
  140. else
  141. {
  142. dic.Add(pm.key, pm.value);
  143. }
  144. }
  145. }
  146. if (dic.Count > 0) imgControl.ZipFiles(dic);
  147. }
  148. else
  149. {
  150. //计量失败,播报失败,然后写led屏幕及日志
  151. lg.WriteLog(LogType.serverLog, rmRst.ResultMessage);
  152. }
  153. }
  154. }
  155. catch (Exception e)
  156. {
  157. lg.WriteLog(LogType.serverLog, "结净数据上传异常:" + e.Message);
  158. }
  159. }
  160. }
  161. catch (Exception ex)
  162. {
  163. lg.WriteLog(LogType.SystemLog, "数据上传异常:" + ex.Message);
  164. }
  165. Thread.Sleep(AppConfigCache.sleepUploadTime);
  166. }
  167. }
  168. }
  169. }