diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Util/MaterialManager.cs b/Correlator/Util/MaterialManager.cs deleted file mode 100644 index 4ffd67a..0000000 --- a/Correlator/Util/MaterialManager.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using Correlator.Model; -using Newtonsoft.Json.Linq; - -namespace Correlator.Util -{ - public class MaterialManager - { - /// - /// 初始化管材数据 - /// - /// - public static ObservableCollection InitPipeMaterial() - { - var materialModels = new ObservableCollection(); - using (var manager = new DataBaseManager()) - { - var configModels = manager.Table().ToList(); - foreach (var model in configModels) - { - materialModels.Add(model); - } - - return materialModels; - } - } - - /// - /// 根据管材和管径大小获取声速 - /// - /// - /// - /// - public static int GetSoundVelocity(string material, int pipeDiameter) - { - using (var manager = new DataBaseManager()) - { - //多条件查询 - var materialVelocities = manager - .Table() - .Where(mv => - mv.MaterialName == material && - mv.LowDiameter <= pipeDiameter && - mv.HighDiameter >= pipeDiameter - ); - if (materialVelocities.Any()) - { - return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); - } - else - { - var fileStream = new FileStream( - @"..\..\Config\config.json", FileMode.Open, FileAccess.Read - ); - using (var streamReader = new StreamReader(fileStream)) - { - var config = streamReader.ReadToEnd(); - var jo = JObject.Parse(config); - var customMaterials = jo["CustomMaterial"]; - if (customMaterials == null) - { - return 0; - } - - foreach (var customMaterial in customMaterials) - { - if (material != customMaterial["name"]?.ToString()) continue; - var num = 0; - foreach (var v in customMaterial["range"]) - { - var diameterArr = v.ToString().Split('-'); - var lowDiameter = int.Parse(diameterArr[0]); - var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; - if (lowDiameter < pipeDiameter && highDiameter > pipeDiameter) - { - return int.Parse(customMaterial["speed"][num].ToString()); - } - - num++; - } - } - } - } - - return 0; - } - } - } -} \ No newline at end of file diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Util/MaterialManager.cs b/Correlator/Util/MaterialManager.cs deleted file mode 100644 index 4ffd67a..0000000 --- a/Correlator/Util/MaterialManager.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using Correlator.Model; -using Newtonsoft.Json.Linq; - -namespace Correlator.Util -{ - public class MaterialManager - { - /// - /// 初始化管材数据 - /// - /// - public static ObservableCollection InitPipeMaterial() - { - var materialModels = new ObservableCollection(); - using (var manager = new DataBaseManager()) - { - var configModels = manager.Table().ToList(); - foreach (var model in configModels) - { - materialModels.Add(model); - } - - return materialModels; - } - } - - /// - /// 根据管材和管径大小获取声速 - /// - /// - /// - /// - public static int GetSoundVelocity(string material, int pipeDiameter) - { - using (var manager = new DataBaseManager()) - { - //多条件查询 - var materialVelocities = manager - .Table() - .Where(mv => - mv.MaterialName == material && - mv.LowDiameter <= pipeDiameter && - mv.HighDiameter >= pipeDiameter - ); - if (materialVelocities.Any()) - { - return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); - } - else - { - var fileStream = new FileStream( - @"..\..\Config\config.json", FileMode.Open, FileAccess.Read - ); - using (var streamReader = new StreamReader(fileStream)) - { - var config = streamReader.ReadToEnd(); - var jo = JObject.Parse(config); - var customMaterials = jo["CustomMaterial"]; - if (customMaterials == null) - { - return 0; - } - - foreach (var customMaterial in customMaterials) - { - if (material != customMaterial["name"]?.ToString()) continue; - var num = 0; - foreach (var v in customMaterial["range"]) - { - var diameterArr = v.ToString().Split('-'); - var lowDiameter = int.Parse(diameterArr[0]); - var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; - if (lowDiameter < pipeDiameter && highDiameter > pipeDiameter) - { - return int.Parse(customMaterial["speed"][num].ToString()); - } - - num++; - } - } - } - } - - return 0; - } - } - } -} \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs new file mode 100644 index 0000000..3b7b48c --- /dev/null +++ b/Correlator/Util/MethodExtensions.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Correlator.Util +{ + public static class MethodExtensions + { + public static string FormatFileSize(this long size) + { + string fileSize; + if (size == 0) + { + fileSize = "0B"; + } + else if (size < 1024) + { + fileSize = $"{size:#.0}" + "B"; + } + else if (size < 1048576) + { + fileSize = $"{(double)size / 1024:#.0}" + "K"; + } + else if (size < 1073741824) + { + fileSize = $"{(double)size / 1048576:#.0}" + "M"; + } + else + { + fileSize = $"{(double)size / 1073741824:#.0}" + "G"; + } + + return fileSize; + } + + public static int ConvertBytes2Int(this IEnumerable bytes) + { + return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); + } + + public static string ConvertBytes2String(this IEnumerable bytes) + { + return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); + } + + /// + /// 数据补零,保持长度一致 + /// + /// + /// + public static string AppendEndZero(this double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + + public static string To16HexString(this string src) + { + if (src.Length == 4) + { + return src; + } + + var temp = ""; + for (var i = 0; i < 4 - src.Length; i++) + { + temp += "0"; + } + + return temp + src; + } + } +} \ No newline at end of file diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Util/MaterialManager.cs b/Correlator/Util/MaterialManager.cs deleted file mode 100644 index 4ffd67a..0000000 --- a/Correlator/Util/MaterialManager.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using Correlator.Model; -using Newtonsoft.Json.Linq; - -namespace Correlator.Util -{ - public class MaterialManager - { - /// - /// 初始化管材数据 - /// - /// - public static ObservableCollection InitPipeMaterial() - { - var materialModels = new ObservableCollection(); - using (var manager = new DataBaseManager()) - { - var configModels = manager.Table().ToList(); - foreach (var model in configModels) - { - materialModels.Add(model); - } - - return materialModels; - } - } - - /// - /// 根据管材和管径大小获取声速 - /// - /// - /// - /// - public static int GetSoundVelocity(string material, int pipeDiameter) - { - using (var manager = new DataBaseManager()) - { - //多条件查询 - var materialVelocities = manager - .Table() - .Where(mv => - mv.MaterialName == material && - mv.LowDiameter <= pipeDiameter && - mv.HighDiameter >= pipeDiameter - ); - if (materialVelocities.Any()) - { - return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); - } - else - { - var fileStream = new FileStream( - @"..\..\Config\config.json", FileMode.Open, FileAccess.Read - ); - using (var streamReader = new StreamReader(fileStream)) - { - var config = streamReader.ReadToEnd(); - var jo = JObject.Parse(config); - var customMaterials = jo["CustomMaterial"]; - if (customMaterials == null) - { - return 0; - } - - foreach (var customMaterial in customMaterials) - { - if (material != customMaterial["name"]?.ToString()) continue; - var num = 0; - foreach (var v in customMaterial["range"]) - { - var diameterArr = v.ToString().Split('-'); - var lowDiameter = int.Parse(diameterArr[0]); - var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; - if (lowDiameter < pipeDiameter && highDiameter > pipeDiameter) - { - return int.Parse(customMaterial["speed"][num].ToString()); - } - - num++; - } - } - } - } - - return 0; - } - } - } -} \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs new file mode 100644 index 0000000..3b7b48c --- /dev/null +++ b/Correlator/Util/MethodExtensions.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Correlator.Util +{ + public static class MethodExtensions + { + public static string FormatFileSize(this long size) + { + string fileSize; + if (size == 0) + { + fileSize = "0B"; + } + else if (size < 1024) + { + fileSize = $"{size:#.0}" + "B"; + } + else if (size < 1048576) + { + fileSize = $"{(double)size / 1024:#.0}" + "K"; + } + else if (size < 1073741824) + { + fileSize = $"{(double)size / 1048576:#.0}" + "M"; + } + else + { + fileSize = $"{(double)size / 1073741824:#.0}" + "G"; + } + + return fileSize; + } + + public static int ConvertBytes2Int(this IEnumerable bytes) + { + return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); + } + + public static string ConvertBytes2String(this IEnumerable bytes) + { + return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); + } + + /// + /// 数据补零,保持长度一致 + /// + /// + /// + public static string AppendEndZero(this double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + + public static string To16HexString(this string src) + { + if (src.Length == 4) + { + return src; + } + + var temp = ""; + for (var i = 0; i < 4 - src.Length; i++) + { + temp += "0"; + } + + return temp + src; + } + } +} \ No newline at end of file diff --git a/Correlator/Util/SenderClass.cs b/Correlator/Util/SenderClass.cs index 77f96cd..699eada 100644 --- a/Correlator/Util/SenderClass.cs +++ b/Correlator/Util/SenderClass.cs @@ -55,8 +55,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -129,8 +128,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -216,8 +214,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -301,8 +298,7 @@ sysTag.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -376,8 +372,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Util/MaterialManager.cs b/Correlator/Util/MaterialManager.cs deleted file mode 100644 index 4ffd67a..0000000 --- a/Correlator/Util/MaterialManager.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using Correlator.Model; -using Newtonsoft.Json.Linq; - -namespace Correlator.Util -{ - public class MaterialManager - { - /// - /// 初始化管材数据 - /// - /// - public static ObservableCollection InitPipeMaterial() - { - var materialModels = new ObservableCollection(); - using (var manager = new DataBaseManager()) - { - var configModels = manager.Table().ToList(); - foreach (var model in configModels) - { - materialModels.Add(model); - } - - return materialModels; - } - } - - /// - /// 根据管材和管径大小获取声速 - /// - /// - /// - /// - public static int GetSoundVelocity(string material, int pipeDiameter) - { - using (var manager = new DataBaseManager()) - { - //多条件查询 - var materialVelocities = manager - .Table() - .Where(mv => - mv.MaterialName == material && - mv.LowDiameter <= pipeDiameter && - mv.HighDiameter >= pipeDiameter - ); - if (materialVelocities.Any()) - { - return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); - } - else - { - var fileStream = new FileStream( - @"..\..\Config\config.json", FileMode.Open, FileAccess.Read - ); - using (var streamReader = new StreamReader(fileStream)) - { - var config = streamReader.ReadToEnd(); - var jo = JObject.Parse(config); - var customMaterials = jo["CustomMaterial"]; - if (customMaterials == null) - { - return 0; - } - - foreach (var customMaterial in customMaterials) - { - if (material != customMaterial["name"]?.ToString()) continue; - var num = 0; - foreach (var v in customMaterial["range"]) - { - var diameterArr = v.ToString().Split('-'); - var lowDiameter = int.Parse(diameterArr[0]); - var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; - if (lowDiameter < pipeDiameter && highDiameter > pipeDiameter) - { - return int.Parse(customMaterial["speed"][num].ToString()); - } - - num++; - } - } - } - } - - return 0; - } - } - } -} \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs new file mode 100644 index 0000000..3b7b48c --- /dev/null +++ b/Correlator/Util/MethodExtensions.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Correlator.Util +{ + public static class MethodExtensions + { + public static string FormatFileSize(this long size) + { + string fileSize; + if (size == 0) + { + fileSize = "0B"; + } + else if (size < 1024) + { + fileSize = $"{size:#.0}" + "B"; + } + else if (size < 1048576) + { + fileSize = $"{(double)size / 1024:#.0}" + "K"; + } + else if (size < 1073741824) + { + fileSize = $"{(double)size / 1048576:#.0}" + "M"; + } + else + { + fileSize = $"{(double)size / 1073741824:#.0}" + "G"; + } + + return fileSize; + } + + public static int ConvertBytes2Int(this IEnumerable bytes) + { + return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); + } + + public static string ConvertBytes2String(this IEnumerable bytes) + { + return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); + } + + /// + /// 数据补零,保持长度一致 + /// + /// + /// + public static string AppendEndZero(this double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + + public static string To16HexString(this string src) + { + if (src.Length == 4) + { + return src; + } + + var temp = ""; + for (var i = 0; i < 4 - src.Length; i++) + { + temp += "0"; + } + + return temp + src; + } + } +} \ No newline at end of file diff --git a/Correlator/Util/SenderClass.cs b/Correlator/Util/SenderClass.cs index 77f96cd..699eada 100644 --- a/Correlator/Util/SenderClass.cs +++ b/Correlator/Util/SenderClass.cs @@ -55,8 +55,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -129,8 +128,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -216,8 +214,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -301,8 +298,7 @@ sysTag.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -376,8 +372,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 048118d..5548941 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -41,7 +41,7 @@ var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - var strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = deviceId.ConvertBytes2String(); var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); @@ -122,7 +122,7 @@ { var lengthBuffer = new byte[2]; SerialPort.Read(lengthBuffer, 0, 2); - var length = StringUtil.ConvertBytes2Int(lengthBuffer); + var length = lengthBuffer.ConvertBytes2Int(); if (length < 12) { @@ -343,7 +343,7 @@ Array.Reverse(len); int iLen = BitConverter.ToInt16(len, 0); - var strOid = StringUtil.ConvertBytes2String(oid); + var strOid = oid.ConvertBytes2String(); var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Util/MaterialManager.cs b/Correlator/Util/MaterialManager.cs deleted file mode 100644 index 4ffd67a..0000000 --- a/Correlator/Util/MaterialManager.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using Correlator.Model; -using Newtonsoft.Json.Linq; - -namespace Correlator.Util -{ - public class MaterialManager - { - /// - /// 初始化管材数据 - /// - /// - public static ObservableCollection InitPipeMaterial() - { - var materialModels = new ObservableCollection(); - using (var manager = new DataBaseManager()) - { - var configModels = manager.Table().ToList(); - foreach (var model in configModels) - { - materialModels.Add(model); - } - - return materialModels; - } - } - - /// - /// 根据管材和管径大小获取声速 - /// - /// - /// - /// - public static int GetSoundVelocity(string material, int pipeDiameter) - { - using (var manager = new DataBaseManager()) - { - //多条件查询 - var materialVelocities = manager - .Table() - .Where(mv => - mv.MaterialName == material && - mv.LowDiameter <= pipeDiameter && - mv.HighDiameter >= pipeDiameter - ); - if (materialVelocities.Any()) - { - return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); - } - else - { - var fileStream = new FileStream( - @"..\..\Config\config.json", FileMode.Open, FileAccess.Read - ); - using (var streamReader = new StreamReader(fileStream)) - { - var config = streamReader.ReadToEnd(); - var jo = JObject.Parse(config); - var customMaterials = jo["CustomMaterial"]; - if (customMaterials == null) - { - return 0; - } - - foreach (var customMaterial in customMaterials) - { - if (material != customMaterial["name"]?.ToString()) continue; - var num = 0; - foreach (var v in customMaterial["range"]) - { - var diameterArr = v.ToString().Split('-'); - var lowDiameter = int.Parse(diameterArr[0]); - var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; - if (lowDiameter < pipeDiameter && highDiameter > pipeDiameter) - { - return int.Parse(customMaterial["speed"][num].ToString()); - } - - num++; - } - } - } - } - - return 0; - } - } - } -} \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs new file mode 100644 index 0000000..3b7b48c --- /dev/null +++ b/Correlator/Util/MethodExtensions.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Correlator.Util +{ + public static class MethodExtensions + { + public static string FormatFileSize(this long size) + { + string fileSize; + if (size == 0) + { + fileSize = "0B"; + } + else if (size < 1024) + { + fileSize = $"{size:#.0}" + "B"; + } + else if (size < 1048576) + { + fileSize = $"{(double)size / 1024:#.0}" + "K"; + } + else if (size < 1073741824) + { + fileSize = $"{(double)size / 1048576:#.0}" + "M"; + } + else + { + fileSize = $"{(double)size / 1073741824:#.0}" + "G"; + } + + return fileSize; + } + + public static int ConvertBytes2Int(this IEnumerable bytes) + { + return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); + } + + public static string ConvertBytes2String(this IEnumerable bytes) + { + return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); + } + + /// + /// 数据补零,保持长度一致 + /// + /// + /// + public static string AppendEndZero(this double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + + public static string To16HexString(this string src) + { + if (src.Length == 4) + { + return src; + } + + var temp = ""; + for (var i = 0; i < 4 - src.Length; i++) + { + temp += "0"; + } + + return temp + src; + } + } +} \ No newline at end of file diff --git a/Correlator/Util/SenderClass.cs b/Correlator/Util/SenderClass.cs index 77f96cd..699eada 100644 --- a/Correlator/Util/SenderClass.cs +++ b/Correlator/Util/SenderClass.cs @@ -55,8 +55,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -129,8 +128,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -216,8 +214,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -301,8 +298,7 @@ sysTag.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -376,8 +372,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 048118d..5548941 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -41,7 +41,7 @@ var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - var strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = deviceId.ConvertBytes2String(); var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); @@ -122,7 +122,7 @@ { var lengthBuffer = new byte[2]; SerialPort.Read(lengthBuffer, 0, 2); - var length = StringUtil.ConvertBytes2Int(lengthBuffer); + var length = lengthBuffer.ConvertBytes2Int(); if (length < 12) { @@ -343,7 +343,7 @@ Array.Reverse(len); int iLen = BitConverter.ToInt16(len, 0); - var strOid = StringUtil.ConvertBytes2String(oid); + var strOid = oid.ConvertBytes2String(); var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); diff --git a/Correlator/Util/SizeUtil.cs b/Correlator/Util/SizeUtil.cs deleted file mode 100644 index 2303a19..0000000 --- a/Correlator/Util/SizeUtil.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace Correlator.Util -{ - public static class SizeUtil - { - public static string FormatFileSize(long size) - { - string fileSize; - if (size == 0) - { - fileSize = "0B"; - } - else if (size < 1024) - { - fileSize = $"{size:#.0}" + "B"; - } - else if (size < 1048576) - { - fileSize = $"{(double)size / 1024:#.0}" + "K"; - } - else if (size < 1073741824) - { - fileSize = $"{(double)size / 1048576:#.0}" + "M"; - } - else - { - fileSize = $"{(double)size / 1073741824:#.0}" + "G"; - } - - return fileSize; - } - } -} \ No newline at end of file diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Util/MaterialManager.cs b/Correlator/Util/MaterialManager.cs deleted file mode 100644 index 4ffd67a..0000000 --- a/Correlator/Util/MaterialManager.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using Correlator.Model; -using Newtonsoft.Json.Linq; - -namespace Correlator.Util -{ - public class MaterialManager - { - /// - /// 初始化管材数据 - /// - /// - public static ObservableCollection InitPipeMaterial() - { - var materialModels = new ObservableCollection(); - using (var manager = new DataBaseManager()) - { - var configModels = manager.Table().ToList(); - foreach (var model in configModels) - { - materialModels.Add(model); - } - - return materialModels; - } - } - - /// - /// 根据管材和管径大小获取声速 - /// - /// - /// - /// - public static int GetSoundVelocity(string material, int pipeDiameter) - { - using (var manager = new DataBaseManager()) - { - //多条件查询 - var materialVelocities = manager - .Table() - .Where(mv => - mv.MaterialName == material && - mv.LowDiameter <= pipeDiameter && - mv.HighDiameter >= pipeDiameter - ); - if (materialVelocities.Any()) - { - return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); - } - else - { - var fileStream = new FileStream( - @"..\..\Config\config.json", FileMode.Open, FileAccess.Read - ); - using (var streamReader = new StreamReader(fileStream)) - { - var config = streamReader.ReadToEnd(); - var jo = JObject.Parse(config); - var customMaterials = jo["CustomMaterial"]; - if (customMaterials == null) - { - return 0; - } - - foreach (var customMaterial in customMaterials) - { - if (material != customMaterial["name"]?.ToString()) continue; - var num = 0; - foreach (var v in customMaterial["range"]) - { - var diameterArr = v.ToString().Split('-'); - var lowDiameter = int.Parse(diameterArr[0]); - var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; - if (lowDiameter < pipeDiameter && highDiameter > pipeDiameter) - { - return int.Parse(customMaterial["speed"][num].ToString()); - } - - num++; - } - } - } - } - - return 0; - } - } - } -} \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs new file mode 100644 index 0000000..3b7b48c --- /dev/null +++ b/Correlator/Util/MethodExtensions.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Correlator.Util +{ + public static class MethodExtensions + { + public static string FormatFileSize(this long size) + { + string fileSize; + if (size == 0) + { + fileSize = "0B"; + } + else if (size < 1024) + { + fileSize = $"{size:#.0}" + "B"; + } + else if (size < 1048576) + { + fileSize = $"{(double)size / 1024:#.0}" + "K"; + } + else if (size < 1073741824) + { + fileSize = $"{(double)size / 1048576:#.0}" + "M"; + } + else + { + fileSize = $"{(double)size / 1073741824:#.0}" + "G"; + } + + return fileSize; + } + + public static int ConvertBytes2Int(this IEnumerable bytes) + { + return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); + } + + public static string ConvertBytes2String(this IEnumerable bytes) + { + return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); + } + + /// + /// 数据补零,保持长度一致 + /// + /// + /// + public static string AppendEndZero(this double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + + public static string To16HexString(this string src) + { + if (src.Length == 4) + { + return src; + } + + var temp = ""; + for (var i = 0; i < 4 - src.Length; i++) + { + temp += "0"; + } + + return temp + src; + } + } +} \ No newline at end of file diff --git a/Correlator/Util/SenderClass.cs b/Correlator/Util/SenderClass.cs index 77f96cd..699eada 100644 --- a/Correlator/Util/SenderClass.cs +++ b/Correlator/Util/SenderClass.cs @@ -55,8 +55,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -129,8 +128,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -216,8 +214,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -301,8 +298,7 @@ sysTag.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -376,8 +372,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 048118d..5548941 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -41,7 +41,7 @@ var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - var strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = deviceId.ConvertBytes2String(); var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); @@ -122,7 +122,7 @@ { var lengthBuffer = new byte[2]; SerialPort.Read(lengthBuffer, 0, 2); - var length = StringUtil.ConvertBytes2Int(lengthBuffer); + var length = lengthBuffer.ConvertBytes2Int(); if (length < 12) { @@ -343,7 +343,7 @@ Array.Reverse(len); int iLen = BitConverter.ToInt16(len, 0); - var strOid = StringUtil.ConvertBytes2String(oid); + var strOid = oid.ConvertBytes2String(); var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); diff --git a/Correlator/Util/SizeUtil.cs b/Correlator/Util/SizeUtil.cs deleted file mode 100644 index 2303a19..0000000 --- a/Correlator/Util/SizeUtil.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace Correlator.Util -{ - public static class SizeUtil - { - public static string FormatFileSize(long size) - { - string fileSize; - if (size == 0) - { - fileSize = "0B"; - } - else if (size < 1024) - { - fileSize = $"{size:#.0}" + "B"; - } - else if (size < 1048576) - { - fileSize = $"{(double)size / 1024:#.0}" + "K"; - } - else if (size < 1073741824) - { - fileSize = $"{(double)size / 1048576:#.0}" + "M"; - } - else - { - fileSize = $"{(double)size / 1073741824:#.0}" + "G"; - } - - return fileSize; - } - } -} \ No newline at end of file diff --git a/Correlator/Util/StringUtil.cs b/Correlator/Util/StringUtil.cs index 4be3963..bab8bbf 100644 --- a/Correlator/Util/StringUtil.cs +++ b/Correlator/Util/StringUtil.cs @@ -1,8 +1,6 @@ using System; -using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; using System.Text; using Correlator.Model; @@ -10,32 +8,6 @@ { public static class StringUtil { - public static int ConvertBytes2Int(IEnumerable bytes) - { - return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); - } - - public static string To16HexString(string src) - { - if (src.Length == 4) - { - return src; - } - - var temp = ""; - for (var i = 0; i < 4 - src.Length; i++) - { - temp += "0"; - } - - return temp + src; - } - - public static string ConvertBytes2String(IEnumerable bytes) - { - return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); - } - public static void SaveHexData(string devCode, byte[] receiveData, string hexFileName) { var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); @@ -60,13 +32,13 @@ var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; foreach (var d in it.LeftDeviceDataArray) { - locateData += AppendEndZero(d) + "\r\n"; + locateData += d.AppendEndZero() + "\r\n"; } locateData += "===============" + "\r\n"; foreach (var d in it.RightDeviceDataArray) { - locateData += AppendEndZero(d) + "\r\n"; + locateData += d.AppendEndZero() + "\r\n"; } var data = Encoding.Default.GetBytes(locateData); @@ -77,13 +49,6 @@ fileStream.Close(); } - //数据补零,保持长度一致 - public static string AppendEndZero(double d) - { - //数据固定长度16 - return ((decimal)d).ToString("G").PadRight(16, '0'); - } - public static byte Year => byte.Parse(DateTime.Now.ToString("yy")); public static byte Mon => byte.Parse(DateTime.Now.ToString("MM")); diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Util/MaterialManager.cs b/Correlator/Util/MaterialManager.cs deleted file mode 100644 index 4ffd67a..0000000 --- a/Correlator/Util/MaterialManager.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using Correlator.Model; -using Newtonsoft.Json.Linq; - -namespace Correlator.Util -{ - public class MaterialManager - { - /// - /// 初始化管材数据 - /// - /// - public static ObservableCollection InitPipeMaterial() - { - var materialModels = new ObservableCollection(); - using (var manager = new DataBaseManager()) - { - var configModels = manager.Table().ToList(); - foreach (var model in configModels) - { - materialModels.Add(model); - } - - return materialModels; - } - } - - /// - /// 根据管材和管径大小获取声速 - /// - /// - /// - /// - public static int GetSoundVelocity(string material, int pipeDiameter) - { - using (var manager = new DataBaseManager()) - { - //多条件查询 - var materialVelocities = manager - .Table() - .Where(mv => - mv.MaterialName == material && - mv.LowDiameter <= pipeDiameter && - mv.HighDiameter >= pipeDiameter - ); - if (materialVelocities.Any()) - { - return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); - } - else - { - var fileStream = new FileStream( - @"..\..\Config\config.json", FileMode.Open, FileAccess.Read - ); - using (var streamReader = new StreamReader(fileStream)) - { - var config = streamReader.ReadToEnd(); - var jo = JObject.Parse(config); - var customMaterials = jo["CustomMaterial"]; - if (customMaterials == null) - { - return 0; - } - - foreach (var customMaterial in customMaterials) - { - if (material != customMaterial["name"]?.ToString()) continue; - var num = 0; - foreach (var v in customMaterial["range"]) - { - var diameterArr = v.ToString().Split('-'); - var lowDiameter = int.Parse(diameterArr[0]); - var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; - if (lowDiameter < pipeDiameter && highDiameter > pipeDiameter) - { - return int.Parse(customMaterial["speed"][num].ToString()); - } - - num++; - } - } - } - } - - return 0; - } - } - } -} \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs new file mode 100644 index 0000000..3b7b48c --- /dev/null +++ b/Correlator/Util/MethodExtensions.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Correlator.Util +{ + public static class MethodExtensions + { + public static string FormatFileSize(this long size) + { + string fileSize; + if (size == 0) + { + fileSize = "0B"; + } + else if (size < 1024) + { + fileSize = $"{size:#.0}" + "B"; + } + else if (size < 1048576) + { + fileSize = $"{(double)size / 1024:#.0}" + "K"; + } + else if (size < 1073741824) + { + fileSize = $"{(double)size / 1048576:#.0}" + "M"; + } + else + { + fileSize = $"{(double)size / 1073741824:#.0}" + "G"; + } + + return fileSize; + } + + public static int ConvertBytes2Int(this IEnumerable bytes) + { + return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); + } + + public static string ConvertBytes2String(this IEnumerable bytes) + { + return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); + } + + /// + /// 数据补零,保持长度一致 + /// + /// + /// + public static string AppendEndZero(this double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + + public static string To16HexString(this string src) + { + if (src.Length == 4) + { + return src; + } + + var temp = ""; + for (var i = 0; i < 4 - src.Length; i++) + { + temp += "0"; + } + + return temp + src; + } + } +} \ No newline at end of file diff --git a/Correlator/Util/SenderClass.cs b/Correlator/Util/SenderClass.cs index 77f96cd..699eada 100644 --- a/Correlator/Util/SenderClass.cs +++ b/Correlator/Util/SenderClass.cs @@ -55,8 +55,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -129,8 +128,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -216,8 +214,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -301,8 +298,7 @@ sysTag.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -376,8 +372,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 048118d..5548941 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -41,7 +41,7 @@ var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - var strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = deviceId.ConvertBytes2String(); var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); @@ -122,7 +122,7 @@ { var lengthBuffer = new byte[2]; SerialPort.Read(lengthBuffer, 0, 2); - var length = StringUtil.ConvertBytes2Int(lengthBuffer); + var length = lengthBuffer.ConvertBytes2Int(); if (length < 12) { @@ -343,7 +343,7 @@ Array.Reverse(len); int iLen = BitConverter.ToInt16(len, 0); - var strOid = StringUtil.ConvertBytes2String(oid); + var strOid = oid.ConvertBytes2String(); var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); diff --git a/Correlator/Util/SizeUtil.cs b/Correlator/Util/SizeUtil.cs deleted file mode 100644 index 2303a19..0000000 --- a/Correlator/Util/SizeUtil.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace Correlator.Util -{ - public static class SizeUtil - { - public static string FormatFileSize(long size) - { - string fileSize; - if (size == 0) - { - fileSize = "0B"; - } - else if (size < 1024) - { - fileSize = $"{size:#.0}" + "B"; - } - else if (size < 1048576) - { - fileSize = $"{(double)size / 1024:#.0}" + "K"; - } - else if (size < 1073741824) - { - fileSize = $"{(double)size / 1048576:#.0}" + "M"; - } - else - { - fileSize = $"{(double)size / 1073741824:#.0}" + "G"; - } - - return fileSize; - } - } -} \ No newline at end of file diff --git a/Correlator/Util/StringUtil.cs b/Correlator/Util/StringUtil.cs index 4be3963..bab8bbf 100644 --- a/Correlator/Util/StringUtil.cs +++ b/Correlator/Util/StringUtil.cs @@ -1,8 +1,6 @@ using System; -using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; using System.Text; using Correlator.Model; @@ -10,32 +8,6 @@ { public static class StringUtil { - public static int ConvertBytes2Int(IEnumerable bytes) - { - return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); - } - - public static string To16HexString(string src) - { - if (src.Length == 4) - { - return src; - } - - var temp = ""; - for (var i = 0; i < 4 - src.Length; i++) - { - temp += "0"; - } - - return temp + src; - } - - public static string ConvertBytes2String(IEnumerable bytes) - { - return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); - } - public static void SaveHexData(string devCode, byte[] receiveData, string hexFileName) { var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); @@ -60,13 +32,13 @@ var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; foreach (var d in it.LeftDeviceDataArray) { - locateData += AppendEndZero(d) + "\r\n"; + locateData += d.AppendEndZero() + "\r\n"; } locateData += "===============" + "\r\n"; foreach (var d in it.RightDeviceDataArray) { - locateData += AppendEndZero(d) + "\r\n"; + locateData += d.AppendEndZero() + "\r\n"; } var data = Encoding.Default.GetBytes(locateData); @@ -77,13 +49,6 @@ fileStream.Close(); } - //数据补零,保持长度一致 - public static string AppendEndZero(double d) - { - //数据固定长度16 - return ((decimal)d).ToString("G").PadRight(16, '0'); - } - public static byte Year => byte.Parse(DateTime.Now.ToString("yy")); public static byte Mon => byte.Parse(DateTime.Now.ToString("MM")); diff --git a/Correlator/ViewModel/AudioFileViewModel.cs b/Correlator/ViewModel/AudioFileViewModel.cs index d8b3c95..081a75e 100644 --- a/Correlator/ViewModel/AudioFileViewModel.cs +++ b/Correlator/ViewModel/AudioFileViewModel.cs @@ -125,7 +125,7 @@ FileName = file.Name.Substring(0, file.Name.IndexOf(".", StringComparison.Ordinal)), PersonLiable = "", FullPath = Constant.GetAudioDir() + "\\" + file.Name, - FileSize = SizeUtil.FormatFileSize(file.Length), + FileSize = file.Length.FormatFileSize(), CreationTime = file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss") }).ToList(); } diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Util/MaterialManager.cs b/Correlator/Util/MaterialManager.cs deleted file mode 100644 index 4ffd67a..0000000 --- a/Correlator/Util/MaterialManager.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using Correlator.Model; -using Newtonsoft.Json.Linq; - -namespace Correlator.Util -{ - public class MaterialManager - { - /// - /// 初始化管材数据 - /// - /// - public static ObservableCollection InitPipeMaterial() - { - var materialModels = new ObservableCollection(); - using (var manager = new DataBaseManager()) - { - var configModels = manager.Table().ToList(); - foreach (var model in configModels) - { - materialModels.Add(model); - } - - return materialModels; - } - } - - /// - /// 根据管材和管径大小获取声速 - /// - /// - /// - /// - public static int GetSoundVelocity(string material, int pipeDiameter) - { - using (var manager = new DataBaseManager()) - { - //多条件查询 - var materialVelocities = manager - .Table() - .Where(mv => - mv.MaterialName == material && - mv.LowDiameter <= pipeDiameter && - mv.HighDiameter >= pipeDiameter - ); - if (materialVelocities.Any()) - { - return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); - } - else - { - var fileStream = new FileStream( - @"..\..\Config\config.json", FileMode.Open, FileAccess.Read - ); - using (var streamReader = new StreamReader(fileStream)) - { - var config = streamReader.ReadToEnd(); - var jo = JObject.Parse(config); - var customMaterials = jo["CustomMaterial"]; - if (customMaterials == null) - { - return 0; - } - - foreach (var customMaterial in customMaterials) - { - if (material != customMaterial["name"]?.ToString()) continue; - var num = 0; - foreach (var v in customMaterial["range"]) - { - var diameterArr = v.ToString().Split('-'); - var lowDiameter = int.Parse(diameterArr[0]); - var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; - if (lowDiameter < pipeDiameter && highDiameter > pipeDiameter) - { - return int.Parse(customMaterial["speed"][num].ToString()); - } - - num++; - } - } - } - } - - return 0; - } - } - } -} \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs new file mode 100644 index 0000000..3b7b48c --- /dev/null +++ b/Correlator/Util/MethodExtensions.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Correlator.Util +{ + public static class MethodExtensions + { + public static string FormatFileSize(this long size) + { + string fileSize; + if (size == 0) + { + fileSize = "0B"; + } + else if (size < 1024) + { + fileSize = $"{size:#.0}" + "B"; + } + else if (size < 1048576) + { + fileSize = $"{(double)size / 1024:#.0}" + "K"; + } + else if (size < 1073741824) + { + fileSize = $"{(double)size / 1048576:#.0}" + "M"; + } + else + { + fileSize = $"{(double)size / 1073741824:#.0}" + "G"; + } + + return fileSize; + } + + public static int ConvertBytes2Int(this IEnumerable bytes) + { + return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); + } + + public static string ConvertBytes2String(this IEnumerable bytes) + { + return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); + } + + /// + /// 数据补零,保持长度一致 + /// + /// + /// + public static string AppendEndZero(this double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + + public static string To16HexString(this string src) + { + if (src.Length == 4) + { + return src; + } + + var temp = ""; + for (var i = 0; i < 4 - src.Length; i++) + { + temp += "0"; + } + + return temp + src; + } + } +} \ No newline at end of file diff --git a/Correlator/Util/SenderClass.cs b/Correlator/Util/SenderClass.cs index 77f96cd..699eada 100644 --- a/Correlator/Util/SenderClass.cs +++ b/Correlator/Util/SenderClass.cs @@ -55,8 +55,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -129,8 +128,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -216,8 +214,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -301,8 +298,7 @@ sysTag.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -376,8 +372,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 048118d..5548941 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -41,7 +41,7 @@ var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - var strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = deviceId.ConvertBytes2String(); var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); @@ -122,7 +122,7 @@ { var lengthBuffer = new byte[2]; SerialPort.Read(lengthBuffer, 0, 2); - var length = StringUtil.ConvertBytes2Int(lengthBuffer); + var length = lengthBuffer.ConvertBytes2Int(); if (length < 12) { @@ -343,7 +343,7 @@ Array.Reverse(len); int iLen = BitConverter.ToInt16(len, 0); - var strOid = StringUtil.ConvertBytes2String(oid); + var strOid = oid.ConvertBytes2String(); var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); diff --git a/Correlator/Util/SizeUtil.cs b/Correlator/Util/SizeUtil.cs deleted file mode 100644 index 2303a19..0000000 --- a/Correlator/Util/SizeUtil.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace Correlator.Util -{ - public static class SizeUtil - { - public static string FormatFileSize(long size) - { - string fileSize; - if (size == 0) - { - fileSize = "0B"; - } - else if (size < 1024) - { - fileSize = $"{size:#.0}" + "B"; - } - else if (size < 1048576) - { - fileSize = $"{(double)size / 1024:#.0}" + "K"; - } - else if (size < 1073741824) - { - fileSize = $"{(double)size / 1048576:#.0}" + "M"; - } - else - { - fileSize = $"{(double)size / 1073741824:#.0}" + "G"; - } - - return fileSize; - } - } -} \ No newline at end of file diff --git a/Correlator/Util/StringUtil.cs b/Correlator/Util/StringUtil.cs index 4be3963..bab8bbf 100644 --- a/Correlator/Util/StringUtil.cs +++ b/Correlator/Util/StringUtil.cs @@ -1,8 +1,6 @@ using System; -using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; using System.Text; using Correlator.Model; @@ -10,32 +8,6 @@ { public static class StringUtil { - public static int ConvertBytes2Int(IEnumerable bytes) - { - return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); - } - - public static string To16HexString(string src) - { - if (src.Length == 4) - { - return src; - } - - var temp = ""; - for (var i = 0; i < 4 - src.Length; i++) - { - temp += "0"; - } - - return temp + src; - } - - public static string ConvertBytes2String(IEnumerable bytes) - { - return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); - } - public static void SaveHexData(string devCode, byte[] receiveData, string hexFileName) { var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); @@ -60,13 +32,13 @@ var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; foreach (var d in it.LeftDeviceDataArray) { - locateData += AppendEndZero(d) + "\r\n"; + locateData += d.AppendEndZero() + "\r\n"; } locateData += "===============" + "\r\n"; foreach (var d in it.RightDeviceDataArray) { - locateData += AppendEndZero(d) + "\r\n"; + locateData += d.AppendEndZero() + "\r\n"; } var data = Encoding.Default.GetBytes(locateData); @@ -77,13 +49,6 @@ fileStream.Close(); } - //数据补零,保持长度一致 - public static string AppendEndZero(double d) - { - //数据固定长度16 - return ((decimal)d).ToString("G").PadRight(16, '0'); - } - public static byte Year => byte.Parse(DateTime.Now.ToString("yy")); public static byte Mon => byte.Parse(DateTime.Now.ToString("MM")); diff --git a/Correlator/ViewModel/AudioFileViewModel.cs b/Correlator/ViewModel/AudioFileViewModel.cs index d8b3c95..081a75e 100644 --- a/Correlator/ViewModel/AudioFileViewModel.cs +++ b/Correlator/ViewModel/AudioFileViewModel.cs @@ -125,7 +125,7 @@ FileName = file.Name.Substring(0, file.Name.IndexOf(".", StringComparison.Ordinal)), PersonLiable = "", FullPath = Constant.GetAudioDir() + "\\" + file.Name, - FileSize = SizeUtil.FormatFileSize(file.Length), + FileSize = file.Length.FormatFileSize(), CreationTime = file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss") }).ToList(); } diff --git a/Correlator/ViewModel/EditFilterViewModel.cs b/Correlator/ViewModel/EditFilterViewModel.cs index 134344c..c78e813 100644 --- a/Correlator/ViewModel/EditFilterViewModel.cs +++ b/Correlator/ViewModel/EditFilterViewModel.cs @@ -4,6 +4,7 @@ using System.Windows; using Correlator.Dialog; using Correlator.Model; +using Correlator.Service; using Correlator.Util; using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; @@ -16,6 +17,7 @@ { public RelayCommand DetermineParamCommand { get; set; } + private readonly ISoundSpeedDataService _dataService; private PipeMaterialModel _materialModel; private string _materialName; @@ -78,8 +80,9 @@ } } - public EditFilterViewModel() + public EditFilterViewModel(ISoundSpeedDataService dataService) { + _dataService = dataService; Messenger.Default.Register(this, MessengerToken.EditFilter, it => { MaterialName = it.ChineseMaterial; @@ -88,49 +91,48 @@ _materialModel = it; }); - DetermineParamCommand = new RelayCommand(it => + DetermineParamCommand = new RelayCommand(EditFilter); + } + + private void EditFilter(EditFilterDialog it) + { + if (string.IsNullOrEmpty(_lowFrequency) || string.IsNullOrEmpty(_highFrequency)) { - if (string.IsNullOrEmpty(_lowFrequency) || string.IsNullOrEmpty(_highFrequency)) - { - MessageBox.Show("请输入完整的干扰频段", - "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); - return; - } + MessageBox.Show("请输入完整的干扰频段", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } - if (!(Regex.IsMatch(_lowFrequency, "^([1-9][0-9]*)$") && - Regex.IsMatch(_highFrequency, "^([1-9][0-9]*)$"))) - { - MessageBox.Show("输入格式错误,请重新输入", - "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); - return; - } + if (!(Regex.IsMatch(_lowFrequency, "^([1-9][0-9]*)$") && + Regex.IsMatch(_highFrequency, "^([1-9][0-9]*)$"))) + { + MessageBox.Show("输入格式错误,请重新输入", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } - var low = Convert.ToInt32(_lowFrequency); - var high = Convert.ToInt32(_highFrequency); + var low = Convert.ToInt32(_lowFrequency); + var high = Convert.ToInt32(_highFrequency); - if (low < 100 || low > 3000 || high < 100 || high > 3000 || low >= high) - { - MessageBox.Show("频段范围100-3000Hz,请重新输入", - "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); - return; - } + if (low < 100 || low > 3000 || high < 100 || high > 3000 || low >= high) + { + MessageBox.Show("频段范围100-3000Hz,请重新输入", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } - //声速 - var soundVelocity = MaterialManager.GetSoundVelocity( - _materialModel.ChineseMaterial, Convert.ToInt32(_materialModel.Diameter) - ); - LogWithConsole.WriteLine("正在修改的管材是:" + _materialModel.Diameter + "m的" + _materialModel.ChineseMaterial + - "声速是 => " + soundVelocity, "EditFilterViewModel"); + //声速 + var soundVelocity = _dataService.GetSoundVelocity( + _materialModel.ChineseMaterial, Convert.ToInt32(_materialModel.Diameter) + ); + LogWithConsole.WriteLine("正在修改的管材是:" + _materialModel.Diameter + "m的" + _materialModel.ChineseMaterial + + "声速是 => " + soundVelocity, "EditFilterViewModel"); - _materialModel.SoundSpeed = soundVelocity; - _materialModel.LowFrequency = low; - _materialModel.HighFrequency = high; - _materialModel.IsReady = true; + _materialModel.SoundSpeed = soundVelocity; + _materialModel.LowFrequency = low; + _materialModel.HighFrequency = high; + _materialModel.IsReady = true; - Messenger.Default.Send(_materialModel, MessengerToken.StartCalculate); - // 参数确定好之后,关闭自身和上一级窗口 - it.Close(); - }); + Messenger.Default.Send(_materialModel, MessengerToken.StartCalculate); + // 参数确定好之后,关闭自身和上一级窗口 + it.Close(); } } } \ No newline at end of file diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Util/MaterialManager.cs b/Correlator/Util/MaterialManager.cs deleted file mode 100644 index 4ffd67a..0000000 --- a/Correlator/Util/MaterialManager.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using Correlator.Model; -using Newtonsoft.Json.Linq; - -namespace Correlator.Util -{ - public class MaterialManager - { - /// - /// 初始化管材数据 - /// - /// - public static ObservableCollection InitPipeMaterial() - { - var materialModels = new ObservableCollection(); - using (var manager = new DataBaseManager()) - { - var configModels = manager.Table().ToList(); - foreach (var model in configModels) - { - materialModels.Add(model); - } - - return materialModels; - } - } - - /// - /// 根据管材和管径大小获取声速 - /// - /// - /// - /// - public static int GetSoundVelocity(string material, int pipeDiameter) - { - using (var manager = new DataBaseManager()) - { - //多条件查询 - var materialVelocities = manager - .Table() - .Where(mv => - mv.MaterialName == material && - mv.LowDiameter <= pipeDiameter && - mv.HighDiameter >= pipeDiameter - ); - if (materialVelocities.Any()) - { - return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); - } - else - { - var fileStream = new FileStream( - @"..\..\Config\config.json", FileMode.Open, FileAccess.Read - ); - using (var streamReader = new StreamReader(fileStream)) - { - var config = streamReader.ReadToEnd(); - var jo = JObject.Parse(config); - var customMaterials = jo["CustomMaterial"]; - if (customMaterials == null) - { - return 0; - } - - foreach (var customMaterial in customMaterials) - { - if (material != customMaterial["name"]?.ToString()) continue; - var num = 0; - foreach (var v in customMaterial["range"]) - { - var diameterArr = v.ToString().Split('-'); - var lowDiameter = int.Parse(diameterArr[0]); - var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; - if (lowDiameter < pipeDiameter && highDiameter > pipeDiameter) - { - return int.Parse(customMaterial["speed"][num].ToString()); - } - - num++; - } - } - } - } - - return 0; - } - } - } -} \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs new file mode 100644 index 0000000..3b7b48c --- /dev/null +++ b/Correlator/Util/MethodExtensions.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Correlator.Util +{ + public static class MethodExtensions + { + public static string FormatFileSize(this long size) + { + string fileSize; + if (size == 0) + { + fileSize = "0B"; + } + else if (size < 1024) + { + fileSize = $"{size:#.0}" + "B"; + } + else if (size < 1048576) + { + fileSize = $"{(double)size / 1024:#.0}" + "K"; + } + else if (size < 1073741824) + { + fileSize = $"{(double)size / 1048576:#.0}" + "M"; + } + else + { + fileSize = $"{(double)size / 1073741824:#.0}" + "G"; + } + + return fileSize; + } + + public static int ConvertBytes2Int(this IEnumerable bytes) + { + return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); + } + + public static string ConvertBytes2String(this IEnumerable bytes) + { + return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); + } + + /// + /// 数据补零,保持长度一致 + /// + /// + /// + public static string AppendEndZero(this double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + + public static string To16HexString(this string src) + { + if (src.Length == 4) + { + return src; + } + + var temp = ""; + for (var i = 0; i < 4 - src.Length; i++) + { + temp += "0"; + } + + return temp + src; + } + } +} \ No newline at end of file diff --git a/Correlator/Util/SenderClass.cs b/Correlator/Util/SenderClass.cs index 77f96cd..699eada 100644 --- a/Correlator/Util/SenderClass.cs +++ b/Correlator/Util/SenderClass.cs @@ -55,8 +55,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -129,8 +128,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -216,8 +214,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -301,8 +298,7 @@ sysTag.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -376,8 +372,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 048118d..5548941 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -41,7 +41,7 @@ var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - var strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = deviceId.ConvertBytes2String(); var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); @@ -122,7 +122,7 @@ { var lengthBuffer = new byte[2]; SerialPort.Read(lengthBuffer, 0, 2); - var length = StringUtil.ConvertBytes2Int(lengthBuffer); + var length = lengthBuffer.ConvertBytes2Int(); if (length < 12) { @@ -343,7 +343,7 @@ Array.Reverse(len); int iLen = BitConverter.ToInt16(len, 0); - var strOid = StringUtil.ConvertBytes2String(oid); + var strOid = oid.ConvertBytes2String(); var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); diff --git a/Correlator/Util/SizeUtil.cs b/Correlator/Util/SizeUtil.cs deleted file mode 100644 index 2303a19..0000000 --- a/Correlator/Util/SizeUtil.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace Correlator.Util -{ - public static class SizeUtil - { - public static string FormatFileSize(long size) - { - string fileSize; - if (size == 0) - { - fileSize = "0B"; - } - else if (size < 1024) - { - fileSize = $"{size:#.0}" + "B"; - } - else if (size < 1048576) - { - fileSize = $"{(double)size / 1024:#.0}" + "K"; - } - else if (size < 1073741824) - { - fileSize = $"{(double)size / 1048576:#.0}" + "M"; - } - else - { - fileSize = $"{(double)size / 1073741824:#.0}" + "G"; - } - - return fileSize; - } - } -} \ No newline at end of file diff --git a/Correlator/Util/StringUtil.cs b/Correlator/Util/StringUtil.cs index 4be3963..bab8bbf 100644 --- a/Correlator/Util/StringUtil.cs +++ b/Correlator/Util/StringUtil.cs @@ -1,8 +1,6 @@ using System; -using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; using System.Text; using Correlator.Model; @@ -10,32 +8,6 @@ { public static class StringUtil { - public static int ConvertBytes2Int(IEnumerable bytes) - { - return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); - } - - public static string To16HexString(string src) - { - if (src.Length == 4) - { - return src; - } - - var temp = ""; - for (var i = 0; i < 4 - src.Length; i++) - { - temp += "0"; - } - - return temp + src; - } - - public static string ConvertBytes2String(IEnumerable bytes) - { - return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); - } - public static void SaveHexData(string devCode, byte[] receiveData, string hexFileName) { var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); @@ -60,13 +32,13 @@ var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; foreach (var d in it.LeftDeviceDataArray) { - locateData += AppendEndZero(d) + "\r\n"; + locateData += d.AppendEndZero() + "\r\n"; } locateData += "===============" + "\r\n"; foreach (var d in it.RightDeviceDataArray) { - locateData += AppendEndZero(d) + "\r\n"; + locateData += d.AppendEndZero() + "\r\n"; } var data = Encoding.Default.GetBytes(locateData); @@ -77,13 +49,6 @@ fileStream.Close(); } - //数据补零,保持长度一致 - public static string AppendEndZero(double d) - { - //数据固定长度16 - return ((decimal)d).ToString("G").PadRight(16, '0'); - } - public static byte Year => byte.Parse(DateTime.Now.ToString("yy")); public static byte Mon => byte.Parse(DateTime.Now.ToString("MM")); diff --git a/Correlator/ViewModel/AudioFileViewModel.cs b/Correlator/ViewModel/AudioFileViewModel.cs index d8b3c95..081a75e 100644 --- a/Correlator/ViewModel/AudioFileViewModel.cs +++ b/Correlator/ViewModel/AudioFileViewModel.cs @@ -125,7 +125,7 @@ FileName = file.Name.Substring(0, file.Name.IndexOf(".", StringComparison.Ordinal)), PersonLiable = "", FullPath = Constant.GetAudioDir() + "\\" + file.Name, - FileSize = SizeUtil.FormatFileSize(file.Length), + FileSize = file.Length.FormatFileSize(), CreationTime = file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss") }).ToList(); } diff --git a/Correlator/ViewModel/EditFilterViewModel.cs b/Correlator/ViewModel/EditFilterViewModel.cs index 134344c..c78e813 100644 --- a/Correlator/ViewModel/EditFilterViewModel.cs +++ b/Correlator/ViewModel/EditFilterViewModel.cs @@ -4,6 +4,7 @@ using System.Windows; using Correlator.Dialog; using Correlator.Model; +using Correlator.Service; using Correlator.Util; using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; @@ -16,6 +17,7 @@ { public RelayCommand DetermineParamCommand { get; set; } + private readonly ISoundSpeedDataService _dataService; private PipeMaterialModel _materialModel; private string _materialName; @@ -78,8 +80,9 @@ } } - public EditFilterViewModel() + public EditFilterViewModel(ISoundSpeedDataService dataService) { + _dataService = dataService; Messenger.Default.Register(this, MessengerToken.EditFilter, it => { MaterialName = it.ChineseMaterial; @@ -88,49 +91,48 @@ _materialModel = it; }); - DetermineParamCommand = new RelayCommand(it => + DetermineParamCommand = new RelayCommand(EditFilter); + } + + private void EditFilter(EditFilterDialog it) + { + if (string.IsNullOrEmpty(_lowFrequency) || string.IsNullOrEmpty(_highFrequency)) { - if (string.IsNullOrEmpty(_lowFrequency) || string.IsNullOrEmpty(_highFrequency)) - { - MessageBox.Show("请输入完整的干扰频段", - "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); - return; - } + MessageBox.Show("请输入完整的干扰频段", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } - if (!(Regex.IsMatch(_lowFrequency, "^([1-9][0-9]*)$") && - Regex.IsMatch(_highFrequency, "^([1-9][0-9]*)$"))) - { - MessageBox.Show("输入格式错误,请重新输入", - "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); - return; - } + if (!(Regex.IsMatch(_lowFrequency, "^([1-9][0-9]*)$") && + Regex.IsMatch(_highFrequency, "^([1-9][0-9]*)$"))) + { + MessageBox.Show("输入格式错误,请重新输入", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } - var low = Convert.ToInt32(_lowFrequency); - var high = Convert.ToInt32(_highFrequency); + var low = Convert.ToInt32(_lowFrequency); + var high = Convert.ToInt32(_highFrequency); - if (low < 100 || low > 3000 || high < 100 || high > 3000 || low >= high) - { - MessageBox.Show("频段范围100-3000Hz,请重新输入", - "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); - return; - } + if (low < 100 || low > 3000 || high < 100 || high > 3000 || low >= high) + { + MessageBox.Show("频段范围100-3000Hz,请重新输入", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } - //声速 - var soundVelocity = MaterialManager.GetSoundVelocity( - _materialModel.ChineseMaterial, Convert.ToInt32(_materialModel.Diameter) - ); - LogWithConsole.WriteLine("正在修改的管材是:" + _materialModel.Diameter + "m的" + _materialModel.ChineseMaterial + - "声速是 => " + soundVelocity, "EditFilterViewModel"); + //声速 + var soundVelocity = _dataService.GetSoundVelocity( + _materialModel.ChineseMaterial, Convert.ToInt32(_materialModel.Diameter) + ); + LogWithConsole.WriteLine("正在修改的管材是:" + _materialModel.Diameter + "m的" + _materialModel.ChineseMaterial + + "声速是 => " + soundVelocity, "EditFilterViewModel"); - _materialModel.SoundSpeed = soundVelocity; - _materialModel.LowFrequency = low; - _materialModel.HighFrequency = high; - _materialModel.IsReady = true; + _materialModel.SoundSpeed = soundVelocity; + _materialModel.LowFrequency = low; + _materialModel.HighFrequency = high; + _materialModel.IsReady = true; - Messenger.Default.Send(_materialModel, MessengerToken.StartCalculate); - // 参数确定好之后,关闭自身和上一级窗口 - it.Close(); - }); + Messenger.Default.Send(_materialModel, MessengerToken.StartCalculate); + // 参数确定好之后,关闭自身和上一级窗口 + it.Close(); } } } \ No newline at end of file diff --git a/Correlator/ViewModel/EditMaterialNameViewModel.cs b/Correlator/ViewModel/EditMaterialNameViewModel.cs index 4127a57..b9aa02c 100644 --- a/Correlator/ViewModel/EditMaterialNameViewModel.cs +++ b/Correlator/ViewModel/EditMaterialNameViewModel.cs @@ -13,6 +13,7 @@ public class EditMaterialNameViewModel : ViewModelBase { private readonly IMaterialNameDataService _dataService; + private readonly IPipeMaterialDataService _materialDataService; private int _materialId; private string _materialNewName; @@ -29,9 +30,11 @@ public RelayCommand DetermineParamCommand { get; set; } - public EditMaterialNameViewModel(IMaterialNameDataService dataService) + public EditMaterialNameViewModel(IMaterialNameDataService dataService, + IPipeMaterialDataService materialDataService) { _dataService = dataService; + _materialDataService = materialDataService; Messenger.Default.Register(this, MessengerToken.EditMaterialName, it => { _materialId = it; }); DetermineParamCommand = new RelayCommand(DetermineParam); @@ -46,8 +49,10 @@ return; } - if (MaterialManager.InitPipeMaterial().Any( - material => _materialNewName.Equals(material.ChineseMaterial) || _materialNewName.Equals(material.EnglishMaterial)) + var materialModels = _materialDataService.GetPipeMaterial(); + if (materialModels.Any( + material => _materialNewName.Equals(material.ChineseMaterial) || + _materialNewName.Equals(material.EnglishMaterial)) ) { MessageBox.Show("该名称已存在,请重新输入", diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj index 1846fee..0d9a844 100644 --- a/Correlator/Correlator.csproj +++ b/Correlator/Correlator.csproj @@ -249,12 +249,11 @@ + - - diff --git a/Correlator/Service/ISoundSpeedDataService.cs b/Correlator/Service/ISoundSpeedDataService.cs index 38408cf..8a2927e 100644 --- a/Correlator/Service/ISoundSpeedDataService.cs +++ b/Correlator/Service/ISoundSpeedDataService.cs @@ -19,5 +19,13 @@ void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed); void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed); + + /// + /// 根据管材和管径大小获取声速 + /// + /// + /// + /// + int GetSoundVelocity(string material, int pipeDiameter); } } \ No newline at end of file diff --git a/Correlator/ServiceImpl/SoundSpeedDataService.cs b/Correlator/ServiceImpl/SoundSpeedDataService.cs index 1d79b46..959dabe 100644 --- a/Correlator/ServiceImpl/SoundSpeedDataService.cs +++ b/Correlator/ServiceImpl/SoundSpeedDataService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; using System.Windows; using Correlator.Model; @@ -145,5 +146,26 @@ manager.Update(velocity); } } + + public int GetSoundVelocity(string material, int pipeDiameter) + { + using (var manager = new DataBaseManager()) + { + //多条件查询 + var materialVelocities = manager + .Table() + .Where(mv => + mv.MaterialName == material && + mv.LowDiameter <= pipeDiameter && + mv.HighDiameter >= pipeDiameter + ); + if (materialVelocities.Any()) + { + return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); + } + + return 0; + } + } } } \ No newline at end of file diff --git a/Correlator/Util/MaterialManager.cs b/Correlator/Util/MaterialManager.cs deleted file mode 100644 index 4ffd67a..0000000 --- a/Correlator/Util/MaterialManager.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using Correlator.Model; -using Newtonsoft.Json.Linq; - -namespace Correlator.Util -{ - public class MaterialManager - { - /// - /// 初始化管材数据 - /// - /// - public static ObservableCollection InitPipeMaterial() - { - var materialModels = new ObservableCollection(); - using (var manager = new DataBaseManager()) - { - var configModels = manager.Table().ToList(); - foreach (var model in configModels) - { - materialModels.Add(model); - } - - return materialModels; - } - } - - /// - /// 根据管材和管径大小获取声速 - /// - /// - /// - /// - public static int GetSoundVelocity(string material, int pipeDiameter) - { - using (var manager = new DataBaseManager()) - { - //多条件查询 - var materialVelocities = manager - .Table() - .Where(mv => - mv.MaterialName == material && - mv.LowDiameter <= pipeDiameter && - mv.HighDiameter >= pipeDiameter - ); - if (materialVelocities.Any()) - { - return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault(); - } - else - { - var fileStream = new FileStream( - @"..\..\Config\config.json", FileMode.Open, FileAccess.Read - ); - using (var streamReader = new StreamReader(fileStream)) - { - var config = streamReader.ReadToEnd(); - var jo = JObject.Parse(config); - var customMaterials = jo["CustomMaterial"]; - if (customMaterials == null) - { - return 0; - } - - foreach (var customMaterial in customMaterials) - { - if (material != customMaterial["name"]?.ToString()) continue; - var num = 0; - foreach (var v in customMaterial["range"]) - { - var diameterArr = v.ToString().Split('-'); - var lowDiameter = int.Parse(diameterArr[0]); - var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; - if (lowDiameter < pipeDiameter && highDiameter > pipeDiameter) - { - return int.Parse(customMaterial["speed"][num].ToString()); - } - - num++; - } - } - } - } - - return 0; - } - } - } -} \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs new file mode 100644 index 0000000..3b7b48c --- /dev/null +++ b/Correlator/Util/MethodExtensions.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Correlator.Util +{ + public static class MethodExtensions + { + public static string FormatFileSize(this long size) + { + string fileSize; + if (size == 0) + { + fileSize = "0B"; + } + else if (size < 1024) + { + fileSize = $"{size:#.0}" + "B"; + } + else if (size < 1048576) + { + fileSize = $"{(double)size / 1024:#.0}" + "K"; + } + else if (size < 1073741824) + { + fileSize = $"{(double)size / 1048576:#.0}" + "M"; + } + else + { + fileSize = $"{(double)size / 1073741824:#.0}" + "G"; + } + + return fileSize; + } + + public static int ConvertBytes2Int(this IEnumerable bytes) + { + return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); + } + + public static string ConvertBytes2String(this IEnumerable bytes) + { + return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); + } + + /// + /// 数据补零,保持长度一致 + /// + /// + /// + public static string AppendEndZero(this double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + + public static string To16HexString(this string src) + { + if (src.Length == 4) + { + return src; + } + + var temp = ""; + for (var i = 0; i < 4 - src.Length; i++) + { + temp += "0"; + } + + return temp + src; + } + } +} \ No newline at end of file diff --git a/Correlator/Util/SenderClass.cs b/Correlator/Util/SenderClass.cs index 77f96cd..699eada 100644 --- a/Correlator/Util/SenderClass.cs +++ b/Correlator/Util/SenderClass.cs @@ -55,8 +55,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -129,8 +128,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -216,8 +214,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -301,8 +298,7 @@ sysTag.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), @@ -376,8 +372,7 @@ oid.CopyTo(result, 16); //增加CRC校验 - var strCrc = - StringUtil.To16HexString($"{(int)CodeUtil.CRC16_AD(result):X}"); + var strCrc = $"{(int)CodeUtil.CRC16_AD(result):X}".To16HexString(); byte[] crcByte = { CodeUtil.String2Byte(strCrc.Substring(0, 2)), diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 048118d..5548941 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -41,7 +41,7 @@ var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - var strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = deviceId.ConvertBytes2String(); var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); @@ -122,7 +122,7 @@ { var lengthBuffer = new byte[2]; SerialPort.Read(lengthBuffer, 0, 2); - var length = StringUtil.ConvertBytes2Int(lengthBuffer); + var length = lengthBuffer.ConvertBytes2Int(); if (length < 12) { @@ -343,7 +343,7 @@ Array.Reverse(len); int iLen = BitConverter.ToInt16(len, 0); - var strOid = StringUtil.ConvertBytes2String(oid); + var strOid = oid.ConvertBytes2String(); var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); diff --git a/Correlator/Util/SizeUtil.cs b/Correlator/Util/SizeUtil.cs deleted file mode 100644 index 2303a19..0000000 --- a/Correlator/Util/SizeUtil.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace Correlator.Util -{ - public static class SizeUtil - { - public static string FormatFileSize(long size) - { - string fileSize; - if (size == 0) - { - fileSize = "0B"; - } - else if (size < 1024) - { - fileSize = $"{size:#.0}" + "B"; - } - else if (size < 1048576) - { - fileSize = $"{(double)size / 1024:#.0}" + "K"; - } - else if (size < 1073741824) - { - fileSize = $"{(double)size / 1048576:#.0}" + "M"; - } - else - { - fileSize = $"{(double)size / 1073741824:#.0}" + "G"; - } - - return fileSize; - } - } -} \ No newline at end of file diff --git a/Correlator/Util/StringUtil.cs b/Correlator/Util/StringUtil.cs index 4be3963..bab8bbf 100644 --- a/Correlator/Util/StringUtil.cs +++ b/Correlator/Util/StringUtil.cs @@ -1,8 +1,6 @@ using System; -using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; using System.Text; using Correlator.Model; @@ -10,32 +8,6 @@ { public static class StringUtil { - public static int ConvertBytes2Int(IEnumerable bytes) - { - return bytes.Aggregate(0, (current, b) => 16 * 16 * current + b); - } - - public static string To16HexString(string src) - { - if (src.Length == 4) - { - return src; - } - - var temp = ""; - for (var i = 0; i < 4 - src.Length; i++) - { - temp += "0"; - } - - return temp + src; - } - - public static string ConvertBytes2String(IEnumerable bytes) - { - return bytes.Aggregate("", (current, t) => current + t.ToString("X2")); - } - public static void SaveHexData(string devCode, byte[] receiveData, string hexFileName) { var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); @@ -60,13 +32,13 @@ var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; foreach (var d in it.LeftDeviceDataArray) { - locateData += AppendEndZero(d) + "\r\n"; + locateData += d.AppendEndZero() + "\r\n"; } locateData += "===============" + "\r\n"; foreach (var d in it.RightDeviceDataArray) { - locateData += AppendEndZero(d) + "\r\n"; + locateData += d.AppendEndZero() + "\r\n"; } var data = Encoding.Default.GetBytes(locateData); @@ -77,13 +49,6 @@ fileStream.Close(); } - //数据补零,保持长度一致 - public static string AppendEndZero(double d) - { - //数据固定长度16 - return ((decimal)d).ToString("G").PadRight(16, '0'); - } - public static byte Year => byte.Parse(DateTime.Now.ToString("yy")); public static byte Mon => byte.Parse(DateTime.Now.ToString("MM")); diff --git a/Correlator/ViewModel/AudioFileViewModel.cs b/Correlator/ViewModel/AudioFileViewModel.cs index d8b3c95..081a75e 100644 --- a/Correlator/ViewModel/AudioFileViewModel.cs +++ b/Correlator/ViewModel/AudioFileViewModel.cs @@ -125,7 +125,7 @@ FileName = file.Name.Substring(0, file.Name.IndexOf(".", StringComparison.Ordinal)), PersonLiable = "", FullPath = Constant.GetAudioDir() + "\\" + file.Name, - FileSize = SizeUtil.FormatFileSize(file.Length), + FileSize = file.Length.FormatFileSize(), CreationTime = file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss") }).ToList(); } diff --git a/Correlator/ViewModel/EditFilterViewModel.cs b/Correlator/ViewModel/EditFilterViewModel.cs index 134344c..c78e813 100644 --- a/Correlator/ViewModel/EditFilterViewModel.cs +++ b/Correlator/ViewModel/EditFilterViewModel.cs @@ -4,6 +4,7 @@ using System.Windows; using Correlator.Dialog; using Correlator.Model; +using Correlator.Service; using Correlator.Util; using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; @@ -16,6 +17,7 @@ { public RelayCommand DetermineParamCommand { get; set; } + private readonly ISoundSpeedDataService _dataService; private PipeMaterialModel _materialModel; private string _materialName; @@ -78,8 +80,9 @@ } } - public EditFilterViewModel() + public EditFilterViewModel(ISoundSpeedDataService dataService) { + _dataService = dataService; Messenger.Default.Register(this, MessengerToken.EditFilter, it => { MaterialName = it.ChineseMaterial; @@ -88,49 +91,48 @@ _materialModel = it; }); - DetermineParamCommand = new RelayCommand(it => + DetermineParamCommand = new RelayCommand(EditFilter); + } + + private void EditFilter(EditFilterDialog it) + { + if (string.IsNullOrEmpty(_lowFrequency) || string.IsNullOrEmpty(_highFrequency)) { - if (string.IsNullOrEmpty(_lowFrequency) || string.IsNullOrEmpty(_highFrequency)) - { - MessageBox.Show("请输入完整的干扰频段", - "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); - return; - } + MessageBox.Show("请输入完整的干扰频段", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } - if (!(Regex.IsMatch(_lowFrequency, "^([1-9][0-9]*)$") && - Regex.IsMatch(_highFrequency, "^([1-9][0-9]*)$"))) - { - MessageBox.Show("输入格式错误,请重新输入", - "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); - return; - } + if (!(Regex.IsMatch(_lowFrequency, "^([1-9][0-9]*)$") && + Regex.IsMatch(_highFrequency, "^([1-9][0-9]*)$"))) + { + MessageBox.Show("输入格式错误,请重新输入", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } - var low = Convert.ToInt32(_lowFrequency); - var high = Convert.ToInt32(_highFrequency); + var low = Convert.ToInt32(_lowFrequency); + var high = Convert.ToInt32(_highFrequency); - if (low < 100 || low > 3000 || high < 100 || high > 3000 || low >= high) - { - MessageBox.Show("频段范围100-3000Hz,请重新输入", - "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); - return; - } + if (low < 100 || low > 3000 || high < 100 || high > 3000 || low >= high) + { + MessageBox.Show("频段范围100-3000Hz,请重新输入", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } - //声速 - var soundVelocity = MaterialManager.GetSoundVelocity( - _materialModel.ChineseMaterial, Convert.ToInt32(_materialModel.Diameter) - ); - LogWithConsole.WriteLine("正在修改的管材是:" + _materialModel.Diameter + "m的" + _materialModel.ChineseMaterial + - "声速是 => " + soundVelocity, "EditFilterViewModel"); + //声速 + var soundVelocity = _dataService.GetSoundVelocity( + _materialModel.ChineseMaterial, Convert.ToInt32(_materialModel.Diameter) + ); + LogWithConsole.WriteLine("正在修改的管材是:" + _materialModel.Diameter + "m的" + _materialModel.ChineseMaterial + + "声速是 => " + soundVelocity, "EditFilterViewModel"); - _materialModel.SoundSpeed = soundVelocity; - _materialModel.LowFrequency = low; - _materialModel.HighFrequency = high; - _materialModel.IsReady = true; + _materialModel.SoundSpeed = soundVelocity; + _materialModel.LowFrequency = low; + _materialModel.HighFrequency = high; + _materialModel.IsReady = true; - Messenger.Default.Send(_materialModel, MessengerToken.StartCalculate); - // 参数确定好之后,关闭自身和上一级窗口 - it.Close(); - }); + Messenger.Default.Send(_materialModel, MessengerToken.StartCalculate); + // 参数确定好之后,关闭自身和上一级窗口 + it.Close(); } } } \ No newline at end of file diff --git a/Correlator/ViewModel/EditMaterialNameViewModel.cs b/Correlator/ViewModel/EditMaterialNameViewModel.cs index 4127a57..b9aa02c 100644 --- a/Correlator/ViewModel/EditMaterialNameViewModel.cs +++ b/Correlator/ViewModel/EditMaterialNameViewModel.cs @@ -13,6 +13,7 @@ public class EditMaterialNameViewModel : ViewModelBase { private readonly IMaterialNameDataService _dataService; + private readonly IPipeMaterialDataService _materialDataService; private int _materialId; private string _materialNewName; @@ -29,9 +30,11 @@ public RelayCommand DetermineParamCommand { get; set; } - public EditMaterialNameViewModel(IMaterialNameDataService dataService) + public EditMaterialNameViewModel(IMaterialNameDataService dataService, + IPipeMaterialDataService materialDataService) { _dataService = dataService; + _materialDataService = materialDataService; Messenger.Default.Register(this, MessengerToken.EditMaterialName, it => { _materialId = it; }); DetermineParamCommand = new RelayCommand(DetermineParam); @@ -46,8 +49,10 @@ return; } - if (MaterialManager.InitPipeMaterial().Any( - material => _materialNewName.Equals(material.ChineseMaterial) || _materialNewName.Equals(material.EnglishMaterial)) + var materialModels = _materialDataService.GetPipeMaterial(); + if (materialModels.Any( + material => _materialNewName.Equals(material.ChineseMaterial) || + _materialNewName.Equals(material.EnglishMaterial)) ) { MessageBox.Show("该名称已存在,请重新输入", diff --git a/Correlator/ViewModel/PictureFileViewModel.cs b/Correlator/ViewModel/PictureFileViewModel.cs index 77df248..d5fdff7 100644 --- a/Correlator/ViewModel/PictureFileViewModel.cs +++ b/Correlator/ViewModel/PictureFileViewModel.cs @@ -129,7 +129,7 @@ FileName = file.Name.Substring(0, file.Name.IndexOf(".", StringComparison.Ordinal)), PersonLiable = "", FullPath = Constant.GetPictureDir() + "\\" + file.Name, - FileSize = SizeUtil.FormatFileSize(file.Length), + FileSize = file.Length.FormatFileSize(), CreationTime = file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss") }).ToList(); }