using MaxCommunication.DataBase.Document;
using PmsSecondaryPackaging.Electronic.Business;
using PmsSecondaryPackaging.Electronic.Model;
using PmsSecondaryPackaging.Entrance.Start;
using PmsSecondaryPackaging.Interface.Model.TaskBook;
using PmsSecondaryPackaging.WareHouse.Model;
using ProjectManagementSystem.Config;
using ProjectManagementSystem.TaskBookEvent;
using ProjectManagementSystem.WebApi.Service;
using ProjectManagementSystem.Common.Log;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
using ProjectManagementSystem.OrderLogic;
using ProjectManagementSystem.Common.Config;
using ProjectManagementSystem.Common.Core;
using System.Linq;
using DbCommon.Enties.DbModels;
using DbCommon.BusinessCore.BaseCore;
using ProjectManagementSystem.TaskEvent;
using ProjectManagementSystem.Common.Device;
using System.Configuration;
using System.Diagnostics;
using ProjectManagementSystem.WebApi;
using Pms.DataLibrary.Models;
using Pms.Models;
using ProjectManagementSystem.Common.WebApi;
using ProjectManagementSystem.NHibernateDBHelper;
using PmsSecondaryPackaging.Interface.Model.Carrier;
using System.ServiceModel.Web;
using Pms.WebHandle;
namespace ProjectManagementSystem.Enterance
{
public class SystemEnterance : EntranceProgram
{
public WebApiServerHost webApiServerHost = new WebApiServerHost(true);
private LocationPropertyManager m_locationManager = new LocationPropertyManager();
public SystemEnterance()
{
OpService();
}
public override void InitSetting()
{
//WMSDBModelHelper.initialize(WMSAccessSetting.ConnectionString);
MiddleDBModelHelper.initialize(MiddleDBAccessSetting.ConnectionString);
CConfiManager.Init();
}
///
/// 开放WCF接口供第三方调用
///
private void OpService()
{
//string url= UriSetting.g_ServiceUri; //AppSetting.GetString("InterFaceUrl")
//SKTrumpRestFullService sk = new SKTrumpRestFullService();
//WebServiceHost webServiceHost = new WebServiceHost(sk,new Uri(url));
//webServiceHost.Open();
try
{
WebServiceHost _serviceHost = new WebServiceHost(typeof(SKTrumpRestFullService), new Uri(UriSetting.g_ServiceUri));
_serviceHost.Open();
//CLog.Instance.WriteLog("WebService启动", "启动成功,Uri:" + UriSetting.g_ServiceUri);
TextDocument.WriteFile(@"PMS/Log", "WebService启动", "启动成功,Uri:" + UriSetting.g_ServiceUri);
}
catch (Exception ex)
{
//CLog.Instance.WriteLog("WebService启动", "启动异常:" + ex.ToString());
TextDocument.WriteFile(@"PMS/Log", "WebService启动", "启动异常:" + ex.ToString());
}
}
public override void InitTaskBook()
{
TaskBookRegister taskBookRegister = new TaskBookRegister();
}
public override void TaskFactory()
{
CTaskEvent taskEvent = new CTaskEvent();
COrderLogic orderLogic = COrderLogic.Instance;
//string url = @"http://localhost:63300/api/Pms/SyncScaleData";
//var result = ScaleApi.Post(url, null, new { scaleNo = "111" }, out string data);
Task.Factory.StartNew(ScanCarriers);
Task.Factory.StartNew(TaskThread);
}
private bool InitDataSource()
{
try
{
MaterialBindingManager materialBindingManager = new MaterialBindingManager();
materialBindingManager.Init();
return true;
}
catch (Exception ex)
{
CLog.Instance.GetLog("System").WriteException("Exception", ex);
}
return false;
}
private bool InitWareHouse()
{
try
{
if (!PmsApi.Get(EPmsApi.GetWarehouseListInfo, new { warehouseId = string.Empty }, null, out List whouseInfoList))
{
return false;
}
var dataList = m_locationManager.GetList();
foreach (var item in dataList)
{
int findIndex = whouseInfoList.FindIndex(d => d.WareHouseID == item.LocationCode);
if (findIndex < 0)
{
//添加
var requestInfo = new RequestWarehouseInfo()
{
WareHouseID = item.LocationCode,
StationID = item.Mark,
};
PmsApi.Post(EPmsApi.AddWarehouse, null, requestInfo, out string dataString);
}
else
{
//更新
var requestInfo = whouseInfoList[findIndex];
if (requestInfo.StationID != item.Mark)
{
requestInfo.StationID = item.Mark;
PmsApi.Post(EPmsApi.UpdateWarehouse, null, requestInfo, out string dataString);
}
}
}
return true;
}
catch (Exception ex)
{
CLog.Instance.GetLog("System").WriteException("Exception", ex);
}
return false;
}
private void KillCurrentProcess(string logContext)
{
System.Windows.Forms.MessageBox.Show(logContext);
System.Windows.Forms.Application.Exit();
Process[] process = Process.GetProcesses();
Process currentProcess = Process.GetCurrentProcess();
for (int idx = 0; idx < process.Count(); idx++)
{
if (process[idx].ProcessName == currentProcess.ProcessName)
{
process[idx].Kill();
}
}
return;
}
private void ScanCarriers()
{
while (true)
{
try
{
//if (interfaceService.GetAllCarrier(out List carriers, out string message))
//{
// foreach (CarrierInfoModel carrierInfoModel in carriers)
// {
// int SKCarrier = GlobalData.GetSKCarrier(carrierInfoModel.AgvID);
// }
//}
if (PmsApi.Get(EPmsApi.GetAllCarrier, null, null, out ResultCarrierInfo resultCarrierInfo))
{
foreach (ResultAgvData resultAgvData in resultCarrierInfo.ResultAgvDataList)
{
int SKCarrier = GlobalData.GetSKCarrier(resultAgvData.AgvID);
AGVState aGVState = new AGVState();
aGVState.agvid = SKCarrier;
aGVState.power = resultAgvData.BatteryLevel;
aGVState.state = resultAgvData.Status;
aGVState.x = (int)resultAgvData.MovementX;
aGVState.y = (int)resultAgvData.MovementY;
string[] values = resultAgvData.OrderID!=null? resultAgvData.OrderID.Split('_') :new string[] { resultAgvData.OrderID };
string tempOrderId = values != null & values.Length > 1 ? values[1] : resultAgvData.OrderID;
aGVState.taskid = tempOrderId;
aGVState.updatetime = DateTime.Now.ToString("G");
SKMESWebServiceHelper.UpdateAGVState(aGVState);
}
}
Thread.Sleep(2000);
}
catch (Exception ex)
{
// CLog.Instance.GetLog("UpdateAGVState").WriteException("Exception", ex);
TextDocument.WriteFile(@"PMS/Log", "AGV状态上报异常", "异常:" + ex.ToString());
}
}
}
public void TaskThread()
{
while (true)
{
Thread.Sleep(500);
try
{
#region 从中间表添加任务
try
{
using (var session = MiddleDBModelHelper.Session)
{
var result = session.QueryOver().Where(p => p.OrderState == -1).List();//.OrderBy(p => p.CallTime) p.OrderState == (int)OrderState.进车间风淋中 || p.OrderState == (int)OrderState.出车间风淋中 ||
foreach (var item in result)
{
Order curOrder = item;// result.First();
if (curOrder.OrderState == -1)
{
int carrier = GlobalData.GetCasunCarrier(curOrder.Remain);
//if (interfaceService.GetTaskDataList(out List taskDetailInfoList, out string Message))
//{
// if (taskDetailInfoList.Any(p => p.Carrier == carrier))
// {
// continue;
// }
//}
switch (carrier)
{
case 1:
case 3:
{
//var r1 = session.QueryOver().Where(p => (p.OrderType == OrderType.五楼货物运送到电梯) && p.OrderState != -1 && p.OrderState != 255).List();
//if (r1.Count > 0)
// continue;
Pms.DataLibrary.Models.WarehouseInfo upwarehouseInfo = null;
Pms.DataLibrary.Models.WarehouseInfo downwarehouseInfo = null;
if (PmsApi.Get(EPmsApi.GetWarehouseListInfo, new { WarehouseID = curOrder.UpPos }, null, out List upwarehouseinfos))
{
upwarehouseInfo = upwarehouseinfos != null && upwarehouseinfos.Count > 0 ? upwarehouseinfos.First() : upwarehouseInfo;
}
if (PmsApi.Get(EPmsApi.GetWarehouseListInfo, new { WarehouseID = curOrder.DownPos }, null, out List downwarehouseinfos))
{
downwarehouseInfo = downwarehouseinfos != null && downwarehouseinfos.Count > 0 ? downwarehouseinfos.First() : downwarehouseInfo;
}
//upwarehouseInfo.GroupId
TaskAddInfoModel taskAddInfoModel = new TaskAddInfoModel();
taskAddInfoModel.TaskID = curOrder.OrderID; //System.DateTime.Now.ToString("MMddhhmmssffff")
taskAddInfoModel.TemplateName = "StandardTemplate1";
taskAddInfoModel.AgvId = carrier;
taskAddInfoModel.AgvType = carrier == 1 ? "0" : "2";
Dictionary dictionary = new Dictionary();
dictionary.Add("U1", curOrder.UpPos);
dictionary.Add("U2", curOrder.DownPos);
taskAddInfoModel.ParametersDic = dictionary;
//taskAddInfoModel.ParentTaskId = TaskID;
if (!interfaceService.TaskAdd(taskAddInfoModel, out string MessageAdd1))//添加任务
{
TextDocument.WriteFile(@"PMS/Log", "二维码F8叉车任务", MessageAdd1);
}
else
{
curOrder.OrderState = (int)WCSOrderState.None;
session.Update(curOrder);
TextDocument.WriteFile(@"PMS/Log", "二维码F8叉车任务", "任务添加成功!");
}
}
break;
default:
{
//var r1 = session.QueryOver().Where(p => (p.OrderType == OrderType.五楼货物运送到电梯) && p.OrderState != -1 && p.OrderState != 255).List();
//if (r1.Count > 0)
// continue;
Pms.DataLibrary.Models.WarehouseInfo upwarehouseInfo = null;
Pms.DataLibrary.Models.WarehouseInfo downwarehouseInfo = null;
if (PmsApi.Get(EPmsApi.GetWarehouseListInfo, new { WarehouseID = curOrder.UpPos }, null, out List upwarehouseinfos))
{
upwarehouseInfo = upwarehouseinfos != null && upwarehouseinfos.Count > 0 ? upwarehouseinfos.First() : upwarehouseInfo;
}
if (PmsApi.Get(EPmsApi.GetWarehouseListInfo, new { WarehouseID = curOrder.DownPos }, null, out List downwarehouseinfos))
{
downwarehouseInfo = downwarehouseinfos != null && downwarehouseinfos.Count > 0 ? downwarehouseinfos.First() : downwarehouseInfo;
}
//upwarehouseInfo.GroupId
TaskAddInfoModel taskAddInfoModel = new TaskAddInfoModel();
taskAddInfoModel.TaskID = curOrder.OrderID; //System.DateTime.Now.ToString("MMddhhmmssffff")
taskAddInfoModel.AgvId = carrier;
taskAddInfoModel.AgvType = "1";
Dictionary dictionary = new Dictionary();
bool isnormal = true;
if (upwarehouseInfo!=null&& downwarehouseInfo!=null)
{
if(upwarehouseInfo.WareHouseName=="H0"&& downwarehouseInfo.WareHouseName == "H0")
{
taskAddInfoModel.TemplateName = "StandardTemplate3";
dictionary.Add("M1", curOrder.UpPos);
dictionary.Add("M2", curOrder.DownPos);
isnormal = false;
}
else if(upwarehouseInfo.WareHouseName == "H0")
{
taskAddInfoModel.TemplateName = "StandardTemplate4";
dictionary.Add("M1", curOrder.UpPos);
dictionary.Add("M2", curOrder.DownPos);
dictionary.Add("M_R3", curOrder.DownPos);
dictionary.Add("M_R4", curOrder.DownPos);
isnormal = false;
isnormal = false;
}
else if(downwarehouseInfo.WareHouseName == "H0")
{
taskAddInfoModel.TemplateName = "StandardTemplate5";
dictionary.Add("M_R1", curOrder.UpPos);
dictionary.Add("M1", curOrder.UpPos);
dictionary.Add("M_R2", curOrder.UpPos);//两台车
//dictionary.Add("M2", curOrder.DownPos);
dictionary.Add("M2", curOrder.DownPos);
isnormal = false;
isnormal = false;
}
}
if (isnormal)
{
taskAddInfoModel.TemplateName = "StandardTemplate2";
dictionary.Add("M_R1", curOrder.UpPos);
dictionary.Add("M1", curOrder.UpPos);
dictionary.Add("M_R2", curOrder.UpPos);//两台车
//dictionary.Add("M2", curOrder.DownPos);
dictionary.Add("M2", curOrder.DownPos);
dictionary.Add("M_R3", curOrder.DownPos);
dictionary.Add("M_R4", curOrder.DownPos);
}
taskAddInfoModel.ParametersDic = dictionary;
//taskAddInfoModel.ParentTaskId = TaskID;
if (!interfaceService.TaskAdd(taskAddInfoModel, out string MessageAdd2))
{
TextDocument.WriteFile(@"PMS/Log", "堆垛叉车任务", MessageAdd2);
}
else
{
curOrder.OrderState = (int)WCSOrderState.None;
session.Update(curOrder);
TextDocument.WriteFile(@"PMS/Log", "堆垛叉车任务", "任务添加成功!");
}
}
break;
}
}
session.Flush();
}
}
//using (var session = MiddleDBModelHelper.Session)
//{
// var result = session.QueryOver().Where(p => p.OrderState != -1 && p.OrderState != (int)OrderState.电梯缓存中 && p.Material == "是").List();//.OrderBy(p => p.CallTime) p.OrderState == (int)OrderState.进车间风淋中 || p.OrderState == (int)OrderState.出车间风淋中 ||
// bool hasdeleted = false;
// foreach (var item in result)
// {
// Order curOrder = item;// result.First();
// if (curOrder.OrderState == 0)
// {
// session.Delete(curOrder);
// hasdeleted = true;
// }
// else
// {
// //if(interfaceService.GetTask(curOrder.OrderID, out TaskDetailInfoModel taskDetailInfoModel, out string message)&& taskDetailInfoModel!=null)
// {
// TaskCancelInfoModel taskCancelInfoModel = new TaskCancelInfoModel(curOrder.OrderID, true);
// interfaceService.TaskCancel(taskCancelInfoModel, out string msg);
// curOrder.FinishTime = DateTime.Now;
// }
// }
// }
// if (hasdeleted)
// {
// session.Flush();
// }
//}
}
catch (Exception ex)
{
//TextDocument.WriteFile(@"PMS/Log","从中间表加载任务", ex.ToString());
}
#endregion
//ElevatorFullTask();
Thread.Sleep(100);
}
catch (Exception e)
{
//TextDocument.WriteFile(@"PMS/Log","启动任务线程", e.ToString());
// 写日志
Thread.Sleep(5000);
}
}
}
///
/// 1楼从电梯运出货物
///
private void ElevatorFullTask()
{
bool existed = false;
OrderType ordertype1 = OrderType.None;
OrderType ordertype2 = OrderType.None;//五楼货物运送到电梯
//MiddleDBModelHelper MiddleDBModelHelper0 = new MiddleDBModelHelper();
using (var session = MiddleDBModelHelper.Session)
{
var result = session.QueryOver().Where(p => (p.OrderType == ordertype1 || p.OrderType == ordertype2) && p.OrderState != 255).List();
if (result.Count > 0)
{
existed = true;
}
}
if (existed)
{
return;
}
using (var session = WMSDBModelHelper.Session)
{
var result = session.QueryOver().Where(p => p.WareHouseCode == "002" && p.Status == "2").List();
if (result.Count > 0)
{
bool sussess = false;
string orderid = "JL" + DateTime.Now.ToString("HHmmssffff");
string uppos = result[0].LocationCode;
string middlepos = "";//JudgeBC
string downpos = "1F_T1";
Order newOrder = new Order(orderid, OrderType.None, uppos, middlepos, downpos, (int)WCSOrderState.BindingAGV, 0);
//MiddleDBModelHelper MiddleDBModelHelper = new MiddleDBModelHelper();
using (var sessionMiddleDB = MiddleDBModelHelper.Session)
{
sessionMiddleDB.Save(newOrder);
sessionMiddleDB.Flush();
sussess = true;
}
}
}
Thread.Sleep(1000);
}
///
/// 系统PLC对接,收到命令信号处理方法
///
///
public override void ElectronicStatusUpdateDeal(ElectronicBaseBusiness electronicBaseBusiness, ElectronicMonitorModel electronicMonitorModel)
{
//TaskAddInfoModel taskAddInfoModel = new TaskAddInfoModel();
//taskAddInfoModel.TaskID = DateTime.Now.ToString("yyyyMMddhhmmssffff");
//taskAddInfoModel.TemplateName = "TaskBook_Electronic";
//Dictionary dictionary = new Dictionary();
//dictionary.Add("U1", "W1"); dictionary.Add("U2", "W8");
//taskAddInfoModel.ParametersDic = dictionary;
//if (!interfaceService.TaskAdd(taskAddInfoModel, out string Message))
//{
// TextDocument.WriteFile(@"PMS/Log", "TaskError_", Message);
//}
}
///
/// 库位检测,由空变满的处理方法
///
///
public override void WareHouseStatusUpdateDeal(WareHouseModel wareHouseModel, WareHouseMonitorModel wareHouseMonitorModel)
{
//TaskAddInfoModel taskAddInfoModel = new TaskAddInfoModel();
//taskAddInfoModel.TaskID = DateTime.Now.ToString("yyyyMMddhhmmssffff");
//taskAddInfoModel.TemplateName = "TaskBook_Electronic";
//Dictionary dictionary = new Dictionary();
//dictionary.Add("U1", wareHouseModel.LocationCode); dictionary.Add("U2", "W8");
//taskAddInfoModel.ParametersDic = dictionary;
//if (!interfaceService.TaskAdd(taskAddInfoModel, out string Message))
//{
// TextDocument.WriteFile(@"PMS/Log", "TaskError_", Message);
//}
}
}
}