|
@@ -0,0 +1,499 @@
|
|
|
+using AmrControl.ADS;
|
|
|
+using AmrControl.Common;
|
|
|
+using AmrControl.DB;
|
|
|
+using AmrControl.DB.Models;
|
|
|
+using AmrControl.Dto;
|
|
|
+using AmrControl.JGR;
|
|
|
+using AmrControl.services;
|
|
|
+using AmrControl.Vo;
|
|
|
+using Microsoft.AspNetCore.Mvc;
|
|
|
+using Newtonsoft.Json;
|
|
|
+using NPOI.OpenXmlFormats.Dml;
|
|
|
+
|
|
|
+// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
|
|
+
|
|
|
+namespace AmrControl.Controllers
|
|
|
+{
|
|
|
+
|
|
|
+ [ApiController]
|
|
|
+ public class StorageController : ControllerBase
|
|
|
+ {
|
|
|
+ private readonly MyDbHandler handler;
|
|
|
+ public StorageController(MyDbHandler dbhandler)
|
|
|
+ {
|
|
|
+ handler = dbhandler;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取今日任务
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ [Route("api/v1/storage/tasks")]
|
|
|
+ public HttpStatus<List<IssueNoteDto>> GetTodayTasks()
|
|
|
+ {
|
|
|
+ HttpStatus<List<IssueNoteDto>> status = new HttpStatus<List<IssueNoteDto>>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ //status.Data = MockData.getIssueNodeDto();
|
|
|
+ //return status;
|
|
|
+
|
|
|
+ status.Data = handler.getIssueNodeDto();
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询物料号所属的储位信息
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ [Route("api/v1/storage/location")]
|
|
|
+ public HttpStatus<List<StorageBox>> QueryLocation(string materialID)
|
|
|
+ {
|
|
|
+ HttpStatus<List<StorageBox>> status = new HttpStatus<List<StorageBox>>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ status.Data = MockData.getStorageBox();
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询仓储格子的储位信息
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ [Route("api/v1/storage/gridLocation")]
|
|
|
+ public HttpStatus<List<StorageBox>> QueryGridLocation(int X,int Y)
|
|
|
+ {
|
|
|
+ HttpStatus<List<StorageBox>> status = new HttpStatus<List<StorageBox>>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ status.Data = MockData.getStorageBox(X, Y);
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询物料盒的RFID来返回物料盒所含物料的内容
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ [Route("api/v1/storage/storageBox")]
|
|
|
+ public HttpStatus<StorageBox> QueryStorageBox(string boxRFID)
|
|
|
+ {
|
|
|
+ HttpStatus<StorageBox> status = new HttpStatus<StorageBox>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ status.Data = MockData.getStorageBox().FirstOrDefault(x => x.BoxRFID == boxRFID);
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 出库并做数量扣除,返回出库的数量
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="location"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [Route("api/v1/storage/retrieval")]
|
|
|
+ public HttpStatus<List<RequireRawBom>> Retrieval([FromBody]RetrievalDto retrievalDto)
|
|
|
+ {
|
|
|
+ HttpStatus<List<RequireRawBom>> status = new HttpStatus<List<RequireRawBom>>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ //让数量和需求相满足
|
|
|
+ foreach (var item in retrievalDto.RequireRawBoms)
|
|
|
+ {
|
|
|
+ item.ReleaseQuantity = item.DemandQuantity;
|
|
|
+ }
|
|
|
+ status.Data = retrievalDto.RequireRawBoms;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 物料盒入库,从入库点搬进仓储,坐标会根据系统自动重新分配
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="boxRFID"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ [Route("api/v1/storage/moveIn")]
|
|
|
+ public HttpStatus<string> StorageBoxMoveIn(string boxRFID)
|
|
|
+ {
|
|
|
+ HttpStatus<string> status = new HttpStatus<string>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 物料盒出库,从当前仓储点搬出到捡料位
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="boxRFID"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ [Route("api/v1/storage/moveOut")]
|
|
|
+ public HttpStatus<string> StorageBoxMoveOut(string boxRFID)
|
|
|
+ {
|
|
|
+ HttpStatus<string> status = new HttpStatus<string>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 物料盒调仓位
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="boxRFID"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [Route("api/v1/storage/moveTo")]
|
|
|
+ public HttpStatus<List<KeyValuePair<int, string>>> StorageBoxMoveTo([FromBody] BoxMovingStatusDto movingStatus)
|
|
|
+ {
|
|
|
+ HttpStatus<List<KeyValuePair<int, string>>> status = new HttpStatus<List<KeyValuePair<int, string>>>();
|
|
|
+ status.Data = new List<KeyValuePair<int, string>>();
|
|
|
+ status.Data.Add(new KeyValuePair<int, string>(0, "第1步,前往目标点X1-Y2"));
|
|
|
+ status.Data.Add(new KeyValuePair<int, string>(1, "第2步,抓取顶部物料盒"));
|
|
|
+ status.Data.Add(new KeyValuePair<int, string>(2, "第3步,移走顶部物料盒到X2-Y3"));
|
|
|
+ status.Data.Add(new KeyValuePair<int, string>(3, "第4步,放下物料盒子"));
|
|
|
+ status.Data.Add(new KeyValuePair<int, string>(4, "第5步,前往目标点X1-Y2"));
|
|
|
+ status.Data.Add(new KeyValuePair<int, string>(5, "第6步,抓取目标物料盒"));
|
|
|
+ status.Data.Add(new KeyValuePair<int, string>(6, "第7步,前往调仓点X4-Y5"));
|
|
|
+ status.Data.Add(new KeyValuePair<int, string>(7, "第7步,放下物料盒子,调仓完成"));
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 呼叫空闲的轨道车到检料位
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [Route("api/v1/line/freeJGR")]
|
|
|
+ public HttpStatus<string> CallFreeRailCar()
|
|
|
+ {
|
|
|
+ HttpStatus<string> status = new HttpStatus<string>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 调度检料位的轨道车到工位,坐标自动感知
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [Route("api/v1/line/jgrToStation")]
|
|
|
+ public HttpStatus<string> MoveRailCarToStation()
|
|
|
+ {
|
|
|
+ HttpStatus<string> status = new HttpStatus<string>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 移动轨道车到目标点位
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [Route("api/v1/line/jgrMoveTo")]
|
|
|
+ public HttpStatus<string> RailCarMoveTo([FromBody] JgrMovingDto movingDto)
|
|
|
+ {
|
|
|
+ HttpStatus<string> status = new HttpStatus<string>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取仓储的信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="StorageID"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ [Route("api/v1/storage/storageStatus")]
|
|
|
+ public HttpStatus<StorageStatus> GetStorageStatus(string StorageID)
|
|
|
+ {
|
|
|
+ HttpStatus<StorageStatus> status = new HttpStatus<StorageStatus>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ status.Data = new StorageStatus();
|
|
|
+ status.Data.StorageName = "1号仓储柜";
|
|
|
+ status.Data.TodayMoveOutCount = 10;
|
|
|
+ status.Data.TodayMoveInCount = 5;
|
|
|
+ status.Data.TotalLocation = 300;
|
|
|
+ status.Data.FreeLocation = 280;
|
|
|
+ status.Data.MaterialCount = 105;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取捡料工位的信息,包括是否有车
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="StorageID"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ [Route("api/v1/storage/pickingStation")]
|
|
|
+ public HttpStatus<PickingStationStatus> GetPickingStation(string StorageID)
|
|
|
+ {
|
|
|
+ HttpStatus<PickingStationStatus> status = new HttpStatus<PickingStationStatus>();
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ status.Data = new PickingStationStatus();
|
|
|
+ status.Data.ContainsJAR = false;
|
|
|
+ status.Data.ContainsBox = false;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 入库接口
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [Route("/api/v1/storage/in-storage")]
|
|
|
+ public HttpStatus<InStorageVO> inStroage([FromBody] InStorageDTO dto)
|
|
|
+ {
|
|
|
+ HttpStatus<InStorageVO> status = new();
|
|
|
+ if (!string.IsNullOrEmpty(dto.carId) && !string.IsNullOrWhiteSpace(dto.carId))
|
|
|
+ {
|
|
|
+ //查找车辆信息
|
|
|
+ List<JGR_Tc_Model> carStatus = JGRManager.GetInstance().GetJgrs();
|
|
|
+ var carInfo = carStatus.Where(m => m.jgrSN == dto.carId).FirstOrDefault();
|
|
|
+ if (carInfo == null)
|
|
|
+ {
|
|
|
+ status.Code = Dto.Code.Error;
|
|
|
+ status.Msg = "非法的车辆编号信息";
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ if (string.IsNullOrEmpty(dto.storagePos) || string.IsNullOrWhiteSpace(dto.storagePos))
|
|
|
+ {
|
|
|
+ status.Code = Dto.Code.Error;
|
|
|
+ status.Msg = "非法的储位坐标信息";
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ bool isOk = JGRManager.GetInstance().checkStoragePos(int.Parse(dto.storagePos.Split(',')[0]), int.Parse(dto.storagePos.Split(',')[1]));
|
|
|
+ if(!isOk)
|
|
|
+ {
|
|
|
+ status.Code = Dto.Code.Error;
|
|
|
+ status.Msg = "非法的储位坐标信息";
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ string taskId = TaskExecManager.getInstance().genTaskId();
|
|
|
+ Proxy taskProxy = new(() =>
|
|
|
+ {
|
|
|
+ //移动轨道车到入库位
|
|
|
+ //JGRManager.GetInstance().moveCarToDestAsync(carInfo, JGRManager.GetInstance().inAmrPos[0], JGRManager.GetInstance().inAmrPos[1]);
|
|
|
+ JGRManager.GetInstance().storageCarToInAsync(carInfo, dto);
|
|
|
+ });
|
|
|
+ TaskExecManager.getInstance().addTask(taskProxy, taskId);
|
|
|
+ InStorageVO vo = new()
|
|
|
+ {
|
|
|
+ taskId = taskId
|
|
|
+ };
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ status.Data = vo;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ status.Code = Dto.Code.Error;
|
|
|
+ status.Msg = "非法的车辆编号信息";
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 判断任务是否完成
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="taskId"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ [Route("/api/v1/storage/check-task-completed")]
|
|
|
+ public HttpStatus<bool> checkTaskCompleted([FromQuery] string taskId)
|
|
|
+ {
|
|
|
+ HttpStatus<bool> status = new();
|
|
|
+ if (string.IsNullOrEmpty(taskId) || string.IsNullOrWhiteSpace(taskId))
|
|
|
+ {
|
|
|
+ status.Code = Dto.Code.Error;
|
|
|
+ status.Msg = "非法的任务id信息";
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ status.Data = TaskExecManager.getInstance().checkTaskIsCompleted(taskId);
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 出库逻辑
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [Route("/api/v1/storage/out-storage")]
|
|
|
+ public HttpStatus<OutStorageVO> outStorage([FromBody] OutStorageDTO dto)
|
|
|
+ {
|
|
|
+ HttpStatus<OutStorageVO> status = new();
|
|
|
+ //判断仓储坐标是否存在
|
|
|
+ if (string.IsNullOrEmpty(dto.storagePos) || string.IsNullOrWhiteSpace(dto.storagePos))
|
|
|
+ {
|
|
|
+ status.Code = Dto.Code.Error;
|
|
|
+ status.Msg = "非法的储位坐标信息";
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ ////呼叫空的轨道车到出库位置
|
|
|
+ //List<JGR_Tc_Model> carStatus = JGRManager.GetInstance().GetJgrs();
|
|
|
+ ////获取空的地车
|
|
|
+ //JGR_Tc_Model? free_car = null;
|
|
|
+ //if (carStatus != null && carStatus.Count > 0)
|
|
|
+ //{
|
|
|
+ // foreach (var car in carStatus)
|
|
|
+ // {
|
|
|
+ // if (car.jgrType == 1 && car.moveStatus == 0
|
|
|
+ // && (string.IsNullOrEmpty(car.rfid)
|
|
|
+ // || string.IsNullOrWhiteSpace(car.rfid)))
|
|
|
+ // {
|
|
|
+ // free_car = car;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+ //if (free_car is null)
|
|
|
+ //{
|
|
|
+ // status.Code = Dto.Code.Error;
|
|
|
+ // status.Msg = "没有空闲的车辆,请稍后再试";
|
|
|
+ // return status;
|
|
|
+ //}
|
|
|
+
|
|
|
+ //JGRManager.GetInstance().moveCarToDestAsync(free_car, JGRManager.GetInstance().outAmrPos[0], JGRManager.GetInstance().outAmrPos[1]);
|
|
|
+ //Thread.Sleep(200);
|
|
|
+ //carStatus = JGRManager.GetInstance().GetJgrs();
|
|
|
+ //if (carStatus is null)
|
|
|
+ //{
|
|
|
+ // status.Code = Dto.Code.Error;
|
|
|
+ // status.Msg = "没有空闲的车辆,请稍后再试";
|
|
|
+ // return status;
|
|
|
+ //}
|
|
|
+ ////获取空闲的仓储车信息
|
|
|
+ //JGR_Tc_Model? storageCarInfo = storageCarInfo = carStatus.Where(m => m.jgrType == 0
|
|
|
+ // && m.moveStatus == 0
|
|
|
+ // && m.basketPosition == 0
|
|
|
+ // && m.basketGripperStatus == 2
|
|
|
+ // ).FirstOrDefault();
|
|
|
+ //if(storageCarInfo == null)
|
|
|
+ //{
|
|
|
+ // status.Code = Dto.Code.Error;
|
|
|
+ // status.Msg = "没有空闲的车辆,请稍后再试";
|
|
|
+ // return status;
|
|
|
+ //}
|
|
|
+ //OutStorageVO vo = new()
|
|
|
+ //{
|
|
|
+ // taskId = Guid.NewGuid().ToString(),
|
|
|
+ // carId = free_car.jgrSN
|
|
|
+ //};
|
|
|
+ bool isOk = JGRManager.GetInstance().checkStoragePos(int.Parse(dto.storagePos.Split(',')[0]), int.Parse(dto.storagePos.Split(',')[1]));
|
|
|
+ if (!isOk)
|
|
|
+ {
|
|
|
+ status.Code = Dto.Code.Error;
|
|
|
+ status.Msg = "非法的储位坐标信息";
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ int dx = 0;
|
|
|
+ int dy = 0;
|
|
|
+ if (!string.IsNullOrEmpty(dto.stanCode)
|
|
|
+ && !string.IsNullOrWhiteSpace(dto.stanCode))
|
|
|
+ {
|
|
|
+ var station = JGRManager.GetInstance().getStationByNo(dto.stanCode);
|
|
|
+ if (station == null || station == default)
|
|
|
+ {
|
|
|
+ status.Code = Dto.Code.Error;
|
|
|
+ status.Msg = "非法的工站编号";
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ dx = station.positionX;
|
|
|
+ dy = station.positionY;
|
|
|
+ } else if (!string.IsNullOrEmpty(dto.destPos)
|
|
|
+ && !string.IsNullOrWhiteSpace(dto.destPos))
|
|
|
+ {
|
|
|
+ dx = int.Parse(dto.destPos.Split(',')[0]);
|
|
|
+ dy = int.Parse(dto.destPos.Split(',')[1]);
|
|
|
+ } else
|
|
|
+ {
|
|
|
+ dx = JGRManager.GetInstance().selectStationPos[0];
|
|
|
+ dy = JGRManager.GetInstance().selectStationPos[1];
|
|
|
+ }
|
|
|
+ string taskId = TaskExecManager.getInstance().genTaskId();
|
|
|
+ Proxy taskProxy = new (() =>
|
|
|
+ {
|
|
|
+ //移动轨道车到入库位
|
|
|
+ //JGRManager.GetInstance().moveCarToDestAsync(carInfo, JGRManager.GetInstance().inAmrPos[0], JGRManager.GetInstance().inAmrPos[1]);
|
|
|
+ JGRManager.GetInstance().storageCarToOutAsync(dto.storagePos, dx, dy);
|
|
|
+ });
|
|
|
+ TaskExecManager.getInstance().addTask(taskProxy, taskId);
|
|
|
+ OutStorageVO vo = new()
|
|
|
+ {
|
|
|
+ taskId = taskId
|
|
|
+ };
|
|
|
+ //获取到空的仓储车后,将仓储车信息反馈给服务端
|
|
|
+ //JGRManager.GetInstance().storageCarToOutAsync(storageCarInfo, free_car.jgrSN,
|
|
|
+ // dto.storagePos, dx, dy, vo.taskId);
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ status.Data = vo;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 调仓处理
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [Route("/api/v1/storage/move-storage")]
|
|
|
+ public HttpStatus<MoveStorageVO> moveStorage([FromBody] MoveStorageDTO dto)
|
|
|
+ {
|
|
|
+ HttpStatus<MoveStorageVO> status = new();
|
|
|
+ //判断仓储坐标是否存在
|
|
|
+ if (string.IsNullOrEmpty(dto.sourcePos)
|
|
|
+ || string.IsNullOrWhiteSpace(dto.sourcePos)
|
|
|
+ || string.IsNullOrEmpty(dto.destPos)
|
|
|
+ || string.IsNullOrWhiteSpace(dto.destPos)
|
|
|
+ || dto.sourcePos == dto.destPos)
|
|
|
+ {
|
|
|
+ status.Code = Dto.Code.Error;
|
|
|
+ status.Msg = "非法的储位坐标信息";
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ bool spBreak = JGRManager.GetInstance().checkStoragePos(int.Parse(dto.sourcePos.Split(',')[0]), int.Parse(dto.sourcePos.Split(',')[1]));
|
|
|
+ bool dpBreak = JGRManager.GetInstance().checkStoragePos(int.Parse(dto.destPos.Split(',')[0]), int.Parse(dto.destPos.Split(',')[1]));
|
|
|
+ if (!spBreak || !dpBreak)
|
|
|
+ {
|
|
|
+ status.Code = Dto.Code.Error;
|
|
|
+ status.Msg = "非法的储位坐标信息";
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ ////获取空闲的仓储车信息
|
|
|
+ //List<JGR_Tc_Model>? carStatus = JGRManager.GetInstance().GetJgrs();
|
|
|
+ //if(carStatus == null)
|
|
|
+ //{
|
|
|
+ // status.Code = Dto.Code.Error;
|
|
|
+ // status.Msg = "未找到车辆信息";
|
|
|
+ // return status;
|
|
|
+ //}
|
|
|
+ //JGR_Tc_Model? storageCarInfo = carStatus.Where(m => m.jgrType == 0
|
|
|
+ // && m.moveStatus == 0
|
|
|
+ // && m.basketPosition == 0
|
|
|
+ // && m.basketGripperStatus == 2
|
|
|
+ // ).FirstOrDefault();
|
|
|
+ //if(storageCarInfo == null)
|
|
|
+ //{
|
|
|
+ // status.Code = Dto.Code.Error;
|
|
|
+ // status.Msg = "没有空闲车辆";
|
|
|
+ // return status;
|
|
|
+ //}
|
|
|
+ //MoveStorageVO vo = new()
|
|
|
+ //{
|
|
|
+ // taskId = Guid.NewGuid().ToString(),
|
|
|
+ // carId = storageCarInfo.jgrSN
|
|
|
+ //};
|
|
|
+ ////获取到空的仓储车后,将仓储车信息反馈给服务端
|
|
|
+ //JGRManager.GetInstance().moveStorageAsync(storageCarInfo, dto, vo.taskId);
|
|
|
+ string taskId = TaskExecManager.getInstance().genTaskId();
|
|
|
+ Proxy taskProxy = new(() =>
|
|
|
+ {
|
|
|
+ //移动轨道车到入库位
|
|
|
+ //JGRManager.GetInstance().moveCarToDestAsync(carInfo, JGRManager.GetInstance().inAmrPos[0], JGRManager.GetInstance().inAmrPos[1]);
|
|
|
+ JGRManager.GetInstance().moveStorageAsync(dto);
|
|
|
+ });
|
|
|
+ TaskExecManager.getInstance().addTask(taskProxy, taskId);
|
|
|
+ MoveStorageVO vo = new()
|
|
|
+ {
|
|
|
+ taskId = taskId
|
|
|
+ };
|
|
|
+ status.Code = Dto.Code.Success;
|
|
|
+ status.Data = vo;
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|