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 CommonFunc; using XGL.Thrift; namespace CentralControl.App_Code { public class SystemMain { LogicLineSiteUp line1 = null; LogicLineSiteUp line2 = null; object orderPlanLock = new object(); /// /// 系统启动初始化 /// public void SystemInit() { try { //StaticData.LineinfoList = DBService.GetLineInfoList(""); StaticData.LineCatchAreaList = DBService.GetLineCatchAreaList(""); StaticData.PlcSettingList = DBService.GetPlcSettingList(""); StaticData.LinePreInfoList = DBService.GetLinePreInfoList(""); StaticData.NodeSettingList = DBService.GetNodeSettingList("", StaticData.LineCatchAreaList); StaticData.MaterialBomList = DBService.GetMaterialBomList(""); StaticData.NodeRelation = DBService.getNodeRelation(""); //绑定 上件队列信息 StaticData.CarRealList = DBService.getCarInfoList(""); StaticData.UpLineCarCanList = DBService.getUpLineScanCarLists(""); StaticData.OffMaterialAreaList = DBService.getOffLineMaterialLists(""); //定时任务线程 Thread taskThread = new Thread(TaskStart); taskThread.Start(); //StaticData.plcHelper = new PlcHelper(); //StaticData.plcHelper.Connection(127.0.0.1); //根据计划选出产量最多的订单物料 ,按照库位设置的单品顺序排列 var orderlist = StaticData.OrderPlanList.OrderByDescending(t => t.amount).ToList(); var signarealist = StaticData.LineCatchAreaList.Where(t => t.AreaStorageType == 1).ToList(); int number = orderlist.Count > signarealist.Count ? signarealist.Count : signarealist.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.matCode; } } } catch (Exception ex) { } } /// /// 定时任务 /// private void TaskStart() { while(true) { if (DateTime.Now.Minute == 0) { //初始化订单信息 getPlanOrderList(); } Thread.Sleep(60000); } } private void StartThrift() { try { ThriftServiceImp business = new ThriftServiceImp(); //business.EmergencyAreaOpEvent += EmergencyAreaOp; //business.FullAreaOpEvent += FullAreaOp; //business.OffAreaOpEvent += OffAreaOp; //business.OffAreaOpByNodeIdEvent += OffAreaOpByNodeId; // ThriftCommon thriftCommon = new ThriftCommon(); // thriftCommon.Start(business); } 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 void changeOrderPlanData(List 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.downAount = nplan.downAount; } else { StaticData.OrderPlanList.Add(nplan); } } } else { StaticData.OrderPlanList.Add(nplan); } } } } /// /// 定时更新生产计划列表 /// private void getPlanOrderList() { while (true) { // 增加时序计划的 开始结束时间条件 List list = DBService.getOrderPlanList(""); changeOrderPlanData(list); ////or // StaticData.OrderPlanList = DBService.getOrderPlanList(""); Thread.Sleep(60000); } } } }