ZDHDataAnalysisFun.cs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using Uninpho.DBOperation.Model;
  8. using Uninpho.DBOperation.Operation;
  9. using MathWorks.MATLAB.NET.Arrays;
  10. using System.Threading;
  11. //数据库表重置;
  12. //TRUNCATE TABLE public.t_jihefenxi_boxing;//删除表内所有数据
  13. //ALTER TABLE public.t_jihefenxi_boxing DROP COLUMN id;//删除id序号
  14. //alter table public.t_jihefenxi_boxing add id serial PRIMARY KEY;//重置新加id序号
  15. namespace ZDHscript
  16. {
  17. /// <summary>
  18. /// 进行算法处理的类
  19. /// </summary>
  20. public class ZDHDataAnalysisFun
  21. {
  22. public static void JH_new(T_file_account whichfile)
  23. {
  24. List<T_daocha_account> daochabiao = (List<T_daocha_account>)DataAnalysisToPG.QueryDCTZ(whichfile.Xlm, whichfile.Yswjm.Split('-')[0].ToCharArray());
  25. List<T_quxian_account> quxianbiao = (List<T_quxian_account>)DataAnalysisToPG.QueryQXTZ(whichfile.Xlm, whichfile.Yswjm.Split('-')[0].ToCharArray());
  26. string fname_dir0 = Path.GetDirectoryName(whichfile.Srlj) + "\\";
  27. string fname0 = Path.GetFileName(whichfile.Srlj);
  28. T_xianlulicheng_sf sf = (T_xianlulicheng_sf)DataAnalysisToPG.QueryToString(fname0.Split('-')[0]);
  29. double mile_min = Convert.ToDouble(sf.Qslc);
  30. double mile_max = Convert.ToDouble(sf.Zzlc);
  31. int mile_id = 1;
  32. string line_name = fname0.Split('-')[0];
  33. double[] tz_curv = getTZQX(quxianbiao, true);
  34. double[] tz_turnout = getTZDC(daochabiao);
  35. double[] distance_table = getTZJGJX();
  36. string carname = whichfile.Jccxx;
  37. try
  38. {
  39. var data = AnalysisAlgorithmcs.JHFX(fname_dir0, fname0, mile_id, line_name, mile_min, mile_max, tz_curv, tz_turnout, distance_table, carname);
  40. readJHFX(data, whichfile);
  41. }
  42. catch (Exception ex)
  43. {
  44. ColorClass.Console_EorrColor("文件:" + whichfile.Yswjm + "执行失败!" + ex.Message);
  45. throw;
  46. }
  47. }
  48. public static void LGL_new(T_file_account whichfile)
  49. {
  50. List<T_daocha_account> daochabiao = (List<T_daocha_account>)DataAnalysisToPG.QueryDCTZ(whichfile.Xlm, whichfile.Yswjm.Split('_')[2].Split('.')[0].ToCharArray());
  51. List<T_quxian_account> quxianbiao = (List<T_quxian_account>)DataAnalysisToPG.QueryQXTZ(whichfile.Xlm, whichfile.Yswjm.Split('_')[2].Split('.')[0].ToCharArray());
  52. string fname_dir0 = Path.GetDirectoryName(whichfile.Srlj) + "\\";
  53. string fname0 = Path.GetFileName(whichfile.Srlj);
  54. string line_name = fname0.Split('_')[2].Split('.')[0];
  55. T_xianlulicheng_sf sf = (T_xianlulicheng_sf)DataAnalysisToPG.QueryToString(line_name);
  56. double mile_min = Convert.ToDouble(sf.Qslc);
  57. double mile_max = Convert.ToDouble(sf.Zzlc);
  58. double[] tz_curv = getTZQX(quxianbiao, false);
  59. double[] tz_turnout = getTZDC(daochabiao);
  60. double[] distance_table = getTZJGJX();
  61. string carname = whichfile.Jccxx;
  62. try
  63. {
  64. var data = AnalysisAlgorithmcs.LGLFX(fname_dir0, fname0, line_name, mile_min, mile_max, tz_curv, tz_turnout, distance_table, carname);
  65. readLGLFX(data, whichfile);
  66. }
  67. catch (Exception ex)
  68. {
  69. if (quxianbiao.Count == 0)
  70. {
  71. ColorClass.Console_EorrColor("曲线表缺少数据!");
  72. }
  73. else if (daochabiao.Count == 0)
  74. {
  75. ColorClass.Console_EorrColor("道岔表缺少数据!");
  76. }
  77. else
  78. {
  79. ColorClass.Console_EorrColor("文件:" + whichfile.Yswjm + "执行失败!" + ex.Message);
  80. }
  81. throw;
  82. }
  83. }
  84. /// <summary>
  85. /// 微小算法
  86. /// </summary>
  87. /// <param name="whichfile"></param>
  88. public static void WXSFFun(List<T_jihefenxi_account> jhfe_account)
  89. {
  90. string[] date = new string[jhfe_account.Count];
  91. string[] car = new string[jhfe_account.Count];
  92. double[] mile = new double[jhfe_account.Count];
  93. List<double> wave_data = new List<double>();
  94. List<double> id_wave_all = new List<double>();
  95. List<double> jx_loc_all = new List<double>();
  96. string[] line = new string[jhfe_account.Count];
  97. double[] velo = new double[jhfe_account.Count];
  98. string[] zc = new string[jhfe_account.Count];
  99. getdataWXSF(jhfe_account, ref date, ref car, ref mile, ref wave_data, ref id_wave_all, ref jx_loc_all, ref line, ref velo, ref zc);
  100. if (date.Distinct().ToArray().Length > 1)
  101. {
  102. var data = AnalysisAlgorithmcs.WXSF(date, car, mile, wave_data.ToArray(), id_wave_all.ToArray(), jx_loc_all.ToArray(), line, velo, zc);
  103. readWXSF(data);
  104. }
  105. else
  106. {
  107. ColorClass.Console_MessageColor("日期相同,不能执行微小算法");
  108. }
  109. }
  110. private static void getdataWXSF(List<T_jihefenxi_account> jhfe_account, ref string[] date, ref string[] car, ref double[] mile, ref List<double> wave_data, ref List<double> id_wave_all, ref List<double> jx_loc_all, ref string[] line, ref double[] velo, ref string[] zc)
  111. {
  112. int bxindex = 0;
  113. for (int i = 0; i < jhfe_account.Count; i++)
  114. {
  115. date[i] = jhfe_account[i].Riqi;
  116. car[i] = jhfe_account[i].Jcc == "轨检车" ? "轨检车" : jhfe_account[i].Jcc.Split('-')[1];
  117. mile[i] = Convert.ToDouble(jhfe_account[i].Jgjlc);
  118. jx_loc_all.Add(Convert.ToDouble(jhfe_account[i].Jgjcydxh));
  119. jx_loc_all.Add(Convert.ToDouble(jhfe_account[i].Xgjcydxh));
  120. line[i] = ((T_file_account)DataAnalysisToPG.QueryToPGById(Convert.ToInt32(jhfe_account[i].Filename_jh.Trim()))).Yswjm.Split('-')[0];
  121. velo[i] = Convert.ToDouble(jhfe_account[i].Sudu_jhfx);
  122. zc[i] = jhfe_account[i].Zcx;
  123. getWXSFBXdata(jhfe_account[i].Yswjm_jhfx, ref bxindex, ref wave_data, ref id_wave_all);
  124. }
  125. }
  126. private static void getWXSFBXdata(string ids, ref int index, ref List<double> wave_data, ref List<double> id_wave_all)
  127. {
  128. List<T_jihefenxi_boxing> bolist = DMControl.GetJHFX_BXDataByIDS(ids);
  129. index = index + 1;
  130. id_wave_all.Add(index);
  131. for (int i = 0; i < bolist.Count; i++)
  132. {
  133. wave_data.Add((double)(bolist[i].Licheng));
  134. wave_data.Add((double)(bolist[i].Sudu_jhbx));
  135. wave_data.Add((double)(bolist[i].Cthj));
  136. wave_data.Add((double)(bolist[i].Ctcj));
  137. wave_data.Add((double)(bolist[i].Gjzhy));
  138. wave_data.Add((double)(bolist[i].Gjyhy));
  139. wave_data.Add((double)(bolist[i].Zgd));
  140. wave_data.Add((double)(bolist[i].Ygd));
  141. wave_data.Add((double)(bolist[i].Zgx));
  142. wave_data.Add((double)(bolist[i].Ygx));
  143. wave_data.Add((double)(bolist[i].Gj));
  144. wave_data.Add((double)(bolist[i].Sp));
  145. wave_data.Add((double)(bolist[i].Sjk));
  146. wave_data.Add((double)(bolist[i].Cbzgd));
  147. wave_data.Add((double)(bolist[i].Cbygd));
  148. wave_data.Add((double)(bolist[i].Cbzgx));
  149. wave_data.Add((double)(bolist[i].Cbygx));
  150. wave_data.Add((double)(bolist[i].Dcdw));
  151. }
  152. index += bolist.Count - 1;
  153. id_wave_all.Add(index);
  154. }
  155. /// <summary>
  156. /// 从数据库获取对应符合要求的道岔台账信息
  157. /// </summary>
  158. private static double[] getTZDC(List<T_daocha_account> taizhang)
  159. {
  160. //StreamWriter FileWriter = new StreamWriter("E://get2pgTZ.txt", true); //写文件
  161. string txtDetail = "";
  162. //StreamWriter sr = new StreamWriter("E://DDD.txt");
  163. List<double> result = new List<double>();
  164. for (int i = 0; i < taizhang.Count; i++)
  165. {
  166. result.Add(Convert.ToDouble(taizhang[i].Jgjlc));
  167. result.Add(Convert.ToDouble(taizhang[i].Zch));
  168. result.Add(Convert.ToDouble(taizhang[i].Quanchang));
  169. txtDetail += taizhang[i].Jgjlc + "\t" + taizhang[i].Zch + "\t" + taizhang[i].Quanchang + "\n";
  170. }
  171. //FileWriter.Write(txtDetail);//将字符串写入
  172. //FileWriter.Close(); //关闭StreamWriter对象k
  173. //******构造二维数组******
  174. double[] ret = new double[result.Count];
  175. for (int i = 0; i < result.Count; i++)
  176. {
  177. ret[i] = result[i];
  178. }
  179. return ret;
  180. }
  181. /// <summary>
  182. /// 从数据库获取对应符合要求的曲线台账信息
  183. /// </summary>
  184. private static double[] getTZQX(List<T_quxian_account> taizhang, bool isjh)
  185. {
  186. List<double> result = new List<double>();
  187. for (int i = 0; i < taizhang.Count; i++)
  188. {
  189. result.Add(Convert.ToDouble(taizhang[i].Qzlc));
  190. result.Add(Convert.ToDouble(taizhang[i].Jslc));
  191. if (taizhang[i].Qxfx.Trim() == "左")
  192. {
  193. result.Add(1);
  194. }
  195. else
  196. {
  197. result.Add(-1);
  198. }
  199. if (isjh)
  200. {
  201. result.Add(Convert.ToDouble(taizhang[i].Chaogao));
  202. }
  203. else
  204. {
  205. result.Add(Convert.ToDouble(taizhang[i].Qxbj));
  206. }
  207. result.Add(Convert.ToDouble(taizhang[i].Qhhxc));
  208. result.Add(Convert.ToDouble(taizhang[i].Zhhxc));
  209. }
  210. //******构造二维数组******
  211. double[] ret = new double[result.Count];
  212. for (int i = 0; i < result.Count; i++)
  213. {
  214. ret[i] = result[i];
  215. }
  216. return ret;
  217. }
  218. /// <summary>
  219. /// 从数据库获取对应符合要求的曲线台账信息
  220. /// </summary>
  221. private static double[] getTZJGJX()
  222. {
  223. List<T_jgjdistance_table> tabledata = new List<T_jgjdistance_table>();
  224. List<T_jgjdistance_table> tablelist = DataAnalysisToPG.QueryJGJXGJJ();
  225. List<T_jgjdistance_table> GS = tablelist.Where(i => i.Sudutype == 0).ToList();
  226. List<T_jgjdistance_table> DS = tablelist.Where(i => i.Sudutype == 1).ToList();
  227. tabledata = GS;//高速
  228. //tabledata = DS; //普速
  229. //tabledata = tablelist;
  230. List<double> result = new List<double>();
  231. for (int i = 0; i < tabledata.Count; i++)
  232. {
  233. result.Add(Convert.ToDouble(tabledata[i].Zch));
  234. result.Add(Convert.ToDouble(tabledata[i].Dcqc));
  235. result.Add(Convert.ToDouble(tabledata[i].Gdjxgjj));
  236. }
  237. //******构造二维数组******
  238. double[] ret = new double[result.Count];
  239. for (int i = 0; i < result.Count; i++)
  240. {
  241. ret[i] = result[i];
  242. }
  243. return ret;
  244. }
  245. /// <summary>
  246. /// 读几何分析数据
  247. /// </summary>
  248. /// <param name="agrsOut"></param>
  249. /// <param name="whichfile"></param>
  250. private static void readJHFX(MWArray[] agrsOut, T_file_account whichfile)
  251. {
  252. MWCellArray output1 = agrsOut[0] as MWCellArray;//第1个输出参数
  253. MWNumericArray output2 = agrsOut[1] as MWNumericArray;//第2个输出参数
  254. MWArray output3 = agrsOut[2] as MWArray;//第3个输出参数
  255. MWCellArray output4 = agrsOut[3] as MWCellArray;//第4个输出参数
  256. MWCellArray output5 = agrsOut[4] as MWCellArray;//第5个输出参数
  257. MWNumericArray output6 = agrsOut[5] as MWNumericArray;//第6个输出参数
  258. MWCellArray output7 = agrsOut[6] as MWCellArray;//第7个输出参数
  259. MWCellArray output10 = agrsOut[7] as MWCellArray;//第7个输出参数
  260. MWCellArray output11 = agrsOut[8] as MWCellArray;//第7个输出参数
  261. MWNumericArray output8 = agrsOut[9] as MWNumericArray;//第8个输出参数
  262. MWNumericArray output9 = agrsOut[10] as MWNumericArray;//第9个输出参数
  263. MWNumericArray output12 = agrsOut[11] as MWNumericArray;//第12个输出参数
  264. var table_header = output1.ToArray();
  265. var table_data = (double[,])output2.ToArray();
  266. var table_zc = (object[,])output3.ToArray();
  267. var table_date = (object[,])output4.ToArray();
  268. var table_zf = (object[,])output5.ToArray();
  269. var table_tqi = (double[,])output6.ToArray();
  270. var table_car = (object[,])output7.ToArray();
  271. var table_name = (object[,])output10.ToArray();
  272. var table_xb = (object[,])output11.ToArray();
  273. var wave_id = (double[,])output8.ToArray();
  274. var wave_sw = (double[,])output9.ToArray();
  275. var wave_loc = (double[,])output12.ToArray();
  276. List<T_jihefenxi_account> JHobjs = new List<T_jihefenxi_account>();
  277. DataAnalysisToPG.InsertGetIdMAX(new T_jihefenxi_boxing() { Yswjm = "?????" });
  278. int idindex = DataAnalysisToPG.QueryMaxID("jh") + 1;
  279. #region 录入T_jihefenxi_account
  280. for (int i = 0; i < table_data.GetLength(0); i++)
  281. {
  282. int bxidq = (int)wave_id[i, 0];
  283. int bxidz = (int)wave_id[i, 1];
  284. int bxindex = bxidz - bxidq;
  285. T_jihefenxi_account jhojb = new T_jihefenxi_account();
  286. jhojb.Xuhao = table_data[i, 0].ToString();
  287. jhojb.Jgjlc = Convert.ToDecimal(table_data[i, 1]);
  288. jhojb.Sudu_jhfx = Convert.ToDecimal(table_data[i, 2]);
  289. jhojb.Cthjfz = Convert.ToDecimal(table_data[i, 3]);
  290. jhojb.Cthjffz = Convert.ToDecimal(table_data[i, 4]);
  291. jhojb.Ctcjfz = Convert.ToDecimal(table_data[i, 5]);
  292. jhojb.Ctcjffz = Convert.ToDecimal(table_data[i, 6]);
  293. jhojb.Zgjfz = Convert.ToDecimal(table_data[i, 7]);
  294. jhojb.Zgjffz_jhfx = Convert.ToDecimal(table_data[i, 8]);
  295. jhojb.Ygjfz = Convert.ToDecimal(table_data[i, 9]);
  296. jhojb.Ygjffz = Convert.ToDecimal(table_data[i, 10]);
  297. jhojb.Zgdfz = Convert.ToDecimal(table_data[i, 11]);
  298. jhojb.Ygdfz = Convert.ToDecimal(table_data[i, 12]);
  299. jhojb.Zgxfz = Convert.ToDecimal(table_data[i, 13]);
  300. jhojb.Ygxfz = Convert.ToDecimal(table_data[i, 14]);
  301. jhojb.Spfz = Convert.ToDecimal(table_data[i, 15]);
  302. jhojb.Sjkfz = Convert.ToDecimal(table_data[i, 16]);
  303. jhojb.Cbzgdfz = Convert.ToDecimal(table_data[i, 17]);
  304. jhojb.Cbygdfz = Convert.ToDecimal(table_data[i, 18]);
  305. jhojb.Cbzgxfz = Convert.ToDecimal(table_data[i, 19]);
  306. jhojb.Cbygxfz = Convert.ToDecimal(table_data[i, 20]);
  307. jhojb.Zcx = Char2String((char[,])table_zc[i, 0]);
  308. jhojb.Riqi = Char2String((char[,])table_date[i, 0]);
  309. jhojb.Zfx = Char2String((char[,])table_zf[i, 0]);
  310. jhojb.Dcqtqi = Convert.ToDecimal(table_tqi[i, 0]);
  311. jhojb.Jcc = Char2String((char[,])table_car[i, 0]);
  312. jhojb.Filename_jh = whichfile.Id.ToString();
  313. jhojb.Boxingid_jhfx = wave_id[i, 0].ToString() + "," + wave_id[i, 1].ToString();
  314. jhojb.Jgjcydxh = Convert.ToDecimal(wave_loc[i, 0]);
  315. jhojb.Xgjcydxh = Convert.ToDecimal(wave_loc[i, 1]);
  316. jhojb.Xlm = whichfile.Xlm;
  317. //jhojb.Xlm = Char2String((char[,])table_name[i, 0]);
  318. jhojb.Yswjm_jhfx = idindex.ToString() + "," + (idindex + bxindex).ToString();
  319. jhojb.Xingbie = whichfile.Hangbie;
  320. //jhojb.Xingbie = Char2String((char[,])table_xb[i, 0]);
  321. jhojb.Gjhy = Math.Abs(jhojb.Zgjfz) > Math.Abs(jhojb.Ygjfz) ? jhojb.Zgjfz : jhojb.Ygjfz;
  322. jhojb.Gjhyffz = Math.Abs(jhojb.Zgjffz_jhfx) > Math.Abs(jhojb.Ygjffz) ? jhojb.Zgjffz_jhfx : jhojb.Ygjffz;
  323. jhojb.Gdfz = Math.Abs(jhojb.Zgdfz) > Math.Abs(jhojb.Ygdfz) ? jhojb.Zgdfz : jhojb.Ygdfz;
  324. jhojb.Gxfz = Math.Abs(jhojb.Zgxfz) > Math.Abs(jhojb.Ygxfz) ? jhojb.Zgxfz : jhojb.Ygxfz;
  325. jhojb.Cbgdfz = Math.Abs(jhojb.Cbzgdfz) > Math.Abs(jhojb.Cbygdfz) ? jhojb.Cbzgdfz : jhojb.Cbygdfz;
  326. jhojb.Cbgxfz = Math.Abs(jhojb.Cbzgxfz) > Math.Abs(jhojb.Cbygxfz) ? jhojb.Cbzgxfz : jhojb.Cbygxfz;
  327. JHobjs.Add(jhojb);
  328. idindex += bxindex + 1;
  329. }
  330. DataAnalysisToPG.InsertJHDataToPG(JHobjs);
  331. #endregion
  332. #region 录入波形
  333. List<T_jihefenxi_boxing> Bolist = new List<T_jihefenxi_boxing>();
  334. for (int i = 0; i < wave_sw.GetLength(0); i++)
  335. {
  336. T_jihefenxi_boxing bolist = new T_jihefenxi_boxing();
  337. bolist.Licheng = Convert.ToDecimal(wave_sw[i, 0]);
  338. bolist.Sudu_jhbx = Convert.ToDecimal(wave_sw[i, 1]);
  339. bolist.Cthj = Convert.ToDecimal(wave_sw[i, 2]);
  340. bolist.Ctcj = Convert.ToDecimal(wave_sw[i, 3]);
  341. bolist.Gjzhy = Convert.ToDecimal(wave_sw[i, 4]);
  342. bolist.Gjyhy = Convert.ToDecimal(wave_sw[i, 5]);
  343. bolist.Zgd = Convert.ToDecimal(wave_sw[i, 6]);
  344. bolist.Ygd = Convert.ToDecimal(wave_sw[i, 7]);
  345. bolist.Zgx = Convert.ToDecimal(wave_sw[i, 8]);
  346. bolist.Ygx = Convert.ToDecimal(wave_sw[i, 9]);
  347. bolist.Gj = Convert.ToDecimal(wave_sw[i, 10]);
  348. bolist.Sp = Convert.ToDecimal(wave_sw[i, 11]);
  349. bolist.Sjk = Convert.ToDecimal(wave_sw[i, 12]);
  350. bolist.Cbzgd = Convert.ToDecimal(wave_sw[i, 13]);
  351. bolist.Cbygd = Convert.ToDecimal(wave_sw[i, 14]);
  352. bolist.Cbzgx = Convert.ToDecimal(wave_sw[i, 15]);
  353. bolist.Cbygx = Convert.ToDecimal(wave_sw[i, 16]);
  354. bolist.Dcdw = Convert.ToDecimal(wave_sw[i, 17]);
  355. bolist.Bxid = i + 1;
  356. Bolist.Add(bolist);
  357. }
  358. DataAnalysisToPG.InsertJHBXDataToPG(Bolist);
  359. DataAnalysisToPG.updataRWZT(new string[] { whichfile.Id.ToString(), "几何算法执行完毕" });
  360. #endregion
  361. }
  362. /// <summary>
  363. /// 读轮轨力分析数据
  364. /// </summary>
  365. /// <param name="agrsOut"></param>
  366. /// <param name="whichfile"></param>
  367. private static void readLGLFX(MWArray[] agrsOut, T_file_account whichfile)
  368. {
  369. MWCellArray output1 = agrsOut[0] as MWCellArray;//第1个输出参数
  370. MWNumericArray output2 = agrsOut[1] as MWNumericArray;//第2个输出参数
  371. MWNumericArray output3 = agrsOut[6] as MWNumericArray;//第3个输出参数
  372. MWNumericArray output4 = agrsOut[7] as MWNumericArray;//第4个输出参数
  373. MWCellArray output5 = agrsOut[2] as MWCellArray;//第3个输出参数
  374. MWCellArray output6 = agrsOut[4] as MWCellArray;//第4个输出参数
  375. MWCellArray output7 = agrsOut[5] as MWCellArray;//第4个输出参数
  376. MWCellArray output8 = agrsOut[3] as MWCellArray;//第4个输出参数
  377. var table_header = (object[,])output1.ToArray();
  378. var table_data = (double[,])output2.ToArray();
  379. var table_name = (object[,])output5.ToArray();
  380. var table_xb = (object[,])output6.ToArray();
  381. var table_date = (object[,])output7.ToArray();
  382. var wave_sw = (double[,])output4.ToArray();
  383. var boxingid = (double[,])output3.ToArray();
  384. var table_car = (object[,])output8.ToArray();
  385. List<T_lunguili_account> JHobjs = new List<T_lunguili_account>();
  386. DataAnalysisToPG.InsertGetIdMAX(new T_lunguili_boxing() { Yswjm = "?????" });
  387. int idindex = DataAnalysisToPG.QueryMaxID("lgl") + 1;
  388. for (int i = 0; i < table_data.GetLength(0); i++)
  389. {
  390. int bxidq = (int)boxingid[i, 0];
  391. int bxidz = (int)boxingid[i, 1];
  392. int bxindex = bxidz - bxidq;
  393. T_lunguili_account jhojb = new T_lunguili_account();
  394. jhojb.Xuhao = table_data[i, 0].ToString();
  395. jhojb.Jgjlc = Convert.ToDecimal(table_data[i, 1]);
  396. jhojb.Sudu_lgl = Convert.ToDecimal(table_data[i, 2]);
  397. jhojb.Zzcfz = Convert.ToDecimal(table_data[i, 3]);
  398. jhojb.Zzhfz = Convert.ToDecimal(table_data[i, 4]);
  399. jhojb.Yzcfz = Convert.ToDecimal(table_data[i, 5]);
  400. jhojb.Yzhfz = Convert.ToDecimal(table_data[i, 6]);
  401. jhojb.Lzlfz = Convert.ToDecimal(table_data[i, 7]);
  402. jhojb.Lzjzl = Convert.ToDecimal(table_data[i, 8]);
  403. jhojb.Ztgxs = Convert.ToDecimal(table_data[i, 9]);
  404. jhojb.Ytgxs = Convert.ToDecimal(table_data[i, 10]);
  405. jhojb.Filename_lgl = whichfile.Id.ToString();
  406. jhojb.Boxingid_lgl = bxidq.ToString() + "," + bxidz.ToString();
  407. //jhojb.Xlm = Char2String((char[,])table_name[i, 0]);
  408. jhojb.Xlm = whichfile.Xlm;
  409. //jhojb.Xingbie = Char2String((char[,])table_xb[i, 0]);
  410. jhojb.Xingbie = whichfile.Hangbie;
  411. jhojb.Yswjm = idindex.ToString() + "," + (idindex + bxindex).ToString();
  412. jhojb.Jcrq = Char2String((char[,])table_date[i, 0]);
  413. jhojb.Lgcxl = Math.Abs(jhojb.Zzcfz) > Math.Abs(jhojb.Yzcfz) ? jhojb.Zzcfz : jhojb.Yzcfz;
  414. jhojb.Lghxl = Math.Abs(jhojb.Zzhfz) > Math.Abs(jhojb.Yzhfz) ? jhojb.Zzhfz : jhojb.Yzhfz;
  415. jhojb.Tgxs = jhojb.Ztgxs > jhojb.Ytgxs ? jhojb.Ztgxs : jhojb.Ytgxs;
  416. JHobjs.Add(jhojb);
  417. idindex += bxindex + 1;
  418. }
  419. DataAnalysisToPG.InsertLGLDataToPG(JHobjs);
  420. #region 录入波形
  421. List<T_lunguili_boxing> Bolist = new List<T_lunguili_boxing>();
  422. for (int i = 0; i < wave_sw.GetLength(0); i++)
  423. {
  424. T_lunguili_boxing bolist = new T_lunguili_boxing();
  425. bolist.Licheng = Convert.ToDecimal(wave_sw[i, 0]);
  426. bolist.Sudu_lglbx = Convert.ToDecimal(wave_sw[i, 1]);
  427. bolist.Zzc = Convert.ToDecimal(wave_sw[i, 2]);
  428. bolist.Zzh = Convert.ToDecimal(wave_sw[i, 3]);
  429. bolist.Yzc = Convert.ToDecimal(wave_sw[i, 4]);
  430. bolist.Yzh = Convert.ToDecimal(wave_sw[i, 5]);
  431. bolist.Bxid = i + 1;
  432. Bolist.Add(bolist);
  433. }
  434. DataAnalysisToPG.InsertLGLBXDataToPG(Bolist);
  435. DataAnalysisToPG.updataRWZT(new string[] { whichfile.Id.ToString(), "轮轨力算法执行完毕" });
  436. #endregion
  437. }
  438. //读取微小算法分析数据
  439. private static void readWXSF(MWArray[] agrsOut)
  440. {
  441. MWCellArray output1 = agrsOut[0] as MWCellArray;//第1个输出参数
  442. MWCellArray output2 = agrsOut[1] as MWCellArray;//第2个输出参数
  443. MWCellArray output3 = agrsOut[2] as MWCellArray;//第3个输出参数
  444. MWNumericArray output4 = agrsOut[3] as MWNumericArray;//第4个输出参数
  445. MWNumericArray output5 = agrsOut[4] as MWNumericArray;//第5个输出参数
  446. MWCellArray output6 = agrsOut[5] as MWCellArray;//第6个输出参数
  447. MWCellArray output7 = agrsOut[6] as MWCellArray;//第7个输出参数
  448. MWNumericArray output8 = agrsOut[7] as MWNumericArray;//第8个输出参数
  449. MWNumericArray output9 = agrsOut[8] as MWNumericArray;//第9个输出参数
  450. MWNumericArray output10 = agrsOut[9] as MWNumericArray;//第10个输出参数
  451. MWCellArray output11 = agrsOut[10] as MWCellArray;//第11个输出参数
  452. var table_header = (object[,])output1.ToArray();
  453. var tableline = (object[,])output2.ToArray();
  454. var table_xb = (object[,])output3.ToArray();
  455. var table_milej = (double[,])output4.ToArray();
  456. var table_milex = (double[,])output5.ToArray();
  457. var table_date = (object[,])output6.ToArray();
  458. var table_car = (object[,])output7.ToArray();
  459. var table_data = (double[,])output8.ToArray();
  460. var wave_id = (double[,])output9.ToArray();
  461. var wave_sw = (double[,])output10.ToArray();
  462. var table_check = (object[,])output11.ToArray();
  463. List<T_jihefenxi_account> JHWXobjs = new List<T_jihefenxi_account>();
  464. //打印
  465. //List<string> strprint3 = new List<string>();
  466. #region 录入T_jihefenxi_account
  467. for (int i = 0; i < table_data.GetLength(0); i++)
  468. {
  469. T_jihefenxi_account jhwxojb = new T_jihefenxi_account();
  470. jhwxojb.Xlm = (DataAnalysisToPG.QueryToXlm(Char2String((char[,])tableline[i, 0])) as T_luxianming_sf).Xlm;
  471. if (Char2String((char[,])table_xb[i, 0]) == "X")
  472. {
  473. jhwxojb.Xingbie = "下";
  474. }
  475. else if (Char2String((char[,])table_xb[i, 0]) == "S")
  476. {
  477. jhwxojb.Xingbie = "上";
  478. }
  479. else
  480. {
  481. //待定
  482. jhwxojb.Xingbie = "上";
  483. }
  484. jhwxojb.Jgjlc = Convert.ToDecimal(table_milej[i, 0]);
  485. jhwxojb.Jcc = Char2String((char[,])table_car[i, 0]);
  486. jhwxojb.Riqi = DateTime.Parse(Char2String((char[,])table_date[i, 0])).ToString("yyyy年MM月dd日");
  487. jhwxojb.Boxingid_jhfx = wave_id[i, 0].ToString() + "," + wave_id[i, 1].ToString();
  488. //心轨尖里程
  489. jhwxojb.Wx_xgjlc = Convert.ToDecimal(table_milex[i, 0]);
  490. //轨道几何变化量
  491. jhwxojb.Wx_bhl_gd = Convert.ToDecimal(table_data[i, 0]);
  492. jhwxojb.Wx_bhl_gx = Convert.ToDecimal(table_data[i, 1]);
  493. jhwxojb.Wx_bhl_sp = Convert.ToDecimal(table_data[i, 2]);
  494. jhwxojb.Wx_bhl_sjk = Convert.ToDecimal(table_data[i, 3]);
  495. jhwxojb.Wx_bhl_gj = Convert.ToDecimal(table_data[i, 4]);
  496. jhwxojb.Wx_check = Char2String((char[,])table_check[i, 0]);
  497. //strprint3.Add(jhwxojb.Xlm + "\t" + jhwxojb.Xingbie + "\t" + jhwxojb.Jgjlc + "\t" +
  498. // jhwxojb.Wx_xgjlc + "\t" + jhwxojb.Riqi + "\t" + jhwxojb.Jcc + "\t" + jhwxojb.Wx_bhl_gd + "\t" +
  499. // jhwxojb.Wx_bhl_gx + "\t" + jhwxojb.Wx_bhl_sp + "\t" + jhwxojb.Wx_bhl_sjk + "\t" + jhwxojb.Wx_bhl_gj + "\t" +
  500. // jhwxojb.Boxingid_jhfx + "\t" + jhwxojb.Wx_check);
  501. JHWXobjs.Add(jhwxojb);
  502. }
  503. DataAnalysisToPG.UpdataJHDataToPG(JHWXobjs);
  504. //StreamWriter sw = new StreamWriter("E:\\4_10检测.txt");
  505. //foreach (var item in strprint3)
  506. //{
  507. // sw.WriteLine(item);
  508. //}
  509. //sw.Close();
  510. #endregion
  511. #region 更新波形
  512. //记录成功运算的数据
  513. foreach (var it in Store.GeoJHAccount)
  514. {
  515. foreach (var item in JHWXobjs)
  516. {
  517. if (it.Xlm == item.Xlm && it.Xingbie == item.Xingbie && it.Jgjlc == item.Jgjlc
  518. && it.Jcc == item.Jcc && it.Riqi == item.Riqi)
  519. {
  520. it.Boxingid_jhfx = item.Boxingid_jhfx;
  521. Store.GeoJHReturn.Add(it);
  522. break;
  523. }
  524. }
  525. }
  526. //打印
  527. //List<string> strprint2 = new List<string>();
  528. //使用线路名、行别、尖轨尖里程匹配得到的波形数据,去更新范围、id
  529. for (int k = 0; k < Store.GeoJHReturn.Count; k++)
  530. {
  531. string[] bxxuhaostring = Store.GeoJHReturn[k].Boxingid_jhfx.Split(',');
  532. int[] bxxuhaos = new int[] { Convert.ToInt32(bxxuhaostring[0]), Convert.ToInt32(bxxuhaostring[1]) };
  533. string[] bxidsstring = Store.GeoJHReturn[k].Yswjm_jhfx.Split(',');
  534. int[] bxids = new int[] { Convert.ToInt32(bxidsstring[0]), Convert.ToInt32(bxidsstring[1]) };
  535. int id = bxids[0];
  536. List<T_jihefenxi_boxing> Bolist = new List<T_jihefenxi_boxing>();
  537. for (int i = bxxuhaos[0] - 1; i < bxxuhaos[1]; i++)
  538. {
  539. T_jihefenxi_boxing bolist = new T_jihefenxi_boxing();
  540. bolist.Licheng = Convert.ToDecimal(wave_sw[i, 0]);
  541. bolist.Sudu_jhbx = Convert.ToDecimal(wave_sw[i, 1]);
  542. bolist.Cthj = Convert.ToDecimal(wave_sw[i, 2]);
  543. bolist.Ctcj = Convert.ToDecimal(wave_sw[i, 3]);
  544. bolist.Gjzhy = Convert.ToDecimal(wave_sw[i, 4]);
  545. bolist.Gjyhy = Convert.ToDecimal(wave_sw[i, 5]);
  546. bolist.Zgd = Convert.ToDecimal(wave_sw[i, 6]);
  547. bolist.Ygd = Convert.ToDecimal(wave_sw[i, 7]);
  548. bolist.Zgx = Convert.ToDecimal(wave_sw[i, 8]);
  549. bolist.Ygx = Convert.ToDecimal(wave_sw[i, 9]);
  550. bolist.Gj = Convert.ToDecimal(wave_sw[i, 10]);
  551. bolist.Sp = Convert.ToDecimal(wave_sw[i, 11]);
  552. bolist.Sjk = Convert.ToDecimal(wave_sw[i, 12]);
  553. bolist.Cbzgd = Convert.ToDecimal(wave_sw[i, 13]);
  554. bolist.Cbygd = Convert.ToDecimal(wave_sw[i, 14]);
  555. bolist.Cbzgx = Convert.ToDecimal(wave_sw[i, 15]);
  556. bolist.Cbygx = Convert.ToDecimal(wave_sw[i, 16]);
  557. bolist.Dcdw = Convert.ToDecimal(wave_sw[i, 17]);
  558. bolist.Id = bxids[0];
  559. bolist.Bxid = i + 1;
  560. bolist.Id = id;
  561. bolist.Yswjm = "微小算法执行了";
  562. id++;
  563. //strprint2.Add(bolist.Licheng.ToString() + "\t" + bolist.Sudu_jhbx.ToString() + "\t" + bolist.Cthj.ToString() + "\t" +
  564. // bolist.Ctcj.ToString() + "\t" + bolist.Gjzhy.ToString() + "\t" + bolist.Gjyhy.ToString() + "\t" +
  565. // bolist.Zgd.ToString() + "\t" + bolist.Ygd.ToString() + "\t" + bolist.Zgx.ToString() + "\t" +
  566. // bolist.Ygx.ToString() + "\t" + bolist.Gj.ToString() + "\t" + bolist.Sp.ToString() + "\t" +
  567. // bolist.Sjk.ToString() + "\t" + bolist.Cbzgd.ToString() + "\t" + bolist.Cbygd.ToString() + "\t" +
  568. // bolist.Cbzgx.ToString() + "\t" + bolist.Cbygx.ToString() + "\t" + bolist.Dcdw.ToString() + "\t");
  569. Bolist.Add(bolist);
  570. }
  571. DataAnalysisToPG.UpdataJHBXDataToPG(Bolist);
  572. }
  573. //StreamWriter sws = new StreamWriter("E:\\4_10检测_波形.txt");
  574. //foreach (var item in strprint2)
  575. //{
  576. // sws.WriteLine(item);
  577. //}
  578. //sws.Close();
  579. #endregion
  580. }
  581. /// <summary>
  582. /// char[]转string
  583. /// </summary>
  584. private static string Char2String(char[,] chararr)
  585. {
  586. string arr = "";
  587. for (int j = 0; j < chararr.GetLength(1); j++)
  588. {
  589. arr += chararr[0, j].ToString();
  590. }
  591. return arr;
  592. }
  593. }
  594. }