Schedule/IStation.Algorithm/DAL/ScheduleConclusion.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Schedule/IStation.Algorithm/Helper/IntListHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Schedule/IStation.Algorithm/Schedule/SchedulingHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Schedule/IStation.Client/Form1.Designer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Schedule/IStation.Client/Form1.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Schedule/IStation.Algorithm/DAL/ScheduleConclusion.cs
@@ -17,6 +17,8 @@ return $"{_tableNamePrefix}{runFlag}"; } #region Table /// <summary> /// è·åå ¨é¨è¡¨å /// </summary> @@ -50,11 +52,10 @@ using (SqlSugarClient db = Connection) { var sql = $"select count(*) from sqlite_master where type = 'table' and name = '{GetTableName(runFlag)}';"; var bol = db.Ado.ExecuteCommand(sql) > 0; var bol = db.Ado.GetInt(sql) > 0; return bol; } } /// <summary> /// æ°æ®åºå建表 @@ -65,13 +66,41 @@ { var tableName = GetTableName(runFlag); var sql_exist = $"select count(*) from sqlite_master where type = 'table' and name = '{tableName}';"; if (db.Ado.ExecuteCommand(sql_exist) > 0) if (db.Ado.GetInt(sql_exist) > 0) return true; var sql_create_table = $"CREATE TABLE {tableName} (\r\n ID BIGINT NOT NULL\r\n PRIMARY KEY,\r\n ScheduleCombineID BIGINT,\r\n RunFlag VARCHAR (255),\r\n Pump1 REAL,\r\n Pump2 REAL,\r\n Pump3 REAL,\r\n Head REAL,\r\n Flow REAL,\r\n Power REAL,\r\n WP REAL,\r\n UWP REAL\r\n);"; var bol = db.Ado.ExecuteCommand(sql_create_table) > 0; return bol; } } /// <summary> // å 餿æè¡¨ /// </summary> public bool DeleteAllTable() { var tables = GetAllTableName(); if (tables == null || !tables.Any()) return false; using (SqlSugarClient db = Connection) { db.BeginTran(); foreach (var table in tables) { var sql = $"drop table {table};"; db.Ado.ExecuteCommand(sql); } db.CommitTran(); } return true; } #endregion #region BulkInserts /// <summary> /// 大æ¹éæå ¥ @@ -131,7 +160,6 @@ } } /// <summary> /// 大æ¹éæå ¥ /// </summary> @@ -152,8 +180,6 @@ return db.Fastest<Entity.ScheduleConclusion>().AS(tableName).BulkCopy(list) > 0; } } /// <summary> /// 大æ¹éæå ¥ @@ -193,28 +219,32 @@ return true; } #endregion /// <summary> /// è·åå ¨é¨è¡¨å /// 大æ¹éæå ¥ /// </summary> public bool DeleteAllTable() public List<Entity.ScheduleConclusion> GetList(string runFlag, double targetFlow, double targetHead, int takeCount) { var tables = GetAllTableName(); if (tables == null || !tables.Any()) return false; var tableName = GetTableName(runFlag); using (SqlSugarClient db = Connection) { db.BeginTran(); foreach (var table in tables) var sql = $"select count(*) from sqlite_master where type = 'table' and name = '{tableName}';"; if (db.Ado.GetInt(sql) < 1) { var sql = $"drop table {table};"; db.Ado.ExecuteCommand(sql); return default; } db.CommitTran(); var list = db.Queryable<Entity.ScheduleConclusion>().AS(tableName) .Where(x => x.Head >= targetHead && x.Head <= targetHead * 1.01 && x.Flow > targetFlow) .OrderBy(x => x.Power) .Take(takeCount) .ToList(); return list; } return true; } } Schedule/IStation.Algorithm/Helper/IntListHelper.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ namespace IStation { /// <summary> /// æ´æ°åè¡¨è¾ å©ç±» /// </summary> public class IntListHelper { //åå²å符 private const string _split = ","; /// <summary> /// 转å为å符串 /// </summary> public static string ToString(IEnumerable<int> list) { if (list == null || list.Count() < 1) return string.Empty; return string.Join(_split, list); } /// <summary> /// 转å为å表 /// </summary> /// <param name="str"></param> /// <returns></returns> public static List<int> ToList(string str) { if (string.IsNullOrEmpty(str)) return new List<int>(); try { var list = str.Split(new string[] { _split }, StringSplitOptions.RemoveEmptyEntries); if (list.Count() < 1) return new List<int>(); return list.Select(x => Convert.ToInt32(x)).ToList(); } catch { return new List<int>(); } } } } Schedule/IStation.Algorithm/Schedule/SchedulingHelper.cs
@@ -1,4 +1,6 @@ namespace IStation.Algorithm using System; namespace IStation.Algorithm { #region ViewModel @@ -61,11 +63,13 @@ string GetRunFlag(Dictionary<int, bool> dic) { var tableName = string.Empty; var count = dic.Count; for (int i = 0; i < count; i++) var index = 0; var count = dic.Count; foreach (var item in dic) { tableName += GetRunFlag(dic); if ((i + 1) != count) tableName += GetRunFlag(item.Key, item.Value); index++; if (index != count) { tableName += _falgSpaceMark; } @@ -78,12 +82,49 @@ return (isBp ? _falgFrePumpTag : _falgFixPumpTag) + id; } string GetRunFlag(List<string> flags) { var tableName = string.Empty; var count = flags.Count; var index = 0; foreach (var flag in flags) { tableName += flag; index++; if (index != count) { tableName += _falgSpaceMark; } } return tableName; } #endregion DAL.ScheduleCombine _dal = new DAL.ScheduleCombine(); DAL.ScheduleConclusion _dalScheduleConclusion = new DAL.ScheduleConclusion(); DAL.ScheduleAnaLog _dalAnaLog = new DAL.ScheduleAnaLog(); public class CurrentViewModel : Entity.ScheduleConclusion { public CurrentViewModel(Entity.ScheduleConclusion rhs) : base(rhs) { this.Flags = new List<int>(); var flags = rhs.RunFlag.Split('_'); foreach (var item in flags) { if (int.TryParse(item.Substring(1), out int flag)) { this.Flags.Add(flag); } } } public List<int> Flags { get; set; } } public void Ana(List<Pump> pumps, double tagetFlow, double tagetHead, List<int> openPumpCombine) @@ -93,27 +134,76 @@ if (openPumpCombine != null && openPumpCombine.Any()) { var allCombineList = PermutationAndCombination<int>.GetCombination(pumpIds.ToArray(), 2); var combineList = new List<int[]>(); var combineList = new List<List<int>>(); foreach (var combine in allCombineList) { foreach (var pump in combine) { if (openPumpCombine.Contains(pump)) { combineList.Add(combine); break; } } var pump1 = combine[0]; var pump2 = combine[1]; if (!openPumpCombine.Contains(pump1)) continue; if (!openPumpCombine.Contains(pump2)) continue; combineList.Add(combine.ToList()); } if (combineList.Count < 1) return; var avgFlow = tagetFlow / 2; var optimalConclusionList = new List<CurrentViewModel>(); foreach (var combine in combineList) { // var runFlag = getal var dic = new Dictionary<int, bool>(); foreach (var pump in combine) { if (dic_pump.ContainsKey(pump)) { dic.Add(pump, dic_pump[pump]); } } var runFalg = GetRunFlag(dic); var list = _dalScheduleConclusion.GetList(runFalg, avgFlow, tagetHead, 1); if (list != null && list.Any()) { var vmList = list.Select(x => new CurrentViewModel(x)).ToList(); optimalConclusionList.AddRange(vmList); } } if (optimalConclusionList == null || !optimalConclusionList.Any()) { return; } var optimalConclusionCombineList = PermutationAndCombination<CurrentViewModel>.GetCombination(optimalConclusionList.ToArray(), 2); var combines = new List<Combine>(); foreach (var arr in optimalConclusionCombineList) { var falgs = arr.SelectMany(x => x.Flags).ToList(); if (falgs.GroupBy(x => x).Where(x => x.Count() > 1).Count() > 0) { continue; } var combine = new Combine(); combine.Power = arr.Sum(x => x.Power); combine.Head = arr.Average(x => x.Head); combine.Flow = arr.Sum(x => x.Flow); combine.RunFlagList = falgs; combines.Add(combine); } var a = combines; } } private class Combine { public double Flow { get; set; } public double Head { get; set; } public double Power { get; set; } public List<int> RunFlagList { get; set; } } /// <summary> /// æå ¥åææ¥å¿ Schedule/IStation.Client/Form1.Designer.cs
@@ -28,60 +28,161 @@ /// </summary> private void InitializeComponent() { btnAnaCombine = new Button(); btnAnaCh1Combine = new Button(); richTextBox1 = new RichTextBox(); btnAnaConclusion = new Button(); btnAnaChConclusion = new Button(); tableLayoutPanel1 = new TableLayoutPanel(); btnAnaCh2Combine = new Button(); tableLayoutPanel2 = new TableLayoutPanel(); txtFlow = new TextBox(); txtHead = new TextBox(); btnAna = new Button(); txtOpenCombineList = new RichTextBox(); tableLayoutPanel1.SuspendLayout(); tableLayoutPanel2.SuspendLayout(); SuspendLayout(); // // btnAnaCombine // btnAnaCh1Combine // btnAnaCombine.Dock = DockStyle.Top; btnAnaCombine.Location = new Point(0, 0); btnAnaCombine.Name = "btnAnaCombine"; btnAnaCombine.Size = new Size(1036, 46); btnAnaCombine.TabIndex = 0; btnAnaCombine.Text = "åææ³µç»å"; btnAnaCombine.UseVisualStyleBackColor = true; btnAnaCombine.Click += btnAnaCombine_Click; btnAnaCh1Combine.Dock = DockStyle.Fill; btnAnaCh1Combine.Location = new Point(3, 3); btnAnaCh1Combine.Name = "btnAnaCh1Combine"; btnAnaCh1Combine.Size = new Size(512, 104); btnAnaCh1Combine.TabIndex = 0; btnAnaCh1Combine.Text = "åæ1è¾æ°´æ³µç»å"; btnAnaCh1Combine.UseVisualStyleBackColor = true; btnAnaCh1Combine.Click += btnAnaCh1Combine_Click; // // richTextBox1 // richTextBox1.Dock = DockStyle.Bottom; richTextBox1.Location = new Point(0, 410); richTextBox1.Location = new Point(0, 221); richTextBox1.Name = "richTextBox1"; richTextBox1.Size = new Size(1036, 227); richTextBox1.Size = new Size(1036, 416); richTextBox1.TabIndex = 1; richTextBox1.Text = ""; // // btnAnaConclusion // btnAnaChConclusion // btnAnaConclusion.Dock = DockStyle.Fill; btnAnaConclusion.Location = new Point(0, 46); btnAnaConclusion.Name = "btnAnaConclusion"; btnAnaConclusion.Size = new Size(1036, 364); btnAnaConclusion.TabIndex = 2; btnAnaConclusion.Text = "åææ³µç»åç»è®º"; btnAnaConclusion.UseVisualStyleBackColor = true; btnAnaConclusion.Click += btnAnaConclusion_Click; btnAnaChConclusion.Location = new Point(3, 113); btnAnaChConclusion.Name = "btnAnaChConclusion"; btnAnaChConclusion.Size = new Size(512, 104); btnAnaChConclusion.TabIndex = 2; btnAnaChConclusion.Text = "åæå ¨é¨æ³µç»åç»è®º"; btnAnaChConclusion.UseVisualStyleBackColor = true; btnAnaChConclusion.Click += btnAnaChConclusion_Click; // // tableLayoutPanel1 // tableLayoutPanel1.ColumnCount = 2; tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); tableLayoutPanel1.Controls.Add(btnAnaCh1Combine, 0, 0); tableLayoutPanel1.Controls.Add(btnAnaChConclusion, 0, 1); tableLayoutPanel1.Controls.Add(btnAnaCh2Combine, 1, 0); tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 1, 1); tableLayoutPanel1.Dock = DockStyle.Fill; tableLayoutPanel1.Location = new Point(0, 0); tableLayoutPanel1.Name = "tableLayoutPanel1"; tableLayoutPanel1.RowCount = 2; tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutPanel1.Size = new Size(1036, 221); tableLayoutPanel1.TabIndex = 3; // // btnAnaCh2Combine // btnAnaCh2Combine.Location = new Point(521, 3); btnAnaCh2Combine.Name = "btnAnaCh2Combine"; btnAnaCh2Combine.Size = new Size(512, 104); btnAnaCh2Combine.TabIndex = 3; btnAnaCh2Combine.Text = "åæ2è¾æ°´æ³µç»å"; btnAnaCh2Combine.UseVisualStyleBackColor = true; btnAnaCh2Combine.Click += btnAnaCh2Combine_Click; // // tableLayoutPanel2 // tableLayoutPanel2.ColumnCount = 2; tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); tableLayoutPanel2.Controls.Add(txtFlow, 0, 0); tableLayoutPanel2.Controls.Add(txtHead, 1, 0); tableLayoutPanel2.Controls.Add(btnAna, 1, 1); tableLayoutPanel2.Controls.Add(txtOpenCombineList, 0, 1); tableLayoutPanel2.Dock = DockStyle.Fill; tableLayoutPanel2.Location = new Point(521, 113); tableLayoutPanel2.Name = "tableLayoutPanel2"; tableLayoutPanel2.RowCount = 2; tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 34.2857132F)); tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 65.71429F)); tableLayoutPanel2.Size = new Size(512, 105); tableLayoutPanel2.TabIndex = 4; // // txtFlow // txtFlow.Dock = DockStyle.Fill; txtFlow.Location = new Point(3, 3); txtFlow.Name = "txtFlow"; txtFlow.Size = new Size(250, 30); txtFlow.TabIndex = 0; txtFlow.Text = "16406"; // // txtHead // txtHead.Dock = DockStyle.Fill; txtHead.Location = new Point(259, 3); txtHead.Name = "txtHead"; txtHead.Size = new Size(250, 30); txtHead.TabIndex = 1; txtHead.Text = "15.92"; // // btnAna // btnAna.Dock = DockStyle.Fill; btnAna.Location = new Point(259, 39); btnAna.Name = "btnAna"; btnAna.Size = new Size(250, 63); btnAna.TabIndex = 3; btnAna.Text = "åæ"; btnAna.UseVisualStyleBackColor = true; btnAna.Click += btnAna_Click; // // txtOpenCombineList // txtOpenCombineList.Dock = DockStyle.Fill; txtOpenCombineList.Location = new Point(3, 39); txtOpenCombineList.Name = "txtOpenCombineList"; txtOpenCombineList.Size = new Size(250, 63); txtOpenCombineList.TabIndex = 4; txtOpenCombineList.Text = "11,12,13,17"; // // Form1 // AutoScaleDimensions = new SizeF(11F, 24F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(1036, 637); Controls.Add(btnAnaConclusion); Controls.Add(tableLayoutPanel1); Controls.Add(richTextBox1); Controls.Add(btnAnaCombine); Name = "Form1"; StartPosition = FormStartPosition.CenterScreen; Text = "Form1"; tableLayoutPanel1.ResumeLayout(false); tableLayoutPanel2.ResumeLayout(false); tableLayoutPanel2.PerformLayout(); ResumeLayout(false); } #endregion private Button btnAnaCombine; private Button btnAnaCh1Combine; private RichTextBox richTextBox1; private Button btnAnaConclusion; private Button btnAnaChConclusion; private TableLayoutPanel tableLayoutPanel1; private Button btnAnaCh2Combine; private TableLayoutPanel tableLayoutPanel2; private TextBox txtFlow; private TextBox txtHead; private Button btnAna; private RichTextBox txtOpenCombineList; } } Schedule/IStation.Client/Form1.cs
@@ -12,15 +12,16 @@ }; } string _floder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data"); private void btnAnaCombine_Click(object sender, EventArgs e) { this.richTextBox1.Text += "æ£å¨åææ³µç»å"; var folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data"); var ch1 = folder + "\\" + "éè¡ä¸è¾.json"; this.richTextBox1.Text += "\r\næ£å¨åææ³µç»å"; var ch1 = _floder + "\\" + "éè¡ä¸è¾.json"; var ch1_json = File.ReadAllText(ch1); var ch1Pumps = JsonHelper.Json2Object<List<Model.Pump>>(ch1_json); var ch2 = folder + "\\" + "éè¡äºè¾.json"; var ch2 = _floder + "\\" + "éè¡äºè¾.json"; var ch2_json = File.ReadAllText(ch2); var ch2Pumps = JsonHelper.Json2Object<List<Model.Pump>>(ch2_json); @@ -35,18 +36,90 @@ }); } private void btnAnaConclusion_Click(object sender, EventArgs e) private void btnAnaCh1Combine_Click(object sender, EventArgs e) { this.richTextBox1.Text += "æ£å¨åææ³µç»åç»è®º"; var ch1 = _floder + "\\" + "éè¡ä¸è¾.json"; var ch1_json = File.ReadAllText(ch1); var ch1Pumps = JsonHelper.Json2Object<List<Model.Pump>>(ch1_json); this.richTextBox1.Text += "\r\næ£å¨åæ1è¾æ°´æ³µç»å"; Task.Run(() => { var helper = new Algorithm.SchedulingAnaHelper(); helper.AnaCombine(ch1Pumps); this.Invoke(() => { this.richTextBox1.Text += "\r\nåæ1è¾æ°´æ³µç»å宿¯"; }); }); } private void btnAnaCh2Combine_Click(object sender, EventArgs e) { var ch2 = _floder + "\\" + "éè¡äºè¾.json"; var ch2_json = File.ReadAllText(ch2); var ch2Pumps = JsonHelper.Json2Object<List<Model.Pump>>(ch2_json); this.richTextBox1.Text += "\r\næ£å¨åæ2è¾æ°´æ³µç»å"; Task.Run(() => { var helper = new Algorithm.SchedulingAnaHelper(); helper.AnaCombine(ch2Pumps); this.Invoke(() => { this.richTextBox1.Text += "\r\nåæ2è¾æ°´æ³µç»å宿¯"; }); }); } private void btnAnaChConclusion_Click(object sender, EventArgs e) { this.richTextBox1.Text += "\r\næ£å¨åæå ¨é¨æ³µç»åç»è®º"; Task.Run(() => { var helper = new Algorithm.SchedulingAnaHelper(); helper.AnaConclusion(); this.Invoke(() => { this.richTextBox1.Text += "\r\næ³µç»ååæå®æ¯"; this.richTextBox1.Text += "\r\nå ¨é¨æ³µç»ååæå®æ¯"; }); }); } private void btnAna_Click(object sender, EventArgs e) { if (!double.TryParse(this.txtFlow.Text, out double targetFlow)) { MessageBox.Show("请è¾å ¥æµé!"); return; } if (!double.TryParse(this.txtHead.Text, out double targetHead)) { MessageBox.Show("请è¾å ¥åå!"); return; } var combine = this.txtOpenCombineList.Text.Trim(); if (string.IsNullOrEmpty(combine)) { MessageBox.Show("请è¾å ¥æ³µç»å!"); return; } var combineList = IntListHelper.ToList(combine); if (combineList == null || combineList.Count < 1) { MessageBox.Show("请è¾å ¥æææ³µç»å!\r\n','å·é´é!"); return; } var ch1 = _floder + "\\" + "éè¡ä¸è¾.json"; var ch1_json = File.ReadAllText(ch1); var ch1Pumps = JsonHelper.Json2Object<List<Model.Pump>>(ch1_json); var helper = new Algorithm.SchedulingHelper(); helper.Ana(ch1Pumps, targetFlow, targetHead, combineList); } } }