You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1037 lines
69 KiB
C#
1037 lines
69 KiB
C#
using Khd.Core.Domain.Dto.TaskType;
|
|
using Khd.Core.Domain.Dto.webapi;
|
|
using Khd.Core.Domain.Models;
|
|
using Khd.Core.EntityFramework;
|
|
using Khd.Core.Library;
|
|
using Khd.Core.Library.Mapper;
|
|
using Khd.Core.Plc.S7;
|
|
using Khd.Core.Wcs.Global;
|
|
using Masuit.Tools;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Newtonsoft.Json;
|
|
using Z.EntityFramework.Plus;
|
|
|
|
namespace Khd.Core.Wcs.Wcs
|
|
{
|
|
/// <summary>
|
|
/// 三楼agv调度
|
|
/// </summary>
|
|
public class ThirdFloorAGV
|
|
{
|
|
private readonly LoggerUtils _logger = new LoggerUtils();
|
|
private readonly IHost _host;
|
|
int FloorNo { get; set; }
|
|
private readonly BasePlcpoint putTrayPoint;
|
|
private readonly BasePlcpoint getTrayPoint;
|
|
private bool IsTrayGet { get; set; }
|
|
public ThirdFloorAGV(IHost host, int floor)
|
|
{
|
|
this._host = host;
|
|
FloorNo = floor;
|
|
this.putTrayPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray");
|
|
this.getTrayPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "getTray");
|
|
|
|
}
|
|
/// <summary>
|
|
/// 启动上件扫描监听
|
|
/// </summary>
|
|
public void StartPoint()
|
|
{
|
|
|
|
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
|
|
FlowPointThread.Name = "ThirdFloorAGVTrayIn";
|
|
FlowPointThread.IsBackground = true;
|
|
FlowPointThread.Start();
|
|
|
|
Thread FZJThread = new Thread(MonitorInFZJPoint);
|
|
FZJThread.Name = "ThirdFloorAGV";
|
|
FZJThread.IsBackground = true;
|
|
FZJThread.Start();
|
|
|
|
Thread MonitorTraySignalThread = new Thread(MonitorTraySignal);
|
|
MonitorTraySignalThread.Name = "ThirdFloorAGVTraySignal";
|
|
MonitorTraySignalThread.IsBackground = true;
|
|
MonitorTraySignalThread.Start();
|
|
|
|
Console.WriteLine(DateTime.Now + ":三楼AGV 启动上件扫描监听");
|
|
_logger.Info("三楼AGV 启动上件扫描监听");
|
|
}
|
|
|
|
private void MonitorTraySignal()
|
|
{
|
|
BasePlcpoint GetTrayPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "getTray");
|
|
BasePlcpoint GetTrayOverPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "GetTrayOver");
|
|
while (true)
|
|
{
|
|
while (IsTrayGet)
|
|
{
|
|
try
|
|
{
|
|
var getTrayValue = StaticData.PlcDic[2].Read(GetTrayPoint.plcpointAddress);
|
|
if (getTrayValue != null && !Convert.ToBoolean(getTrayValue))
|
|
{
|
|
StaticData.PlcDic[2].WriteToPoint(GetTrayOverPoint.plcpointAddress, false, GetTrayOverPoint.plcpointLength.ToString());
|
|
IsTrayGet = false;
|
|
_logger.Info("三楼AGV 托盘已取走信号复位");
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
|
|
}
|
|
Thread.Sleep(3000);
|
|
}
|
|
Thread.Sleep(3000);
|
|
}
|
|
}
|
|
|
|
private void MonitorInFZJPoint(object? obj)
|
|
{
|
|
using var scope = _host.Services.CreateScope();
|
|
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
|
|
while (true)
|
|
{
|
|
try
|
|
{
|
|
dbContext.ChangeTracker.Clear();
|
|
var getTrayValue = StaticData.PlcDic[2].Read(getTrayPoint.plcpointAddress);
|
|
if (getTrayValue != null && Convert.ToBoolean(getTrayValue))
|
|
{
|
|
var task = dbContext.WcsTask.Where(t => t.IsDelete == 0 || t.IsDelete == null).Where(t => t.taskType == StaticTaskType.ThirdFlipToBin && t.useFlag == 0).FirstOrDefault();
|
|
if (task != null)
|
|
{
|
|
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 35);
|
|
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 31);
|
|
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 9);
|
|
//if (endEquip.emptyCount != (SystemData.maxTray / 2) && endEquip.emptyCount != SystemData.maxTray)
|
|
if (endEquip.emptyCount < SystemData.maxTray)
|
|
{
|
|
task.taskType = StaticTaskType.ThirdFlipToBin;
|
|
task.useFlag = 1;
|
|
task.taskStatus = 0;
|
|
task.isEmpty = "1";
|
|
task.qty = 1;
|
|
task.nextPointId = agvEquip.objid;
|
|
task.nextPointNo = agvEquip.agvPositionCode;
|
|
task.currPointId = startEquip.objid;
|
|
task.currPointNo = startEquip.agvPositionCode;
|
|
task.endPointId = endEquip.objid;
|
|
task.endPointNo = endEquip.agvPositionCode;
|
|
task.createTime = DateTime.Now;
|
|
dbContext.Update(task);
|
|
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(task);
|
|
dbContext.Add(wcsTaskLog);
|
|
dbContext.SaveChanges();
|
|
_logger.Info("三楼AGV 生成空托盘入收集架任务:" + task.objid);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (ex is PlcException)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
_logger.Error(ex.Message + "\n" + ex.StackTrace);
|
|
}
|
|
}
|
|
Thread.Sleep(3000);
|
|
}
|
|
}
|
|
|
|
public void MonitorInLocatorPoint()
|
|
{
|
|
using var scope = _host.Services.CreateScope();
|
|
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
|
|
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == 9);
|
|
while (true)
|
|
{
|
|
try
|
|
{
|
|
dbContext.ChangeTracker.Clear();
|
|
//获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv
|
|
var taskList = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).Where(t => t.useFlag == 1).OrderBy(t => t.createTime).ToList();
|
|
foreach (var item in taskList)
|
|
{
|
|
if (taskList.Where(t => t.objid != item.objid && t.taskStatus > 0).Any())
|
|
{
|
|
continue;
|
|
}
|
|
item.updateTime = DateTime.Now;
|
|
if (item.taskStatus == 0)
|
|
{
|
|
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
|
|
if (item.taskType == StaticTaskType.ThirdRemove)//移库
|
|
{
|
|
var agvTask = new RequestAGVTaskDto
|
|
{
|
|
reqCode = StaticData.SnowId.NextId().ToString(),
|
|
positionCodePath = new List<Position>
|
|
{
|
|
new ()
|
|
{
|
|
positionCode=item.currPointNo,
|
|
type="00"
|
|
},
|
|
new ()
|
|
{
|
|
positionCode=item.endPointNo,
|
|
type="00"
|
|
}
|
|
},
|
|
taskTyp = baseDictionary.dicValue,
|
|
ctnrTyp = "2",
|
|
};
|
|
string message = JsonConvert.SerializeObject(agvTask);
|
|
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
|
|
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
|
|
if (reponseMessage != null && reponseMessage.message == "成功")
|
|
{
|
|
_logger.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
|
|
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
|
|
item.taskCode = reponseMessage.data;
|
|
item.taskStatus = 1;
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("五楼Agv下发任务失败" + item.taskType + result);
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdRawIn)//提升机-库位
|
|
{
|
|
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == 3);
|
|
var agvTask = new RequestAGVTaskDto
|
|
{
|
|
reqCode = StaticData.SnowId.NextId().ToString(),
|
|
positionCodePath = new List<Position>
|
|
{
|
|
new ()
|
|
{
|
|
positionCode=startEquip.agvPositionCode,
|
|
type="00"
|
|
},
|
|
new ()
|
|
{
|
|
positionCode=item.endPointNo,
|
|
type="00"
|
|
}
|
|
},
|
|
taskTyp = baseDictionary.dicValue,
|
|
ctnrTyp = "2",
|
|
};
|
|
string message = JsonConvert.SerializeObject(agvTask);
|
|
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
|
|
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
|
|
if (reponseMessage != null && reponseMessage.message == "成功")
|
|
{
|
|
_logger.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
|
|
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
|
|
item.taskCode = reponseMessage.data;
|
|
item.taskStatus = 1;
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("三楼Agv下发任务失败" + item.taskType + result);
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdRawToFlip)//库位-翻转机
|
|
{
|
|
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray");
|
|
var callMaterial = StaticData.PlcDic[2].Read(basePlcpoint.plcpointAddress);
|
|
if (callMaterial != null && Convert.ToBoolean(callMaterial))
|
|
{
|
|
WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == item.orderId ); //&& t.executeStatus == "0"
|
|
if (wmsRawOutstock != null)
|
|
{
|
|
wmsRawOutstock.executeStatus = "1";
|
|
wmsRawOutstock.updateDate = DateTime.Now;
|
|
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 31);
|
|
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
|
|
|
|
var agvTask = new RequestAGVTaskDto
|
|
{
|
|
reqCode = StaticData.SnowId.NextId().ToString(),
|
|
positionCodePath = new List<Position>
|
|
{
|
|
new ()
|
|
{
|
|
positionCode=wmsBaseLocation.agvPositionCode,
|
|
type="00"
|
|
},
|
|
new ()
|
|
{
|
|
positionCode=endEquip.agvPositionCode,
|
|
type="00"
|
|
}
|
|
},
|
|
taskTyp = baseDictionary.dicValue,
|
|
ctnrTyp = "2",
|
|
};
|
|
string message = JsonConvert.SerializeObject(agvTask);
|
|
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
|
|
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
|
|
if (reponseMessage != null && reponseMessage.message == "成功")
|
|
{
|
|
_logger.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
|
|
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
|
|
item.taskCode = reponseMessage.data;
|
|
item.taskStatus = 1;
|
|
dbContext.Update(wmsRawOutstock);
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("三楼Agv下发任务失败" + item.taskType + result);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdTransitToBin)//周转位-收集架
|
|
{
|
|
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
|
|
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
|
|
var agvTask = new RequestAGVTaskDto
|
|
{
|
|
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
|
|
positionCodePath = new List<Position>
|
|
{
|
|
new ()
|
|
{
|
|
positionCode= startEquip.agvPositionCode,
|
|
type="00"
|
|
},
|
|
new ()
|
|
{
|
|
positionCode=endEquip.agvPositionCode,
|
|
type="00"
|
|
}
|
|
},
|
|
taskTyp = baseDictionary.dicValue,
|
|
ctnrTyp = "2",
|
|
ctnrNum = startEquip.emptyCount.ToString()
|
|
};
|
|
string message = JsonConvert.SerializeObject(agvTask);
|
|
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
|
|
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
|
|
if (reponseMessage != null && reponseMessage.message == "成功")
|
|
{
|
|
_logger.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
|
|
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
|
|
item.taskCode = reponseMessage.data;
|
|
item.taskStatus = 1;
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("三楼Agv下发任务失败" + item.taskType + result);
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdFlipToBin)//翻转机-收集架
|
|
{
|
|
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
|
|
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
|
|
var agvTask = new RequestAGVTaskDto
|
|
{
|
|
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
|
|
positionCodePath = new List<Position>
|
|
{
|
|
new ()
|
|
{
|
|
positionCode=startEquip.agvPositionCode,
|
|
type="00"
|
|
},
|
|
new ()
|
|
{
|
|
positionCode=endEquip.agvPositionCode,
|
|
type="00"
|
|
}
|
|
},
|
|
taskTyp = baseDictionary.dicValue,
|
|
ctnrTyp = "2",
|
|
ctnrNum = "1"
|
|
};
|
|
string message = JsonConvert.SerializeObject(agvTask);
|
|
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
|
|
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
|
|
if (reponseMessage != null && reponseMessage.message == "成功")
|
|
{
|
|
_logger.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
|
|
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
|
|
item.taskCode = reponseMessage.data;
|
|
item.taskStatus = 1;
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("三楼Agv下发任务失败" + item.taskType + result);
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdBinToTransit)//收集架-周转区
|
|
{
|
|
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
|
|
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
|
|
|
|
var agvTask = new RequestAGVTaskDto
|
|
{
|
|
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
|
|
positionCodePath = new List<Position>
|
|
{
|
|
new ()
|
|
{
|
|
positionCode=startEquip.agvPositionCode,
|
|
type="00"
|
|
},
|
|
new ()
|
|
{
|
|
positionCode=endEquip.agvPositionCode,
|
|
type="00"
|
|
}
|
|
},
|
|
taskTyp = baseDictionary.dicValue,
|
|
ctnrTyp = "2",
|
|
ctnrNum = startEquip.emptyCount.ToString()
|
|
};
|
|
string message = JsonConvert.SerializeObject(agvTask);
|
|
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
|
|
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
|
|
if (reponseMessage != null && reponseMessage.message == "成功")
|
|
{
|
|
_logger.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
|
|
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
|
|
item.taskCode = reponseMessage.data;
|
|
item.taskStatus = 1;
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("三楼Agv下发任务失败" + item.taskType + result);
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdTransitToLift)//周转区-提升机
|
|
{
|
|
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
|
|
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
|
|
if (lineEquip.equipStatus == 0)
|
|
{
|
|
var agvTask = new RequestAGVTaskDto
|
|
{
|
|
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
|
|
positionCodePath = new List<Position>
|
|
{
|
|
new()
|
|
{
|
|
positionCode =startEquip.agvPositionCode,
|
|
type = "00"
|
|
},
|
|
new()
|
|
{
|
|
positionCode = lineEquip.equipNo,
|
|
type = "00"
|
|
}
|
|
},
|
|
taskTyp = baseDictionary.dicValue,
|
|
ctnrTyp = "2",
|
|
ctnrNum = startEquip.emptyCount.ToString()
|
|
};
|
|
string message = JsonConvert.SerializeObject(agvTask);
|
|
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
|
|
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
|
|
if (reponseMessage != null && reponseMessage.message == "成功")
|
|
{
|
|
_logger.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
|
|
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
|
|
item.taskCode = reponseMessage.data;
|
|
item.taskStatus = 1;
|
|
lineEquip.equipStatus = 1;
|
|
dbContext.Update(lineEquip);
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("三楼Agv下发任务失败" + item.taskType + result);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdTransitToSecond)//三楼空托盘转运到二楼
|
|
{
|
|
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
|
|
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
|
|
if (lineEquip.equipStatus == 0)
|
|
{
|
|
var agvTask = new RequestAGVTaskDto
|
|
{
|
|
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
|
|
positionCodePath = new List<Position>
|
|
{
|
|
new()
|
|
{
|
|
positionCode = startEquip.agvPositionCode,
|
|
type = "00"
|
|
},
|
|
new()
|
|
{
|
|
positionCode = lineEquip.equipNo,
|
|
type = "00"
|
|
}
|
|
},
|
|
taskTyp = baseDictionary.dicValue,
|
|
ctnrTyp = "2",
|
|
ctnrNum = startEquip.emptyCount.ToString()
|
|
};
|
|
string message = JsonConvert.SerializeObject(agvTask);
|
|
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
|
|
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
|
|
if (reponseMessage != null && reponseMessage.message == "成功")
|
|
{
|
|
_logger.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
|
|
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
|
|
item.taskCode = reponseMessage.data;
|
|
item.taskStatus = 1;
|
|
lineEquip.equipStatus = 1;
|
|
dbContext.Update(lineEquip);
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("三楼Agv下发任务失败" + item.taskType + result);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdStockReturnTask)
|
|
{
|
|
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
|
|
if (lineEquip.equipStatus == 0)
|
|
{
|
|
var agvTask = new RequestAGVTaskDto
|
|
{
|
|
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
|
|
positionCodePath = new List<Position>
|
|
{
|
|
new ()
|
|
{
|
|
positionCode=item.currPointNo,
|
|
type="00"
|
|
},
|
|
new ()
|
|
{
|
|
positionCode=item.endPointNo,
|
|
type="00"
|
|
}
|
|
},
|
|
taskTyp = baseDictionary.dicValue,
|
|
ctnrTyp = "2",
|
|
ctnrNum = "1"
|
|
};
|
|
string message = JsonConvert.SerializeObject(agvTask);
|
|
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
|
|
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
|
|
if (reponseMessage != null && reponseMessage.message == "成功")
|
|
{
|
|
_logger.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
|
|
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
|
|
item.taskCode = reponseMessage.data;
|
|
item.taskStatus = 1;
|
|
lineEquip.equipStatus = 1;
|
|
dbContext.Update(lineEquip);
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("三楼Agv下发任务失败" + item.taskType + result);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
{
|
|
if (item.taskStatus == 3)
|
|
{
|
|
if (item.currPointId == 3)//从提升机开始
|
|
{
|
|
BasePlcpoint lineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal03");
|
|
BasePlcpoint Rfid = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID003");
|
|
var lineSignalValue = StaticData.PlcDic[0].Read(lineSignal.plcpointAddress);
|
|
var RfidValue = StaticData.PlcDic[0].ReadRFID(Rfid.plcpointAddress);
|
|
if (lineSignalValue == null || item.containerNo != RfidValue || Convert.ToInt32(lineSignalValue) == 0)
|
|
{
|
|
_logger.Info($"三楼Agv继续任务失败,所取货物与任务不符,任务货物为{item.containerNo},RFID为{RfidValue},线路信号为{lineSignalValue}");
|
|
Console.WriteLine($"{DateTime.Now}:三楼Agv继续任务失败,所取货物与任务不符,任务货物为{item.containerNo},RFID为{RfidValue},线路信号为{lineSignalValue}");
|
|
Thread.Sleep(1000);
|
|
continue;
|
|
}
|
|
}
|
|
if (item.endPointId == 3)
|
|
{
|
|
BasePlcpoint lineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal03");
|
|
var wcsrun = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "wcsrun03").plcpointAddress);
|
|
var lineSignalValue = StaticData.PlcDic[0].Read(lineSignal.plcpointAddress);
|
|
if (lineSignalValue == null || Convert.ToInt32(lineSignalValue) == 1 || wcsrun == null || wcsrun.ToString() != "0")
|
|
{
|
|
_logger.Info($"三楼Agv继续任务失败,提升机有货物");
|
|
Console.WriteLine($"{DateTime.Now}:三楼Agv继续任务失败,提升机有货物");
|
|
Thread.Sleep(1000);
|
|
continue;
|
|
}
|
|
}
|
|
if (item.endPointId == 31)//如果终点是翻转机的任务,有东西则跳过
|
|
{
|
|
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray");
|
|
var callMaterial = StaticData.PlcDic[2].Read(basePlcpoint.plcpointAddress);
|
|
if (callMaterial == null || !Convert.ToBoolean(callMaterial))
|
|
{
|
|
_logger.Info($"三楼Agv继续任务失败,提升机有货物");
|
|
Console.WriteLine($"{DateTime.Now}:三楼Agv继续任务失败,提升机有货物");
|
|
Thread.Sleep(1000);
|
|
continue;
|
|
}
|
|
}
|
|
var agvTask = new RequestAGVTaskDto
|
|
{
|
|
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
|
|
taskCode = item.taskCode
|
|
};
|
|
string message = JsonConvert.SerializeObject(agvTask);
|
|
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
|
|
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
|
|
if (reponseMessage != null && reponseMessage.message == "成功")
|
|
{
|
|
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
|
|
}
|
|
}
|
|
else if (item.taskStatus == 5)//任务完成
|
|
{
|
|
if (item.currPointId == 3)//从接驳位出发
|
|
{
|
|
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
|
|
lineEquip.equipStatus = 0;
|
|
dbContext.Update(lineEquip);
|
|
}
|
|
if (item.taskType == StaticTaskType.ThirdRemove)//移库
|
|
{
|
|
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
|
|
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
|
|
WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First();
|
|
dbContext.WmsBaseLocation.Where(t => t.locationId == wmsBaseLocation.locationId)
|
|
.Update(t => new WmsBaseLocation() { containerCode = null, updateTime = DateTime.Now, locationStatus = "1" });
|
|
dbContext.WmsBaseLocation.Where(t => t.locationId == toLocation.locationId)
|
|
.Update(t => new WmsBaseLocation { containerCode = item.containerNo, updateTime = DateTime.Now, locationStatus = "1" });
|
|
|
|
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
|
|
SystemData.UnLockOutLocation(toLocation, dbContext);
|
|
if (wmsRawStock != null)
|
|
{
|
|
wmsRawStock.locationCode = item.endPointNo;
|
|
dbContext.Update(wmsRawStock);
|
|
}
|
|
|
|
|
|
dbContext.Remove(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
|
|
|
|
#region 插入移库记录
|
|
var wmsMove = dbContext.WmsMove.Where(t => t.MoveId == item.orderId).FirstOrDefault();
|
|
if (wmsMove == null)
|
|
{
|
|
wmsMove = new WmsMove();
|
|
wmsMove.MoveId = StaticData.SnowId.NextId();
|
|
wmsMove.TaskCode = StaticData.SnowId.NextId().ToString();
|
|
wmsMove.WarehouseId = wmsBaseLocation.warehouseId;
|
|
wmsMove.OriLocationCode = wmsBaseLocation.locationCode;
|
|
wmsMove.TargetLocationCode = toLocation.locationCode;
|
|
wmsMove.InstockBatch = wmsRawStock.instockBatch;
|
|
wmsMove.MaterialId = wmsRawStock.materialId;
|
|
wmsMove.PlanAmount = 1;
|
|
wmsMove.RealOutstockAmount = 1;
|
|
wmsMove.RealInstockAmount = 1;
|
|
wmsMove.OperationType = "3";
|
|
wmsMove.MoveWay = "2";
|
|
wmsMove.MoveType = "1";
|
|
wmsMove.AuditStatus = "1";
|
|
wmsMove.ExecuteStatus = "2";
|
|
wmsMove.UpdateBy = "WCS";
|
|
wmsMove.UpdateDate = DateTime.Now;
|
|
wmsMove.BeginTime = DateTime.Now;
|
|
wmsMove.EndTime = DateTime.Now;
|
|
dbContext.WmsMove.Add(wmsMove);
|
|
}
|
|
else
|
|
{
|
|
wmsMove.RealOutstockAmount += 1;
|
|
wmsMove.EndTime = DateTime.Now;
|
|
wmsMove.UpdateDate = DateTime.Now;
|
|
wmsMove.UpdateBy = "WCS";
|
|
wmsMove.ExecuteStatus = "2";
|
|
dbContext.Update(wmsMove);
|
|
}
|
|
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
|
|
wmsMoveDetail.MoveId = wmsMove.MoveId;
|
|
wmsMoveDetail.MaterialBarcode = wmsMove.InstockBatch;
|
|
wmsMoveDetail.InstockBatch = wmsMove.InstockBatch;
|
|
wmsMoveDetail.MaterialId = (long)wmsRawStock.materialId;
|
|
wmsMoveDetail.LocationCode = toLocation.locationCode;
|
|
wmsMoveDetail.PlanAmount = 1;
|
|
wmsMoveDetail.RealInstockAmount = 1;
|
|
wmsMoveDetail.RealAmount = 1;
|
|
wmsMoveDetail.ExecuteStatus = "2";
|
|
wmsMoveDetail.ExecuteTime = DateTime.Now;
|
|
wmsMoveDetail.ExecuteEndTime = DateTime.Now;
|
|
wmsMoveDetail.ExecutePerson = "WCS";
|
|
wmsMoveDetail.UpdateBy = "WCS";
|
|
wmsMoveDetail.UpdateDate = DateTime.Now;
|
|
|
|
dbContext.WmsMoveDetail.Add(wmsMoveDetail);
|
|
#endregion
|
|
|
|
dbContext.SaveChanges();
|
|
SystemData.SendPlcLocation(wmsBaseLocation);
|
|
SystemData.SendPlcLocation(toLocation);
|
|
|
|
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdRawIn)//入库
|
|
{
|
|
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
|
|
.First(t => t.locationId == item.endPointId && t.warehouseFloor == 3);
|
|
wmsBaseLocation.locationStatus = "1";
|
|
wmsBaseLocation.containerCode = item.containerNo;
|
|
wmsBaseLocation.updateTime = DateTime.Now;
|
|
wmsBaseLocation.updateBy = "WCS";
|
|
var mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
|
|
if (mesBasePalletInfo != null)
|
|
{
|
|
var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode);
|
|
if (mesBaseBarcodeInfo != null)
|
|
{
|
|
var wmsRawStock = new WmsRawStock()
|
|
{
|
|
rawStockId = StaticData.SnowId.NextId(),
|
|
activeFlag = "1",
|
|
saleOrderId = mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId,
|
|
stockType = "1",
|
|
supplierId = mesBaseBarcodeInfo.manufacturerId,
|
|
qualityStatus = "1",
|
|
completeFlag = "1",
|
|
createBy = "WCS",
|
|
createDate = DateTime.Now,
|
|
frozenAmount = 0,
|
|
instockBatch = mesBaseBarcodeInfo.barcodeInfo,
|
|
instockDate = DateTime.Now,
|
|
locationCode = wmsBaseLocation.locationCode,
|
|
materialId = mesBaseBarcodeInfo.materialId,
|
|
occupyAmount = 0,
|
|
palletInfoCode = item.containerNo,
|
|
safeFlag = mesBaseBarcodeInfo.safeFlag,
|
|
totalAmount = 1,
|
|
warehouseFloor = 3,
|
|
warehouseId = 311
|
|
};
|
|
WmsRawInstock wmsRawInstock = new WmsRawInstock()
|
|
{
|
|
taskCode = item.taskCode,
|
|
materialBarCode = mesBaseBarcodeInfo.barcodeInfo,
|
|
materialBatchCode = mesBaseBarcodeInfo.batchCode,
|
|
applyBy = "wcs",
|
|
applyDate = System.DateTime.Now,
|
|
purchaseOrderId = mesBaseBarcodeInfo.PurchaseOrderId,
|
|
|
|
beginTime = System.DateTime.Now,
|
|
endTime = DateTime.Now,
|
|
locationCode = wmsBaseLocation.locationCode,
|
|
executeStatus = "2",
|
|
instockAmount = 1,
|
|
instockType = item.fromFloorNo == 1 ? "1" : "3",
|
|
|
|
materialId = mesBaseBarcodeInfo.materialId,
|
|
operationType = "3",
|
|
palletInfoCode = mesBaseBarcodeInfo.palletInfoCode,
|
|
poNo = mesBaseBarcodeInfo.poNo,
|
|
warehouseId = 311
|
|
};
|
|
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
|
|
dbContext.Add(wmsRawInstock);
|
|
dbContext.Add(wmsRawStock);
|
|
dbContext.Update(wmsBaseLocation);
|
|
dbContext.Remove(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
|
|
dbContext.SaveChanges();
|
|
SystemData.SendPlcLocation(wmsBaseLocation);
|
|
|
|
}
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdTransitToBin)//周转区-收集架,暂不使用
|
|
{
|
|
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
|
|
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
|
|
startEquip.emptyCount = 0;
|
|
startEquip.equipStatus = 0;
|
|
startEquip.updateTime = DateTime.Now;
|
|
startEquip.updateBy = "WCS";
|
|
endEquip.emptyCount += item.qty;
|
|
endEquip.equipStatus = 1;
|
|
endEquip.updateTime = DateTime.Now;
|
|
endEquip.updateBy = "WCS";
|
|
dbContext.Update(startEquip);
|
|
dbContext.Update(endEquip);
|
|
dbContext.Remove(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdRawToFlip)//原材料出库
|
|
{
|
|
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
|
|
.First(t => t.locationId == item.currPointId);
|
|
wmsBaseLocation.locationStatus = "1";
|
|
wmsBaseLocation.containerCode = null;
|
|
wmsBaseLocation.updateTime = DateTime.Now;
|
|
wmsBaseLocation.updateBy = "WCS";
|
|
|
|
WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == item.orderId);
|
|
WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
|
|
|
|
if (wmsRawStock != null)
|
|
{
|
|
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == wmsRawStock.instockBatch).FirstOrDefault();
|
|
WmsRawOutstockDetail newWmsRawOutstockDetail = new WmsRawOutstockDetail();
|
|
if (wmsRawOutstock != null)
|
|
{
|
|
wmsRawOutstock.realOutstockAmount += 1;
|
|
if (wmsRawOutstock.realOutstockAmount >= wmsRawOutstock.outstockAmount)
|
|
{
|
|
wmsRawOutstock.endTime = DateTime.Now;
|
|
wmsRawOutstock.executeStatus = "2";
|
|
}
|
|
|
|
}
|
|
//else
|
|
//{
|
|
// wmsRawOutstock = new WmsRawOutstock()
|
|
// {
|
|
// rawOutstockId = StaticData.SnowId.NextId(),
|
|
// warehouseId = 311,
|
|
// taskCode = "",
|
|
// outstockAmount = 1,
|
|
// realOutstockAmount = 1,
|
|
// operationType = "3",
|
|
// taskType = "1",
|
|
// auditStatus = "0",
|
|
// executeStatus = "2",
|
|
// saleOrderId = mesBaseBarcodeInfo != null ? mesBaseBarcodeInfo.saleOrderId : 0,
|
|
// };
|
|
|
|
//}
|
|
newWmsRawOutstockDetail.rawOutstockId = wmsRawOutstock.rawOutstockId;
|
|
newWmsRawOutstockDetail.taskCode = wmsRawOutstock.taskCode;
|
|
newWmsRawOutstockDetail.warehouseId = wmsRawOutstock.warehouseId;
|
|
newWmsRawOutstockDetail.locationCode = wmsRawStock.locationCode;
|
|
newWmsRawOutstockDetail.materialBarcode = wmsRawStock.instockBatch;
|
|
newWmsRawOutstockDetail.materialId = wmsRawStock.materialId;
|
|
if (mesBaseBarcodeInfo != null)
|
|
{
|
|
newWmsRawOutstockDetail.instockBatch = mesBaseBarcodeInfo.batchCode;
|
|
newWmsRawOutstockDetail.materialProductionDate = mesBaseBarcodeInfo.productionDate;
|
|
}
|
|
newWmsRawOutstockDetail.planAmount = wmsRawOutstock.outstockAmount;
|
|
newWmsRawOutstockDetail.outstockAmount = wmsRawOutstock.realOutstockAmount;
|
|
newWmsRawOutstockDetail.executeStatus = "2";
|
|
newWmsRawOutstockDetail.outstockPerson = wmsRawOutstock.applyBy;
|
|
newWmsRawOutstockDetail.outstockTime = DateTime.Now;
|
|
newWmsRawOutstockDetail.outstockWay = "2";
|
|
newWmsRawOutstockDetail.createBy = "WCS";
|
|
newWmsRawOutstockDetail.createDate = DateTime.Now;
|
|
newWmsRawOutstockDetail.stackAmount = 1;
|
|
dbContext.Add(newWmsRawOutstockDetail);
|
|
dbContext.Update(wmsRawOutstock);
|
|
|
|
|
|
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 31);
|
|
endEquip.emptyCount = 1;
|
|
|
|
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
|
|
dbContext.Update(endEquip);
|
|
dbContext.Remove(wmsRawStock);
|
|
dbContext.Update(wmsBaseLocation);
|
|
WcsTask wcsTask = CoreMapper.Map<WcsTask>(item);
|
|
wcsTask.objid = StaticData.SnowId.NextId();
|
|
wcsTask.taskStatus = 0;
|
|
wcsTask.useFlag = 0;
|
|
wcsTask.taskType = StaticTaskType.ThirdFlipToBin;
|
|
wcsTask.createBy = "WCS";
|
|
wcsTask.createTime = DateTime.Now;
|
|
dbContext.Remove(item);
|
|
dbContext.Add(wcsTask);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
|
|
dbContext.SaveChanges();
|
|
SystemData.SendPlcLocation(wmsBaseLocation);
|
|
|
|
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdFlipToBin)//翻转机就到收集架
|
|
{
|
|
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
|
|
if (mesBasePalletInfo != null)
|
|
{
|
|
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "GetTrayOver");
|
|
StaticData.PlcDic[2].WriteToPoint(basePlcpoint.plcpointAddress, true, basePlcpoint.plcpointLength.ToString());
|
|
IsTrayGet = true;
|
|
_logger.Info("通知PLC已经取走信号:true");
|
|
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.palletInfoCode == item.containerNo).FirstOrDefault();
|
|
if (mesBaseBarcodeInfo != null)
|
|
{
|
|
mesBaseBarcodeInfo.palletInfoCode = null;
|
|
dbContext.Update(mesBaseBarcodeInfo);
|
|
}
|
|
mesBasePalletInfo.bindAmount = null;
|
|
mesBasePalletInfo.materialBarcode = null;
|
|
mesBasePalletInfo.materialCode = null;
|
|
mesBasePalletInfo.materialId = null;
|
|
mesBasePalletInfo.materialName = null;
|
|
mesBasePalletInfo.updateBy = "WCS";
|
|
mesBasePalletInfo.updateTime = DateTime.Now;
|
|
dbContext.Update(mesBasePalletInfo);
|
|
BaseEquip emptyEquip = dbContext.BaseEquip.First(t => t.objid == 35);
|
|
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 31);
|
|
endEquip.emptyCount = 0;
|
|
dbContext.Update(endEquip);
|
|
emptyEquip.emptyCount += 1;
|
|
emptyEquip.equipStatus = 1;
|
|
emptyEquip.updateTime = DateTime.Now;
|
|
emptyEquip.updateBy = "WCS";
|
|
dbContext.Update(emptyEquip);
|
|
dbContext.Remove(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
|
|
dbContext.SaveChanges();
|
|
|
|
}
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdBinToTransit)//收集架-周转区
|
|
{
|
|
BaseEquip emptyEquip = dbContext.BaseEquip.First(t => t.objid == 35);
|
|
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
|
|
emptyEquip.emptyCount = 0;
|
|
emptyEquip.updateTime = DateTime.Now;
|
|
emptyEquip.updateBy = "WCS";
|
|
endEquip.emptyCount = item.qty;
|
|
endEquip.equipStatus = 1;
|
|
endEquip.updateTime = DateTime.Now;
|
|
endEquip.updateBy = "WCS";
|
|
dbContext.Update(endEquip);
|
|
dbContext.Update(emptyEquip);
|
|
dbContext.Remove(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdTransitToLift || item.taskType == StaticTaskType.ThirdTransitToSecond)//周转区-提升机
|
|
{
|
|
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
|
|
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3);
|
|
startEquip.emptyCount = 0;
|
|
startEquip.equipStatus = 0;
|
|
startEquip.updateTime = DateTime.Now;
|
|
startEquip.updateBy = "WCS";
|
|
dbContext.Update(startEquip);
|
|
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
|
|
item.nextPointId = lineEquip.objid;
|
|
item.nextPointNo = lineEquip.equipNo;
|
|
item.fromFloorNo = 3;
|
|
item.floorNo = endEquip.floorNo;
|
|
item.taskStatus = 6;
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
|
|
dbContext.SaveChanges();
|
|
}
|
|
else if (item.taskType == StaticTaskType.ThirdStockReturnTask)
|
|
{
|
|
BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.objid == 3);
|
|
var wmsRawOutstock = dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.orderId).FirstOrDefault();
|
|
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
|
|
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
|
|
if (wmsRawOutstock != null && wmsRawStock != null && wmsBaseLocation != null)
|
|
{
|
|
wmsRawOutstock.realOutstockAmount += 1;
|
|
wmsRawOutstock.executeStatus = "2";
|
|
wmsRawOutstock.endTime = DateTime.Now;
|
|
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
|
|
dbContext.Remove(wmsRawStock);
|
|
wmsBaseLocation.locationStatus = "1";
|
|
wmsBaseLocation.containerCode = null;
|
|
wmsBaseLocation.updateTime = DateTime.Now;
|
|
wmsBaseLocation.updateBy = "WCS";
|
|
dbContext.Update(wmsBaseLocation);
|
|
dbContext.Update(wmsRawOutstock);
|
|
item.createTime = DateTime.Now;
|
|
item.nextPointId = floorLineEquip.objid;
|
|
item.nextPointNo = floorLineEquip.equipNo;
|
|
item.fromFloorNo = 3;
|
|
item.floorNo = 1;
|
|
item.taskStatus = 6;
|
|
dbContext.Update(item);
|
|
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6, updateTime = DateTime.Now });
|
|
dbContext.SaveChanges();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (ex is PlcException)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
_logger.Error(ex.Message + "\n" + ex.StackTrace);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
Thread.Sleep(1000);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|