123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- using Microsoft.AspNetCore.Mvc;
- using Newtonsoft.Json;
- using PlcSiemens.Core.Extension;
- using ServiceCenter;
- using ServiceCenter.Attributes;
- using ServiceCenter.Extensions;
- using ServiceCenter.Redis;
- using ServiceCenter.SqlSugars;
- using System.Net.NetworkInformation;
- using System.Text;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol.DataStructure;
- using WCS.Entity.Protocol.SRM;
- using WCS.WorkEngineering.Extensions;
- using WCS.WorkEngineering.Systems;
- using WCS.WorkEngineering.WebApi.Models.WCS.Request;
- using WCS.WorkEngineering.WebApi.Models.WCS.Response;
- using WCS.WorkEngineering.WebApi.Models.WMS.Response;
- namespace WCS.WorkEngineering.WebApi.Controllers
- {
-
-
- /// <summary>
- /// WCS相关接口控制器
- /// </summary>
- [ApiController]
- [Route("api/[controller]/[action]")]
- public class WcsController : ControllerBase
- {
-
- /// <summary>
- /// 获取设备配置信息接口
- /// </summary>
- /// <returns></returns>
- [HttpGet]
- public List<Device> GetDeviceList()
- {
- return Device.All.ToList();
- }
- /// <summary>
- /// 设备信息写入接口
- /// </summary>
- [HttpPost]
- public void GetDevList()
- {
- var a = RedisHub.Monitor.LRange("Packs", 0, 80000);
- var packs = a.Select(JsonConvert.DeserializeObject<DeviceDataPack>).ToList();
- }
- /// <summary>
- /// 任务处理接口
- /// </summary>
- /// <param name="req"></param>
- /// <returns></returns>
- [HttpPost, Log("任务处理接口")]
- public SRes<HandleTaskResponse> HandleTask([FromBody] HandleTaskRequest req)
- {
- var response = new SRes<HandleTaskResponse>() { ResCode = ResponseStatusCodeEnum.Sucess, ResDataList = new List<HandleTaskResponse>() };
- switch (req.Type)
- {
- //取消任务
- case HandleTaskTypeEnum.取消任务:
- SqlSugarHelper.Do(db =>
- {
- foreach (var item in req.TaskIds)
- {
- var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item).First();
- if (task != null)
- {
- //验证wms是否能取消
- var res = WmsApi.HandleTaskVerify(response, item, 106);
- if (res == null) continue;
- switch (task.Type)
- {
- //case TaskType.SetPlate:
- //if (task.Status != Entity.TaskStatus.WaitingToExecute)
- //{
- // response.ResDataList.Add(new HandleTaskResponse()
- // {
- // IsSuccess = false,
- // TaskNo = item,
- // Message = $"只能取消待执行状态组盘任务",
- // });
- // continue;
- //}
- //break;
- //case TaskType.EnterDepot:
- //if (task.Status > Entity.TaskStatus.NewBuild)
- //{
- // response.ResDataList.Add(new HandleTaskResponse()
- // {
- // IsSuccess = false,
- // TaskNo = item,
- // Message = $"只能取消待执行状态入库任务",
- // });
- // continue;
- //}
- //break;
- case TaskType.OutDepot:
- if (task.Status > Entity.TaskStatus.WaitingToExecute)
- {
- response.ResDataList.Add(new HandleTaskResponse()
- {
- IsSuccess = false,
- TaskNo = item,
- Message = $"只能取消待执行状态出库任务",
- });
- continue;
- }
- break;
- case TaskType.TransferDepot:
- if (task.Status > Entity.TaskStatus.WaitingToExecute)
- {
- response.ResDataList.Add(new HandleTaskResponse()
- {
- IsSuccess = false,
- TaskNo = item,
- Message = $"无法取消{task.Status.GetDescription()}的移库任务,只能取消新建/待执行的移库任务",
- });
- continue;
- }
- break;
- case TaskType.Delivery:
- break;
- case TaskType.EmptyInit:
- if (task.Status != Entity.TaskStatus.WaitingToExecute)
- {
- response.ResDataList.Add(new HandleTaskResponse()
- {
- IsSuccess = false,
- TaskNo = item,
- Message = $"只能取消待执行状态空轮初始化任务",
- });
- continue;
- }
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
- var cancelRes = WmsApi.CarryTaskInfo(response, item, 106);
- if (cancelRes == null) continue;
- //找到对应的AGV任务
- var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.ID == task.AgvTaskID && v.AgvStatus < AGVTaskStatus.MissionCompleted).SplitTable(v => v.Take(2)).First();
- if (agv != null)
- {
- if (!agv.AgvID.IsNullOrEmpty())
- {
- var cancelTaskUpdateRes = AgvApi.CancelAgvTask(response, item, agv.AgvID);
- //if (cancelTaskUpdateRes == null) continue;
- }
- agv.Status = AGVTaskStatus.Cancel;
- agv.AgvStatus = AGVTaskStatus.Cancel;
- db.Default.Updateable(agv).SplitTable(x=>x.Take(2)).ExecuteCommand();
- }
- //更新任务状态
- task.Status = Entity.TaskStatus.Cancel;
- task.EedTime = DateTime.Now;
- task.EditWho = req.User;
- task.ManualRemarks = req.ManualRemarks;
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, "未知", "任务取消");
- }
- else
- {
- response.ResDataList.Add(new HandleTaskResponse()
- {
- IsSuccess = false,
- TaskNo = item,
- Message = $"未找到对应任务{item}"
- });
- }
- }
- });
- break;
- // 完成任务
- case HandleTaskTypeEnum.完成任务:
- SqlSugarHelper.Do(db =>
- {
- foreach (var item in req.TaskIds)
- {
- var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item).First();
- if (task == null) continue;
- switch (task.Type)
- {
- case TaskType.OutDepot:
- {
- var res = WmsApi.HandleTaskVerify(response, item, 99);
- if (res == null) continue;
- if (task.BusType == "装箱码垛" || task.BusType == "扭转检测")
- {
- response.ResDataList.Add(new HandleTaskResponse()
- {
- IsSuccess = false,
- TaskNo = item,
- Message = $"当前任务不能手工完成",
- });
- continue;
- }
- if (task.Status >= Entity.TaskStatus.Finish)
- {
- response.ResDataList.Add(new HandleTaskResponse()
- {
- IsSuccess = false,
- TaskNo = item,
- Message = $"只能完成未完成状态的任务",
- });
- continue;
- }
- var cancelRes = WmsApi.CarryTaskInfo(response, item, 99);
- if (cancelRes == null) continue;
- //找到对应的AGV任务
- var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.ID == task.AgvTaskID && v.AgvStatus < AGVTaskStatus.MissionCompleted).SplitTable(v => v.Take(2)).First();
- if (agv != null)
- {
- //if (!agv.AgvID.IsNullOrEmpty())
- //{
- // var cancelTaskUpdateRes = CancelAgvTask(response, item, agv.AgvID);
- // if (cancelTaskUpdateRes == null) continue;
- //}
- agv.Status = AGVTaskStatus.MissionCompleted;
- agv.AgvStatus = AGVTaskStatus.MissionCompleted;
- db.Default.Updateable(agv).SplitTable(x=>x.Take(2)).ExecuteCommand();
- }
- //更新任务状态
- task.Status = Entity.TaskStatus.Finish;
- task.EedTime = DateTime.Now;
- task.EditWho = req.User;
- task.ManualRemarks = req.ManualRemarks;
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, "未知", "任务完成");
- break;
- }
- case TaskType.EnterDepot:
- {
- var res = WmsApi.HandleTaskVerify(response, item, 99);
- if (res == null) continue;
- switch (task.Type)
- {
- case TaskType.EnterDepot:
- if (task.Status >= Entity.TaskStatus.Finish)
- {
- response.ResDataList.Add(new HandleTaskResponse()
- {
- IsSuccess = false,
- TaskNo = item,
- Message = $"只能完成未完成状态的任务",
- });
- continue;
- }
- if (task.AddrTo.Length < 6)
- {
- response.ResDataList.Add(new HandleTaskResponse()
- {
- IsSuccess = false,
- TaskNo = item,
- Message = $"只能完成已分配货位的任务",
- });
- continue;
- }
- break;
- case TaskType.SetPlate:
- case TaskType.OutDepot:
- case TaskType.TransferDepot:
- case TaskType.Delivery:
- case TaskType.EmptyInit:
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
- var cancelRes = WmsApi.CarryTaskInfo(response, item, 99);
- if (cancelRes == null) continue;
- //找到对应的AGV任务
- var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.ID == task.AgvTaskID && v.AgvStatus < AGVTaskStatus.MissionCompleted).SplitTable(v => v.Take(2)).First();
- if (agv != null)
- {
- //if (!agv.AgvID.IsNullOrEmpty())
- //{
- // var cancelTaskUpdateRes = CancelAgvTask(response, item, agv.AgvID);
- // if (cancelTaskUpdateRes == null) continue;
- //}
- agv.Status = AGVTaskStatus.MissionCompleted;
- agv.AgvStatus = AGVTaskStatus.MissionCompleted;
- db.Default.Updateable(agv).SplitTable(x=>x.Take(2)).ExecuteCommand();
- }
- //更新任务状态
- task.Status = Entity.TaskStatus.Finish;
- task.EedTime = DateTime.Now;
- task.EditWho = req.User;
- task.ManualRemarks = req.ManualRemarks;
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, "未知", "任务完成");
- break;
- }
- case TaskType.SetPlate:
- case TaskType.TransferDepot:
- case TaskType.Delivery:
- case TaskType.EmptyInit:
- default:
- response.ResDataList.Add(new HandleTaskResponse()
- {
- IsSuccess = false,
- TaskNo = item,
- Message = $"未找到对应任务{item}"
- });
- break;
- }
- }
- });
- break;
-
- default:
- throw new ArgumentOutOfRangeException();
- }
- return response;
- }
-
- }
- }
|