Product_Wms/WcsMain/ApiServe/Service/ContainerService/ContainerService.cs
2024-11-25 10:46:38 +08:00

134 lines
6.4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
using WcsMain.ApiClient.WMS;
using WcsMain.ApiClient.WMS.Dto;
using WcsMain.Common;
using WcsMain.Constant.ExtendMethod;
using WcsMain.EquipOperation.StackerConvey;
namespace WcsMain.ApiServe.Service.ContainerService;
[Service]
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();
if (wmsTasks == null)
{
return new() { Code = "400", Message = "数据连接失败,请重试" };
}
bool apply = false;
if (wmsTasks.Count == 0)
{
/* 请求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();
if (wmsTasks == null || wmsTasks.Count < 1) continue;
apply = true;
break;
}
}
}
if(wmsTasks == default || wmsTasks.Count < 1)
{
return new() { Code = "400", Message = "无任务,请重试" };
}
AppWmsTask wmsTask = wmsTasks.First();
/* 更新状态为前往终点 */
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}");
//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}" };
}
}