using Mapster; using WIDESEA_Common.LocationEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Core; using WIDESEA_DTO.Task; using WIDESEA_Model.Models; namespace WIDESEA_TaskInfoService { public partial class TaskService { #region 空托盘任务 /// /// 创建空托盘入库任务 /// /// /// public async Task CreateTaskInboundTrayAsync(CreateTaskDto taskDto) { try { WebResponseContent content = await GetTaskByPalletCodeAsync(taskDto.PalletCode); if (content.Status) { return content; } return WebResponseContent.Instance.OK("查询成功"); } catch (Exception ex) { return WebResponseContent.Instance.Error($"查询任务失败: {ex.Message}"); } } /// /// 空托盘入库完成 /// public async Task InboundFinishTaskTrayAsync(CreateTaskDto taskDto) { try { var task = await BaseDal.QueryFirstAsync(s => s.PalletCode == taskDto.PalletCode); if (task == null) return WebResponseContent.Instance.Error("未找到对应的任务"); var location = await _locationInfoService.GetLocationInfo(task.Roadway, task.TargetAddress); if (location == null) return WebResponseContent.Instance.Error("未找到对应的货位"); var stockInfo = await _stockInfoService.GetStockInfoAsync(taskDto.PalletCode); if (stockInfo == null) return WebResponseContent.Instance.Error("未找到对应库存信息"); return await _unitOfWorkManage.BeginTranAsync(async () => { stockInfo.LocationCode = location.LocationCode; stockInfo.LocationId = location.Id; stockInfo.StockStatus = StockStatusEmun.空托盘库存.GetHashCode(); location.LocationStatus = LocationStatusEnum.InStock.GetHashCode(); var updateLocationResult = await _locationInfoService.UpdateLocationInfoAsync(location); var updateStockResult = await _stockInfoService.UpdateStockAsync(stockInfo); if (!updateLocationResult || !updateStockResult) return WebResponseContent.Instance.Error("任务完成失败"); var saveTaskHistoryResult = await SaveTaskHistoryAsync(task, "空托盘入库完成"); if (!saveTaskHistoryResult.Status) return saveTaskHistoryResult; var saveStockHistoryResult = await SaveStockHistoryAsync(stockInfo, "空托盘入库完成"); if (!saveStockHistoryResult.Status) return saveStockHistoryResult; var deleteResult = await BaseDal.DeleteDataAsync(task); if (!deleteResult) return WebResponseContent.Instance.Error("任务完成失败"); return WebResponseContent.Instance.OK("任务完成"); }); } catch (Exception ex) { return WebResponseContent.Instance.Error($"完成任务失败: {ex.Message}"); } } /// /// 创建空托盘出库任务 /// /// /// public async Task GetOutBoundTrayTaskAsync(CreateTaskDto taskDto) { try { var dt_Task = await BaseDal.QueryFirstAsync(x => x.TargetAddress == taskDto.TargetAddress); if (dt_Task != null) { var taskDTO = dt_Task.Adapt(); return WebResponseContent.Instance.OK("任务创建成功", taskDTO); } var stockInfo = await _stockInfoService.Repository.QueryDataNavFirstAsync(x => x.LocationDetails.WarehouseId == taskDto.WarehouseId && x.LocationDetails.LocationStatus == LocationStatusEnum.InStock.GetHashCode() && x.StockStatus == StockStatusEmun.空托盘库存.GetHashCode()); if (stockInfo == null) return WebResponseContent.Instance.Error("未找到对应的库存信息"); var task = new Dt_Task() { WarehouseId = stockInfo.LocationDetails.WarehouseId, PalletCode = stockInfo.PalletCode, PalletType = stockInfo.PalletType, SourceAddress = stockInfo.LocationCode, CurrentAddress = stockInfo.LocationCode, NextAddress = taskDto.TargetAddress, TargetAddress = taskDto.TargetAddress, Roadway = stockInfo.LocationDetails.RoadwayNo, TaskType = TaskOutboundTypeEnum.OutEmpty.GetHashCode(), TaskStatus = TaskStatusEnum.New.GetHashCode(), Grade = 1, Dispatchertime = DateTime.Now, TaskNum = await BaseDal.GetTaskNo(), Creater = "system", }; return await _unitOfWorkManage.BeginTranAsync(async () => { var locationInfo = await _locationInfoService.GetLocationInfoAsync(stockInfo.LocationId); locationInfo.LocationStatus = LocationStatusEnum.InStockLock.GetHashCode(); var updateLocationResult = await _locationInfoService.UpdateLocationInfoAsync(locationInfo); if (!updateLocationResult) return WebResponseContent.Instance.Error("任务创建失败"); var taskDtos = task.Adapt(); var addResult = await BaseDal.AddDataAsync(task) > 0; if (!addResult) return WebResponseContent.Instance.Error("任务创建失败"); return WebResponseContent.Instance.OK("任务创建成功", taskDtos); }); } catch (Exception ex) { return WebResponseContent.Instance.Error($"查询任务失败: {ex.Message}"); } } /// /// 空托盘出库完成 /// public async Task OutboundFinishTaskTrayAsync(CreateTaskDto taskDto) { try { var task = await BaseDal.QueryFirstAsync(s => s.PalletCode == taskDto.PalletCode); if (task == null) return WebResponseContent.Instance.Error("未找到对应的任务"); var location = await _locationInfoService.GetLocationInfo(task.Roadway, task.SourceAddress); if (location == null) return WebResponseContent.Instance.Error("未找到对应的货位"); var stockInfo = await _stockInfoService.GetStockInfoAsync(taskDto.PalletCode); if (stockInfo == null) return WebResponseContent.Instance.Error("未找到对应库存信息"); return await _unitOfWorkManage.BeginTranAsync(async () => { stockInfo.LocationId = 0; stockInfo.LocationCode = string.Empty; stockInfo.StockStatus = StockStatusEmun.出库完成.GetHashCode(); location.LocationStatus = LocationStatusEnum.Free.GetHashCode(); task.TaskStatus = TaskOutStatusEnum.OutFinish.GetHashCode(); var updateLocationResult = await _locationInfoService.UpdateLocationInfoAsync(location); var updateStockResult = await _stockInfoService.UpdateStockAsync(stockInfo); if (!updateLocationResult || !updateStockResult) return WebResponseContent.Instance.Error("任务完成失败"); var saveTaskHistoryResult = await SaveTaskHistoryAsync(task, "空托盘出库完成"); if (!saveTaskHistoryResult.Status) return saveTaskHistoryResult; var saveStockHistoryResult = await SaveStockHistoryAsync(stockInfo, "空托盘出库完成"); if (!saveStockHistoryResult.Status) return saveStockHistoryResult; var deleteResult = await BaseDal.DeleteDataAsync(task); if (!deleteResult) return WebResponseContent.Instance.Error("任务完成失败"); return WebResponseContent.Instance.OK("任务完成"); }); } catch (Exception ex) { return WebResponseContent.Instance.Error($"完成任务失败: {ex.Message}"); } } #endregion 空托盘任务 } }