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 空托盘任务
|
|
/// <summary>
|
/// 创建空托盘入库任务
|
/// </summary>
|
/// <param name="taskDto"></param>
|
/// <returns></returns>
|
public async Task<WebResponseContent> 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}");
|
}
|
}
|
|
/// <summary>
|
/// 空托盘入库完成
|
/// </summary>
|
public async Task<WebResponseContent> 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}");
|
}
|
}
|
|
/// <summary>
|
/// 创建空托盘出库任务
|
/// </summary>
|
/// <param name="taskDto"></param>
|
/// <returns></returns>
|
public async Task<WebResponseContent> GetOutBoundTrayTaskAsync(CreateTaskDto taskDto)
|
{
|
try
|
{
|
var dt_Task = await BaseDal.QueryFirstAsync(x => x.TargetAddress == taskDto.TargetAddress);
|
if (dt_Task != null)
|
{
|
var taskDTO = dt_Task.Adapt<WMSTaskDTO>();
|
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<WMSTaskDTO>();
|
|
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}");
|
}
|
}
|
|
/// <summary>
|
/// 空托盘出库完成
|
/// </summary>
|
public async Task<WebResponseContent> 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 空托盘任务
|
}
|
}
|