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;
}
}
}