DbUpload.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using com.hnshituo.core.webapp.vo;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. namespace CarLocalMeter
  9. {
  10. public class DbUpload
  11. {
  12. Log lg = Log.GetInstance();
  13. private bool blThreadFlag = true;
  14. Thread DataCollectThread = null;//采集进程
  15. MeterWorkCarActualFirstService workCarActualFirstService = new MeterWorkCarActualFirstService();
  16. ImageOption imgControl = new ImageOption();
  17. public DbUpload()
  18. {
  19. DataCollectThread = new Thread(new ThreadStart(DataCollect));
  20. }
  21. public void start()
  22. {
  23. DataCollectThread.Start();
  24. }
  25. public void stop()
  26. {
  27. blThreadFlag = false;
  28. }
  29. private void DataCollect()
  30. {
  31. if (!blThreadFlag) return;
  32. Dictionary<string, string> dic = new Dictionary<string, string>();
  33. while (blThreadFlag)
  34. {
  35. try
  36. {
  37. //重量小于500且网络正常时触发
  38. if (CacleCls.weight < 500 && CacleCls.serverFlag)
  39. {
  40. dic.Clear();
  41. //若本地存在计量数据未进行上传的,则进行数据上传并得到返回的结果
  42. //得到结果后构造成Dictionary然后进行图片操作,修改图片名称及位置
  43. bool bReadFlag = false;
  44. string strRtMsgInfo = "";
  45. List<MeterWorkCarActualFirst> lm = FileOption.ReadDb<MeterWorkCarActualFirst>(ref bReadFlag, ref strRtMsgInfo);
  46. if (bReadFlag)
  47. {
  48. //进行数据上传操作
  49. RESTfulResult<List<DjPbModel>> rmRst = workCarActualFirstService.doDbUpload(lm);
  50. if (rmRst.Succeed)
  51. {
  52. if (rmRst.Data.Count == lm.Count)
  53. {
  54. //直接重写文件
  55. FileOption.clearFile();
  56. //然后对图片进行压缩及修改名称处理
  57. foreach (DjPbModel dm in rmRst.Data)
  58. {
  59. dic.Add(dm.key, dm.value);
  60. }
  61. }
  62. else
  63. {
  64. //清理下文件
  65. FileOption.clearFile();
  66. //重写下未成功的数据
  67. foreach (MeterWorkCarActualFirst first in lm)
  68. {
  69. DjPbModel pm = rmRst.Data.Where(s => s.key == first.actualFirstNo).FirstOrDefault();
  70. if (pm == null || string.IsNullOrEmpty(pm.key) || string.IsNullOrEmpty(pm.value))
  71. {
  72. //Thread.Sleep(100);
  73. bool flag = FileOption.WriterDb(new ActualFirstModel { actualFirstNo = first.actualFirstNo, baseSpotNo = first.baseSpotNo, baseSpotName = first.baseSpotName, carNo = first.carNo, createTime = first.createTime, meterWeight = first.meterWeight }, out string msgInfo);
  74. if (!flag)
  75. {
  76. lg.WriteLog(LogType.serverLog, $"重写失败:{msgInfo},数据:actualFirstNo{first.actualFirstNo},baseSpotNo:{first.baseSpotNo},baseSpotName:{first.baseSpotName},carNo:{first.carNo},createTime:{first.createTime},meterWeight:{first.meterWeight}");
  77. }
  78. }
  79. else
  80. {
  81. dic.Add(pm.key, pm.value);
  82. }
  83. }
  84. }
  85. if (dic.Count > 0) imgControl.ZipFiles(dic);
  86. }
  87. else
  88. {
  89. lg.WriteLog(LogType.serverLog, rmRst.ResultMessage);
  90. }
  91. }
  92. }
  93. }
  94. catch (Exception ex)
  95. {
  96. lg.WriteLog(LogType.SystemLog, "数据上传异常:" + ex.Message);
  97. }
  98. Thread.Sleep(AppConfigCache.sleepUploadTime);
  99. }
  100. }
  101. }
  102. }