134 lines
6.4 KiB
C#
134 lines
6.4 KiB
C#
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}" };
|
||
}
|
||
|
||
}
|