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.

175 lines
9.5 KiB
C#

2 years ago
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
1 year ago
using Khd.Core.Library;
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
{
1 year ago
private readonly LoggerUtils _logger = new LoggerUtils();
2 years ago
private readonly IHost _host;
int FloorNo { get; set; }
int agvID = 10;
1 year ago
public FiveFloorBearAgv(IHost host, int floor)
2 years ago
{
this._host = host;
FloorNo = floor;
}
/// <summary>
/// 启动上件扫描监听
/// </summary>
public void StartPoint()
{
Thread FlowPointThread = new(MonitorInLocatorPoint);
1 year ago
FlowPointThread.IsBackground = true;
FlowPointThread.Name = "FiveFloorBearAgv";
2 years ago
FlowPointThread.Start();
Console.WriteLine(DateTime.Now + ":五楼AGV上件扫描监听启动成功");
1 year ago
_logger.Info("五楼AGV上件扫描监听启动成功");
2 years ago
}
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
1 year ago
.Where(t => t.IsDelete == 0 || t.IsDelete == null)
2 years ago
.Where(t => t.nextPointId == agvID)
.OrderBy(t => t.createTime).ToList();
1 year ago
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
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
1 year ago
positionCode=startEquip.agvPositionCode,
2 years ago
type=baseDictionary.agvType
2 years ago
},
new ()
{
1 year ago
positionCode=endEquip.agvPositionCode,
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
_logger.Info("五楼背负式AGV线程下发任务" + agvTask.ToJsonString());
1 year ago
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程下发任务" + startEquip.agvPositionCode + "," + endEquip.agvPositionCode);
item.taskCode = reponseMessage.data;
2 years ago
item.taskStatus = 1;
dbContext.Update(item);
2 years ago
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
2 years ago
dbContext.SaveChanges();
}
else
{
1 year ago
_logger.Info("下发小车任务失败" + result);
2 years ago
}
}
else
{
1 year ago
//if (item.useFlag == 1)//接料位-工位默认为1工位到接料位需Mes通知
2 years ago
{
{
1 year ago
if (item.taskStatus == 4)//通知捡料完成
2 years ago
{
2 years ago
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
1 year ago
taskCode = item.taskCode
2 years ago
};
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
_logger.Info("五楼背负式AGV线程完成任务" + item.objid);
1 year ago
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
1 year ago
item.taskStatus = 5;
dbContext.Update(item);
dbContext.SaveChanges();
1 year ago
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 5 });
2 years ago
}
}
1 year ago
else if (item.taskStatus == 7)//通知拿料完成
2 years ago
{
1 year ago
_logger.Info("五楼背负式AGV线程完成任务" + item.objid);
1 year ago
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
2 years ago
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
1 year ago
taskCode = item.taskCode
2 years ago
};
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(item);
2 years ago
dbContext.SaveChanges();
1 year ago
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)
{
1 year ago
_logger.Error(ex.Message + "\n" + ex.StackTrace);
2 years ago
}
finally
{
Thread.Sleep(1000);
}
}
}
}
}