From c297ce1f0704a6dd927d68042df3e31fa36f8194 Mon Sep 17 00:00:00 2001 From: ningshuxia <ningshuxia0927@outlook.com> Date: 星期一, 29 四月 2024 17:44:59 +0800 Subject: [PATCH] 基础分析差不多 准备开始调度分析 --- Schedule/IStation.Algorithm/Schedule/SchedulingAnaHelper_v3.cs | 546 ++++++++++++++++++++++++++++++++ Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile1.pubxml.user | 10 Schedule/IStation.Client/IStation.Client.csproj.user | 2 Schedule/IStation.Algorithm/Schedule/SchedulingHelper.cs | 137 ++++++++ Schedule/IStation.Client/Form1.Designer.cs | 10 Schedule/IStation.Algorithm/GlobalUsing.cs | 2 Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile1.pubxml | 13 Schedule/IStation.Algorithm/DAL/ScheduleCombine.cs | 32 + Schedule/IStation.Algorithm/IStation.Algorithm.csproj | 2 Schedule/IStation.Algorithm/Schedule/SchedulingAnaHelper.cs | 171 +++------ Schedule/IStation.Algorithm/DAL/ScheduleConclusion.cs | 61 ++- Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile.pubxml.user | 2 12 files changed, 844 insertions(+), 144 deletions(-) diff --git a/Schedule/IStation.Algorithm/DAL/ScheduleCombine.cs b/Schedule/IStation.Algorithm/DAL/ScheduleCombine.cs index 414b858..eb57faa 100644 --- a/Schedule/IStation.Algorithm/DAL/ScheduleCombine.cs +++ b/Schedule/IStation.Algorithm/DAL/ScheduleCombine.cs @@ -82,10 +82,35 @@ } + /// <summary> /// 澶ф壒閲忔彃鍏� /// </summary> - public bool BulkInserts_SplitTable_Create(string runFlag, List<Entity.ScheduleCombine> list) + public async Task<bool> BulkInserts_Create_Async(string runFlag, List<Entity.ScheduleCombine> list) + { + if (list == null || list.Count < 1) + return default; + var tableName = GetTableName(runFlag); + using (SqlSugarClient db = Connection) + { + var exist_sql = $"select count(*) from sqlite_master where type = 'table' and name = '{tableName}' ;"; + if (db.Ado.GetInt(exist_sql) < 1) + { + var sql_create_table = $"CREATE TABLE {tableName} (\r\n ID BIGINT NOT NULL\r\n PRIMARY KEY,\r\n RunFlag VARCHAR (255),\r\n RunCount INTEGER,\r\n Pump1 REAL,\r\n Pump2 REAL,\r\n Pump3 REAL,\r\n CurveQH VARCHAR (255),\r\n CurveQP VARCHAR (255),\r\n AnaStatus BIT\r\n);"; + if (db.Ado.ExecuteCommand(sql_create_table) < 1) + { + return false; + } + } + return await db.Fastest<Entity.ScheduleCombine>().AS(tableName).BulkCopyAsync(list) > 0; + } + } + + + /// <summary> + /// 澶ф壒閲忔彃鍏� + /// </summary> + public bool BulkInserts_Create(string runFlag, List<Entity.ScheduleCombine> list) { if (list == null || list.Count < 1) return default; @@ -96,10 +121,7 @@ if (db.Ado.ExecuteCommand(exist_sql) < 1) { var sql_create_table = $"CREATE TABLE {tableName} (\r\n ID BIGINT NOT NULL\r\n PRIMARY KEY,\r\n RunFlag VARCHAR (255),\r\n RunCount INTEGER,\r\n Pump1 REAL,\r\n Pump2 REAL,\r\n Pump3 REAL,\r\n CurveQH VARCHAR (255),\r\n CurveQP VARCHAR (255),\r\n AnaStatus BIT\r\n);"; - if (db.Ado.ExecuteCommand(sql_create_table) < 1) - { - return false; - } + db.Ado.ExecuteCommand(sql_create_table); } //澶ф暟鎹啓鍏� return db.Fastest<Entity.ScheduleCombine>().AS(tableName).BulkCopy(list) > 0; diff --git a/Schedule/IStation.Algorithm/DAL/ScheduleConclusion.cs b/Schedule/IStation.Algorithm/DAL/ScheduleConclusion.cs index f41ae35..c101ab8 100644 --- a/Schedule/IStation.Algorithm/DAL/ScheduleConclusion.cs +++ b/Schedule/IStation.Algorithm/DAL/ScheduleConclusion.cs @@ -1,7 +1,4 @@ -锘縰sing MathNet.Numerics.Distributions; -using System.Collections.Generic; - -namespace IStation.DAL +锘縩amespace IStation.DAL { /// <summary> /// @@ -76,7 +73,42 @@ } } + /// <summary> + /// 澶ф壒閲忔彃鍏� + /// </summary> + public bool BulkInserts(string runFlag, List<Entity.ScheduleConclusion> list) + { + if (list == null || list.Count < 1) + return default; + var tableName = GetTableName(runFlag); + using (SqlSugarClient db = Connection) + { + return db.Fastest<Entity.ScheduleConclusion>().AS(tableName).BulkCopy(list) > 0; + } + } + /// <summary> + /// 澶ф壒閲忔彃鍏� + /// </summary> + public async Task<bool> BulkInserts_Create_Async(string runFlag, List<Entity.ScheduleConclusion> list) + { + if (list == null || list.Count < 1) + return default; + var tableName = GetTableName(runFlag); + using (SqlSugarClient db = Connection) + { + var exist_sql = $"select count(*) from sqlite_master where type = 'table' and name = '{tableName}' ;"; + if (db.Ado.GetInt(exist_sql) < 1) + { + 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);"; + if (db.Ado.ExecuteCommand(sql_create_table) < 1) + { + return false; + } + } + return await db.Fastest<Entity.ScheduleConclusion>().AS(tableName).BulkCopyAsync(list) > 0; + } + } /// <summary> /// 澶ф壒閲忔彃鍏� @@ -99,10 +131,11 @@ } } + /// <summary> /// 澶ф壒閲忔彃鍏� /// </summary> - public bool BulkInserts_SplitTable_Create(string runFlag, List<Entity.ScheduleConclusion> list) + public bool BulkInserts_Create(string runFlag, List<Entity.ScheduleConclusion> list) { if (list == null || list.Count < 1) return default; @@ -113,29 +146,13 @@ if (db.Ado.GetInt(exist_sql) < 1) { 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);"; - if (db.Ado.ExecuteCommand(sql_create_table) < 1) - { - return false; - } + db.Ado.ExecuteCommand(sql_create_table); } //澶ф暟鎹啓鍏� return db.Fastest<Entity.ScheduleConclusion>().AS(tableName).BulkCopy(list) > 0; } } - /// <summary> - /// 澶ф壒閲忔彃鍏� - /// </summary> - public bool BulkInserts(string runFlag, List<Entity.ScheduleConclusion> list) - { - if (list == null || list.Count < 1) - return default; - var tableName = GetTableName(runFlag); - using (SqlSugarClient db = Connection) - { - return db.Fastest<Entity.ScheduleConclusion>().AS(tableName).BulkCopy(list) > 0; - } - } /// <summary> diff --git a/Schedule/IStation.Algorithm/GlobalUsing.cs b/Schedule/IStation.Algorithm/GlobalUsing.cs index 646da18..c2d12f6 100644 --- a/Schedule/IStation.Algorithm/GlobalUsing.cs +++ b/Schedule/IStation.Algorithm/GlobalUsing.cs @@ -5,7 +5,7 @@ global using SqlSugar; global using System.ComponentModel; global using System.Data.SQLite; +global using System.Diagnostics; global using System.Reflection; global using System.Text; global using Yitter.IdGenerator; - diff --git a/Schedule/IStation.Algorithm/IStation.Algorithm.csproj b/Schedule/IStation.Algorithm/IStation.Algorithm.csproj index be066c3..36d7d7a 100644 --- a/Schedule/IStation.Algorithm/IStation.Algorithm.csproj +++ b/Schedule/IStation.Algorithm/IStation.Algorithm.csproj @@ -32,8 +32,8 @@ <Compile Remove="Model\Schedule\ScheduleCombine - 澶嶅埗.cs" /> <Compile Remove="Schedule\ScheduleCalc - 澶嶅埗.cs" /> <Compile Remove="Schedule\ScheduleCalc1.cs" /> - <Compile Remove="Schedule\SchedulingAnaHelper - 澶嶅埗.cs" /> <Compile Remove="Schedule\SchedulingAnaHelper_v1.cs" /> + <Compile Remove="Schedule\SchedulingAnaHelper_v3.cs" /> <Compile Remove="Schedule\SchedulingCombineAnaHelper - 澶嶅埗.cs" /> </ItemGroup> diff --git a/Schedule/IStation.Algorithm/Schedule/SchedulingAnaHelper.cs b/Schedule/IStation.Algorithm/Schedule/SchedulingAnaHelper.cs index e2b3553..38a5f47 100644 --- a/Schedule/IStation.Algorithm/Schedule/SchedulingAnaHelper.cs +++ b/Schedule/IStation.Algorithm/Schedule/SchedulingAnaHelper.cs @@ -124,13 +124,14 @@ /// </summary> /// <param name="pumps">娉靛垪琛�</param> /// <returns></returns> - public bool AnaCombine(List<Pump> pumps) + public void AnaCombine(List<Pump> pumps) { + InsertAnaLog("寮�濮嬪垎鏋愭车缁勫悎"); if (pumps == null || pumps.Count < 1) { InsertAnaLog("鍒嗘瀽澶辫触:pumps == null || pumps.Count < 1"); - return false; + return; } var fre_def = _frequency_def; var anaPumpItems = new List<AnaPumpItem>(); @@ -155,7 +156,7 @@ if (anaPumpItems.Count < 1) { InsertAnaLog("鍒嗘瀽澶辫触:anaPumpItems.Count < 1"); - return false; + return; } @@ -173,7 +174,6 @@ { case 1: { - for (int i = 0; i < pumpCombineCount; i++) { @@ -198,15 +198,8 @@ scheduleCombine.AnaStatus = false; list.Add(scheduleCombine); } - var bol = BulkInsertScheduleCombineList(runFlag, list); - if (bol) - { - InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆鎴愬姛!"); - } - else - { - InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆澶辫触!"); - } + + InsertCombine(i + 1, runFlag, list); } InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,鍒嗘瀽瀹屾瘯!"); } @@ -252,15 +245,7 @@ list.Add(scheduleCombine); } } - var bol = BulkInsertScheduleCombineList(runFlag, list); - if (bol) - { - InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆鎴愬姛!"); - } - else - { - InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆澶辫触!"); - } + InsertCombine(i + 1, runFlag, list); } InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,鍒嗘瀽瀹屾瘯!"); } @@ -312,15 +297,7 @@ } } } - var bol = BulkInsertScheduleCombineList(runFlag, list); - if (bol) - { - InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆鎴愬姛!"); - } - else - { - InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆澶辫触!"); - } + InsertCombine(i + 1, runFlag, list); } InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,鍒嗘瀽瀹屾瘯!"); } @@ -328,42 +305,38 @@ default: break; } } - InsertAnaLog("鍒嗘瀽娉电粍鍚堝畬鎴�"); - return true; } + + /// <summary> /// 鍒嗘瀽缁撹 /// </summary> public void AnaConclusion() { - //_dalScheduleConclusion.DeleteAllTable(); - //return; - InsertAnaLog("寮�濮嬪垎鏋愭车缁勫悎缁撹"); + InsertAnaLog($"寮�濮嬪垎鏋愭车缁勫悎缁撹!"); + _dalScheduleConclusion.DeleteAllTable(); var scheduleCombineTableNames = _dal.GetAllTableName(); if (scheduleCombineTableNames == null || !scheduleCombineTableNames.Any()) { - InsertAnaLog("鍒嗘瀽澶辫触:scheduleCombineTableNames == null || !scheduleCombineTableNames.Any()"); + InsertAnaLog($"鏃犳车缁勫悎琛�!"); return; } var tableCount = scheduleCombineTableNames.Count(); - InsertAnaLog($"鍒嗘瀽杩涘害:{tableCount}涓粍鍚�"); + InsertAnaLog($"鍒嗘瀽{tableCount}涓粍鍚�!"); for (int tableIndex = 0; tableIndex < tableCount; tableIndex++) { var tableName = scheduleCombineTableNames[tableIndex]; - var runFlag = tableName.Split('_').Last(); - InsertAnaLog($"鍒嗘瀽杩涘害:{tableName},绗瑊tableIndex + 1}涓�"); var scheduleCombineList = _dal.GetAllUnanalyzedAnaByTableName(tableName); if (scheduleCombineList == null || !scheduleCombineList.Any()) { - InsertAnaLog($"鍒嗘瀽杩涘害:{tableName},鍒嗘瀽瀹屾瘯"); + InsertAnaLog($"鍒嗘瀽杩涘害:{tableName},绗瑊tableIndex + 1}涓�,鍒嗘瀽瀹屾瘯"); continue; } var scheduleCombineListCount = scheduleCombineList.Count(); - InsertAnaLog($"鍒嗘瀽杩涘害:{tableName},{scheduleCombineListCount}鏉℃湭鍒嗘瀽鏁版嵁"); - var scheduleConclusionList = new List<List<Entity.ScheduleConclusion>>(scheduleCombineListCount); var scheduleCombineIds = new List<long>(scheduleCombineListCount); + for (int combineIndex = 0; combineIndex < scheduleCombineListCount; combineIndex++) { var scheduleCombine = scheduleCombineList[combineIndex]; @@ -373,9 +346,7 @@ var curveQP = JsonHelper.Json2Object<Curve.CurveExpress>(scheduleCombine.CurveQP); var bol = curveQH.GetMinMaxPointY(out double maxY, out double minY); if (!bol) - { - continue; - } + return; var maxHead = Math.Ceiling(maxY); var minHead = Math.Floor(minY); @@ -388,7 +359,6 @@ { continue; } - var scheduleConclusion = new Entity.ScheduleConclusion(); scheduleConclusion.ScheduleCombineID = scheduleCombineID; scheduleConclusion.RunFlag = scheduleCombine.RunFlag; @@ -407,10 +377,9 @@ } SetAnaStatus(tableName, scheduleCombineIds); var list = scheduleConclusionList.SelectMany(x => x.ToList()).ToList(); - BulkInsertScheduleConclusionList(runFlag, list); - InsertAnaLog($"鍒嗘瀽杩涘害:{tableName},{scheduleCombineIds.Count}鏉�,鍒嗘瀽瀹屾瘯"); + var runFlag = list[0].RunFlag; + InsertConclusion(tableIndex + 1, runFlag, list); } - InsertAnaLog("娉电粍鍚堝垎鏋愬畬姣�"); } @@ -444,75 +413,61 @@ return _dal.ExistTable(runFlag); } - /// <summary> - /// 鑴忔彃鍏ヨ皟搴︾粍鍚堝垪琛� - /// </summary> - private bool BulkInsertScheduleCombineList(List<Entity.ScheduleCombine> list) - { - if (list == null || !list.Any()) - return false; - var bol = _dal.BulkInserts_SplitTable(list); - return bol; - } - /// <summary> - /// 鑴忔彃鍏ヨ皟搴︾粍鍚堝垪琛� - /// </summary> - private bool BulkInsertScheduleCombineList(string runFlag, List<Entity.ScheduleCombine> list) + public void InsertCombine(int index, string runFlag, List<Entity.ScheduleCombine> list) { if (list == null || !list.Any()) - return false; - var bol = _dal.BulkInserts_SplitTable_Create(runFlag, list); - return bol; - } - - /// <summary> - /// 鑴忔彃鍏ヨ皟搴︾粍鍚堝垪琛� - /// </summary> - private bool BulkInsert_NativeSql_ScheduleCombineList(string runFlag, List<Entity.ScheduleCombine> list) - { - if (list == null || !list.Any()) - return false; - var bol = _dal.BulkInserts_NativeSql(runFlag, list); - return bol; + { + var log = $"{runFlag}:涓嬫爣:{index},鏃犳暟鎹�"; + InsertAnaLog(log); + return; + } + Task.Run(() => + { + var sw = Stopwatch.StartNew(); + var db = new DAL.ScheduleCombine(); + db.BulkInserts_Create(runFlag, list); + var log = $"{runFlag}:涓嬫爣:{index},鏁伴噺:{list.Count},鎻掑叆鑰楁椂:{sw.ElapsedMilliseconds / 1000}m"; + InsertAnaLog(log); + }); } - /// <summary> - /// 鑴忔彃鍏ヨ皟搴︾粨璁哄垪琛� - /// </summary> - private bool BulkInsertScheduleConclusionList(List<Entity.ScheduleConclusion> list) + public void InsertConclusion(int index, string runFlag, List<Entity.ScheduleConclusion> list) { if (list == null || !list.Any()) - return false; - var bol = _dalScheduleConclusion.BulkInserts_SplitTable(list); - return bol; + { + var log = $"{runFlag}:涓嬫爣:{index},鏃犳暟鎹�"; + InsertAnaLog(log); + return; + } + Task.Run(() => + { + var sw = Stopwatch.StartNew(); + var db = new DAL.ScheduleConclusion(); + db.BulkInserts_Create(runFlag, list); + var log = $"鍒嗘瀽杩涘害:{runFlag},涓嬫爣:{index},鏁伴噺:{list.Count},鎻掑叆鑰楁椂:{sw.ElapsedMilliseconds / 1000}m"; + InsertAnaLog(log); + }); } - - /// <summary> - /// 鑴忔彃鍏ヨ皟搴︾粨璁哄垪琛� - /// </summary> - private bool BulkInsertScheduleConclusionList(string runFlag, List<Entity.ScheduleConclusion> list) - { - if (list == null || !list.Any()) - return false; - var bol = _dalScheduleConclusion.BulkInserts_SplitTable_Create(runFlag, list); - return bol; - } - - /// <summary> - /// 鑴忔彃鍏ヨ皟搴︾粨璁哄垪琛� - /// </summary> - private bool BulkInsert_NativeSql_ScheduleConclusionList(string runFalg, List<Entity.ScheduleConclusion> list) - { - if (list == null || !list.Any()) - return false; - var bol = _dalScheduleConclusion.BulkInserts_NativeSql(runFalg, list); - return bol; - } - } } +//public void Run(Action action, string description) +//{ +// Stopwatch sw = Stopwatch.StartNew(); +// action(); +// var log = $"--> {description}:{sw.ElapsedMilliseconds / 1000}m"; +// InsertAnaLog(log); +//} + +//public T Run<T>(Func<T> func, string description) +//{ +// var sw = Stopwatch.StartNew(); +// T result = func(); +// var log = $"--> {description}:{sw.ElapsedMilliseconds / 1000}m"; +// InsertAnaLog(log); +// return result; +//} \ No newline at end of file diff --git a/Schedule/IStation.Algorithm/Schedule/SchedulingAnaHelper_v3.cs b/Schedule/IStation.Algorithm/Schedule/SchedulingAnaHelper_v3.cs new file mode 100644 index 0000000..db09632 --- /dev/null +++ b/Schedule/IStation.Algorithm/Schedule/SchedulingAnaHelper_v3.cs @@ -0,0 +1,546 @@ +锘縩amespace IStation.Algorithm.V3 +{ + #region ViewModel + + /// <summary> + /// 鍒嗘瀽娉甸」 + /// </summary> + public class AnaPumpItem + { + public AnaPumpItem() { } + public AnaPumpItem(Pump rhs) + { + this.ID = rhs.ID; + this.Name = rhs.Name; + this.Code = rhs.Code; + this.IsBp = rhs.IsBp; + this.Qr = rhs.Qr; + this.Hr = rhs.Hr; + this.Nr = rhs.Nr; + this.Pr = rhs.Pr; + this.Er = rhs.Er; + if (rhs.CurveQH != null && rhs.CurveQP != null) + { + this.CurveQH = rhs.CurveQH.Clone(); + this.CurveQP = rhs.CurveQP.Clone(); + this.AllowCalc = true; + } + } + public AnaPumpItem(Pump rhs, double freDef, double freMin, double freMax, double freSpace) : this(rhs) + { + this.CalcFrequencyItems(freDef, freMin, freMax, freSpace); + } + + public int ID { get; set; } + public string Code { get; set; } + public string Name { get; set; } + public double Qr { get; set; } + public double Hr { get; set; } + public double Nr { get; set; } + public double Pr { get; set; } + public double Er { get; set; } + public bool IsBp { get; set; } + public Curve.CurveExpress CurveQH { get; set; } + public Curve.CurveExpress CurveQP { get; set; } + public List<AnaPumpFreItem> AnaFrequencyItems { get; set; } + public bool AllowCalc { get; set; } + + void CalcFrequencyItems(double freDef, double freMin, double freMax, double freSpace) + { + if (!this.AllowCalc) + return; + this.AnaFrequencyItems = new List<AnaPumpFreItem>(); + for (double fre = freMax; fre >= freMin; fre -= freSpace) + { + var freItem = new AnaPumpFreItem(); + freItem.Frequency = Math.Round(fre, 1); + freItem.CurveQH = Curve.PumpCalculateHelper.CalculateSimilarQH(this.CurveQH, freDef, fre); + freItem.CurveQP = Curve.PumpCalculateHelper.CalculateSimilarQP(this.CurveQP, freDef, fre); + this.AnaFrequencyItems.Add(freItem); + } + } + } + + /// <summary> + /// 鍒嗘瀽娉靛彉棰戦」 + /// </summary> + public class AnaPumpFreItem + { + public double Frequency { get; set; } + public Curve.CurveExpress CurveQH { get; set; } + public Curve.CurveExpress CurveQP { get; set; } + } + + #endregion + + /// <summary> + /// 璋冨害鍒嗘瀽杈呭姪绫� + /// </summary> + public class SchedulingAnaHelper_v3 + { + double _frequency_def = 50; + double _frequency_min = 25; + double _frequency_max = 50; + double _frequency_space = 0.1;//棰戠巼闂撮殧 + + double _head_space = 0.1;//鎵▼闂撮殧 + + #region RunFlag + string _falgFrePumpTag = "B"; + string _falgFixPumpTag = "G"; + string _falgSpaceMark = "_"; + + string GetRunFlag(List<AnaPumpItem> pumpItems) + { + var tableName = string.Empty; + var count = pumpItems.Count; + pumpItems = pumpItems.OrderBy(p => p.ID).ToList(); + for (int i = 0; i < count; i++) + { + var pumpItem = pumpItems[i]; + tableName += GetRunFlag(pumpItem); + if ((i + 1) != count) + { + tableName += _falgSpaceMark; + } + } + return tableName; + } + + string GetRunFlag(AnaPumpItem pumpItem) + { + return (pumpItem.IsBp ? _falgFrePumpTag : _falgFixPumpTag) + pumpItem.ID; + } + + #endregion + + DAL.ScheduleCombine _dal = new DAL.ScheduleCombine(); + DAL.ScheduleConclusion _dalScheduleConclusion = new DAL.ScheduleConclusion(); + DAL.ScheduleAnaLog _dalAnaLog = new DAL.ScheduleAnaLog(); + + + /// <summary> + /// 鍒嗘瀽娉电粍鍚� + /// </summary> + /// <param name="pumps">娉靛垪琛�</param> + /// <returns></returns> + public bool AnaCombine(List<Pump> pumps) + { + InsertAnaLog("寮�濮嬪垎鏋愭车缁勫悎"); + if (pumps == null || pumps.Count < 1) + { + InsertAnaLog("鍒嗘瀽澶辫触:pumps == null || pumps.Count < 1"); + return false; + } + var fre_def = _frequency_def; + var anaPumpItems = new List<AnaPumpItem>(); + foreach (var pump in pumps) + { + if (pump.IsBp) + { + //鍙橀娉� + var anaPump = new AnaPumpItem(pump, fre_def, _frequency_min, _frequency_max, _frequency_space); + if (anaPump.AllowCalc) + anaPumpItems.Add(anaPump); + } + else + { + //鍥洪娉� + var anaPump = new AnaPumpItem(pump); + if (anaPump.AllowCalc) + anaPumpItems.Add(anaPump); + } + } + + if (anaPumpItems.Count < 1) + { + InsertAnaLog("鍒嗘瀽澶辫触:anaPumpItems.Count < 1"); + return false; + } + + + string runFlag; + List<AnaPumpFreItem> pump1, pump2, pump3; + var maxPumpCount = 2; + var anaPumpItemsArray = anaPumpItems.ToArray(); + var parallelHelper = new ParallelConnectionHelper(); + for (int pumpCount = 1; pumpCount <= maxPumpCount; pumpCount++) + { + var pumpCombineList = PermutationAndCombination<AnaPumpItem>.GetCombination(anaPumpItemsArray, pumpCount); + var pumpCombineCount = pumpCombineList.Count; + InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{pumpCombineCount}涓粍鍚�"); + switch (pumpCount) + { + case 1: + { + for (int i = 0; i < pumpCombineCount; i++) + { + + var pumpCombine = pumpCombineList[i].ToList(); + pump1 = pumpCombine[0].AnaFrequencyItems; + runFlag = GetRunFlag(pumpCombine); + InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag},绗瑊i + 1}涓粍鍚�"); + if (ExistTable(runFlag)) + { + InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}宸插瓨鍦�"); + continue; + } + var list = new List<Entity.ScheduleCombine>(pump1.Count); + foreach (var freItem in pump1) + { + var scheduleCombine = new Entity.ScheduleCombine(); + scheduleCombine.RunFlag = runFlag; + scheduleCombine.RunCount = pumpCount; + scheduleCombine.Pump1 = freItem.Frequency; + scheduleCombine.CurveQH = freItem.CurveQH.ToJson(); + scheduleCombine.CurveQP = freItem.CurveQP.ToJson(); + scheduleCombine.AnaStatus = false; + list.Add(scheduleCombine); + } + + BulkInsert_Async_ScheduleCombineList(runFlag, list); + + //var bol = BulkInsert_Async_ScheduleCombineList(runFlag, list); + //if (bol) + //{ + // InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆鎴愬姛!"); + //} + //else + //{ + // InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆澶辫触!"); + //} + } + InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,鍒嗘瀽瀹屾瘯!"); + } + break; + case 2: + { + + for (int i = 0; i < pumpCombineCount; i++) + { + var pumpCombine = pumpCombineList[i].ToList(); + pump1 = pumpCombine[0].AnaFrequencyItems; + pump2 = pumpCombine[1].AnaFrequencyItems; + runFlag = GetRunFlag(pumpCombine); + InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag},绗瑊i + 1}涓粍鍚�"); + if (ExistTable(runFlag)) + { + InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}宸插瓨鍦�"); + continue; + } + var list = new List<Entity.ScheduleCombine>(pump1.Count * pump2.Count); + for (int pump1Index = 0; pump1Index < pump1.Count; pump1Index++) + { + for (int pump2Index = 0; pump2Index < pump2.Count; pump2Index++) + { + var freItem1 = pump1[pump1Index]; + var freItem2 = pump2[pump2Index]; + + parallelHelper.ClearCurve(); + parallelHelper.AddCurve(freItem1.CurveQH, freItem1.CurveQP); + parallelHelper.AddCurve(freItem2.CurveQH, freItem2.CurveQP); + var allowParallel = parallelHelper.CalculateParallel(out List<CurvePoint> pointQH, out List<CurvePoint> pointQE, out List<CurvePoint> pointQP); + if (!allowParallel) + continue; + + var scheduleCombine = new Entity.ScheduleCombine(); + scheduleCombine.RunFlag = runFlag; + scheduleCombine.RunCount = pumpCount; + scheduleCombine.Pump1 = freItem1.Frequency; + scheduleCombine.Pump2 = freItem2.Frequency; + scheduleCombine.CurveQH = FitHelper.BuildCurveExpress(pointQH).ToJson(); + scheduleCombine.CurveQP = FitHelper.BuildCurveExpress(pointQP).ToJson(); + scheduleCombine.AnaStatus = false; + list.Add(scheduleCombine); + } + } + BulkInsert_Async_ScheduleCombineList(runFlag, list); + //var bol = BulkInsert_Async_ScheduleCombineList(runFlag, list); + //if (bol) + //{ + // InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆鎴愬姛!"); + //} + //else + //{ + // InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆澶辫触!"); + //} + } + InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,鍒嗘瀽瀹屾瘯!"); + } + break; + case 3: + { + + for (int i = 0; i < pumpCombineCount; i++) + { + var pumpCombine = pumpCombineList[i].ToList(); + pump1 = pumpCombine[0].AnaFrequencyItems; + pump2 = pumpCombine[1].AnaFrequencyItems; + pump3 = pumpCombine[2].AnaFrequencyItems; + runFlag = GetRunFlag(pumpCombine); + InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag},绗瑊i + 1}涓粍鍚�"); + if (ExistTable(runFlag)) + { + InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}宸插瓨鍦�"); + continue; + } + var list = new List<Entity.ScheduleCombine>(pump1.Count * pump2.Count * pump3.Count); + for (int pump1Index = 0; pump1Index < pump1.Count; pump1Index++) + { + for (int pump2Index = 0; pump2Index < pump2.Count; pump2Index++) + { + for (int pump3Index = 0; pump3Index < pump3.Count; pump3Index++) + { + var freItem1 = pump1[pump1Index]; + var freItem2 = pump2[pump2Index]; + var freItem3 = pump3[pump3Index]; + + parallelHelper.ClearCurve(); + parallelHelper.AddCurve(freItem1.CurveQH, freItem1.CurveQP); + parallelHelper.AddCurve(freItem2.CurveQH, freItem2.CurveQP); + parallelHelper.AddCurve(freItem3.CurveQH, freItem3.CurveQP); + var allowParallel = parallelHelper.CalculateParallel(out List<CurvePoint> pointQH, out List<CurvePoint> pointQE, out List<CurvePoint> pointQP); + if (!allowParallel) + continue; + var scheduleCombine = new Entity.ScheduleCombine(); + scheduleCombine.RunFlag = runFlag; + scheduleCombine.RunCount = pumpCount; + scheduleCombine.Pump1 = freItem1.Frequency; + scheduleCombine.Pump2 = freItem2.Frequency; + scheduleCombine.Pump3 = freItem3.Frequency; + scheduleCombine.CurveQH = FitHelper.BuildCurveExpress(pointQH).ToJson(); + scheduleCombine.CurveQP = FitHelper.BuildCurveExpress(pointQP).ToJson(); + scheduleCombine.AnaStatus = false; + list.Add(scheduleCombine); + } + } + } + BulkInsert_Async_ScheduleCombineList(runFlag, list); + //var bol = BulkInsertScheduleCombineList(runFlag, list); + //if (bol) + //{ + // InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆鎴愬姛!"); + //} + //else + //{ + // InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,{runFlag}-{list.Count},鎻掑叆澶辫触!"); + //} + } + InsertAnaLog($"鍒嗘瀽杩涘害:{pumpCount}鍙版车,鍒嗘瀽瀹屾瘯!"); + } + break; + default: break; + } + } + InsertAnaLog("鍒嗘瀽娉电粍鍚堝畬鎴�"); + return true; + } + + + + /// <summary> + /// 鍒嗘瀽缁撹 + /// </summary> + public void AnaConclusion() + { + //_dalScheduleConclusion.DeleteAllTable(); + //return; + InsertAnaLog("寮�濮嬪垎鏋愭车缁勫悎缁撹"); + var scheduleCombineTableNames = _dal.GetAllTableName(); + if (scheduleCombineTableNames == null || !scheduleCombineTableNames.Any()) + { + InsertAnaLog("鍒嗘瀽澶辫触:scheduleCombineTableNames == null || !scheduleCombineTableNames.Any()"); + return; + } + var tableCount = scheduleCombineTableNames.Count(); + InsertAnaLog($"鍒嗘瀽杩涘害:{tableCount}涓粍鍚�"); + for (int tableIndex = 0; tableIndex < tableCount; tableIndex++) + { + var tableName = scheduleCombineTableNames[tableIndex]; + InsertAnaLog($"鍒嗘瀽杩涘害:{tableName},绗瑊tableIndex + 1}涓�"); + var scheduleCombineList = _dal.GetAllUnanalyzedAnaByTableName(tableName); + if (scheduleCombineList == null || !scheduleCombineList.Any()) + { + InsertAnaLog($"鍒嗘瀽杩涘害:{tableName},鍒嗘瀽瀹屾瘯"); + continue; + } + var scheduleCombineListCount = scheduleCombineList.Count(); + InsertAnaLog($"鍒嗘瀽杩涘害:{tableName},{scheduleCombineListCount}鏉℃湭鍒嗘瀽鏁版嵁"); + + var scheduleConclusionList = new List<List<Entity.ScheduleConclusion>>(scheduleCombineListCount); + var scheduleCombineIds = new List<long>(scheduleCombineListCount); + for (int combineIndex = 0; combineIndex < scheduleCombineListCount; combineIndex++) + { + var scheduleCombine = scheduleCombineList[combineIndex]; + var scheduleCombineID = scheduleCombine.ID; + scheduleCombineIds.Add(scheduleCombineID); + var curveQH = JsonHelper.Json2Object<Curve.CurveExpress>(scheduleCombine.CurveQH); + var curveQP = JsonHelper.Json2Object<Curve.CurveExpress>(scheduleCombine.CurveQP); + var bol = curveQH.GetMinMaxPointY(out double maxY, out double minY); + if (!bol) + { + continue; + } + var maxHead = Math.Ceiling(maxY); + var minHead = Math.Floor(minY); + + var currentListCount = (int)((maxHead - minHead) / _head_space) + 1; + var currentScheduleConclusionList = new List<Entity.ScheduleConclusion>(currentListCount); + for (double head = minHead; head <= maxHead; head += _head_space) + { + var flow = curveQH.GetInterPointLastX(head); + if (!flow.HasValue) + { + continue; + } + + var scheduleConclusion = new Entity.ScheduleConclusion(); + scheduleConclusion.ScheduleCombineID = scheduleCombineID; + scheduleConclusion.RunFlag = scheduleCombine.RunFlag; + scheduleConclusion.Pump1 = scheduleCombine.Pump1; + scheduleConclusion.Pump2 = scheduleCombine.Pump2; + scheduleConclusion.Pump3 = scheduleCombine.Pump3; + scheduleConclusion.Head = head; + scheduleConclusion.Flow = flow.Value; + scheduleConclusion.Power = curveQP.GetFitPointY(flow.Value); + scheduleConclusion.UWP = PumpCalculateHelper.CalculateUWP(scheduleConclusion.Power, scheduleConclusion.Flow, scheduleConclusion.Head); + scheduleConclusion.WP = PumpCalculateHelper.CalculateWP(scheduleConclusion.Power, scheduleConclusion.Flow); + scheduleConclusion.Round(); + currentScheduleConclusionList.Add(scheduleConclusion); + } + scheduleConclusionList.Add(currentScheduleConclusionList); + } + SetAnaStatus(tableName, scheduleCombineIds); + var list = scheduleConclusionList.SelectMany(x => x.ToList()).ToList(); + var runFlag = list[0].RunFlag; + BulkInserts_Create_Async_ScheduleConclusionList(runFlag, list); + InsertAnaLog($"鍒嗘瀽杩涘害:{tableName},{scheduleCombineIds.Count}鏉�,鍒嗘瀽瀹屾瘯"); + } + InsertAnaLog("娉电粍鍚堝垎鏋愬畬姣�"); + } + + + + /// <summary> + /// 鎻掑叆鍒嗘瀽鏃ュ織 + /// </summary> + private void InsertAnaLog(string info) + { + var entity = new Entity.ScheduleAnaLog(info); + _dalAnaLog.Insert(entity); + } + + /// <summary> + /// 鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦� + /// </summary> + public bool SetAnaStatus(string tableName, List<long> ids) + { + if (ids == null || !ids.Any()) + { + return false; + } + return _dal.SetAnaStatus(tableName, ids); + } + + /// <summary> + /// 鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦� + /// </summary> + public bool ExistTable(string runFlag) + { + return _dal.ExistTable(runFlag); + } + + /// <summary> + /// 鑴忔彃鍏ヨ皟搴︾粍鍚堝垪琛� + /// </summary> + private bool BulkInsertScheduleCombineList(List<Entity.ScheduleCombine> list) + { + if (list == null || !list.Any()) + return false; + var bol = _dal.BulkInserts_SplitTable(list); + return bol; + } + + /// <summary> + /// 鑴忔彃鍏ヨ皟搴︾粍鍚堝垪琛� + /// </summary> + private bool BulkInsertScheduleCombineList(string runFlag, List<Entity.ScheduleCombine> list) + { + if (list == null || !list.Any()) + return false; + var bol = _dal.BulkInserts_Create(runFlag, list); + return bol; + } + + /// <summary> + /// 鑴忔彃鍏ヨ皟搴︾粍鍚堝垪琛� + /// </summary> + private async void BulkInsert_Async_ScheduleCombineList(string runFlag, List<Entity.ScheduleCombine> list) + { + if (list == null || !list.Any()) + return; + _dal.BulkInserts_Create_Async(runFlag, list); + } + + + /// <summary> + /// 鑴忔彃鍏ヨ皟搴︾粍鍚堝垪琛� + /// </summary> + private bool BulkInsert_NativeSql_ScheduleCombineList(string runFlag, List<Entity.ScheduleCombine> list) + { + if (list == null || !list.Any()) + return false; + var bol = _dal.BulkInserts_NativeSql(runFlag, list); + return bol; + } + + + /// <summary> + /// 鑴忔彃鍏ヨ皟搴︾粨璁哄垪琛� + /// </summary> + private bool BulkInsertScheduleConclusionList(List<Entity.ScheduleConclusion> list) + { + if (list == null || !list.Any()) + return false; + var bol = _dalScheduleConclusion.BulkInserts_SplitTable(list); + return bol; + } + + /// <summary> + /// 鑴忔彃鍏ヨ皟搴︾粨璁哄垪琛� + /// </summary> + private void BulkInserts_Create_Async_ScheduleConclusionList(string runFlag, List<Entity.ScheduleConclusion> list) + { + if (list == null || !list.Any()) + return; + _dalScheduleConclusion.BulkInserts_Create_Async(runFlag, list); + + } + + /// <summary> + /// 鑴忔彃鍏ヨ皟搴︾粨璁哄垪琛� + /// </summary> + private bool BulkInserts_Create_ScheduleConclusionList(string runFlag, List<Entity.ScheduleConclusion> list) + { + if (list == null || !list.Any()) + return false; + var bol = _dalScheduleConclusion.BulkInserts_Create(runFlag, list); + return bol; + } + + /// <summary> + /// 鑴忔彃鍏ヨ皟搴︾粨璁哄垪琛� + /// </summary> + private bool BulkInsert_NativeSql_ScheduleConclusionList(string runFalg, List<Entity.ScheduleConclusion> list) + { + if (list == null || !list.Any()) + return false; + var bol = _dalScheduleConclusion.BulkInserts_NativeSql(runFalg, list); + return bol; + } + + } + + +} + diff --git a/Schedule/IStation.Algorithm/Schedule/SchedulingHelper.cs b/Schedule/IStation.Algorithm/Schedule/SchedulingHelper.cs new file mode 100644 index 0000000..d94b38f --- /dev/null +++ b/Schedule/IStation.Algorithm/Schedule/SchedulingHelper.cs @@ -0,0 +1,137 @@ +锘縩amespace IStation.Algorithm +{ + + #region ViewModel + + /// <summary> + /// 鍒嗘瀽娉甸」 + /// </summary> + public class AnaItem + { + public AnaItem() { } + public string RunFlag { get; set; } + public int RunCount { get; set; } + public List<long> PumpIds { get; set; } + public double Flow { get; set; } + public double Head { get; set; } + } + + #endregion + + /// <summary> + /// 璋冨害鍒嗘瀽杈呭姪绫� + /// </summary> + public class SchedulingHelper + { + double _frequency_def = 50; + double _frequency_min = 25; + double _frequency_max = 50; + double _frequency_space = 0.1;//棰戠巼闂撮殧 + + double _head_space = 0.1;//鎵▼闂撮殧 + + #region RunFlag + string _falgFrePumpTag = "B"; + string _falgFixPumpTag = "G"; + string _falgSpaceMark = "_"; + + string GetRunFlag(List<AnaPumpItem> pumpItems) + { + var tableName = string.Empty; + var count = pumpItems.Count; + pumpItems = pumpItems.OrderBy(p => p.ID).ToList(); + for (int i = 0; i < count; i++) + { + var pumpItem = pumpItems[i]; + tableName += GetRunFlag(pumpItem); + if ((i + 1) != count) + { + tableName += _falgSpaceMark; + } + } + return tableName; + } + + string GetRunFlag(AnaPumpItem pumpItem) + { + return (pumpItem.IsBp ? _falgFrePumpTag : _falgFixPumpTag) + pumpItem.ID; + } + + + string GetRunFlag(Dictionary<int, bool> dic) + { + var tableName = string.Empty; + var count = dic.Count; + for (int i = 0; i < count; i++) + { + tableName += GetRunFlag(dic); + if ((i + 1) != count) + { + tableName += _falgSpaceMark; + } + } + return tableName; + } + + string GetRunFlag(long id, bool isBp) + { + return (isBp ? _falgFrePumpTag : _falgFixPumpTag) + id; + } + + + #endregion + + DAL.ScheduleCombine _dal = new DAL.ScheduleCombine(); + DAL.ScheduleConclusion _dalScheduleConclusion = new DAL.ScheduleConclusion(); + DAL.ScheduleAnaLog _dalAnaLog = new DAL.ScheduleAnaLog(); + + + public void Ana(List<Pump> pumps, double tagetFlow, double tagetHead, List<int> openPumpCombine) + { + var pumpIds = pumps.Select(x => x.ID); + var dic_pump = pumps.ToDictionary(x => x.ID, x => x.IsBp); + if (openPumpCombine != null && openPumpCombine.Any()) + { + var allCombineList = PermutationAndCombination<int>.GetCombination(pumpIds.ToArray(), 2); + var combineList = new List<int[]>(); + foreach (var combine in allCombineList) + { + foreach (var pump in combine) + { + if (openPumpCombine.Contains(pump)) + { + combineList.Add(combine); + break; + } + } + } + if (combineList.Count < 1) + return; + foreach (var combine in combineList) + { + // var runFlag = getal + } + } + } + + + /// <summary> + /// 鎻掑叆鍒嗘瀽鏃ュ織 + /// </summary> + private void InsertAnaLog(string info) + { + var entity = new Entity.ScheduleAnaLog(info); + _dalAnaLog.Insert(entity); + } + + + /// <summary> + /// 鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦� + /// </summary> + public bool ExistTable(string runFlag) + { + return _dal.ExistTable(runFlag); + } + + } +} diff --git a/Schedule/IStation.Client/Form1.Designer.cs b/Schedule/IStation.Client/Form1.Designer.cs index 717b317..2c458bb 100644 --- a/Schedule/IStation.Client/Form1.Designer.cs +++ b/Schedule/IStation.Client/Form1.Designer.cs @@ -38,7 +38,7 @@ btnAnaCombine.Dock = DockStyle.Top; btnAnaCombine.Location = new Point(0, 0); btnAnaCombine.Name = "btnAnaCombine"; - btnAnaCombine.Size = new Size(684, 46); + btnAnaCombine.Size = new Size(1036, 46); btnAnaCombine.TabIndex = 0; btnAnaCombine.Text = "鍒嗘瀽娉电粍鍚�"; btnAnaCombine.UseVisualStyleBackColor = true; @@ -47,9 +47,9 @@ // richTextBox1 // richTextBox1.Dock = DockStyle.Bottom; - richTextBox1.Location = new Point(0, 89); + richTextBox1.Location = new Point(0, 410); richTextBox1.Name = "richTextBox1"; - richTextBox1.Size = new Size(684, 227); + richTextBox1.Size = new Size(1036, 227); richTextBox1.TabIndex = 1; richTextBox1.Text = ""; // @@ -58,7 +58,7 @@ btnAnaConclusion.Dock = DockStyle.Fill; btnAnaConclusion.Location = new Point(0, 46); btnAnaConclusion.Name = "btnAnaConclusion"; - btnAnaConclusion.Size = new Size(684, 43); + btnAnaConclusion.Size = new Size(1036, 364); btnAnaConclusion.TabIndex = 2; btnAnaConclusion.Text = "鍒嗘瀽娉电粍鍚堢粨璁�"; btnAnaConclusion.UseVisualStyleBackColor = true; @@ -68,7 +68,7 @@ // AutoScaleDimensions = new SizeF(11F, 24F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(684, 316); + ClientSize = new Size(1036, 637); Controls.Add(btnAnaConclusion); Controls.Add(richTextBox1); Controls.Add(btnAnaCombine); diff --git a/Schedule/IStation.Client/IStation.Client.csproj.user b/Schedule/IStation.Client/IStation.Client.csproj.user index adaaf23..d37a6d2 100644 --- a/Schedule/IStation.Client/IStation.Client.csproj.user +++ b/Schedule/IStation.Client/IStation.Client.csproj.user @@ -1,7 +1,7 @@ 锘�<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> - <_LastSelectedProfileId>D:\WorkCode\IStation\Code\Service.Ch.V1.0\Schedule\IStation.Client\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId> + <_LastSelectedProfileId>D:\WorkCode\IStation\Code\Service.Ch.V1.0\Schedule\IStation.Client\Properties\PublishProfiles\FolderProfile1.pubxml</_LastSelectedProfileId> </PropertyGroup> <ItemGroup> <Compile Update="Form1.cs"> diff --git a/Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile.pubxml.user b/Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile.pubxml.user index 188c960..fa12149 100644 --- a/Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -4,7 +4,7 @@ --> <Project> <PropertyGroup> - <History>True|2024-04-29T06:10:13.9117424Z;True|2024-04-29T14:09:09.4137798+08:00;True|2024-04-29T13:16:32.2282303+08:00;True|2024-04-29T11:47:57.4367230+08:00;True|2024-04-29T11:47:09.8955815+08:00;True|2024-04-29T11:33:32.3137788+08:00;True|2024-04-29T11:25:34.8701443+08:00;True|2024-04-29T11:14:09.2155623+08:00;True|2024-04-29T11:01:11.2894390+08:00;False|2024-04-29T11:00:53.6332448+08:00;True|2024-04-28T16:24:05.5076307+08:00;True|2024-04-28T15:58:58.9653989+08:00;True|2024-04-28T15:55:49.7244417+08:00;True|2024-04-28T15:46:51.6035165+08:00;True|2024-04-28T15:43:39.7397122+08:00;True|2024-04-28T15:39:49.3419176+08:00;True|2024-04-28T15:37:55.9061189+08:00;True|2024-04-28T15:33:57.3641855+08:00;True|2024-04-28T15:33:43.1615318+08:00;False|2024-04-28T15:32:40.1742895+08:00;True|2024-04-28T14:14:36.5581181+08:00;True|2024-04-28T14:14:32.2693146+08:00;True|2024-04-28T14:11:44.7928792+08:00;True|2024-04-28T14:10:32.8620163+08:00;True|2024-04-28T14:06:16.9371444+08:00;True|2024-04-28T14:03:42.6442782+08:00;True|2024-04-28T14:00:05.1848553+08:00;True|2024-04-28T11:20:48.2122533+08:00;True|2024-04-28T11:16:18.0658604+08:00;True|2024-04-28T11:09:37.8710424+08:00;</History> + <History>True|2024-04-29T06:57:34.4301536Z;True|2024-04-29T14:54:01.3130833+08:00;True|2024-04-29T14:10:13.9117424+08:00;True|2024-04-29T14:09:09.4137798+08:00;True|2024-04-29T13:16:32.2282303+08:00;True|2024-04-29T11:47:57.4367230+08:00;True|2024-04-29T11:47:09.8955815+08:00;True|2024-04-29T11:33:32.3137788+08:00;True|2024-04-29T11:25:34.8701443+08:00;True|2024-04-29T11:14:09.2155623+08:00;True|2024-04-29T11:01:11.2894390+08:00;False|2024-04-29T11:00:53.6332448+08:00;True|2024-04-28T16:24:05.5076307+08:00;True|2024-04-28T15:58:58.9653989+08:00;True|2024-04-28T15:55:49.7244417+08:00;True|2024-04-28T15:46:51.6035165+08:00;True|2024-04-28T15:43:39.7397122+08:00;True|2024-04-28T15:39:49.3419176+08:00;True|2024-04-28T15:37:55.9061189+08:00;True|2024-04-28T15:33:57.3641855+08:00;True|2024-04-28T15:33:43.1615318+08:00;False|2024-04-28T15:32:40.1742895+08:00;True|2024-04-28T14:14:36.5581181+08:00;True|2024-04-28T14:14:32.2693146+08:00;True|2024-04-28T14:11:44.7928792+08:00;True|2024-04-28T14:10:32.8620163+08:00;True|2024-04-28T14:06:16.9371444+08:00;True|2024-04-28T14:03:42.6442782+08:00;True|2024-04-28T14:00:05.1848553+08:00;True|2024-04-28T11:20:48.2122533+08:00;True|2024-04-28T11:16:18.0658604+08:00;True|2024-04-28T11:09:37.8710424+08:00;</History> <LastFailureDetails /> </PropertyGroup> </Project> \ No newline at end of file diff --git a/Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile1.pubxml b/Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile1.pubxml new file mode 100644 index 0000000..87dc354 --- /dev/null +++ b/Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile1.pubxml @@ -0,0 +1,13 @@ +锘�<?xml version="1.0" encoding="utf-8"?> +<!-- +https://go.microsoft.com/fwlink/?LinkID=208121. +--> +<Project> + <PropertyGroup> + <Configuration>Release</Configuration> + <Platform>Any CPU</Platform> + <PublishDir>bin\Release\net6.0-windows\publishAsync\</PublishDir> + <PublishProtocol>FileSystem</PublishProtocol> + <_TargetId>Folder</_TargetId> + </PropertyGroup> +</Project> \ No newline at end of file diff --git a/Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile1.pubxml.user b/Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile1.pubxml.user new file mode 100644 index 0000000..631863a --- /dev/null +++ b/Schedule/IStation.Client/Properties/PublishProfiles/FolderProfile1.pubxml.user @@ -0,0 +1,10 @@ +锘�<?xml version="1.0" encoding="utf-8"?> +<!-- +https://go.microsoft.com/fwlink/?LinkID=208121. +--> +<Project> + <PropertyGroup> + <History>True|2024-04-29T09:06:08.1513682Z;True|2024-04-29T16:37:21.5467926+08:00;True|2024-04-29T16:31:00.7994472+08:00;True|2024-04-29T16:21:01.1062945+08:00;True|2024-04-29T16:20:39.0991070+08:00;True|2024-04-29T16:20:31.1074303+08:00;True|2024-04-29T16:15:14.5019765+08:00;True|2024-04-29T15:21:56.5279860+08:00;True|2024-04-29T15:18:47.9623987+08:00;</History> + <LastFailureDetails /> + </PropertyGroup> +</Project> \ No newline at end of file -- Gitblit v1.9.3