using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Model.Models; using WIDESEAWCS_Core; using SqlSugar.Extensions; using WIDESEAWCS_DTO.WMS; using WIDESEAWCS_Common.LocationEnum; using WIDESEAWCS_Common; using WIDESEAWCS_Common.TaskEnum; namespace WIDESEAWCS_TaskInfoService { public partial class TaskService { #region 凯乐士任务创建 /// /// 创建凯乐士AGV入库任务 /// /// /// public WebResponseContent CreateKLSNewInTask(TaskDTO taskDTO, int taskType) { try { int containerType = taskDTO.containerCode.Contains("LLM") ? LocationTypeEnum.LargePallet.ObjToInt() : LocationTypeEnum.SmallPallet.ObjToInt(); //获取货位信息 Dt_KLSLocationInfo? kLSLocationInfo = _kLSLocationInfoService.GetFreeLocationInfo(taskDTO.toAreaCode, containerType) ?? throw new Exception($"未找到终点库区【{taskDTO.toAreaCode}】可用空货位!"); Dt_Task dt_Task = new() { TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), WMSTaskNum = taskDTO.taskCode, //WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), Grade = taskDTO.taskPriority, PalletCode = taskDTO.containerCode, Roadway = kLSLocationInfo.RoadwayNo, TaskState = TaskStatusEnum.New.ObjToInt(), TaskType = taskType, SourceAddress = taskDTO.fromLocationCode, CurrentAddress = taskDTO.fromLocationCode, NextAddress = kLSLocationInfo.LocationCode, TargetAddress = kLSLocationInfo.LocationCode, Creater = "WMS", }; kLSLocationInfo.LocationStatus = LocationStatusEnum.InLock.ObjToInt(); Db.Ado.BeginTran(); BaseDal.AddData(dt_Task); _kLSLocationInfoService.Repository.UpdateData(kLSLocationInfo); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); throw new Exception(ex.Message); } } /// /// 创建凯乐士AGV出库任务 /// /// /// /// public WebResponseContent CreateKLSNewOutTask(TaskDTO taskDTO, int taskType) { try { Dt_KLSLocationInfo? kLSLocationInfo = _kLSLocationInfoService.Repository.QueryFirst(x => x.LocationCode == taskDTO.fromLocationCode); if (kLSLocationInfo == null) throw new Exception($"未找到起点库位【{taskDTO.fromLocationCode}】!"); if (kLSLocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt()) throw new Exception($"起点库位【{taskDTO.fromLocationCode}】当前库位状态不可出库!"); Dt_Task dt_Task = new Dt_Task() { TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), WMSTaskNum = taskDTO.taskCode, WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), Grade = taskDTO.taskPriority, PalletCode = taskDTO.containerCode, Roadway = kLSLocationInfo.RoadwayNo, TaskState = TaskStatusEnum.New.ObjToInt(), TaskType = taskType, SourceAddress = taskDTO.fromLocationCode, CurrentAddress = taskDTO.fromLocationCode, NextAddress = taskDTO.toLocationCode, TargetAddress = taskDTO.toLocationCode, Creater = "WMS", }; kLSLocationInfo.LocationStatus = LocationStatusEnum.OutLock.ObjToInt(); Db.Ado.BeginTran(); BaseDal.AddData(dt_Task); _kLSLocationInfoService.Repository.UpdateData(kLSLocationInfo); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); throw new Exception(ex.Message); } } #endregion #region RGV任务创建 /// /// 创建四向车入库任务 /// /// /// /// public WebResponseContent CreateRGVNewInTask(TaskDTO taskDTO, int taskType) { try { List? rGVLocationInfos = _rGVLocationInfoService.Repository.QueryData(x => x.WarehouseId.ToString() == taskDTO.toAreaCode && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt()); if (rGVLocationInfos.Count < 1) throw new Exception($"未找到终点库区【{taskDTO.toAreaCode}】可用空货位!"); var rGVLocationInfo = rGVLocationInfos.OrderBy(x => x.Depth).First(); Dt_Task dt_Task = new Dt_Task() { TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), WMSTaskNum = taskDTO.taskCode, WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), Grade = taskDTO.taskPriority, PalletCode = taskDTO.containerCode, Roadway = rGVLocationInfo.RoadwayNo, TaskState = TaskStatusEnum.New.ObjToInt(), TaskType = taskType, SourceAddress = taskDTO.fromLocationCode, CurrentAddress = taskDTO.fromLocationCode, NextAddress = rGVLocationInfo.LocationCode,//找入库站台对应的外形检测编号 TargetAddress = rGVLocationInfo.LocationCode, Creater = "WMS", }; rGVLocationInfo.LocationStatus = LocationStatusEnum.InLock.ObjToInt(); Db.Ado.BeginTran(); BaseDal.AddData(dt_Task); _rGVLocationInfoService.Repository.UpdateData(rGVLocationInfo); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } /// /// 创建四向车出库任务 /// /// /// /// public WebResponseContent CreateRGVNewOutTask(TaskDTO taskDTO, int taskType) { try { Db.Ado.BeginTran(); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } #endregion #region 海康AGV任务创建 /// /// 创建海康AGV入库任务 /// /// /// /// public WebResponseContent CreateHKNewInTask(TaskDTO taskDTO, int taskType) { try { int containerType = taskDTO.containerCode.Contains("LLM") ? LocationTypeEnum.LargePallet.ObjToInt() : LocationTypeEnum.SmallPallet.ObjToInt();//这里我不知道是什么类型 //获取货位信息 Dt_HKLocationInfo? kLSLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.WarehouseId.ToString() == taskDTO.toAreaCode && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == containerType); if (kLSLocationInfo == null) throw new Exception($"未找到终点库区【{taskDTO.toAreaCode}】可用空货位!"); Dt_Task dt_Task = new Dt_Task() { TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), WMSTaskNum = taskDTO.taskCode, WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), Grade = taskDTO.taskPriority, PalletCode = taskDTO.containerCode, Roadway = kLSLocationInfo.RoadwayNo, TaskState = TaskStatusEnum.New.ObjToInt(), TaskType = taskType, SourceAddress = taskDTO.fromLocationCode, CurrentAddress = taskDTO.fromLocationCode, NextAddress = kLSLocationInfo.LocationCode, TargetAddress = kLSLocationInfo.LocationCode, Creater = "WMS", }; kLSLocationInfo.LocationStatus = LocationStatusEnum.InLock.ObjToInt(); Db.Ado.BeginTran(); BaseDal.AddData(dt_Task); _hKLocationInfoService.Repository.UpdateData(kLSLocationInfo); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); throw new Exception(ex.Message); } } /// /// 创建海康AGV出库任务 /// /// /// /// public WebResponseContent CreateHKNewOutTask(TaskDTO taskDTO, int taskType) { try { Dt_HKLocationInfo? hKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == taskDTO.fromLocationCode); if (hKLocationInfo == null) throw new Exception($"未找到起点库位【{taskDTO.fromLocationCode}】!"); if (hKLocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt()) throw new Exception($"起点库位【{taskDTO.fromLocationCode}】当前库位状态不可出库!"); Dt_Task dt_Task = new Dt_Task() { TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), WMSTaskNum = taskDTO.taskCode, WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), Grade = taskDTO.taskPriority, PalletCode = taskDTO.containerCode, Roadway = hKLocationInfo.RoadwayNo, TaskState = TaskStatusEnum.New.ObjToInt(), TaskType = taskType, SourceAddress = taskDTO.fromLocationCode, CurrentAddress = taskDTO.fromLocationCode, NextAddress = taskDTO.toLocationCode, TargetAddress = taskDTO.toLocationCode, Creater = "WMS", }; hKLocationInfo.LocationStatus = LocationStatusEnum.OutLock.ObjToInt(); Db.Ado.BeginTran(); BaseDal.AddData(dt_Task); _hKLocationInfoService.Repository.UpdateData(hKLocationInfo); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); throw new Exception(ex.Message); } } #endregion #region 5 跨楼层运输任务创建 public WebResponseContent CarryTask(TaskDTO taskDTO, int taskType) { return WebResponseContent.Instance.OK(); } #endregion #region 6 裁剪送货 public WebResponseContent CJCarryTaske(TaskDTO taskDTO, int taskType) { return WebResponseContent.Instance.OK(); } #endregion } }