using NEIntelligentControl2.Models; using NEIntelligentControl2.Models.Messages; using NEIntelligentControl2.Models.Windturbine; using NEIntelligentControl2.Service.User; using NEIntelligentControl2.Service.WebSocket; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NEIntelligentControl2.Service.Windturbine { /// /// 风机控制服务 /// public class ControlManager { private WEBHelper _WEBHelper; private UrlManager _UrlManager; private string _Url; private string[] _ErrorInfo; public ControlManager(WEBHelper web, UrlManager urlm) { _WEBHelper = web; _UrlManager = urlm; _Url = _UrlManager.ServicePath; InitErrorCode(); } private void InitErrorCode() { _ErrorInfo = new string[] { "控制成功", "控制命令发送失败", "无效的控制地址", "被控设备异常", "无效的控制功能", "网络未连接", "命令已发送,但是读取结果超时", "发送指令失败", "控制的命令出错", "未知错误", "未知错误", "未知错误", "风机操作过频繁", "风机被挂牌", "风机操作与风机状态不符" }; } internal string SendLock(Dictionary cis) { try { var cc = _WEBHelper.HttpPostBody>($"{_Url}/api/control/lock", cis); StringBuilder sb = new StringBuilder(); foreach (var v in cc) { if (v.Value.ErrorCode != "0") { int.TryParse(v.Value.ErrorCode, out int i); if (i < _ErrorInfo.Length) { sb.Append(v.Value.WindturbineId).Append("挂牌失败:").Append(_ErrorInfo[i]).Append("\n"); } } } return sb.ToString(); } catch { } return null; } /// /// 发送指令,不检查用户 /// /// public string SendCmdNotCheck(Dictionary cis) { try { var cc = _WEBHelper.HttpPostBody>($"{_Url}/api/control/", cis); StringBuilder sb = new StringBuilder(); foreach (var v in cc) { if (v.Value.ErrorCode != "0") { bool b = int.TryParse(v.Value.ErrorCode, out int i); if (!b) i = 9; if (i < _ErrorInfo.Length) { sb.Append(v.Value.WindturbineId).Append("控制失败:").Append(_ErrorInfo[i]).Append("\n"); } } } return sb.ToString(); } catch { } return null; } public string SendCmd(Dictionary cis) { try { var cc = _WEBHelper.HttpPostBody>($"{_Url}/api/control/", cis); StringBuilder sb = new StringBuilder(); foreach (var v in cc) { if (v.Value.ErrorCode != "0") { bool b = int.TryParse(v.Value.ErrorCode, out int i); i = !b ? 9 : i; if (i < _ErrorInfo.Length) { sb.Append(v.Value.WindturbineId).Append("控制失败:").Append(_ErrorInfo[i]).Append("\n"); } } } return sb.ToString(); } catch { } return null; } public ControlRecordPage GetControlRecord(string stationId, string startTime, string endTime) { try { var v = _WEBHelper.HttpGetJSON($"{_Url}/control-record/search?stationId={stationId}&startTime={startTime}&endTime={endTime}&pageSize=5000&pageIndex=1"); return v; } catch { } return null; } /// /// 获取控制日志 /// /// public string GetControlLog() { try { var vs = _WEBHelper.HttpGetJSON>($"{_Url}/control-record/log"); if (vs == null || vs.Count <= 0) return ""; var sb = new StringBuilder(); foreach (var v in vs) { sb.Append(v.ToString()).Append("\n"); } return sb.ToString(); } catch { } return ""; } } class ControlLog { private static string[] errorCodes; /// /// 时间戳 /// public long Timestamp { get; set; } /// /// 风机ID /// public string WindturbineId { get; set; } /// /// 错误码 /// public int ErrorCode { get; set; } /// /// 控制类型 /// public OperateStyle Type { get; set; } public override string ToString() { StringBuilder sb = new StringBuilder(); var vs = WindturbineId.Split('_'); var name = $"{vs[0].Substring(0, vs[0].Length - 2)}{vs[1]}"; sb.Append(Timestamp.GetTimeString()).Append("\t").Append(name).Append("\t").Append(Type.GetStringValue()); if (ErrorCode == 0) { sb.Append("\t控制成功"); } else { sb.Append("[失败]\t[原因]").Append(GetErrorInfo(ErrorCode)); } return sb.ToString(); } private string GetErrorInfo(int errorCode) { if (errorCodes == null) { errorCodes = new string[] { "未知错误", "控制命令发送失败", "无效的控制地址", "被控设备异常", "无效的控制功能", "网络未连接", "命令已发送,但是读取结果超时", "发送指令失败", "控制的命令出错", "未知错误", "未知错误", "未知错误", "风机操作过频繁", "风机被挂牌", "风机操作与风机状态不符" }; } if (errorCode < 0 || errorCode >= errorCodes.Length) { return errorCodes[0]; } return errorCodes[errorCode]; } } }