RunAlgorithmcs.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Uninpho.DBOperation.Model;
  7. using Uninpho.DBOperation.Operation;
  8. using System.IO;
  9. namespace ZDHscript
  10. {
  11. /// <summary>
  12. /// 运行算法
  13. /// </summary>
  14. class RunAlgorithmcs
  15. {
  16. /// <summary>
  17. /// RunAlgorithmcs主函数
  18. /// </summary>
  19. public static void AlgorithmcsRun()
  20. {
  21. // 1.执行几何算法
  22. if (Store.GeofileAccount.Count != 0)
  23. {
  24. RunJHFX();
  25. }
  26. else
  27. {
  28. ColorClass.Console_MessageColor("几何算法没有新增数据,未执行算法");
  29. }
  30. // 2.执行微小算法
  31. RunWXSF();
  32. // 3.执行轮轨力算法
  33. //if (Store.BnyfileAccount.Count != 0)
  34. //{
  35. // RunLGL();
  36. //}
  37. //else
  38. //{
  39. // ColorClass.Console_MessageColor("轮轨力算法没有新增数据,未执行算法");
  40. //}
  41. }
  42. /// <summary>
  43. /// 执行几何算法
  44. /// </summary>
  45. public static void RunJHFX()
  46. {
  47. try
  48. {
  49. ColorClass.Console_MessageColor("几何算法开始执行");
  50. for (int i = 0; i < Store.GeofileAccount.Count; i++)
  51. {
  52. if (File.Exists(Store.GeofileAccount[i].Srlj))
  53. {
  54. ZDHDataAnalysisFun.JH_new(Store.GeofileAccount[i]);
  55. }
  56. }
  57. ColorClass.Console_MessageColor("几何算法开始完毕");
  58. }
  59. catch (Exception ex)
  60. {
  61. ColorClass.Console_EorrColor("几何算法执行错误:" + ex.Message);
  62. throw;
  63. }
  64. }
  65. /// <summary>
  66. /// 执行轮轨力算法
  67. /// </summary>
  68. public static void RunLGL()
  69. {
  70. try
  71. {
  72. ColorClass.Console_MessageColor("轮轨力算法开始执行");
  73. for (int i = 0; i < Store.BnyfileAccount.Count; i++)
  74. {
  75. if (File.Exists(Store.BnyfileAccount[i].Srlj))
  76. {
  77. ZDHDataAnalysisFun.LGL_new(Store.BnyfileAccount[i]);
  78. }
  79. }
  80. ColorClass.Console_MessageColor("轮轨力算法开始完毕");
  81. }
  82. catch (Exception ex)
  83. {
  84. ColorClass.Console_EorrColor("轮轨力算法执行错误:" + ex.Message);
  85. throw;
  86. }
  87. }
  88. /// <summary>
  89. /// 执行微小算法
  90. /// </summary>
  91. public static void RunWXSF()
  92. {
  93. try
  94. {
  95. ColorClass.Console_MessageColor("微小算法开始执行");
  96. // 1.检查几何表内哪些数据没执行微小算法
  97. getWXSFdata();
  98. // 2.添加每条道岔之前最新一次微小算法执行结果(添加参考数据)
  99. addWXSFReference();
  100. // 3.执行微小算法
  101. ZDHDataAnalysisFun.WXSFFun(Store.GeoJHAccount);
  102. ColorClass.Console_MessageColor("微小算法开始完毕");
  103. }
  104. catch (Exception ex)
  105. {
  106. ColorClass.Console_EorrColor("微小算法执行错误:" + ex.Message);
  107. throw;
  108. }
  109. }
  110. /// <summary>
  111. /// 检查几何表内哪些数据没执行微小算法
  112. /// 若执行过微小算法,则表中wx_isload字段不为0,由此判断
  113. /// </summary>
  114. public static void getWXSFdata()
  115. {
  116. try
  117. {
  118. ColorClass.Console_MessageColor("正在检查未执行微小算法的数据");
  119. Store.GeoJHAccount = DataAnalysisToPG.QueryToPGByNameWXSFZD() as List<T_jihefenxi_account>;
  120. ColorClass.Console_MessageColor("检测完毕!共" + Store.GeoJHAccount.Count + "条数据满足执行微小算法的条件");
  121. }
  122. catch (Exception ex)
  123. {
  124. ColorClass.Console_EorrColor("微小算法未执行数据获取失败!" + ex.Message);
  125. throw;
  126. }
  127. }
  128. /// <summary>
  129. /// 添加每条道岔之前最新一次微小算法执行结果(添加参考数据)
  130. /// </summary>
  131. public static void addWXSFReference()
  132. {
  133. try
  134. {
  135. ColorClass.Console_MessageColor("正在检索参考数据(每条新增数据的上一次最新日期数据)");
  136. //按照线路名、行别、尖轨尖里程匹配最新一次执行的数据
  137. // 1.去重,获取未执行微小算法的数据的线路名、行别、尖轨尖里程
  138. List<T_jihefenxi_account> quchong = WXSFquchong(Store.GeoJHAccount);
  139. // 2.查数据(条件:线路名、行别、尖轨尖里程、未执行微小算法wx_isload = 1)
  140. List<List<T_jihefenxi_account>> datalist = DataAnalysisToPG.QueryToPGByNameWXSFZDReference(quchong);
  141. // 3.date比大小,保留每条线路名、行别、尖轨尖里程匹配的最新参考数据
  142. List<T_jihefenxi_account> cankao = dateCompare(datalist);
  143. for (int i = 0; i < cankao.Count; i++)
  144. {
  145. Store.GeoJHAccount.Add(cankao[i]);
  146. }
  147. ColorClass.Console_MessageColor("检测完毕!已添加参考数据" + cankao.Count + "条");
  148. }
  149. catch (Exception ex)
  150. {
  151. ColorClass.Console_EorrColor("检索失败!" + ex.Message);
  152. throw;
  153. }
  154. }
  155. /// <summary>
  156. /// date比大小,可以理解为去重
  157. /// </summary>
  158. public static List<T_jihefenxi_account> dateCompare(List<List<T_jihefenxi_account>> datalist)
  159. {
  160. List<T_jihefenxi_account> cankaolist = new List<T_jihefenxi_account>();
  161. foreach (var item in datalist)
  162. {
  163. T_jihefenxi_account cancan = new T_jihefenxi_account();
  164. cancan.Riqi = "1800年1月1日";
  165. foreach (var it in item)
  166. {
  167. var date1 = DateTime.Parse(cancan.Riqi);
  168. var date2 = DateTime.Parse(it.Riqi);
  169. if (DateTime.Compare(date1,date2 ) < 0)
  170. {
  171. cancan = it;
  172. }
  173. }
  174. cankaolist.Add(cancan);
  175. }
  176. return cankaolist; //大概看一下
  177. }
  178. /// <summary>
  179. /// 去重,获取未执行微小算法的数据的线路名、行别、尖轨尖里程
  180. /// </summary>
  181. /// <param name="datalist"></param>
  182. /// <returns></returns>
  183. public static List<T_jihefenxi_account> WXSFquchong(List<T_jihefenxi_account> datalist)
  184. {
  185. List<T_jihefenxi_account> cankaolist = new List<T_jihefenxi_account>();
  186. foreach (var item in datalist)
  187. {
  188. cankaolist.Add(new T_jihefenxi_account()
  189. {
  190. Xlm = item.Xlm,
  191. Xingbie = item.Xingbie,
  192. Jgjlc = item.Jgjlc,
  193. Riqi = item.Riqi,
  194. Jcc = item.Jcc
  195. });
  196. }
  197. cankaolist = cankaolist.Distinct().ToList();
  198. return cankaolist;
  199. }
  200. }
  201. }