Product_Wms/WcsMain/ApiServe/Service/ContainerService/ContainerService.cs

134 lines
6.4 KiB
C#
Raw Normal View History

using WcsMain.ApiServe.Dto.Container;
using WcsMain.Business.CommonAction;
using WcsMain.Constant.Enum.Stacker;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
2024-11-22 08:08:45 +08:00
using WcsMain.ApiClient.WMS;
using WcsMain.ApiClient.WMS.Dto;
using WcsMain.Common;
using WcsMain.Constant.ExtendMethod;
2024-11-25 10:46:38 +08:00
using WcsMain.EquipOperation.StackerConvey;
namespace WcsMain.ApiServe.Service.ContainerService;
[Service]
2024-11-25 10:46:38 +08:00
public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent, WmsBaseWebApi wmsBaseWebApi, StackerConveyOperation stackerConveyOperation)
{
/// <summary>
/// 请求四向车任务
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public CreateInstoreTaskResoponse CreateInstoreTask(CreateInstoreTaskRequest request)
{
ConsoleLog.Info($"四向车请求载具入库:{request.PalleetNo},入库点位:{request.FormCellNo}");
if (string.IsNullOrEmpty(request.FormCellNo) || string.IsNullOrEmpty(request.PalleetNo))
{
return new() { Code = "400", Message = "缺少必须参数" };
}
List<AppWmsTask>? wmsTasks = wmsTaskDao.Select(new() { VehicleNo = request.PalleetNo, TaskStatus = (int)WmsTaskStatusEnum.arriveMid })?.OrderByDescending(o => o.CreateTime).ToList();
2024-11-22 08:08:45 +08:00
if (wmsTasks == null)
{
return new() { Code = "400", Message = "数据连接失败,请重试" };
}
2024-11-25 10:46:38 +08:00
bool apply = false;
2024-11-22 08:08:45 +08:00
if (wmsTasks.Count == 0)
{
2024-11-22 08:08:45 +08:00
/* 请求WMS获取任务 */
ApplyInRequest applyInRequest = new()
{
Point = request.FormCellNo,
VehicleNo = request.PalleetNo,
};
var response = wmsBaseWebApi.HttpPost<ApplyInRequest, WmsResponse>(applyInRequest, CommonData.AppApiBaseInfos.GetAddress("ApplyEnterApiAddress") ?? "");
if(response.IsSend && response.ResponseEntity != null && response.ResponseEntity.Code == 0)
{
int i = 0;
while(i < 5)
{
i++;
Thread.Sleep(1000);
wmsTasks = wmsTaskDao.Select(new() { VehicleNo = request.PalleetNo, TaskStatus = (int)WmsTaskStatusEnum.create })?.OrderByDescending(o => o.CreateTime).ToList();
2024-11-25 10:46:38 +08:00
if (wmsTasks == null || wmsTasks.Count < 1) continue;
apply = true;
2024-11-22 08:08:45 +08:00
break;
}
}
}
if(wmsTasks == default || wmsTasks.Count < 1)
{
return new() { Code = "400", Message = "无任务,请重试" };
}
AppWmsTask wmsTask = wmsTasks.First();
/* 更新状态为前往终点 */
2024-11-25 10:46:38 +08:00
var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, StartTime = apply ? DateTime.Now : null, TaskStatus = (int)WmsTaskStatusEnum.toDestination, ModifyTime = DateTime.Now });
ConsoleLog.Success($"API更新任务状态结果{(updateResult > 0 ? "" : "")},任务号:{wmsTask.TaskId}");
2024-11-25 10:46:38 +08:00
//Task.Factory.StartNew(() =>
//{
// // 给PLC写完成原因是四向车给PLC经常写入失败。
// Thread.Sleep(500);
// for (int i = 0; i < 3; i++)
// {
// stackerConveyOperation.StandTaskApplyComplete(request.FormCellNo);
// }
//});
return new()
{
Code = "200",
Message = "操作成功",
WmsTaskId = wmsTask.WcsId,
PalletNo = wmsTask.VehicleNo,
FromCellNo = request.FormCellNo,
ToCellNo = wmsTask.Destination,
};
}
/// <summary>
/// 四向车任务反馈
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public TaskStateNoticeResponse TaskStateNotice(TaskStateNoticeRequest request)
{
if(string.IsNullOrEmpty(request.TaskState?.ToString()) || string.IsNullOrEmpty(request.WmsTaskId?.ToString()) || string.IsNullOrEmpty(request.FactendCell))
{
return new() { Code = "400", Message = "缺少必须的参数" };
}
List<AppWmsTask>? appWmsTasks = wmsTaskDao.Select(new() { WcsId = request.WmsTaskId?.ToString() });
if(appWmsTasks == null)
{
return new() { Code = "400", Message = "数据连接异常,请稍后再试" };
}
if (appWmsTasks.Count < 1)
{
return new() { Code = "400", Message = $"该任务号不存在:{request.WmsTaskId}" };
}
AppWmsTask wmsTask = appWmsTasks.First();
if(request.TaskState?.ToString() == "20")
{
if (wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.moveTask)
{
/* 入库/移库 完成需要反馈WMS任务完成更新任务状态为完成 */
string? errText = taskExecuteEvent.CompleteTaskEvent(wmsTask, "四向车上报完成", request.FactendCell);
return new() { Code = string.IsNullOrEmpty(errText) ? "200" : "400", Message = string.IsNullOrEmpty(errText) ? "成功" : errText, WmsTaskId = request.WmsTaskId?.ToString() };
}
if (wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask)
{
/* 更新任务状态为到达中间点 */
int updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.arriveMid, ModifyTime = DateTime.Now, TaskMsg = "四向车上报到达中间点" });
return new() { Code = updateResult > 0 ? "200" : "400", Message = updateResult > 0 ? "成功" : "数据异常", WmsTaskId = request.WmsTaskId?.ToString() };
}
return new() { Code = "400", Message = $"该任务不支持的类型:{request.WmsTaskId}" };
}
if (request.TaskState?.ToString() == "21")
{
/* 更新任务状态为取消 */
int updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.err, TaskMsg = "四向车取消", EndTime = DateTime.Now, ModifyTime = DateTime.Now });
return new() { Code = updateResult > 0 ? "200" : "400", Message = updateResult > 0 ? "成功" : "数据异常", WmsTaskId = request.WmsTaskId?.ToString() };
}
return new() { Code = "400", Message = $"不支持的状态类型:{request.TaskState}" };
}
}