|
@@ -151,104 +151,107 @@ namespace WCS.WorkEngineering.WebApi.Controllers
|
|
|
[HttpPost]
|
|
|
public AgvCallbackResponse AgvCallback([FromBody] AgvCallbackRequest reqDto)
|
|
|
{
|
|
|
- var res = new AgvCallbackResponse() { code = AgvResponseCode.Success, message = "成功" };
|
|
|
- WCS_TaskInfo taskInfo = null;
|
|
|
- try
|
|
|
+ lock (LockHub.AgvCallbackLock)
|
|
|
{
|
|
|
- SqlSugarHelper.Do(db =>
|
|
|
+ var res = new AgvCallbackResponse() { code = AgvResponseCode.Success, message = "成功" };
|
|
|
+ WCS_TaskInfo taskInfo = null;
|
|
|
+ try
|
|
|
{
|
|
|
- //跟据AGVid找到对应的AGV任务
|
|
|
- var agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(2)).First(v => v.AgvID == reqDto.taskCode && v.Status < AGVTaskStatus.MissionCompleted);
|
|
|
- if (agvTask == null && reqDto.method != "applySecurity")
|
|
|
- {
|
|
|
- res.code = AgvResponseCode.Fail;
|
|
|
- res.message = "未找到对应的AGV任务";
|
|
|
- return;
|
|
|
- }
|
|
|
- switch (reqDto.method)
|
|
|
+ SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
- //case "start": //表示请求巷道
|
|
|
- // agvTask.Status = AGVTaskStatus.RequestOrPermission1;
|
|
|
- // break;
|
|
|
+ //跟据AGVid找到对应的AGV任务
|
|
|
+ var agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(2)).First(v => v.AgvID == reqDto.taskCode && v.Status < AGVTaskStatus.MissionCompleted);
|
|
|
+ if (agvTask == null && reqDto.method != "applySecurity")
|
|
|
+ {
|
|
|
+ res.code = AgvResponseCode.Fail;
|
|
|
+ res.message = "未找到对应的AGV任务";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ switch (reqDto.method)
|
|
|
+ {
|
|
|
+ //case "start": //表示请求巷道
|
|
|
+ // agvTask.Status = AGVTaskStatus.RequestOrPermission1;
|
|
|
+ // break;
|
|
|
|
|
|
- //case "end": //表示请求巷道
|
|
|
- // agvTask.Status = AGVTaskStatus.RequestOrPermission1;
|
|
|
- // break;
|
|
|
+ //case "end": //表示请求巷道
|
|
|
+ // agvTask.Status = AGVTaskStatus.RequestOrPermission1;
|
|
|
+ // break;
|
|
|
|
|
|
- case "applyContinue": //表示请求巷道
|
|
|
+ case "applyContinue": //表示请求巷道
|
|
|
|
|
|
- agvTask.Status = AGVTaskStatus.RequestOrPermission1;
|
|
|
- break;
|
|
|
+ agvTask.Status = AGVTaskStatus.RequestOrPermission1;
|
|
|
+ break;
|
|
|
|
|
|
- case "applySecurity": //表示请求放货或取货
|
|
|
- if (reqDto.callCode is "1012" or "1014" or "1016")
|
|
|
- {
|
|
|
- agvTask = db.Default.Queryable<WCS_AgvTaskInfo>()
|
|
|
- .SplitTable(tabs => tabs.Take(2))
|
|
|
- .First(v => v.Status == AGVTaskStatus.NewBuild && v.TaskType == AGVTaskType.CallForMaterial && v.Station == reqDto.callCode);
|
|
|
- agvTask.AgvID = reqDto.taskCode;
|
|
|
- var obj = World.GetSystemInstance<GetDeviceSystem>().Invoke("输送机") as List<Station>;
|
|
|
- var id = obj.FirstOrDefault(v => v.Entity.Code == agvTask.Station).Data.TaskNumber;
|
|
|
- taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == id);
|
|
|
- taskInfo.AgvTaskID = agvTask.ID;
|
|
|
- taskInfo.Status = Entity.TaskStatus.AGVExecution;
|
|
|
- db.Default.Updateable(taskInfo).ExecuteCommand();
|
|
|
- taskInfo.AddWCS_TASK_DTL(db, agvTask.Station, "agv执行中");
|
|
|
- }
|
|
|
- if (agvTask == null)
|
|
|
- {
|
|
|
- res.code = AgvResponseCode.Fail;
|
|
|
- res.message = "未找到对应的AGV任务";
|
|
|
- return;
|
|
|
- }
|
|
|
- agvTask.Status = AGVTaskStatus.RequestOrPermission2;
|
|
|
- break;
|
|
|
+ case "applySecurity": //表示请求放货或取货
|
|
|
+ if (reqDto.callCode is "1012" or "1014" or "1016")
|
|
|
+ {
|
|
|
+ agvTask = db.Default.Queryable<WCS_AgvTaskInfo>()
|
|
|
+ .SplitTable(tabs => tabs.Take(2))
|
|
|
+ .First(v => v.Status == AGVTaskStatus.NewBuild && v.TaskType == AGVTaskType.CallForMaterial && v.Station == reqDto.callCode);
|
|
|
+ agvTask.AgvID = reqDto.taskCode;
|
|
|
+ var obj = World.GetSystemInstance<GetDeviceSystem>().Invoke("输送机") as List<Station>;
|
|
|
+ var id = obj.FirstOrDefault(v => v.Entity.Code == agvTask.Station).Data.TaskNumber;
|
|
|
+ taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == id);
|
|
|
+ taskInfo.AgvTaskID = agvTask.ID;
|
|
|
+ taskInfo.Status = Entity.TaskStatus.AGVExecution;
|
|
|
+ db.Default.Updateable(taskInfo).ExecuteCommand();
|
|
|
+ taskInfo.AddWCS_TASK_DTL(db, agvTask.Station, "agv执行中");
|
|
|
+ }
|
|
|
+ if (agvTask == null)
|
|
|
+ {
|
|
|
+ res.code = AgvResponseCode.Fail;
|
|
|
+ res.message = "未找到对应的AGV任务";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ agvTask.Status = AGVTaskStatus.RequestOrPermission2;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "hjend_2": //补空任务完成
|
|
|
+ if (agvTask.TaskType == AGVTaskType.CallForMaterial)
|
|
|
+ {
|
|
|
+ taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.AgvTaskID == agvTask.ID);
|
|
|
+ taskInfo.Status = Entity.TaskStatus.Finish;
|
|
|
+ taskInfo.EedTime = DateTime.Now;
|
|
|
+ taskInfo.AddWCS_TASK_DTL(db, "agv缓存区", "任务完成");
|
|
|
+ db.Default.Updateable(taskInfo).ExecuteCommand();
|
|
|
+ taskInfo.CompleteOrCancelTasks(db);
|
|
|
+ }
|
|
|
+ agvTask.Status = AGVTaskStatus.MissionCompleted;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "endhjBM": //取满任务完成
|
|
|
+ agvTask.Status = AGVTaskStatus.MissionCompleted;
|
|
|
+ break;
|
|
|
|
|
|
- case "hjend_2": //补空任务完成
|
|
|
- if (agvTask.TaskType == AGVTaskType.CallForMaterial)
|
|
|
- {
|
|
|
+ case "tcEnd": //机台补空任务完成
|
|
|
+ agvTask.Status = AGVTaskStatus.MissionCompleted;
|
|
|
taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.AgvTaskID == agvTask.ID);
|
|
|
taskInfo.Status = Entity.TaskStatus.Finish;
|
|
|
- taskInfo.EedTime = DateTime.Now;
|
|
|
- taskInfo.AddWCS_TASK_DTL(db, "agv缓存区", "任务完成");
|
|
|
+ taskInfo.AddWCS_TASK_DTL(db, "agv", "任务完成");
|
|
|
db.Default.Updateable(taskInfo).ExecuteCommand();
|
|
|
taskInfo.CompleteOrCancelTasks(db);
|
|
|
- }
|
|
|
- agvTask.Status = AGVTaskStatus.MissionCompleted;
|
|
|
- break;
|
|
|
+ break;
|
|
|
|
|
|
- case "endhjBM": //取满任务完成
|
|
|
- agvTask.Status = AGVTaskStatus.MissionCompleted;
|
|
|
- break;
|
|
|
+ case "exc_end": //异常信息上抛-值不匹配
|
|
|
+ agvTask.Status = AGVTaskStatus.MissionCompleted;
|
|
|
+ break;
|
|
|
|
|
|
- case "tcEnd": //机台补空任务完成
|
|
|
- agvTask.Status = AGVTaskStatus.MissionCompleted;
|
|
|
- taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.AgvTaskID == agvTask.ID);
|
|
|
- taskInfo.Status = Entity.TaskStatus.Finish;
|
|
|
- taskInfo.AddWCS_TASK_DTL(db, "agv", "任务完成");
|
|
|
- db.Default.Updateable(taskInfo).ExecuteCommand();
|
|
|
- taskInfo.CompleteOrCancelTasks(db);
|
|
|
- break;
|
|
|
+ case "outbin": //小车退出取货位
|
|
|
+ agvTask.Status = AGVTaskStatus.Complete3;
|
|
|
+ break;
|
|
|
|
|
|
- case "exc_end": //异常信息上抛-值不匹配
|
|
|
- agvTask.Status = AGVTaskStatus.MissionCompleted;
|
|
|
- break;
|
|
|
-
|
|
|
- case "outbin": //小车退出取货位
|
|
|
- agvTask.Status = AGVTaskStatus.Complete3;
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- db.Default.Updateable(agvTask).SplitTable().ExecuteCommand();
|
|
|
- });
|
|
|
- if (taskInfo != null && taskInfo.Status == Entity.TaskStatus.Finish) WmsApi.CompleteTask(taskInfo.ID);
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
- res.code = AgvResponseCode.Error;
|
|
|
- res.message = ex.Message;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ db.Default.Updateable(agvTask).SplitTable().ExecuteCommand();
|
|
|
+ });
|
|
|
+ if (taskInfo != null && taskInfo.Status == Entity.TaskStatus.Finish) WmsApi.CompleteTask(taskInfo.ID);
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ res.code = AgvResponseCode.Error;
|
|
|
+ res.message = ex.Message;
|
|
|
+ }
|
|
|
}
|
|
|
return res;
|
|
|
}
|