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 空托盘任务
}
}