using WIDESEA_Common.Constants;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_DTO.Task;
using WIDESEA_Model.Models;
namespace WIDESEA_TaskInfoService
{
public partial class TaskService
{
#region 出库任务
///
/// 根据指定的任务详情异步创建新的出库任务
///
public async Task CreateTaskOutboundAsync(CreateTaskDto taskDto)
{
try
{
var stockResult = await _stockInfoService.GetStockInfoAsync(taskDto.WarehouseId);
if (stockResult == null || !stockResult.Any())
return WebResponseContent.Instance.Error("未找到库存信息");
var taskList = stockResult.Select(item => new Dt_Task
{
WarehouseId = item.WarehouseId,
PalletCode = item.PalletCode,
PalletType = item.PalletType,
SourceAddress = item.LocationCode,
TargetAddress = taskDto.TargetAddress,
Roadway = item.LocationDetails.RoadwayNo,
TaskType = TaskTypeEnum.Outbound.GetHashCode(),
TaskStatus = TaskStatusEnum.New.GetHashCode(),
Grade = 1,
TaskNum = 0,
CurrentAddress = item.LocationCode,
NextAddress = taskDto.TargetAddress,
Creater = "system",
}).ToList();
var result = await BaseDal.AddDataAsync(taskList) > 0;
var wmstaskDto = result ? _mapper.Map(taskList) : null;
return WebResponseContent.Instance.OK(result ? "任务创建成功" : "任务创建失败", wmstaskDto ?? new object());
}
catch (Exception ex)
{
return WebResponseContent.Instance.Error($"任务创建失败: {ex.Message}");
}
}
///
/// 出库任务完成 :修改库存,修改货位状态,删除任务数据,添加历史任务数据
///
public async Task OutboundFinishTaskAsync(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("未找到对应库存信息");
// 判断是不是极卷库任务
if (taskDto.WarehouseId == (int)WarehouseEnum.FJ1 || taskDto.WarehouseId == (int)WarehouseEnum.ZJ1)
{
OutTaskCompleteDto outTaskCompleteDto = new OutTaskCompleteDto()
{
TaskId = task.OrderNo ?? string.Empty,
DevId = task.TargetAddress ?? string.Empty,
ReqTime = DateTime.Now.ToString()
};
return await OutTaskComplete(outTaskCompleteDto);
}
WebResponseContent content = new WebResponseContent();
return await _unitOfWorkManage.BeginTranAsync(async () =>
{
stockInfo.LocationId = 0;
stockInfo.LocationCode = string.Empty;
stockInfo.OutboundDate = DateTime.Now;
location.LocationStatus = LocationStatusEnum.Free.GetHashCode();
var updateLocationResult = await _locationInfoService.UpdateLocationInfoAsync(location);
var updateStockResult = await _stockInfoService.UpdateStockAsync(stockInfo);
if (!updateLocationResult || !updateStockResult)
return WebResponseContent.Instance.Error("任务完成失败");
// 高温2号出库到CWSC1时,自动创建入库任务到常温1号巷道
WMSTaskDTO? inboundTaskDto = null;
if (task.TargetAddress == TaskAddressConstants.GW2_ADDRESS)
{
var inboundTask = new Dt_Task
{
TaskNum = await BaseDal.GetTaskNo(),
PalletCode = task.PalletCode,
PalletType = task.PalletType,
Roadway = "CW1",
TaskType = TaskInboundTypeEnum.Inbound.GetHashCode(),
TaskStatus = TaskInStatusEnum.InNew.GetHashCode(),
SourceAddress = task.TargetAddress,
TargetAddress = task.TargetAddress,
CurrentAddress = task.TargetAddress,
NextAddress = task.TargetAddress,
WarehouseId = (int)WarehouseEnum.CW1,
Grade = 1,
Creater = "system_auto"
};
await Repository.AddDataAsync(inboundTask);
inboundTaskDto = _mapper.Map(inboundTask);
}
var completeResult = await CompleteTaskAsync(task, "出库完成");
if (!completeResult.Status)
return completeResult;
// 返回入库任务信息(如果有)
if (inboundTaskDto != null)
{
return content.OK("出库完成,已创建入库任务", inboundTaskDto);
}
return content.OK("出库完成");
});
}
catch (Exception ex)
{
return WebResponseContent.Instance.Error($"完成任务失败: {ex.Message}");
}
}
#endregion 出库任务
}
}