From c6c912c9a0b1235805dea4fbb471e26a7f13a47d Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期二, 21 三月 2023 14:14:10 +0800
Subject: [PATCH] 解决众毅连续两次调用计算保持方案接口问题

---
 Calculation/IStation.Calculation.Handle/MonitorHandleHelper.cs |  183 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 180 insertions(+), 3 deletions(-)

diff --git a/Calculation/IStation.Calculation.Handle/MonitorHandleHelper.cs b/Calculation/IStation.Calculation.Handle/MonitorHandleHelper.cs
index 52f4222..c9b80ba 100644
--- a/Calculation/IStation.Calculation.Handle/MonitorHandleHelper.cs
+++ b/Calculation/IStation.Calculation.Handle/MonitorHandleHelper.cs
@@ -36,7 +36,7 @@
                 dataStatus = new List<string>();
             var dataValue = receiveRecord.SrcValue;//鏁版嵁鍊�
 
-            #region 瀹炴椂璁板綍 鍜屾渶鍚庝竴娆¤褰曞姣旓紝鍒ゆ柇鏄惁瀹屽叏涓�鏍凤紝骞舵牴鎹潯浠跺垽鏂槸鍚﹂渶瑕佽ˉ鍏呯偣
+            #region 瀹炴椂璁板綍 鍜� 鏈�鍚庝竴娆¤褰曞姣旓紝鍒ゆ柇鏄惁瀹屽叏涓�鏍凤紝骞舵牴鎹潯浠跺垽鏂槸鍚﹂渶瑕佽ˉ鍏呯偣
 
             if (monitor.CronType == Model.Monitor.eCronType.Real)
             {
@@ -366,6 +366,183 @@
                     break;
                 default: break;
             }
+
+            #endregion
+
+            return record;
+
+        }
+
+        /// <summary>
+        /// 澶勭悊鍘嗗彶鏁版嵁
+        /// </summary>
+        /// <param name="monitor">娴嬬偣</param>
+        /// <param name="signal">淇″彿</param>
+        /// <param name="receiveRecord">鎺ユ敹璁板綍</param>
+        /// <param name="dataTime">鏁版嵁鏃堕棿</param>
+        /// <returns>涓簄ull鍒欎笉闇�瑕佸悗缁鐞�</returns>
+        public static Model.MonitorBasicRecord HandleHistory
+            (
+                Model.MonitorPoint monitor,
+                Model.Signal_SignalType signal,
+                Model.MonitorDataDockingReceiveRecord receiveRecord,
+                DateTime dataTime
+            )
+        {
+            Model.MonitorBasicRecord record = null;//鐩戞祴璁板綍           
+            var dataStatus = receiveRecord.DataStatus;//鏁版嵁鐘舵��
+            if (dataStatus == null)
+                dataStatus = new List<string>();
+            var dataValue = receiveRecord.SrcValue;//鏁版嵁鍊�
+
+
+            #region 閫氳繃淇″彿绫诲瀷鐨勫�肩被鍨嬪拰淇″彿鐨勬暟鎹被鍨嬭繘琛岀浉鍏崇殑鎹㈢畻
+
+            switch (signal.SignalType.ValueType)
+            {
+                case Model.Monitor.eValueType.Numeric:
+                    {
+                        //鏁板�奸獙璇�
+                        if (!double.TryParse(dataValue, out double dataValueNumeric))
+                        {
+                            dataStatus.Add(MonitorRecord.Status_DataFormatError);
+                            break;
+                        }
+
+                        //鏁版嵁杞崲
+                        if (signal.ConvertParas != null)
+                        {
+                            dataValueNumeric = signal.ConvertParas.Convert(dataValueNumeric, out bool succed);
+                            if (!succed)
+                            {
+                                dataStatus.Add(MonitorRecord.Status_ConvertFailed);
+                            }
+                        }
+
+                        //鏁版嵁淇
+                        if (signal.CorrectParas != null)
+                        {
+                            dataValueNumeric = signal.CorrectParas.Correct(dataValueNumeric);
+                        }
+
+
+                        //鏁版嵁杩囨护
+                        if (signal.FilterParas != null)
+                        {
+                            if (!signal.FilterParas.Filter(dataValueNumeric, null))
+                            {
+                                dataStatus.Add(MonitorRecord.Status_FilterFailed);
+                            }
+                        }
+
+                        //淇濈暀灏忔暟浣嶆暟
+                        if (signal.SignalType.DecimalPlaces != null)
+                        {
+                            dataValueNumeric = Math.Round(dataValueNumeric, signal.SignalType.DecimalPlaces.Value);
+                        }
+
+                        dataValue = dataValueNumeric.ToString();
+                    }
+                    break;
+                case Model.Monitor.eValueType.Enum:
+                    {
+                        //鏁板�艰浆鎹�
+                        if (!double.TryParse(dataValue, out double dataValueEnum))
+                        {
+                            dataStatus.Add(MonitorRecord.Status_DataFormatError);
+                            break;
+                        }
+
+                        //鏁版嵁杞崲
+                        if (signal.ConvertParas != null)
+                        {
+                            dataValueEnum = signal.ConvertParas.Convert(dataValueEnum, out bool succed);
+                            if (!succed)
+                            {
+                                dataStatus.Add(MonitorRecord.Status_ConvertFailed);
+                            }
+                        }
+
+                        //鏁版嵁淇
+                        if (signal.CorrectParas != null)
+                        {
+                            dataValueEnum = signal.CorrectParas.Correct(dataValueEnum);
+                        }
+
+                        //鏁版嵁杩囨护
+                        if (signal.FilterParas != null)
+                        {
+                            if (!signal.FilterParas.Filter(dataValueEnum, null))
+                            {
+                                dataStatus.Add(MonitorRecord.Status_FilterFailed);
+                            }
+                        }
+
+                        //淇濈暀灏忔暟浣嶆暟
+                        if (signal.SignalType.DecimalPlaces != null)
+                        {
+                            dataValueEnum = Math.Round(dataValueEnum, signal.SignalType.DecimalPlaces.Value);
+                        }
+
+                        dataValue = dataValueEnum.ToString();
+                    }
+                    break;
+                case Model.Monitor.eValueType.Array:
+                    {
+                        //鏁版嵁鏍煎紡楠岃瘉
+                        var dataValueArray = DoubleListHelper.ToList(dataValue);
+                        if (dataValueArray == null || dataValueArray.Count < 1)
+                        {
+                            dataStatus.Add(MonitorRecord.Status_DataFormatError);
+                            break;
+                        }
+
+                        //鏁版嵁杞崲銆佷慨姝c�佷繚鐣欏皬鏁颁綅鏁�
+                        var dataValueArrayNew = new List<double>();
+                        foreach (var dataValueNumeric in dataValueArray)
+                        {
+                            var dataValueNumericNew = dataValueNumeric;
+
+                            //鏁版嵁杞崲
+                            if (signal.ConvertParas != null)
+                            {
+                                dataValueNumericNew = signal.ConvertParas.Convert(dataValueNumericNew, out bool succed);
+                                if (!succed)
+                                {
+                                    dataStatus.Add(MonitorRecord.Status_ConvertFailed);
+                                }
+                            }
+
+                            //鏁板�间慨姝�
+                            if (signal.CorrectParas != null)
+                            {
+                                dataValueNumericNew = signal.CorrectParas.Correct(dataValueNumericNew);
+                            }
+
+                            //淇濈暀灏忔暟浣嶆暟
+                            if (signal.SignalType.DecimalPlaces != null)
+                            {
+                                dataValueNumericNew = Math.Round(dataValueNumericNew, signal.SignalType.DecimalPlaces.Value);
+                            }
+
+                            dataValueArrayNew.Add(dataValueNumericNew);
+                        }
+                        dataValue = DoubleListHelper.ToString(dataValueArrayNew);
+                    }
+                    break;
+                case Model.Monitor.eValueType.Integration:
+                    {
+
+                    }
+                    break;
+                default: break;
+            }
+
+            #endregion
+
+            #region 鐩戞祴璁板綍鐢熸垚
+
+            record = BuildMonitorRecord(monitor,signal,receiveRecord.SrcTime,receiveRecord.SrcValue,dataTime,dataValue,dataStatus);
 
             #endregion
 
@@ -1052,10 +1229,10 @@
         }
 
         /// <summary>
-        /// 鐢熸垚鏈�杩戜竴鏉¤褰�
+        /// 鐢熸垚鐩戞祴璁板綍
         /// </summary>
         /// <returns></returns>
-        public static Model.MonitorBasicRecord BuildLastRecord
+        public static Model.MonitorBasicRecord BuildMonitorRecord
             (
                 Model.MonitorPoint monitor,
                 Model.Signal_SignalType signal,

--
Gitblit v1.9.3