using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; using JwKdsV.Entity.Product; using NLog; using POSV.Common.Http; using POSV.Common.Transport; namespace JwKdsV.Core.Utils { public class MessageCenterUtils { private static Logger logger = NLog.LogManager.GetCurrentClassLogger(); private static object _lock = new object(); private static MessageCenterUtils _instance = null; /// /// 消息中心Http服务访问地址 /// private readonly string _context_path = "/api/v1"; private string _baseUrl = string.Empty; private string _message = string.Empty; private HttpManager _httpManager = null; public static MessageCenterUtils Instance { get { if (_instance == null) { lock (_lock) { _instance = new MessageCenterUtils(); _instance.InitMessageCenter(); } } return _instance; } } private void InitMessageCenter() { try { this._httpManager = new HttpManager(); //获取消息中心配置 var messageCenter = Global.Instance.EnableServiceCenter; if (messageCenter.Item1) { //Web服务地址 string url = messageCenter.Item3; //Web服务端口为基础端口+1 int port = messageCenter.Item4 + 1; this._baseUrl = string.Format("http://{0}:{1}{2}", url, port, this._context_path); this._message = messageCenter.Item2; } else { this._baseUrl = string.Empty; this._message = messageCenter.Item2; } } catch (Exception ex) { logger.Error(ex, "初始化消息中心异常"); } } /// /// 检测消息中心是否正常。1)没有配置消息中心;2)启用了消息中心是否连接; /// /// public Tuple IsAvailable() { bool enabled = true; bool connected = false; try { Stopwatch watch = Stopwatch.StartNew(); if (enabled) { logger.Info("开始检测服务中心是否通畅耗时"); //获取配置的参数 string host = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_BUSINESS_SERVICECENTER_IP, string.Empty); int port = Global.Instance.GlobalConfigIntValue(ConfigConstant.CONFIG_BUSINESS_SERVICECENTER_PORT, 0); //IP和端口配置错误 if (string.IsNullOrEmpty(host) || port == 0) { connected = false; } else { //检测IP和端口是否通畅 var url = string.Format("{0}{1}", this._baseUrl, "/amok"); HttpResult hr = this._httpManager.Get(url, null, 2000); connected = (hr.Code == 200); } } else { connected = false; } logger.Info("检测服务中心是否通畅耗时<{0}>", watch.ElapsedMilliseconds); } catch (Exception ex) { logger.Error(ex, "连接消息中心失败"); enabled = false; connected = false; } return new Tuple(enabled, connected); } /// /// 加载全局沽清数据 /// /// /// public Tuple> GetGlobalAvailableSaleClear() { try { var url = string.Format("{0}{1}", this._baseUrl, "/sale/clear"); HttpResult hr = this._httpManager.PostJson(url, "{}", null); if (hr.Code == 200) { logger.Info(hr.Text); var obj = JsonUtils.Deserialize>>(hr.Text); logger.Info(obj.Data); if (obj.Status == 1) { return new Tuple>(true, obj.Message, obj.Data); } else { return new Tuple>(false, obj.Message, new List()); } } else { return new Tuple>(false, "获取沽清数据错误", new List()); } } catch (Exception ex) { logger.Error(ex, "获取沽清数据异常"); return new Tuple>(false, "获取沽清数据异常", new List()); } } public Tuple> GetSaleClearList(string dateTimer = null) { try { if (!string.IsNullOrEmpty(this._baseUrl)) { var url = string.Format("{0}{1}", this._baseUrl, "/sale/clear/list"); //构建POST的JSON参数,date为空标识今日沽清 var body = new Dictionary(); body["date"] = string.Empty; //指定日期的沽清 if (!string.IsNullOrEmpty(dateTimer)) { body["date"] = dateTimer; } HttpResult hr = this._httpManager.PostJson(url, JsonUtils.Serialize(body), null); if (hr.Code == 200) { var obj = JsonUtils.Deserialize>>(hr.Text); if (obj.Status == 1) { var data = obj.Data as List; return new Tuple>(true, obj.Message, data); } else { return new Tuple>(false, obj.Message, new List()); } } else { return new Tuple>(false, "获取沽清列表数据错误", new List()); } } else { return new Tuple>(false, this._message, new List()); } } catch (Exception ex) { logger.Error(ex, "获取沽清列表数据异常"); return new Tuple>(false, "获取沽清列表数据异常", new List()); } } public Tuple ChangeSaleClear(SaleClear saleClear) { lock (Global.Instance.CacheLock) { try { if (!string.IsNullOrEmpty(this._baseUrl)) { var url = string.Format("{0}{1}", this._baseUrl, "/sale/clear/change"); //将沽清对象序列化,传递到http var body = JsonUtils.Serialize(saleClear); HttpResult hr = this._httpManager.PostJson(url, body, null); if (hr.Code == 200) { logger.Info("变更沽清信息,服务中心的应答"); logger.Info(hr.Text); var obj = JsonUtils.Deserialize>(hr.Text); SaleClearUtils.Instance.SaveOrUpdateNoChanged(obj.Data); return new Tuple(true, "获取沽清列表数据错误"); } else { return new Tuple(false, "获取沽清列表数据错误"); } } else { return new Tuple(false, this._message); } } catch (Exception ex) { logger.Error(ex, "获取沽清列表数据异常"); return new Tuple(false, "获取沽清列表数据异常"); } } } } }