|
@@ -11,6 +11,7 @@ using Uninpho.DBOperation.Operation;
|
|
|
using System.Windows.Forms;
|
|
|
using DevExpress.XtraEditors;
|
|
|
using MathWorks.MATLAB.NET.Arrays;
|
|
|
+using System.Globalization;
|
|
|
using System.Threading;
|
|
|
//数据库表重置;
|
|
|
//TRUNCATE TABLE public.t_jihefenxi_boxing;//删除表内所有数据
|
|
@@ -110,15 +111,8 @@ namespace Uninpho.Tools.components.DataAnalysis
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- DataAnalysisToPG.DelUpdataData(GV.GetRowCellValue(selectrow[i], "Id").ToString(), type);
|
|
|
-
|
|
|
- }
|
|
|
- else if (GV.GetRowCellValue(selectrow[i], "Rwzt").ToString() == "算法未执行" && type == "微小")
|
|
|
- {
|
|
|
- XtraMessageBox.Show("请先执行几何算法!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
|
- iszhengc = false;
|
|
|
- break;
|
|
|
- }
|
|
|
+ DataAnalysisToPG.DelUpdataDataDWGL(GV.GetRowCellValue(selectrow[i], "Id").ToString(), type);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -246,8 +240,39 @@ namespace Uninpho.Tools.components.DataAnalysis
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //提示
|
|
|
- if (boo)
|
|
|
+ else if (type == "功率")
|
|
|
+ {
|
|
|
+ for (int i = 0; i < selectrow.Length; i++)
|
|
|
+ {
|
|
|
+ boo = true;
|
|
|
+ GV.SetRowCellValue(selectrow[i], "Taskstatus", "正在执行" + type + "算法...");
|
|
|
+ T_dwfile_account whichfile = (T_dwfile_account)DataAnalysisToPG.QueryToPGByIdGL(Convert.ToInt32(GV.GetRowCellValue(selectrow[i], "Id").ToString().Trim()));
|
|
|
+ try
|
|
|
+ {
|
|
|
+ await Task.Run(() =>
|
|
|
+ {
|
|
|
+ GL_new(whichfile);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ boo = false;
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ if (boo)
|
|
|
+ {
|
|
|
+ GV.SetRowCellValue(selectrow[i], "Taskstatus", type + "算法执行完毕");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ GV.SetRowCellValue(selectrow[i], "Taskstatus", "算法执行失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //提示
|
|
|
+ if (boo)
|
|
|
{
|
|
|
XtraMessageBox.Show(type + "算法执行完毕", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
|
}
|
|
@@ -273,6 +298,8 @@ namespace Uninpho.Tools.components.DataAnalysis
|
|
|
WXSFFun(whichfile);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
#region 几何算法
|
|
|
public void JH_new(T_file_account whichfile)
|
|
|
{
|
|
@@ -809,8 +836,156 @@ namespace Uninpho.Tools.components.DataAnalysis
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
+ /// 功率算法
|
|
|
+ public void GL_new(T_dwfile_account whichfile)
|
|
|
+ {
|
|
|
+ //List<T_daocha_account> daochabiao = (List<T_daocha_account>)DataAnalysisToPG.QueryDCTZ(whichfile.Xlm, whichfile.Yswjm.Split('-')[0].ToCharArray());
|
|
|
+ //List<T_quxian_account> quxianbiao = (List<T_quxian_account>)DataAnalysisToPG.QueryQXTZ(whichfile.Xlm, whichfile.Yswjm.Split('-')[0].ToCharArray());
|
|
|
+ string fname_dir0 = Path.GetDirectoryName(whichfile.Srlj) + "\\";
|
|
|
+ string fname0 = Path.GetFileName(whichfile.Srlj);
|
|
|
+ Console.Write(fname_dir0);
|
|
|
+ Console.Write(fname0);
|
|
|
|
|
|
+ string xianlu = whichfile.Xianlu;
|
|
|
+ string chezhan = whichfile.Chezhan;
|
|
|
+ string filename = whichfile.Filename;
|
|
|
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var data = AnalysisAlgorithmcs.GLFX(fname_dir0, fname0, xianlu, chezhan, filename);
|
|
|
+ readGLFX(data, whichfile);
|
|
|
+ //readGLFX_TEST(data, whichfile);
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ XtraMessageBox.Show("文件:" + whichfile.Filename + "执行失败!" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// 读功率分析数据
|
|
|
+ private void readGLFX(MWArray[] agrsOut, T_dwfile_account whichfile)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ MWCellArray output1 = agrsOut[0] as MWCellArray;
|
|
|
+ var table_data = output1.ToArray();
|
|
|
+
|
|
|
+ //// 打印原始数据结构
|
|
|
+ //Console.WriteLine("数据类型: " + table_data.GetType());
|
|
|
+ //Console.WriteLine("数据维度: " + (table_data as Array).Rank);
|
|
|
+
|
|
|
+ List<T_glanalysis_account> GLobjs = new List<T_glanalysis_account>();
|
|
|
+
|
|
|
+ // 假设是二维数组,从第2行开始
|
|
|
+ for (int i = 2; i < (table_data as Array).GetLength(0); i++)
|
|
|
+ {
|
|
|
+ T_glanalysis_account gldata = new T_glanalysis_account();
|
|
|
+
|
|
|
+ // 安全地获取每列数据
|
|
|
+ gldata.Curvenumber = SafeExtractInt(table_data, i, 2);
|
|
|
+ gldata.Time = SafeExtractDecimal(table_data, i, 3);
|
|
|
+ gldata.Directionalmarker = SafeExtractInt(table_data, i, 4);
|
|
|
+ gldata.Curvetype = SafeExtractInt(table_data, i, 5);
|
|
|
+ gldata.Totalwork = SafeExtractDecimal(table_data, i, 6);
|
|
|
+ gldata.Changerate = SafeExtractDecimal(table_data, i, 7);
|
|
|
+ gldata.Offsetvalue = SafeExtractDecimal(table_data, i, 8);
|
|
|
+ gldata.Powervariance = SafeExtractDecimal(table_data, i, 9);
|
|
|
+
|
|
|
+ gldata.Filename = whichfile.Filename;
|
|
|
+ gldata.Xianlu = whichfile.Xianlu;
|
|
|
+ gldata.Chezhan = whichfile.Chezhan;
|
|
|
+
|
|
|
+ GLobjs.Add(gldata);
|
|
|
+ }
|
|
|
+
|
|
|
+ //Console.WriteLine("解析完成,共 " + GLobjs.Count + " 条记录");
|
|
|
+ DataAnalysisToPG.updataTaskstatus(new string[] { whichfile.Id.ToString(), type + "算法执行完毕" });
|
|
|
+ DataAnalysisToPG.InsertGLFXDataToPG(GLobjs);
|
|
|
+
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ //Console.WriteLine("解析出错: " + ex.Message);
|
|
|
+ // Console.WriteLine("堆栈跟踪: " + ex.StackTrace);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private int SafeExtractInt(object table_data, int row, int col)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ // 尝试直接获取数组元素
|
|
|
+ var cellArray = (table_data as Array).GetValue(row, col);
|
|
|
+
|
|
|
+ // 处理 MWNumericArray
|
|
|
+ if (cellArray is MWNumericArray)
|
|
|
+ {
|
|
|
+ var numArray = cellArray as MWNumericArray;
|
|
|
+ return (int)Math.Round(numArray.ToScalarDouble());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理 double 数组
|
|
|
+ if (cellArray is double[,])
|
|
|
+ {
|
|
|
+ var doubleArray = cellArray as double[,];
|
|
|
+ return (int)Math.Round(doubleArray[0, 0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 其他转换尝试
|
|
|
+ return Convert.ToInt32(cellArray);
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ //Console.WriteLine($"提取整数失败(row:{row},col:{col}): {ex.Message}");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private decimal SafeExtractDecimal(object table_data, int row, int col)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ // 尝试直接获取数组元素
|
|
|
+ var cellArray = (table_data as Array).GetValue(row, col);
|
|
|
+
|
|
|
+ // 处理 MWNumericArray
|
|
|
+ if (cellArray is MWNumericArray)
|
|
|
+ {
|
|
|
+ var numArray = cellArray as MWNumericArray;
|
|
|
+ return (decimal)Math.Round(numArray.ToScalarDouble(), 15);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理 double 数组
|
|
|
+ if (cellArray is double[,])
|
|
|
+ {
|
|
|
+ var doubleArray = cellArray as double[,];
|
|
|
+ return (decimal)Math.Round(doubleArray[0, 0], 15);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 其他转换尝试
|
|
|
+ return Convert.ToDecimal(cellArray);
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ // Console.WriteLine($"提取小数失败(row:{row},col:{col}): {ex.Message}");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ ///
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="jhfe_account"></param>
|
|
|
+ /// <param name="date"></param>
|
|
|
+ /// <param name="car"></param>
|
|
|
+ /// <param name="mile"></param>
|
|
|
+ /// <param name="wave_data"></param>
|
|
|
+ /// <param name="id_wave_all"></param>
|
|
|
+ /// <param name="jx_loc_all"></param>
|
|
|
+ /// <param name="line"></param>
|
|
|
+ /// <param name="velo"></param>
|
|
|
+ /// <param name="zc"></param>
|
|
|
private 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)
|
|
|
{
|
|
|
int bxindex = 0;
|