ningshuxia
2022-12-12 e78f5936fee9ab4fff600515bb20a41a28f329c4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using IStation.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace IStation.EtaCalculation.SHYS
{
    internal partial class EtaAnalyCalculator4Logic
    {
        private IStation.Calculation.Eta.Model.LogicAnaInfoBundle jzltgLogicAnaInfoBundle = null;
 
        /// <summary>
        /// 
        /// </summary>
        /// <param name="context_item"></param>
        /// <returns></returns>
        public IStation.Calculation.Eta.Model.LogicAnaInfoBundle AnaLogic金泽系统(IStation.Model.EtaLogicTreeAnalyContextItem context_item)
        {
            if (context_item == null)
                return default;
 
            var jzltgLogicAreaId = 13;
            var jzqsStationId = 18;
            var jzbzStationId = 19;
 
            var logic_area = context_item.LogicContextItem as IStation.Model.EtaLogicAreaAnalyContextItem;
 
            var current_logic_ana = new Calculation.Eta.Model.LogicAnaInfoBundle();
            current_logic_ana.LogicID = logic_area.ID;
            current_logic_ana.ChildStationBundleList = new List<Calculation.Eta.Model.StationAnaInfoBundle>();
            current_logic_ana.ChildLogicBundleList = new List<Calculation.Eta.Model.LogicAnaInfoBundle>();
            IStation.Model.EtaLogicRealRecordPure anaResult = new Model.EtaLogicRealRecordPure();
            current_logic_ana.AnaResult = anaResult; 
            anaResult.ObjectID = context_item.LogicID;
            anaResult.ObjectType = IStation.ObjectType.LogicArea;
            anaResult.Qa = 0;
            anaResult.Ha = 0;
            anaResult.Pa = 0;
            anaResult.Ea = 0;
            anaResult.WPa = 0;
            anaResult.UWPa = 0;
            anaResult.AnalyStatus = Model.Eta.eAnalyStatus.Normal;
 
            IStation.Model.EtaBasicRealRecord jzqsLogicResult, jzqsResult;
 
            List<IStation.Model.EtaBasicRealRecord> child_ana_records = new List<Model.EtaBasicRealRecord>();
 
 
            var jzltgContextItem = context_item.Children?.Find(x => x.LogicID == jzltgLogicAreaId);
 
            if (this.jzltgLogicAnaInfoBundle == null)
            {
                this.jzltgLogicAnaInfoBundle = Calc一个泵站(jzltgContextItem, _allStationBundles, jzbzStationId);
                _allLogicRecordList.Add(this.jzltgLogicAnaInfoBundle.AnaResult);
            }
 
            jzqsLogicResult = this.jzltgLogicAnaInfoBundle.AnaResult;
            child_ana_records.Add(jzqsLogicResult);
 
            var jzqsContextItem = _allStationBundles.Find(x => x.StationID == jzqsStationId);
            jzqsResult = jzqsContextItem.AnaResult;
            child_ana_records.Add(jzqsResult);
 
            current_logic_ana.ChildStationBundleList.Add(jzqsContextItem);
            current_logic_ana.ChildLogicBundleList.Add(this.jzltgLogicAnaInfoBundle);
 
            anaResult.Qa = jzqsLogicResult.Qa;
            anaResult.Pa = jzqsLogicResult.Pa + jzqsResult.Pa;
            //anaResult.Ha = jzqsLogicResult.Ha;
            anaResult.Ha = jzqsLogicResult.Ha??0 + jzqsResult.Ha??0;
 
 
            double qaTotal = child_ana_records.Where(x => x.Ea.HasValue && x.Ea.Value > 10).Sum(x => x.Qa.Value);
            if (qaTotal > 100)
            {
                double eta = 0;
                foreach (var item in child_ana_records)
                {
                    if (item.Ea.HasValue && item.Ea.Value > 10)
                    {
                        eta += item.Ea.Value * item.Qa.Value / qaTotal;
                    }
                }
 
                double wpa = 0;
                foreach (var item in child_ana_records)
                {
                    if (item.WPa.HasValue && item.WPa.Value > 0)
                    {
                        wpa += item.WPa.Value * item.Qa.Value / qaTotal;
                    }
                }
                 
                double uwpa = 0;
 
                var jzltgLogicChildResult = this.jzltgLogicAnaInfoBundle.ChildStationBundleList.Select(x => x.AnaResult);
                var uwpaSum = jzltgLogicChildResult.Sum(x => (x.UWPa ?? 0) * (x.Qa ?? 0));
                uwpaSum += (jzqsResult.UWPa ?? 0) * (jzqsResult.Qa ?? 0);
 
                var qSum = jzltgLogicChildResult.Sum(x => x.Qa ?? 0);
                qSum += jzqsResult.Qa ?? 0;
 
                uwpa = uwpaSum / qSum;
 
 
                anaResult.Ea = Math.Round(eta, 1);
                anaResult.WPa = Math.Round(wpa, 2);
                anaResult.UWPa = Math.Round(uwpa, 2);
            }
 
            return current_logic_ana;
        }
 
    }
}