DbUpload.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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. CacleCls.isUploadFirstOver = false;
  53. //进行数据上传操作
  54. RESTfulResult<List<DjPbModel>> rmRst = firstService.doDbUpload(lm);
  55. if (rmRst.Succeed)
  56. {
  57. if (rmRst.Data.Count == lm.Count)
  58. {
  59. //直接重写文件
  60. FileOption.clearFile(FileTypeEnum.一次数据);
  61. //然后对图片进行压缩及修改名称处理
  62. foreach (DjPbModel dm in rmRst.Data)
  63. {
  64. dic.Add(dm.key, dm.value);
  65. }
  66. }
  67. else
  68. {
  69. //清理下文件
  70. FileOption.clearFile(FileTypeEnum.一次数据);
  71. //重写下未成功的数据
  72. foreach (MeterWorkRailwayActFirst first in lm)
  73. {
  74. DjPbModel pm = rmRst.Data.Where(s => s.key == first.actualFirstNo).FirstOrDefault();
  75. if (pm == null || string.IsNullOrEmpty(pm.key) || string.IsNullOrEmpty(pm.value))
  76. {
  77. //Thread.Sleep(100);
  78. bool flag = FileOption.WriterDb(first, FileTypeEnum.一次数据, out string msgInfo);
  79. if (!flag)
  80. {
  81. lg.WriteLog(LogType.serverLog, $"重写失败:{msgInfo},数据:{JsonConvert.SerializeObject(first, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }) }");
  82. }
  83. }
  84. else
  85. {
  86. dic.Add(pm.key, pm.value);
  87. }
  88. }
  89. }
  90. if (dic.Count > 0) imgControl.ZipFiles(dic);
  91. CacleCls.isUploadFirstOver = true;
  92. }
  93. else
  94. {
  95. //计量失败,播报失败,然后写led屏幕及日志
  96. lg.WriteLog(LogType.serverLog, rmRst.ResultMessage);
  97. }
  98. }
  99. }
  100. catch (Exception e)
  101. {
  102. lg.WriteLog(LogType.serverLog, "一次数据上传异常:" + e.Message);
  103. }
  104. bReadFlag = false;
  105. strRtMsgInfo = "";
  106. try
  107. {
  108. List<MeterWorkRailwayActual> lmNet = FileOption.ReadDb<MeterWorkRailwayActual>(FileTypeEnum.结净数据, ref bReadFlag, ref strRtMsgInfo);
  109. if (bReadFlag)
  110. {
  111. CacleCls.isUploadNetOver = false;
  112. //进行数据上传操作
  113. RESTfulResult<List<DjPbModel>> rmRst = netService.doDbUpload(lmNet);
  114. if (rmRst.Succeed)
  115. {
  116. if (rmRst.Data.Count == lmNet.Count)
  117. {
  118. //直接重写文件
  119. FileOption.clearFile(FileTypeEnum.结净数据);
  120. //然后对图片进行压缩及修改名称处理
  121. foreach (DjPbModel dm in rmRst.Data)
  122. {
  123. dic.Add(dm.key, dm.value);
  124. }
  125. }
  126. else
  127. {
  128. //清理下文件
  129. FileOption.clearFile(FileTypeEnum.结净数据);
  130. //重写下未成功的数据
  131. foreach (MeterWorkRailwayActual net in lmNet)
  132. {
  133. DjPbModel pm = rmRst.Data.Where(s => s.key == net.actualNo).FirstOrDefault();
  134. if (pm == null || string.IsNullOrEmpty(pm.key) || string.IsNullOrEmpty(pm.value))
  135. {
  136. //Thread.Sleep(100);
  137. bool flag = FileOption.WriterDb(net, FileTypeEnum.结净数据, out string msgInfo);
  138. if (!flag)
  139. {
  140. lg.WriteLog(LogType.serverLog, $"重写失败:{msgInfo},数据:{JsonConvert.SerializeObject(net, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }) }");
  141. }
  142. }
  143. else
  144. {
  145. dic.Add(pm.key, pm.value);
  146. }
  147. }
  148. }
  149. if (dic.Count > 0) imgControl.ZipFiles(dic);
  150. CacleCls.isUploadNetOver = true;
  151. }
  152. else
  153. {
  154. //计量失败,播报失败,然后写led屏幕及日志
  155. lg.WriteLog(LogType.serverLog, rmRst.ResultMessage);
  156. }
  157. }
  158. }
  159. catch (Exception e)
  160. {
  161. lg.WriteLog(LogType.serverLog, "结净数据上传异常:" + e.Message);
  162. }
  163. }
  164. }
  165. catch (Exception ex)
  166. {
  167. lg.WriteLog(LogType.SystemLog, "数据上传异常:" + ex.Message);
  168. }
  169. Thread.Sleep(AppConfigCache.sleepUploadTime);
  170. }
  171. }
  172. }
  173. }