2024-11-15 11:37:55 +08:00
|
|
|
|
using WcsMain.ApiClient.AGV.Dto;
|
|
|
|
|
|
using WcsMain.ApiServe.Dto.AGV;
|
2024-11-14 23:06:18 +08:00
|
|
|
|
using WcsMain.Business.CommonAction;
|
2024-11-15 11:37:55 +08:00
|
|
|
|
using WcsMain.Constant.Enum.Stacker;
|
2024-11-14 23:06:18 +08:00
|
|
|
|
using WcsMain.DataBase.Dao;
|
|
|
|
|
|
using WcsMain.DataBase.TableEntity;
|
2024-11-15 11:37:55 +08:00
|
|
|
|
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
|
2024-11-14 23:06:18 +08:00
|
|
|
|
namespace WcsMain.ApiServe.Service.AGVService;
|
|
|
|
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
|
|
public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent)
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// AGV 任务回告
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2024-11-15 11:37:55 +08:00
|
|
|
|
public AGVResponseLayout<AGVResponseLayout<object>> TaskCallBack(Dto.AGV.AGVRequestLayout<AGVRequestBodyLayout<AGVNoVeBuckMoveRequest>> request)
|
2024-11-14 23:06:18 +08:00
|
|
|
|
{
|
|
|
|
|
|
var bodyData = request.Body;
|
|
|
|
|
|
if(bodyData == default)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "ERROR", Success = false, Message = "Body 未能正确解析" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2024-11-20 22:35:08 +08:00
|
|
|
|
string? wmsTaskId = bodyData.Event?.RobotJobId; // 任务号
|
|
|
|
|
|
string? status = bodyData.Event?.State; // 状态
|
2024-11-14 23:06:18 +08:00
|
|
|
|
if(status == default || wmsTaskId == default)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "ERROR", Success = false, Message = "任务号和状态未能正确解析" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
/* 实际业务处理 */
|
|
|
|
|
|
// 找到此任务
|
|
|
|
|
|
List<AppWmsTask>? wmsTasks = wmsTaskDao.Select(new() { TaskId = wmsTaskId });
|
|
|
|
|
|
if(wmsTasks == default)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "ERROR", Success = false, Message = "数据连接异常" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
if (wmsTasks.Count < 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "ERROR", Success = false, Message = "该任务号不存在任务" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
AppWmsTask wmsTask = wmsTasks.First();
|
|
|
|
|
|
// 若是入库任务或者移库任务则在开始移动时上报WMS货物离开起始位置
|
|
|
|
|
|
if (status == "MOVE_BEGIN" && (wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.agv))
|
|
|
|
|
|
{
|
|
|
|
|
|
// 上报WMS任务已经开始
|
|
|
|
|
|
string? errText = taskExecuteEvent.LeaveStart(wmsTask);
|
|
|
|
|
|
if (string.IsNullOrEmpty(errText))
|
|
|
|
|
|
{
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "ERROR", Success = false, Message = $"操作异常:{errText}" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
// 若是出库位置则在上报任务完成时上报WMS任务完成
|
|
|
|
|
|
if (status == "DONE" || status == "ABNORMAL_COMPLETED")
|
|
|
|
|
|
{
|
|
|
|
|
|
if(wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.agv)
|
|
|
|
|
|
{
|
|
|
|
|
|
string? errText = taskExecuteEvent.CompleteTaskEvent(wmsTask, "AGV上报完成", wmsTask.Destination);
|
|
|
|
|
|
if (string.IsNullOrEmpty(errText))
|
|
|
|
|
|
{
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "ERROR", Success = false, Message = $"操作异常:{errText}" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
if(wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask)
|
|
|
|
|
|
{
|
|
|
|
|
|
var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.arriveMid, ModifyTime = DateTime.Now });
|
|
|
|
|
|
if(updateResult > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "ERROR", Success = false, Message = $"操作异常,数据更新失败" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(status == "CANCEL" || status == "ABNORMAL_CANCEL")
|
|
|
|
|
|
{
|
|
|
|
|
|
var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.err, TaskMsg = status, ModifyTime = DateTime.Now });
|
|
|
|
|
|
if (updateResult > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "ERROR", Success = false, Message = $"操作异常数据更新失败" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
var updateAllResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskMsg = status, ModifyTime = DateTime.Now });
|
|
|
|
|
|
if (updateAllResult > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
return new()
|
|
|
|
|
|
{
|
|
|
|
|
|
Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
|
|
|
|
|
|
Body = new() { Code = "ERROR", Success = false, Message = $"操作异常数据更新失败" }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|