using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.LocationEnum; using WIDESEA_Common.OrderEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Core; using WIDESEA_Core.Helper; using WIDESEA_DTO.Basic; using WIDESEA_Model.Models; namespace WIDESEA_TaskInfoService { public partial class TaskService { /// /// ESS扫码请求入库 /// /// /// /// public async Task RequestInboundTask(string palletCode, string stationCode) { try { Dt_Task dbtask = Repository.Db.Queryable().Where(x => x.PalletCode == palletCode).OrderByDescending(x=>x.CreateDate).First(); if (dbtask != null) { _logger.LogInformation($"任务类型{dbtask.TaskType.ToString()} ,{dbtask.TaskNum} "); if (dbtask.TaskType == TaskTypeEnum.Outbound.ObjToInt()) { return WebResponseContent.Instance.Error($"出库待分拣任务"); } else if (dbtask.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) { return WebResponseContent.Instance.Error($"出库待分拣任务"); } else { return WebResponseContent.Instance.Error($"该托盘已生成任务"); } } Dt_StockInfo stockInfo = _stockRepository.Db.Queryable().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); if (stockInfo == null) { return WebResponseContent.Instance.Error($"未找到组盘信息"); } if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.智仓入智仓组盘暂存.ObjToInt()) { return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库"); } if (!string.IsNullOrEmpty(stockInfo.LocationCode)) { return WebResponseContent.Instance.Error($"该托盘已绑定货位"); } Dt_LocationInfo? locationInfo = _locationInfoService.AssignLocation(stockInfo.LocationType); if (locationInfo == null) { return WebResponseContent.Instance.Error($"货位分配失败,未找到可分配货位"); } var newTask = new Dt_Task() { CurrentAddress = stations.GetValueOrDefault(stationCode) ?? "", Grade = 0, NextAddress = locationInfo.LocationCode, PalletCode = palletCode, Roadway = locationInfo.RoadwayNo, SourceAddress = stations.GetValueOrDefault(stationCode) ?? "", TargetAddress = locationInfo.LocationCode, TaskType = TaskTypeEnum.Inbound.ObjToInt(), TaskStatus = TaskStatusEnum.New.ObjToInt(), WarehouseId = stockInfo.WarehouseId, PalletType = stockInfo.PalletType, OrderNo= stockInfo.Details.FirstOrDefault()?.OrderNo }; //空箱 if (stockInfo.PalletType == PalletTypeEnum.Empty.ObjToInt()) { _unitOfWorkManage.BeginTran(); newTask.TaskType = TaskTypeEnum.InEmpty.ObjToInt(); int taskId = BaseDal.AddData(newTask); newTask.TaskId = taskId; locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); _locationInfoService.UpdateData(locationInfo); stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt(); _stockRepository.UpdateData(stockInfo); _unitOfWorkManage.CommitTran(); } //智仓入智仓 if (stockInfo.StockStatus == StockStatusEmun.智仓入智仓组盘暂存.ObjToInt()) { _unitOfWorkManage.BeginTran(); newTask.TaskType = TaskTypeEnum.AllocateInWarehouse.ObjToInt(); int taskId = BaseDal.AddData(newTask); newTask.TaskId = taskId; locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); _locationInfoService.UpdateData(locationInfo); stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt(); _stockRepository.UpdateData(stockInfo); _unitOfWorkManage.CommitTran(); } else { //获取是否存在入库单 Dt_InboundOrder? inboundOrder = null; if (stockInfo != null && stockInfo.Details.Count > 0) { string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? ""; inboundOrder = _inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.入库完成.ObjToInt()); } stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt(); LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; _unitOfWorkManage.BeginTran(); int taskId = BaseDal.AddData(newTask); newTask.TaskId = taskId; _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, locationInfo.LocationStatus, StockChangeType.Inbound.ObjToInt(), inboundOrder?.InboundOrderNo, newTask.TaskNum); locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); _locationInfoService.UpdateData(locationInfo); _stockRepository.UpdateData(stockInfo); _unitOfWorkManage.CommitTran(); } //TaskModel esstask = new TaskModel() //{ // taskType = "putaway", // taskGroupCode = "", // groupPriority = 0, // tasks = new List // { // new() // { // taskCode=newTask.TaskNum.ToString(), // taskPriority=0, // taskDescribe=new TaskDescribeType{ // containerCode=palletCode, // containerType= "CT_KUBOT_STANDARD", // fromLocationCode=stations.GetValueOrDefault(stationCode)??"", // toStationCode="", // toLocationCode=locationInfo.LocationCode, // deadline=0,storageTag="" // } // } // } //}; //var result = await _eSSApiService.CreateTaskAsync(esstask); //_logger.LogInformation("创建任务返回: " + result); //if (result) { try { await _eSSApiService.MoveContainerAsync(new WIDESEA_DTO.Basic.MoveContainerRequest { slotCode = stationCode, containerCode = palletCode }); } catch (Exception ex) { } return WebResponseContent.Instance.OK(); } //else //{ // return WebResponseContent.Instance.Error("下发机器人任务失败!"); //} } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } /// /// 入空箱 /// /// /// /// /// public WebResponseContent InEmpty(string palletCode, string address, int WarehouseId) { try { Dt_Task dbtask = Repository.QueryFirst(x => x.PalletCode == palletCode); if (dbtask != null) { return WebResponseContent.Instance.Error($"该托盘已生成任务"); } Dt_StockInfo stockInfo = _stockRepository.Db.Queryable().Where(x => x.PalletCode == palletCode).First(); if (stockInfo == null) { return WebResponseContent.Instance.Error($"未找到组盘信息"); } if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt()) { return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库"); } if (!string.IsNullOrEmpty(stockInfo.LocationCode)) { return WebResponseContent.Instance.Error($"该托盘已绑定货位"); } //stockInfo = new Dt_StockInfo() //{ // PalletCode = barcode, // StockStatus = StockStatusEmun.入库确认.ObjToInt(), // WarehouseId = WarehouseId, // PalletType = PalletTypeEnum.Empty.ObjToInt(), // Details = new List() //}; var locationInfo = _locationInfoService.AssignLocation(); if (locationInfo == null) { return WebResponseContent.Instance.Error($"货位分配失败,未找到可分配货位"); } Dt_Task newTask = new Dt_Task() { CurrentAddress = address, Grade = 0, NextAddress = locationInfo.LocationCode, PalletCode = palletCode, Roadway = locationInfo.RoadwayNo, SourceAddress = address, TargetAddress = locationInfo.LocationCode, TaskType = TaskTypeEnum.InEmpty.ObjToInt(), TaskStatus = TaskStatusEnum.New.ObjToInt(), WarehouseId = stockInfo.WarehouseId, PalletType = stockInfo.PalletType }; locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); _unitOfWorkManage.BeginTran(); int taskId = BaseDal.AddData(newTask); newTask.TaskId = taskId; _locationInfoService.UpdateData(locationInfo); stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt(); _stockRepository.AddData(stockInfo); _unitOfWorkManage.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } } }