123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Uninpho.DBOperation.Model;
- using Uninpho.DBOperation.Operation;
- using System.IO;
- namespace ZDHscript
- {
- /// <summary>
- /// 运行算法
- /// </summary>
- class RunAlgorithmcs
- {
- /// <summary>
- /// RunAlgorithmcs主函数
- /// </summary>
- public static void AlgorithmcsRun()
- {
- // 1.执行几何算法
- if (Store.GeofileAccount.Count != 0)
- {
- RunJHFX();
- }
- else
- {
- ColorClass.Console_MessageColor("几何算法没有新增数据,未执行算法");
- }
- // 2.执行微小算法
- RunWXSF();
- // 3.执行轮轨力算法
- //if (Store.BnyfileAccount.Count != 0)
- //{
- // RunLGL();
- //}
- //else
- //{
- // ColorClass.Console_MessageColor("轮轨力算法没有新增数据,未执行算法");
- //}
- }
- /// <summary>
- /// 执行几何算法
- /// </summary>
- public static void RunJHFX()
- {
- try
- {
- ColorClass.Console_MessageColor("几何算法开始执行");
- for (int i = 0; i < Store.GeofileAccount.Count; i++)
- {
- if (File.Exists(Store.GeofileAccount[i].Srlj))
- {
- ZDHDataAnalysisFun.JH_new(Store.GeofileAccount[i]);
- }
- }
- ColorClass.Console_MessageColor("几何算法开始完毕");
- }
- catch (Exception ex)
- {
- ColorClass.Console_EorrColor("几何算法执行错误:" + ex.Message);
- throw;
- }
- }
- /// <summary>
- /// 执行轮轨力算法
- /// </summary>
- public static void RunLGL()
- {
- try
- {
- ColorClass.Console_MessageColor("轮轨力算法开始执行");
- for (int i = 0; i < Store.BnyfileAccount.Count; i++)
- {
- if (File.Exists(Store.BnyfileAccount[i].Srlj))
- {
- ZDHDataAnalysisFun.LGL_new(Store.BnyfileAccount[i]);
- }
- }
- ColorClass.Console_MessageColor("轮轨力算法开始完毕");
- }
- catch (Exception ex)
- {
- ColorClass.Console_EorrColor("轮轨力算法执行错误:" + ex.Message);
- throw;
- }
- }
- /// <summary>
- /// 执行微小算法
- /// </summary>
- public static void RunWXSF()
- {
- try
- {
- ColorClass.Console_MessageColor("微小算法开始执行");
- // 1.检查几何表内哪些数据没执行微小算法
- getWXSFdata();
- // 2.添加每条道岔之前最新一次微小算法执行结果(添加参考数据)
- addWXSFReference();
- // 3.执行微小算法
- ZDHDataAnalysisFun.WXSFFun(Store.GeoJHAccount);
- ColorClass.Console_MessageColor("微小算法开始完毕");
- }
- catch (Exception ex)
- {
- ColorClass.Console_EorrColor("微小算法执行错误:" + ex.Message);
- throw;
- }
- }
- /// <summary>
- /// 检查几何表内哪些数据没执行微小算法
- /// 若执行过微小算法,则表中wx_isload字段不为0,由此判断
- /// </summary>
- public static void getWXSFdata()
- {
- try
- {
- ColorClass.Console_MessageColor("正在检查未执行微小算法的数据");
- Store.GeoJHAccount = DataAnalysisToPG.QueryToPGByNameWXSFZD() as List<T_jihefenxi_account>;
- ColorClass.Console_MessageColor("检测完毕!共" + Store.GeoJHAccount.Count + "条数据满足执行微小算法的条件");
- }
- catch (Exception ex)
- {
- ColorClass.Console_EorrColor("微小算法未执行数据获取失败!" + ex.Message);
- throw;
- }
- }
- /// <summary>
- /// 添加每条道岔之前最新一次微小算法执行结果(添加参考数据)
- /// </summary>
- public static void addWXSFReference()
- {
- try
- {
- ColorClass.Console_MessageColor("正在检索参考数据(每条新增数据的上一次最新日期数据)");
- //按照线路名、行别、尖轨尖里程匹配最新一次执行的数据
- // 1.去重,获取未执行微小算法的数据的线路名、行别、尖轨尖里程
- List<T_jihefenxi_account> quchong = WXSFquchong(Store.GeoJHAccount);
- // 2.查数据(条件:线路名、行别、尖轨尖里程、未执行微小算法wx_isload = 1)
- List<List<T_jihefenxi_account>> datalist = DataAnalysisToPG.QueryToPGByNameWXSFZDReference(quchong);
- // 3.date比大小,保留每条线路名、行别、尖轨尖里程匹配的最新参考数据
- List<T_jihefenxi_account> cankao = dateCompare(datalist);
- for (int i = 0; i < cankao.Count; i++)
- {
- Store.GeoJHAccount.Add(cankao[i]);
- }
- ColorClass.Console_MessageColor("检测完毕!已添加参考数据" + cankao.Count + "条");
- }
- catch (Exception ex)
- {
- ColorClass.Console_EorrColor("检索失败!" + ex.Message);
- throw;
- }
- }
- /// <summary>
- /// date比大小,可以理解为去重
- /// </summary>
- public static List<T_jihefenxi_account> dateCompare(List<List<T_jihefenxi_account>> datalist)
- {
- List<T_jihefenxi_account> cankaolist = new List<T_jihefenxi_account>();
- foreach (var item in datalist)
- {
- T_jihefenxi_account cancan = new T_jihefenxi_account();
- cancan.Riqi = "1800年1月1日";
- foreach (var it in item)
- {
- var date1 = DateTime.Parse(cancan.Riqi);
- var date2 = DateTime.Parse(it.Riqi);
- if (DateTime.Compare(date1,date2 ) < 0)
- {
- cancan = it;
- }
- }
- cankaolist.Add(cancan);
- }
- return cankaolist; //大概看一下
- }
- /// <summary>
- /// 去重,获取未执行微小算法的数据的线路名、行别、尖轨尖里程
- /// </summary>
- /// <param name="datalist"></param>
- /// <returns></returns>
- public static List<T_jihefenxi_account> WXSFquchong(List<T_jihefenxi_account> datalist)
- {
- List<T_jihefenxi_account> cankaolist = new List<T_jihefenxi_account>();
- foreach (var item in datalist)
- {
- cankaolist.Add(new T_jihefenxi_account()
- {
- Xlm = item.Xlm,
- Xingbie = item.Xingbie,
- Jgjlc = item.Jgjlc,
- Riqi = item.Riqi,
- Jcc = item.Jcc
- });
- }
- cankaolist = cankaolist.Distinct().ToList();
- return cankaolist;
- }
- }
- }
|