using Tiger.Business.WMS.Transaction;
using Rhea.Common;
using Tiger.Model.SeaStone.Shelf;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using Microsoft.AspNetCore.Http;
using Tiger.IBusiness;
namespace Tiger.Business.WMS
{
///
/// WMS上下文
///
public class WMSContext : IWMSContext
{
///
/// 亮灯颜色列表
///
public static List LightColors = InitLightColors();
///
/// 料车上报request接收列表("{RackId}-{LedId}-{CellStatus}")
///
public static List SlotChangedList = new List();
#region 亮灯颜色管理
private static List InitLightColors()
{
var colors = new List();
colors.Add(new LightColor("Blue"));
colors.Add(new LightColor("Yellow"));
colors.Add(new LightColor("Orange"));
colors.Add(new LightColor("Purple"));
return colors;
}
private static readonly object UseLightColorLock = new object();
public static string GetDefaultLightColor()
{
lock (UseLightColorLock)
{
var cur = LightColors.Where(q => q.isUse == false).FirstOrDefault();
cur.isUse = true;
return cur.Color;
}
}
public static void UseLightColor(string color)
{
lock (UseLightColorLock)
{
var cur = LightColors.Where(q => q.Color == color).SingleOrDefault();
if (cur != null)
{
cur.isUse = true;
}
}
}
public static void UnuseLightColor(string color)
{
lock (UseLightColorLock)
{
var cur = LightColors.Where(q => q.Color == color).SingleOrDefault();
if (cur != null)
{
cur.isUse = false;
}
}
}
#endregion
#region 事务管理
///
/// WMS事务字典
///
public static Dictionary TransactionDic => BizContext.TransactionDic.Where(q => q.Value is WMSTransactionBase).ToDictionary(k => k.Key, v => v.Value as WMSTransactionBase);
public Dictionary GetTransDic() => BizContext.TransactionDic.Where(q => q.Value is IWMSTransaction).ToDictionary(k => k.Key, v => v.Value as IWMSTransaction);
///
/// 创建一个新事务,并加到事务列表
///
/// 请求的HttpContext
/// 新的事务
/// 相同客户端是否只允许开启一个同类型事务
public static void NewTransaction(HttpContext context, WMSTransactionBase trans, bool IsUniqueInSameClient = true)
{
BizContext.NewTransaction(context, trans, IsUniqueInSameClient);
}
public void NewTransaction(HttpContext context, IWMSTransaction trans, bool IsUniqueInSameClient = true)
{
BizContext.NewTransaction(context, trans, IsUniqueInSameClient);
}
#endregion
public static string GetApiIP()
{
using (var webClient = new WebClient())
{
try
{
var temp = webClient.DownloadString("http://localhost:9527/WeatherWebForm.aspx");//一般指定网址
var ip = Regex.Match(temp, @"\[(?\d+\.\d+\.\d+\.\d+)]").Groups["ip"].Value;
return !string.IsNullOrEmpty(ip) ? ip : null;
}
catch (Exception ex)
{
return ex.Message;
}
}
}
}
}