ningshuxia
2024-05-06 8f6d2b48f22b695574bd4a6c4ac91b1ac9f780b1
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,13 +156,13 @@
            if (anaPumpItems.Count < 1)
            {
                InsertAnaLog("分析失败:anaPumpItems.Count < 1");
                return false;
                return;
            }
            string runFlag;
            List<AnaPumpFreItem> pump1, pump2, pump3;
            var maxPumpCount = 2;
            var maxPumpCount = 1;
            var anaPumpItemsArray = anaPumpItems.ToArray();
            var parallelHelper = new ParallelConnectionHelper();
            for (int pumpCount = 1; pumpCount <= maxPumpCount; pumpCount++)
@@ -173,7 +174,6 @@
                {
                    case 1:
                        {
                            for (int i = 0; i < pumpCombineCount; i++)
                            {
@@ -195,18 +195,17 @@
                                    scheduleCombine.Pump1 = freItem.Frequency;
                                    scheduleCombine.CurveQH = freItem.CurveQH.ToJson();
                                    scheduleCombine.CurveQP = freItem.CurveQP.ToJson();
                                    freItem.CurveQH.GetMinMaxPointY(out double maxHead, out double minHead);
                                    scheduleCombine.MinFlow = freItem.CurveQH.Min;
                                    scheduleCombine.MaxFlow = freItem.CurveQH.Max;
                                    scheduleCombine.MaxHead = maxHead;
                                    scheduleCombine.MinHead = minHead;
                                    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}台泵,分析完毕!");
                        }
@@ -246,21 +245,23 @@
                                        scheduleCombine.RunCount = pumpCount;
                                        scheduleCombine.Pump1 = freItem1.Frequency;
                                        scheduleCombine.Pump2 = freItem2.Frequency;
                                        scheduleCombine.CurveQH = FitHelper.BuildCurveExpress(pointQH).ToJson();
                                        scheduleCombine.CurveQP = FitHelper.BuildCurveExpress(pointQP).ToJson();
                                        var curveQH = FitHelper.BuildCurveExpress(pointQH);
                                        var curveQP = FitHelper.BuildCurveExpress(pointQP);
                                        scheduleCombine.CurveQH = curveQH.ToJson();
                                        scheduleCombine.CurveQP = curveQP.ToJson();
                                        curveQH.GetMinMaxPointY(out double maxHead, out double minHead);
                                        scheduleCombine.MinFlow = curveQH.Min;
                                        scheduleCombine.MaxFlow = curveQH.Max;
                                        scheduleCombine.MaxHead = maxHead;
                                        scheduleCombine.MinHead = minHead;
                                        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}台泵,分析完毕!");
                        }
@@ -305,22 +306,24 @@
                                            scheduleCombine.Pump1 = freItem1.Frequency;
                                            scheduleCombine.Pump2 = freItem2.Frequency;
                                            scheduleCombine.Pump3 = freItem3.Frequency;
                                            scheduleCombine.CurveQH = FitHelper.BuildCurveExpress(pointQH).ToJson();
                                            scheduleCombine.CurveQP = FitHelper.BuildCurveExpress(pointQP).ToJson();
                                            var curveQH = FitHelper.BuildCurveExpress(pointQH);
                                            var curveQP = FitHelper.BuildCurveExpress(pointQP);
                                            scheduleCombine.CurveQH = curveQH.ToJson();
                                            scheduleCombine.CurveQP = curveQP.ToJson();
                                            curveQH.GetMinMaxPointY(out double maxHead, out double minHead);
                                            scheduleCombine.MinFlow = curveQH.Min;
                                            scheduleCombine.MaxFlow = curveQH.Max;
                                            scheduleCombine.MaxHead = maxHead;
                                            scheduleCombine.MinHead = minHead;
                                            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}台泵,分析完毕!");
                        }
@@ -328,42 +331,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 +372,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 +385,6 @@
                        {
                            continue;
                        }
                        var scheduleConclusion = new Entity.ScheduleConclusion();
                        scheduleConclusion.ScheduleCombineID = scheduleCombineID;
                        scheduleConclusion.RunFlag = scheduleCombine.RunFlag;
@@ -407,10 +403,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 +439,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;
//}