using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CentralControl.BaseData;
using System.Threading;
using CommonFunc;
using System.Security.Policy;
namespace CentralControl.App_Code
{
public static class StaticData
{
public static bool plcConnectionState = false;
public static bool plcConnectionState2 = false;
public static string Last_scanMaterial { get; set; }
///
/// 运行状态 0,正常模式 ,1 无人模式,2 清库模式
///
public static int RuningModel { get; set; }
///
/// 数据库数据 基础数据 列表
///
public static PlcHelper plcHelper = null;
public static PlcHelper plcHelper2 = null;
///
/// 1号上件工位是否使用
///
public static bool IsUsedLine1 = true;
public static object OutCarLock = new object();
public static bool IsOutCarGo = true;
///
/// 上件物料小车锁
///
public static object CarLock = new object();
///
/// 上件物料小车锁
///
public static object OutLocatorCarLock = new object();
///
/// 查找库位锁
///
public static object FindLocatorLock = new object();
///
/// 上件物料小车锁
///
public static object UpMaterialCarLock = new object();
///
/// 上件物料小车锁
///
public static object offMaterialCarLock = new object();
public static List MaterialBomList = new List();
public static List LineCatchAreaList = new List();
public static Dictionary PlcSettingList = new Dictionary();
public static List LinePreInfoList = new List();
public static List NodeSettingList = new List();
public static List MateriaList = new List();
public static List OrderPlanList = new List();
public static List CarRealList = new List();
public static List NodeRelation = new List();
//public static List CarList = new List();
//public static List CarMaterialList = new List();
//public static List AreaList = new List();//库区集合
//public static List SiteNodeList = new List();//站台集合
//public static
///
/// 上件区物料队列
///
public static List UpMaterialAreaList = new List();
///
/// 上件区物料队列
///
public static List UpLineCarCanList = new List();
///
/// 下件区物料队列
///
public static List OffMaterialList = new List();
///
/// 上件线 工件列表
///
// public static Dictionary> InLineMaterialsDic = new Dictionary>();
///
/// 上件线 工件列表
///
public static Dictionary> InLineScanCarDic = new Dictionary>();
///
/// 上件线 工件列表
///
public static Dictionary> OffMaterialsDic = new Dictionary>();
///
/// 小车锁列表
///
public static Dictionary CarLockObjDic = new Dictionary();
public static Dictionary OffLineLockObjDic = new Dictionary();
public static PlcSetting getPlcInfoByCode(string plcno)
{
if (StaticData.PlcSettingList.ContainsKey(plcno))
{
return StaticData.PlcSettingList[plcno];
}
return null;
}
///
/// 获取 成套 箱体库 ,库位
///
///
public static LineCatchArea getCarInputLocator(string lineno, CarRealInfo car)
{
LineCatchArea area = null;
//查找设置的库位物料
var areas = StaticData.LineCatchAreaList.Where(t => t.AreaType == 4);
//var areas = StaticData.LineCatchAreaList.Where(t => ((this.LineNo == "1") || (this.LineNo == "2" && t.LineNo == "2")) && t.AreaType == 4);
LineCatchArea temparea = null;
string[] materilnos = car.LoadingMaterial.Select(t => t.materialNo).ToArray();
//string[] productss = car.LoadingProduct.Select(t => t.productNo).ToArray();
//删除相同物料组成 bom的 产品bomid,为了排除,当前物料组成被包含的情况(A:1,2,3 ,B:1,2,3,4)
//检查已经库位是否设定了某种型号的物料, 并且是空库的
//int locatornum = StaticData.CarRealList.Count(t => productss.Contains(t.MaterialNo) && (t.LocatorId > 0 || t.LocatorNodeId > 0) && t.IsOutLocator == 0);
//if (locatornum <= 0)
//{
// foreach (var areael in areas)
// {
// var locatorss = StaticData.CarRealList.Where(t => (t.LocatorId == areael.Id || t.LocatorNodeId == areael.Id) && t.IsOutLocator == 0).ToList();
// //该库位为空,判断其他库区是否放过该料
// if (locatorss.Count() == 0)
// {
// area = areael;
// break;
// }
// }
//}
//else
//{
foreach (var areael in areas)
{
//便利所有库位查找未满库区,的物料是否相同
var locatorss = StaticData.CarRealList.Where(t => (t.LocatorId == areael.Id || t.LocatorNodeId == areael.Id) && t.IsOutLocator == 0).ToList();
//该库位非空,库区未满
if (locatorss.Count() > 0 && locatorss.Count() < areael.MaxNumber)
{
//获取库位内的第一个小车
var carlast = locatorss.OrderBy(t => t.OptDt).LastOrDefault();
//门体数量是否相同
if (carlast.LoadingMaterial.Count == car.LoadingMaterial.Count)
{
int matercount = carlast.LoadingMaterial.Count(t => materilnos.Contains(t.materialNo));
//查找到包含当前物料,并且数量相同的物料
if (matercount == materilnos.Length)
{
area = areael;
return area;
}
}
}
//如果库区数量为空 ,并且设定物料等于该物料型号,再没有匹配到的情况下使用该库
if (temparea == null && locatorss.Count() == 0)
{
temparea = areael;
}
}
//}
if (area == null && temparea != null)
{
area = temparea;
}
return area;
}
public static Dictionary> conveterDic = new Dictionary>();
public static string getConveterData(string plcno, string label)
{
if (conveterDic.ContainsKey(plcno))
{
return conveterDic[plcno].Where(t => t.label == label).FirstOrDefault().value;
}
return null;
}
public static string getReverseConveterData(string plcno, string value)
{
if (conveterDic.ContainsKey(plcno))
{
return conveterDic[plcno].Where(t => t.value == value).FirstOrDefault().label;
}
return null;
}
public static void AddConveterData(string plcno, List data)
{
if (conveterDic.ContainsKey(plcno))
{
conveterDic[plcno] = data;
}
else
{
conveterDic.Add(plcno, data);
}
}
}
public class ConveterData
{
public string value { get; set; }
public string label { get; set; }
}
public class MesData
{
public string materialNo { get; set; }
public string ProdCode { get; set; }
public string BarCode { get; set; }
public string ProdDesc { get; set; }
public string Order { get; set; }
public string LineNo { get; set; }
public DateTime receDt { get; set; }
}
}