PublicService.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using System.Linq;
  6. using Microsoft.Extensions.Hosting;
  7. using MySystem;
  8. using MySystem.Models;
  9. using Library;
  10. using LitJson;
  11. public class PublicService : BackgroundService
  12. {
  13. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  14. {
  15. while (!stoppingToken.IsCancellationRequested)
  16. {
  17. ProgressStart();
  18. int timespan = 1;
  19. await Task.Delay(timespan);
  20. }
  21. }
  22. private void ProgressStart()
  23. {
  24. List<Brand> BrandList = RedisDbconn.Instance.GetList<Brand>("brands", 1, 100);
  25. foreach(Brand brand in BrandList)
  26. {
  27. Dictionary<string, string> data = new Dictionary<string, string>();
  28. try
  29. {
  30. data = RedisDbconn.Instance.RPop<Dictionary<string, string>>(brand.QueueName);
  31. if (data != null)
  32. {
  33. DoQueue(data["Content"], brand);
  34. }
  35. }
  36. catch (Exception ex)
  37. {
  38. if (!data.ContainsKey("ErrNum"))
  39. {
  40. data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  41. data.Add("ErrMsg", ex.ToString());
  42. data.Add("ErrNum", "1");
  43. RedisDbconn.Instance.AddList(brand.QueueName + "_err", data);
  44. }
  45. else
  46. {
  47. int ErrNum = int.Parse(data["ErrNum"]) + 1;
  48. data["ErrTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  49. data["ErrMsg"] = ex.ToString();
  50. data["ErrNum"] = ErrNum.ToString();
  51. if (ErrNum > 2)
  52. {
  53. RedisDbconn.Instance.AddList(brand.QueueName + "_dead", data);
  54. }
  55. else
  56. {
  57. RedisDbconn.Instance.AddList(brand.QueueName + "_err", data);
  58. }
  59. }
  60. }
  61. }
  62. }
  63. // private void ProgressStart()
  64. // {
  65. // List<Brand> BrandList = RedisDbconn.Instance.GetList<Brand>("brands", 1, 100);
  66. // Parallel.ForEach(BrandList, brand =>
  67. // {
  68. // Dictionary<string, string> data = new Dictionary<string, string>();
  69. // try
  70. // {
  71. // data = RedisDbconn.Instance.RPop<Dictionary<string, string>>(brand.QueueName);
  72. // if (data != null)
  73. // {
  74. // DoQueue(data["Content"], brand);
  75. // }
  76. // }
  77. // catch (Exception ex)
  78. // {
  79. // if (!data.ContainsKey("ErrNum"))
  80. // {
  81. // data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  82. // data.Add("ErrMsg", ex.ToString());
  83. // data.Add("ErrNum", "1");
  84. // RedisDbconn.Instance.AddList(brand.QueueName + "_err", data);
  85. // }
  86. // else
  87. // {
  88. // int ErrNum = int.Parse(data["ErrNum"]) + 1;
  89. // data["ErrTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  90. // data["ErrMsg"] = ex.ToString();
  91. // data["ErrNum"] = ErrNum.ToString();
  92. // if (ErrNum > 2)
  93. // {
  94. // RedisDbconn.Instance.AddList(brand.QueueName + "_dead", data);
  95. // }
  96. // else
  97. // {
  98. // RedisDbconn.Instance.AddList(brand.QueueName + "_err", data);
  99. // }
  100. // }
  101. // }
  102. // });
  103. // }
  104. //要执行的方法
  105. public void DoQueue(string data, Brand brand)
  106. {
  107. //数据开始入库
  108. JsonData jsonObj = JsonMapper.ToObject(data);
  109. string fields = "";
  110. string fieldvals = "";
  111. foreach (FieldRelationTable field in brand.FieldRelation)
  112. {
  113. string fType = field.TargetFieldType;
  114. string val = jsonObj[field.SourceFieldName].ToString();
  115. fields += field.TargetFieldName + ",";
  116. if (fType == "int")
  117. {
  118. fieldvals += int.Parse(function.CheckInt(val)) + ",";
  119. }
  120. else if (fType == "decimal")
  121. {
  122. fieldvals += decimal.Parse(function.CheckNum(val)) + ",";
  123. }
  124. else if (fType == "datetime")
  125. {
  126. fieldvals += "'" + DateTime.Parse(val) + "',";
  127. }
  128. else
  129. {
  130. fieldvals += "'" + val + "',";
  131. }
  132. }
  133. fields = fields.TrimEnd(',');
  134. fieldvals = fieldvals.TrimEnd(',');
  135. string sql = "insert into " + brand.TargetTableName + " (" + fields + ") values (" + fieldvals + ")";
  136. dbconn.op(sql);
  137. }
  138. }