|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading;
|
|
|
|
|
|
using CentralControl.App_Code;
|
|
|
|
|
|
using System.Configuration;
|
|
|
|
|
|
using CentralControl.BaseData;
|
|
|
|
|
|
using CentralControl.DBDAO;
|
|
|
|
|
|
using CommonFunc;
|
|
|
|
|
|
using XGL.Thrift;
|
|
|
|
|
|
using System.Data;
|
|
|
|
|
|
using Thrift.Protocol;
|
|
|
|
|
|
using Thrift.Server;
|
|
|
|
|
|
using Thrift.Transport;
|
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
|
|
|
|
|
|
|
namespace CentralControl.App_Code
|
|
|
|
|
|
{
|
|
|
|
|
|
public class MainCentralControl
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Thread OffMaterialScanThread;
|
|
|
|
|
|
object orderPlanLock = new object();
|
|
|
|
|
|
string ipaddress { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 系统启动初始化
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public void SystemInit()
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
StaticData.OrderPlanList = DBService.getOrderPlanList(""); //取时序订单
|
|
|
|
|
|
StaticData.MateriaList = DBService.GetMaterialInfoList("");//取物料信息
|
|
|
|
|
|
//StaticData.MaterialBomList = DBService.GetMaterialBomList(" is_delete=0 ", StaticData.MateriaList);//获取bom信息
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
StaticData.NodeSettingList = DBService.GetNodeSettingList("", StaticData.LineCatchAreaList);
|
|
|
|
|
|
|
|
|
|
|
|
//StaticData.LineCatchAreaList = DBService.GetLineCatchAreaList("");
|
|
|
|
|
|
//StaticData.PlcSettingList = DBService.GetPlcSettingList("");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//StaticData.CarMaterialList = DBService.GetCarMaterialList("");
|
|
|
|
|
|
//StaticData.CarProductList = DBService.GetCarProductList("");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//StaticData.NodeRelation = DBService.getNodeRelation("");
|
|
|
|
|
|
////绑定 上件队列信息
|
|
|
|
|
|
//StaticData.CarRealList = DBService.getCarInfoList("", StaticData.LineCatchAreaList, StaticData.CarMaterialList, StaticData.CarProductList);
|
|
|
|
|
|
////StaticData.UpLineCarCanList = DBService.getUpLineScanCarLists("");
|
|
|
|
|
|
//StaticData.OffMaterialList = DBService.getOffLineMaterialLists("");
|
|
|
|
|
|
|
|
|
|
|
|
////记录上一次扫描的条码号,暂时逻辑调整,用不到了
|
|
|
|
|
|
//// StaticData.Last_scanMaterial = DBService.GetSystemConfigItem("last_scanmaterial");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//this.ipaddress = ConfigurationManager.AppSettings["plcIp"];
|
|
|
|
|
|
//StaticData.plcHelper = new PlcHelper();
|
|
|
|
|
|
//StaticData.plcConnectionState = StaticData.plcHelper.Connection(ipaddress);
|
|
|
|
|
|
//if (!StaticData.plcConnectionState)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// Console.WriteLine("PLC连接失败,重新连接");
|
|
|
|
|
|
// return;
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//int useBackMaterial = Convert.ToInt32(ConfigurationManager.AppSettings["useBackMaterial"]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//OffMaterialScanThread = new Thread(ScanMaterialFromScan);
|
|
|
|
|
|
//OffMaterialScanThread.Start();
|
|
|
|
|
|
|
|
|
|
|
|
////定时任务线程
|
|
|
|
|
|
//Thread taskThread = new Thread(TaskCheckStart);
|
|
|
|
|
|
//taskThread.Start();
|
|
|
|
|
|
|
|
|
|
|
|
////// setPlanToLocator();
|
|
|
|
|
|
|
|
|
|
|
|
///////***测试数据***/
|
|
|
|
|
|
Logic101_104UpLine logic101 = new Logic101_104UpLine(StaticData.plcHelper, "101");
|
|
|
|
|
|
logic101.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
//Logic101_104UpLine logic102 = new Logic101_104UpLine(StaticData.plcHelper, "102");
|
|
|
|
|
|
//logic102.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
//Logic101_104UpLine logic103 = new Logic101_104UpLine(StaticData.plcHelper, "103");
|
|
|
|
|
|
//logic102.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
//Logic101_104UpLine logic104 = new Logic101_104UpLine(StaticData.plcHelper, "104");
|
|
|
|
|
|
//logic102.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
//Logic1003InputLocator logic1003 = new Logic1003InputLocator(StaticData.plcHelper, "1003");
|
|
|
|
|
|
//logic1003.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Logic1005EmptyLocator logic1005 = new Logic1005EmptyLocator(StaticData.plcHelper, "1005");
|
|
|
|
|
|
//logic1005.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Logic1006EmptyLocator logic1006 = new Logic1006EmptyLocator(StaticData.plcHelper, "1006");
|
|
|
|
|
|
//logic1006.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
//Logic2006_2005UpLocator logic2006 = new Logic2006_2005UpLocator(StaticData.plcHelper, "2006");
|
|
|
|
|
|
//logic2006.StartPoint();
|
|
|
|
|
|
////入库口分发入库点
|
|
|
|
|
|
//Logic2004_2009_2010_2011UpLocator logic2004 = new Logic2004_2009_2010_2011UpLocator(StaticData.plcHelper, "2004");
|
|
|
|
|
|
//logic2004.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Logic2008MiddleLocator logic2008 = new Logic2008MiddleLocator(StaticData.plcHelper, "2008");
|
|
|
|
|
|
//logic2008.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Logic2004_2009_2010_2011UpLocator logic2009 = new Logic2004_2009_2010_2011UpLocator(StaticData.plcHelper, "2009");
|
|
|
|
|
|
//logic2009.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
//Logic2004_2009_2010_2011UpLocator logic2010 = new Logic2004_2009_2010_2011UpLocator(StaticData.plcHelper, "2010");
|
|
|
|
|
|
//logic2010.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
//Logic2004_2009_2010_2011UpLocator logic2011 = new Logic2004_2009_2010_2011UpLocator(StaticData.plcHelper, "2011");
|
|
|
|
|
|
//logic2011.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Logic4001_4002OutLocator logic4001 = new Logic4001_4002OutLocator(StaticData.plcHelper, "4001");
|
|
|
|
|
|
//logic4001.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
//Logic4001_4002OutLocator logic4002 = new Logic4001_4002OutLocator(StaticData.plcHelper, "4002");
|
|
|
|
|
|
//logic4002.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Logic3001OffLine logic3001 = new Logic3001OffLine(StaticData.plcHelper, "3001", "5001", 7915);
|
|
|
|
|
|
//logic3001.StartPoint();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
Logger logger = new Logger();
|
|
|
|
|
|
logger.Error("初始化控制台系统异常:" + ex.Message + ex.StackTrace + ex.ToString());
|
|
|
|
|
|
Console.WriteLine("初始化控制台系统异常:" + ex.Message + ex.StackTrace + ex.ToString());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 定时任务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void TaskCheckStart()
|
|
|
|
|
|
{
|
|
|
|
|
|
Logger logger = new Logger();
|
|
|
|
|
|
while (true)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
//if (DateTime.Now.Minute == 0)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// //初始化订单信息
|
|
|
|
|
|
// getPlanOrderList();
|
|
|
|
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Logic1004OffLine logic1004 = new Logic1004OffLine(StaticData.plcHelper, "1", 7913);
|
|
|
|
|
|
//// logic1004.StartPoint();
|
|
|
|
|
|
// logic1004.OffMaterialFromCar("fsdfsdf");
|
|
|
|
|
|
|
|
|
|
|
|
//每天8点,1分1秒开始清理垃圾数据
|
|
|
|
|
|
if (DateTime.Now.Hour == 8 && DateTime.Now.Minute == 1 && DateTime.Now.Second == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
//定时清理数据库垃圾数据
|
|
|
|
|
|
DBService.NightClearOldData();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//每20秒校验一次
|
|
|
|
|
|
if (DateTime.Now.Second % 20 == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
NodeSetting node = StaticData.NodeSettingList[0];
|
|
|
|
|
|
object obj1 = StaticData.plcHelper.Read(node.PlcSetting1);
|
|
|
|
|
|
object obj2 = StaticData.plcHelper.Read(node.PlcSetting2);
|
|
|
|
|
|
object obj3 = StaticData.plcHelper.Read(node.PlcSetting3);
|
|
|
|
|
|
object obj4 = StaticData.plcHelper.Read(node.PlcSetting4);
|
|
|
|
|
|
object obj5 = StaticData.plcHelper.Read(node.PlcSetting5);
|
|
|
|
|
|
if (obj1 == null && obj2 == null && obj3 == null && obj4 == null && obj5 == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
StaticData.plcConnectionState = StaticData.plcHelper.Connection(this.ipaddress);
|
|
|
|
|
|
logger.Log("定时检测plc读取状态,短线重连");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
logger.Log("定时任务异常:" + ex.Message + ex.StackTrace);
|
|
|
|
|
|
}
|
|
|
|
|
|
///每分钟执行一次
|
|
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//private void StartThrift()
|
|
|
|
|
|
//{
|
|
|
|
|
|
// try
|
|
|
|
|
|
// {
|
|
|
|
|
|
// ThriftServiceImp business = new ThriftServiceImp();
|
|
|
|
|
|
// business.SendSetCarInfoEvent += SetCarinfo;
|
|
|
|
|
|
|
|
|
|
|
|
// XGL.Thrift.ThriftCommon thriftCommon = new XGL.Thrift.ThriftCommon();
|
|
|
|
|
|
// thriftCommon.Start(business, 7916);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// catch (Exception ex)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// MethodInfo method = (MethodInfo)MethodBase.GetCurrentMethod();
|
|
|
|
|
|
// Common.Log.Error(method.DeclaringType.FullName + "-" + method.Name + "\r\n" + ex.Message + "\r\n" + ex.StackTrace);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
private string SetLocatorMaterialno(int locatorid, string materialo)
|
|
|
|
|
|
{
|
|
|
|
|
|
lock (StaticData.FindLocatorLock)
|
|
|
|
|
|
{
|
|
|
|
|
|
var locator = StaticData.LineCatchAreaList.FirstOrDefault(t => t.Id == locatorid);
|
|
|
|
|
|
if (locator == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return "未匹配到库位";
|
|
|
|
|
|
}
|
|
|
|
|
|
var locatorcars = StaticData.CarRealList.Where(t => t.LocatorId == locatorid || t.LocatorNodeId == locatorid);
|
|
|
|
|
|
if (locatorcars != null && locatorcars.Count() > 0 && locatorcars.FirstOrDefault().MaterialNo != materialo)
|
|
|
|
|
|
{
|
|
|
|
|
|
return "库区内有不同型号物料";
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
locator.MaterialNo = materialo;
|
|
|
|
|
|
locator.MaterialNm = StaticData.MateriaList.Where(t => t.MaterialNo == materialo).FirstOrDefault().MaterialNm;
|
|
|
|
|
|
DBService.SetLocatorMaterial(locatorid, materialo, locator.MaterialNm);
|
|
|
|
|
|
return "";
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private string SetCarinfo(string carno, string materialno, string materialdesc, string locatorid, string outlocatorstate, string opdt)
|
|
|
|
|
|
{
|
|
|
|
|
|
CarRealInfo car = StaticData.CarRealList.FirstOrDefault(t => t.CarNo == carno);
|
|
|
|
|
|
if (car.IsOutLocator != 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
int loid = Convert.ToInt32(locatorid);
|
|
|
|
|
|
var locator = StaticData.LineCatchAreaList.FirstOrDefault(t => t.Id == loid);
|
|
|
|
|
|
car.MaterialBarNo = materialdesc;
|
|
|
|
|
|
car.MaterialNo = materialno;
|
|
|
|
|
|
car.LocatorId = locator == null ? 0 : locator.Id;
|
|
|
|
|
|
car.LocatorArea = locator;
|
|
|
|
|
|
int state = Convert.ToInt32(outlocatorstate);
|
|
|
|
|
|
if (state == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
car.HadNumber = 0;
|
|
|
|
|
|
car.OffMaterialId = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
car.IsProOutLocator = state;
|
|
|
|
|
|
|
|
|
|
|
|
DBService.ModifyRealCarinfoRecord(car);
|
|
|
|
|
|
DBService.AddSystemLog("管理员手动修改小车信息", car);
|
|
|
|
|
|
return "小车状态修改操作完成";
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return "小车正在出库,无法进行修改操作";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return "";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 更新静态集合中的数据
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="list"></param>
|
|
|
|
|
|
private void changeOrderPlanData(List<Orderplan> list)
|
|
|
|
|
|
{
|
|
|
|
|
|
lock (orderPlanLock)
|
|
|
|
|
|
{
|
|
|
|
|
|
//便利更新内存中的时序计划状态以及信息
|
|
|
|
|
|
foreach (Orderplan nplan in list)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (StaticData.OrderPlanList.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (Orderplan oplan in StaticData.OrderPlanList)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (nplan.id == oplan.id)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
oplan.orderId = nplan.orderId;
|
|
|
|
|
|
oplan.orderNo = nplan.orderNo;
|
|
|
|
|
|
oplan.timeOrderNo = nplan.timeOrderNo;
|
|
|
|
|
|
oplan.productCode = nplan.productCode;
|
|
|
|
|
|
oplan.productDesc = nplan.productDesc;
|
|
|
|
|
|
oplan.factoryNo = nplan.factoryNo;
|
|
|
|
|
|
oplan.matCode = nplan.matCode;
|
|
|
|
|
|
oplan.matDesc = nplan.matDesc;
|
|
|
|
|
|
oplan.amount = nplan.amount;
|
|
|
|
|
|
oplan.line = nplan.line;
|
|
|
|
|
|
oplan.orderStartDate = nplan.orderStartDate;
|
|
|
|
|
|
oplan.orderEndDate = nplan.orderEndDate;
|
|
|
|
|
|
oplan.planType = nplan.planType;
|
|
|
|
|
|
oplan.PlanOrder = nplan.PlanOrder;
|
|
|
|
|
|
oplan.planState = nplan.planState;
|
|
|
|
|
|
oplan.planStartTime = nplan.planStartTime;
|
|
|
|
|
|
oplan.upAmount = nplan.upAmount;
|
|
|
|
|
|
oplan.downAmount = nplan.downAmount;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
StaticData.OrderPlanList.Add(nplan);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
StaticData.OrderPlanList.Add(nplan);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
///// <summary>
|
|
|
|
|
|
///// 定时更新生产计划列表
|
|
|
|
|
|
///// </summary>
|
|
|
|
|
|
//private void getPlanOrderList()
|
|
|
|
|
|
//{
|
|
|
|
|
|
// while (true)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// //周六更新计划
|
|
|
|
|
|
// if (DateTime.Now.Hour == 0 && DateTime.Now.DayOfWeek == DayOfWeek.Saturday)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// // 增加时序计划的 开始结束时间条件
|
|
|
|
|
|
// // List<Orderplan> list = DBService.getOrderPlanList("");
|
|
|
|
|
|
// //changeOrderPlanData(list);
|
|
|
|
|
|
// //设置库位默认物料类型
|
|
|
|
|
|
// // setPlanToLocator();
|
|
|
|
|
|
// Thread.Sleep(600000);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据webservice 控制 出库扫描队列
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void ScanMaterialFromScan()
|
|
|
|
|
|
{
|
|
|
|
|
|
Logger logger = new Logger();
|
|
|
|
|
|
|
|
|
|
|
|
//从 mes获取扫描队列
|
|
|
|
|
|
while (true)
|
|
|
|
|
|
{
|
|
|
|
|
|
logger.Log("获取mes扫描信息");
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lock (StaticData.offMaterialCarLock)
|
|
|
|
|
|
{
|
|
|
|
|
|
StaticData.OffMaterialList = DBService.getOffLineMaterialLists("");
|
|
|
|
|
|
//foreach(OffLineMaterialList off in StaticData.OffMaterialAreaList)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
logger.Error(" 定时获取扫描信息接口异常:" + ex.Message + ex.StackTrace);
|
|
|
|
|
|
}
|
|
|
|
|
|
Thread.Sleep(2000);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///// <summary>
|
|
|
|
|
|
///// 根据webservice 控制 出库扫描队列
|
|
|
|
|
|
///// </summary>
|
|
|
|
|
|
//private void ScanMaterialFromMES()
|
|
|
|
|
|
//{
|
|
|
|
|
|
// Logger logger = new Logger();
|
|
|
|
|
|
|
|
|
|
|
|
// //从 mes获取扫描队列
|
|
|
|
|
|
// while (true)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// logger.Log("获取mes扫描信息");
|
|
|
|
|
|
// try
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
|
|
|
|
// //string bdt = DateTime.Now.AddMinutes(-10).ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
// string edt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
// //if (StaticData.OffMaterialAreaList.Count > 0)
|
|
|
|
|
|
// //{
|
|
|
|
|
|
// string bdt = DBService.GetLastTime().ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
// //var enddata = StaticData.OffMaterialAreaList.LastOrDefault();
|
|
|
|
|
|
// // if (enddate != null)
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // bdt = enddate.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// // }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ////请求webservice ,向队列中插入扫描数据
|
|
|
|
|
|
// List<MesData> list = new List<MesData>();
|
|
|
|
|
|
// string zd_bh = "BD04";
|
|
|
|
|
|
|
|
|
|
|
|
// /***测试数据**/
|
|
|
|
|
|
// // DataTable dtmes = DBService.GetOffLineMaterialByMESView(zd_bh, bdt, edt);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// DataTable dtmes = null;// MESDBService.GetOffLineMaterialByMESView(zd_bh, bdt, edt);
|
|
|
|
|
|
// if (dtmes != null)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// StringBuilder sb = new StringBuilder();
|
|
|
|
|
|
// foreach (DataRow datarow in dtmes.Rows)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// lock (StaticData.offMaterialCarLock)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// MesData offline = new MesData();
|
|
|
|
|
|
// offline.ProdCode = datarow["Prod_Code"].ToString();
|
|
|
|
|
|
// offline.materialNo = datarow["Prod_Code"].ToString();
|
|
|
|
|
|
// offline.Order = datarow["order_id"].ToString();
|
|
|
|
|
|
// offline.ProdDesc = datarow["xh_id"].ToString();
|
|
|
|
|
|
// offline.BarCode = datarow["sern"].ToString();
|
|
|
|
|
|
// offline.LineNo = datarow["line_code"].ToString();
|
|
|
|
|
|
// list.Add(offline);
|
|
|
|
|
|
|
|
|
|
|
|
// OffLineMaterialList offmaterial = new OffLineMaterialList();
|
|
|
|
|
|
// offmaterial.Number = 1;
|
|
|
|
|
|
// offmaterial.CreateTime = DateTime.Now;
|
|
|
|
|
|
// offmaterial.MaterialNo = offline.materialNo;
|
|
|
|
|
|
// offmaterial.MaterialDes = offline.ProdDesc;
|
|
|
|
|
|
// offmaterial.ProductBarNo = offline.BarCode;
|
|
|
|
|
|
// offmaterial.OrderCode = offline.Order;
|
|
|
|
|
|
// offmaterial.LineNo = offline.LineNo;
|
|
|
|
|
|
// offmaterial.IsOver = 0;
|
|
|
|
|
|
// int id = DBService.AddOffLineMaterialHistoryList(offmaterial);
|
|
|
|
|
|
|
|
|
|
|
|
// sb.Append(" \n ProdCode:" + offline.ProdCode + " materialNo:" + offline.materialNo + " Order:" + offline.Order + " ProdDesc:" + offline.ProdDesc + " BarCode:" + offline.BarCode);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// logger.Log("获取mes扫描信息数量:" + sb.ToString());
|
|
|
|
|
|
// sb = null;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else
|
|
|
|
|
|
// {
|
|
|
|
|
|
// logger.Log("获取mes扫描信息数量 数量为空:");
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// foreach (var data in list)
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
|
|
|
|
// //记录mes获取记录数据
|
|
|
|
|
|
// //代码实现
|
|
|
|
|
|
|
|
|
|
|
|
// lock (StaticData.offMaterialCarLock)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// OffLineMaterialList offmaterial = StaticData.OffMaterialAreaList.Where(t => t.MaterialNo == data.materialNo && t.Number < 0).OrderBy(t => t.CreateTime).FirstOrDefault();
|
|
|
|
|
|
// if (offmaterial != null)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// offmaterial.Number += 1;
|
|
|
|
|
|
// ///如果当前物料配对数量补齐,删除队列数据
|
|
|
|
|
|
// if (offmaterial.Number == 0)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// StaticData.OffMaterialAreaList.Remove(offmaterial);
|
|
|
|
|
|
// DBService.DeleteOffLineMaterial(offmaterial.Id);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else
|
|
|
|
|
|
// {
|
|
|
|
|
|
// offmaterial = new OffLineMaterialList();
|
|
|
|
|
|
// offmaterial.Number = 1;
|
|
|
|
|
|
// offmaterial.CreateTime = DateTime.Now;
|
|
|
|
|
|
// offmaterial.MaterialNo = data.materialNo;
|
|
|
|
|
|
// offmaterial.MaterialDes = data.ProdDesc;
|
|
|
|
|
|
// offmaterial.ProductBarNo = data.BarCode;
|
|
|
|
|
|
// offmaterial.OrderCode = data.Order;
|
|
|
|
|
|
// offmaterial.LineNo = data.LineNo;
|
|
|
|
|
|
// offmaterial.IsOver = 0;
|
|
|
|
|
|
// int id = DBService.AddOffLineMaterialList(offmaterial);
|
|
|
|
|
|
// offmaterial.Id = id;
|
|
|
|
|
|
// //添加到出库队列
|
|
|
|
|
|
// StaticData.OffMaterialAreaList.Add(offmaterial);
|
|
|
|
|
|
// //记录数据库
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// catch (Exception ex)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// logger.Error(" 定时调用mes接口异常:" + ex.Message + ex.StackTrace);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// Thread.Sleep(60000);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 设置库位默认物料类型
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
//private void setPlanToLocator()
|
|
|
|
|
|
//{
|
|
|
|
|
|
// Logger logger = new Logger();
|
|
|
|
|
|
// try
|
|
|
|
|
|
// {
|
|
|
|
|
|
// //根据计划选出产量最多的订单物料 ,按照库位设置的单品顺序排列
|
|
|
|
|
|
// var orderlist = StaticData.OrderPlanList.OrderByDescending(t => t.amount).ToList();
|
|
|
|
|
|
// /***测试数据***///只入1库
|
|
|
|
|
|
// var signarealist = StaticData.LineCatchAreaList.Where(t => t.AreaType == 4 && t.LineNo == "1").ToList();
|
|
|
|
|
|
// // var signarealist = StaticData.LineCatchAreaList.Where(t => t.AreaStorageType == 1&& t.AreaType == 4).ToList();
|
|
|
|
|
|
// DBService.CleartLineAreaMaterial("");
|
|
|
|
|
|
|
|
|
|
|
|
// int number = orderlist.Count > signarealist.Count ? signarealist.Count : orderlist.Count;
|
|
|
|
|
|
// for (int i = 0; i < number; i++)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// var catcharea = StaticData.LineCatchAreaList.Where(t => t.Id == signarealist[i].Id).FirstOrDefault();
|
|
|
|
|
|
// var order = StaticData.OrderPlanList.Where(t => t.id == orderlist[i].id).FirstOrDefault();
|
|
|
|
|
|
|
|
|
|
|
|
// if (catcharea != null && order != null)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// catcharea.MaterialNo = order.productCode;
|
|
|
|
|
|
// DBService.SetLineAreaMaterial(catcharea.Id, catcharea.MaterialNo,catcharea.MaterialNm);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// catch (Exception ex)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// logger.Error("订单计划获取失败" + ex.Message + ex.StackTrace);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|