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.

200 lines
11 KiB
C#

2 years ago
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
2 years ago
using Khd.Core.Library.Mapper;
2 years ago
using Khd.Core.Wcs.Global;
1 year ago
using Masuit.Tools;
2 years ago
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
{
2 years ago
/// <summary>
/// 背负式AGV
/// </summary>
public class FiveFloorBearAgv
2 years ago
{
private readonly IHost _host;
int FloorNo { get; set; }
int agvID = 10;
1 year ago
public FiveFloorBearAgv(IHost host, Plc.S7.Plc plc, int floor)
2 years ago
{
this._host = host;
FloorNo = floor;
}
/// <summary>
/// 启动上件扫描监听
/// </summary>
public void StartPoint()
{
Thread FlowPointThread = new(MonitorInLocatorPoint);
FlowPointThread.Start();
Console.WriteLine(DateTime.Now + ":五楼AGV上件扫描监听启动成功");
LogManager.Info("五楼AGV上件扫描监听启动成功");
}
public void MonitorInLocatorPoint()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<int?> taskType = new() { 1, 3, 5, 7 };
2 years ago
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == agvID);
2 years ago
while (true)
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var taskList = dbContext.WcsTask
.Where(t => t.nextPointId == agvID)
.OrderBy(t => t.createTime).ToList();
if (taskList.Count == 0)
{
LogManager.Info(FloorNo + "楼AGV无任务");
}
2 years ago
foreach (var item in taskList)//出库
2 years ago
{
if (item.taskStatus == 0)//下发任务
{
1 year ago
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
2 years ago
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
2 years ago
BaseDictionary baseDictionary = dbContext.BaseDictionary.First(t => t.objid == item.taskType);
2 years ago
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
1 year ago
currPointId = item.currPointId,
2 years ago
currPointNo = startEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
2 years ago
type=baseDictionary.agvType
2 years ago
},
new ()
{
positionCode=wcsCmd.nextPointNo,
2 years ago
type=baseDictionary.agvType
2 years ago
}
},
2 years ago
taskTyp = baseDictionary.dicValue,
2 years ago
ctnrTyp = "2",
};
string message = JsonConvert.SerializeObject(agvTask);
2 years ago
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
2 years ago
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.code == "0")
{
1 year ago
LogManager.Info("五楼背负式AGV线程下发任务" + agvTask.ToJsonString());
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程下发任务" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
2 years ago
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
2 years ago
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
2 years ago
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("下发小车任务失败" + result);
}
}
else
{
2 years ago
if (item.useFlag == 1)//接料位-工位默认为1工位到接料位需Mes通知
2 years ago
{
2 years ago
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
2 years ago
{
1 year ago
if (wcsCmd.cmdStatus == 4)
2 years ago
{
2 years ago
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.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 == "成功")
{
1 year ago
LogManager.Info("五楼背负式AGV线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + wcsCmd.objid);
1 year ago
item.taskStatus = 5;
wcsCmd.cmdStatus = 5;
dbContext.Update(item);
dbContext.Update(wcsCmd);
dbContext.SaveChanges();
1 year ago
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 5 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 5 });
2 years ago
}
}
else if (wcsCmd.cmdStatus == 7)
2 years ago
{
1 year ago
LogManager.Info("五楼背负式AGV线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + wcsCmd.objid);
2 years ago
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.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 == "成功")
{
if (item.taskType == 48)
{
1 year ago
WmsRawReturn? wmsRawReturn = dbContext.WmsRawReturn.Where(t => t.rawReturnId == item.orderId).FirstOrDefault();
if (wmsRawReturn != null)
{
wmsRawReturn.executeStatus = "2";
dbContext.Update(wmsRawReturn);
}
2 years ago
}
1 year ago
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
2 years ago
dbContext.SaveChanges();
1 year ago
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
2 years ago
}
2 years ago
}
}
}
}
2 years ago
break;
2 years ago
}
}
catch (Exception ex)
{
LogManager.Error(ex);
}
finally
{
Thread.Sleep(1000);
}
}
}
}
}