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 { /// /// 运行算法 /// class RunAlgorithmcs { /// /// RunAlgorithmcs主函数 /// 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("轮轨力算法没有新增数据,未执行算法"); //} } /// /// 执行几何算法 /// 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; } } /// /// 执行轮轨力算法 /// 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; } } /// /// 执行微小算法 /// 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; } } /// /// 检查几何表内哪些数据没执行微小算法 /// 若执行过微小算法,则表中wx_isload字段不为0,由此判断 /// public static void getWXSFdata() { try { ColorClass.Console_MessageColor("正在检查未执行微小算法的数据"); Store.GeoJHAccount = DataAnalysisToPG.QueryToPGByNameWXSFZD() as List; ColorClass.Console_MessageColor("检测完毕!共" + Store.GeoJHAccount.Count + "条数据满足执行微小算法的条件"); } catch (Exception ex) { ColorClass.Console_EorrColor("微小算法未执行数据获取失败!" + ex.Message); throw; } } /// /// 添加每条道岔之前最新一次微小算法执行结果(添加参考数据) /// public static void addWXSFReference() { try { ColorClass.Console_MessageColor("正在检索参考数据(每条新增数据的上一次最新日期数据)"); //按照线路名、行别、尖轨尖里程匹配最新一次执行的数据 // 1.去重,获取未执行微小算法的数据的线路名、行别、尖轨尖里程 List quchong = WXSFquchong(Store.GeoJHAccount); // 2.查数据(条件:线路名、行别、尖轨尖里程、未执行微小算法wx_isload = 1) List> datalist = DataAnalysisToPG.QueryToPGByNameWXSFZDReference(quchong); // 3.date比大小,保留每条线路名、行别、尖轨尖里程匹配的最新参考数据 List 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; } } /// /// date比大小,可以理解为去重 /// public static List dateCompare(List> datalist) { List cankaolist = new List(); 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; //大概看一下 } /// /// 去重,获取未执行微小算法的数据的线路名、行别、尖轨尖里程 /// /// /// public static List WXSFquchong(List datalist) { List cankaolist = new List(); 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; } } }