124 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			124 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using IceCoffee.Common.Extensions;
							 | 
						|||
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						|||
| 
								 | 
							
								using System.Text;
							 | 
						|||
| 
								 | 
							
								using System.Text.RegularExpressions;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace IceCoffee.HJ212.Models
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// CP指令
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    public class CpCommand
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        public ResponseCode ExeRtn { get; set; }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 数据时间信息
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public DateTime DataTime { get; set; }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 污染物信息
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public List<PollutantInfo> PollutantInfo { get; set; }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 解析
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="cp"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static CpCommand Parse(string cp)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            try
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                var cpCommand = new CpCommand();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                cpCommand.PollutantInfo = new List<PollutantInfo>();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                cpCommand.DataTime = DateTime.ParseExact(cp.GetMidStr("DataTime=", ";"), "yyyyMMddHHmmss", null);
							 | 
						|||
| 
								 | 
							
								  
							 | 
						|||
| 
								 | 
							
								                cp = cp.Substring(24);
							 | 
						|||
| 
								 | 
							
								#if NET462
							 | 
						|||
| 
								 | 
							
								                foreach (string project in cp.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
							 | 
						|||
| 
								 | 
							
								#else
							 | 
						|||
| 
								 | 
							
								                foreach (string project in cp.Split(';', StringSplitOptions.RemoveEmptyEntries))
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    var pollutantInfo = new PollutantInfo();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    string[] classes = project.Split(',');
							 | 
						|||
| 
								 | 
							
								                    foreach (string @class in classes)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        string[] keyValue = @class.Split('=');
							 | 
						|||
| 
								 | 
							
								                        string key = keyValue[0];
							 | 
						|||
| 
								 | 
							
								                        string value = keyValue[1];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        string[] factorCodeType = key.Split('-');
							 | 
						|||
| 
								 | 
							
								                        string factorCode = factorCodeType[0];
							 | 
						|||
| 
								 | 
							
								                        string type = factorCodeType[1];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        pollutantInfo.FactorCode = (FactorCode)Enum.Parse(typeof(FactorCode), factorCode);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        switch (type)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            case nameof(Models.PollutantInfo.Rtd):
							 | 
						|||
| 
								 | 
							
								                                if (string.IsNullOrEmpty(value) == false && decimal.TryParse(value, out decimal rtd))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    pollutantInfo.Rtd = rtd;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								                                break;
							 | 
						|||
| 
								 | 
							
								                            case nameof(Models.PollutantInfo.Avg):
							 | 
						|||
| 
								 | 
							
								                                if (string.IsNullOrEmpty(value) == false && decimal.TryParse(value, out decimal avg))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    pollutantInfo.Avg = avg;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								                                break;
							 | 
						|||
| 
								 | 
							
								                            case nameof(Models.PollutantInfo.Max):
							 | 
						|||
| 
								 | 
							
								                                if (string.IsNullOrEmpty(value) == false && decimal.TryParse(value, out decimal max))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    pollutantInfo.Max = max;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								                                break;
							 | 
						|||
| 
								 | 
							
								                            case nameof(Models.PollutantInfo.Min):
							 | 
						|||
| 
								 | 
							
								                                if (string.IsNullOrEmpty(value) == false && decimal.TryParse(value, out decimal min))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    pollutantInfo.Min = min;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								                                break;
							 | 
						|||
| 
								 | 
							
								                            case nameof(Models.PollutantInfo.Cou):
							 | 
						|||
| 
								 | 
							
								                                if (string.IsNullOrEmpty(value) == false && decimal.TryParse(value, out decimal cou))
							 | 
						|||
| 
								 | 
							
								                                {
							 | 
						|||
| 
								 | 
							
								                                    pollutantInfo.Cou = cou;
							 | 
						|||
| 
								 | 
							
								                                }
							 | 
						|||
| 
								 | 
							
								                                break;
							 | 
						|||
| 
								 | 
							
								                            case nameof(Models.PollutantInfo.Flag):
							 | 
						|||
| 
								 | 
							
								                                pollutantInfo.Flag = (InstrumentationDataFlag)Enum.Parse(typeof(InstrumentationDataFlag), value);
							 | 
						|||
| 
								 | 
							
								                                break;
							 | 
						|||
| 
								 | 
							
								                            default:
							 | 
						|||
| 
								 | 
							
								                                throw new Exception("无效的CP指令字段名");
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    cpCommand.PollutantInfo.Add(pollutantInfo);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                return cpCommand;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            catch (Exception ex)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                throw new Exception("Error in CpCommand.Parse", ex);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 序列化
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public string Serialize()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return "ExeRtn=" + (int)ExeRtn;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |