You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

275 lines
9.2 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
/// <summary>
/// 消息中心Http服务访问地址
/// </summary>
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, "初始化消息中心异常");
}
}
/// <summary>
/// 检测消息中心是否正常。1)没有配置消息中心;2)启用了消息中心是否连接;
/// </summary>
/// <returns></returns>
public Tuple<bool, bool> 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<bool, bool>(enabled, connected);
}
/// <summary>
/// 加载全局沽清数据
/// </summary>
/// <param name="dateTimer"></param>
/// <returns></returns>
public Tuple<bool, string, List<SaleClear>> 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<TransportResponse<List<SaleClear>>>(hr.Text);
logger.Info(obj.Data);
if (obj.Status == 1)
{
return new Tuple<bool, string, List<SaleClear>>(true, obj.Message, obj.Data);
}
else
{
return new Tuple<bool, string, List<SaleClear>>(false, obj.Message, new List<SaleClear>());
}
}
else
{
return new Tuple<bool, string, List<SaleClear>>(false, "获取沽清数据错误", new List<SaleClear>());
}
}
catch (Exception ex)
{
logger.Error(ex, "获取沽清数据异常");
return new Tuple<bool, string, List<SaleClear>>(false, "获取沽清数据异常", new List<SaleClear>());
}
}
public Tuple<bool, string, List<SaleClear>> 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<string, string>();
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<TransportResponse<List<SaleClear>>>(hr.Text);
if (obj.Status == 1)
{
var data = obj.Data as List<SaleClear>;
return new Tuple<bool, string, List<SaleClear>>(true, obj.Message, data);
}
else
{
return new Tuple<bool, string, List<SaleClear>>(false, obj.Message, new List<SaleClear>());
}
}
else
{
return new Tuple<bool, string, List<SaleClear>>(false, "获取沽清列表数据错误", new List<SaleClear>());
}
}
else
{
return new Tuple<bool, string, List<SaleClear>>(false, this._message, new List<SaleClear>());
}
}
catch (Exception ex)
{
logger.Error(ex, "获取沽清列表数据异常");
return new Tuple<bool, string, List<SaleClear>>(false, "获取沽清列表数据异常", new List<SaleClear>());
}
}
public Tuple<bool, string> 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<TransportResponse<SaleClear>>(hr.Text);
SaleClearUtils.Instance.SaveOrUpdateNoChanged(obj.Data);
return new Tuple<bool, string>(true, "获取沽清列表数据错误");
}
else
{
return new Tuple<bool, string>(false, "获取沽清列表数据错误");
}
}
else
{
return new Tuple<bool, string>(false, this._message);
}
}
catch (Exception ex)
{
logger.Error(ex, "获取沽清列表数据异常");
return new Tuple<bool, string>(false, "获取沽清列表数据异常");
}
}
}
}
}