using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Enums;
using WIDESEA_Core;
using WIDESEA_Model.Models;
using WIDESEA_Core.Helper;
using Microsoft.Extensions.Logging;
using MailKit.Search;
using System.Reflection.Metadata;
using static WIDESEA_ITaskInfoService.ITaskService;
using WIDESEA_Common;
using WIDESEA_Core.LogHelper;
using WIDESEA_DTO.Task;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.LocationEnum;
namespace WIDESEA_TaskInfoService
{
public partial class TaskService
{
///
/// 仅申请任务,让WCS根据路由确定下一地址
///
///
///
///
public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode, string palletCode)
{
try
{
Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
if (task != null)
{
PushTasksToWCS(new List { task });
return WebResponseContent.Instance.OK($"该托盘已生成任务", _mapper.Map(task));
}
if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
{
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($"未找到组盘信息");
//}
//var details = stockInfo.Details.FirstOrDefault();
//if (!string.IsNullOrEmpty(stockInfo.LocationCode))
//{
// return WebResponseContent.Instance.Error($"该托盘已绑定货位");
//}
Dt_RoadwayInfo roadwayInfo = _roadwayInforepository.QueryFirst(x => x.InStationCode == stationCode);
if (roadwayInfo == null)
{
return WebResponseContent.Instance.Error($"未找到刚入库站台地址");
}
Dt_Warehouse warehouse = _warehouseRepository.QueryFirst(x => x.WarehouseCode == roadwayInfo.RoadwayNo);
if (warehouse == null)
{
return WebResponseContent.Instance.Error("未找到改仓库");
}
Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayInfo.RoadwayNo, warehouse.WarehouseId, "");//
if (locationInfo == null)
{
return WebResponseContent.Instance.Error($"货位分配失败,未找到可分配货位");
}
var dt_Stock = new Dt_StockInfo
{
PalletCode = palletCode,
PalletType = 1,
LocationCode = locationInfo.LocationCode,
StockStatus = (int)StockStatusEmun.组盘暂存,
Creater = "WMS",
CreateDate = DateTime.Now,
WarehouseId = warehouse.WarehouseId,
};
Dt_Task newTask = new Dt_Task()
{
CurrentAddress = stationCode,
Grade = 0,
NextAddress = stationCode,//堆垛机
PalletCode = palletCode,
OrderNo = "1",
Roadway = "1",
SourceAddress = "",
TargetAddress = locationInfo.LocationCode,
TaskType = TaskTypeEnum.Inbound.ObjToInt(),
TaskStatus = TaskStatusEnum.New.ObjToInt(),
WarehouseId = 1,
//PalletType = GetPalletType(warehouse, palletCode),//GetPalletType(warehouse, palletCode)
Creater = "WCS",
CreateDate = DateTime.Now
};
_unitOfWorkManage.BeginTran();
locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
int taskId = BaseDal.AddData(newTask);
newTask.TaskId = taskId;
_stockRepository.AddData(dt_Stock);
//_stockRepository.UpdateData(stockInfo);
_locationInfoRepository.UpdateData(locationInfo);
_unitOfWorkManage.CommitTran();
WMSTaskDTO wMSTaskDTO = _mapper.Map(newTask);
PushTasksToWCS(new List { newTask });
return WebResponseContent.Instance.OK(data: wMSTaskDTO);
}
catch (Exception ex)
{
_unitOfWorkManage.RollbackTran();
return WebResponseContent.Instance.Error(ex.Message);
}
}
}
}