#region << 版 本 注 释 >>
|
/*----------------------------------------------------------------
|
* 命名空间:WIDESEA_TaskInfoService
|
* 创建者:胡童庆
|
* 创建时间:2024/8/2 16:13:36
|
* 版本:V1.0.0
|
* 描述:
|
*
|
* ----------------------------------------------------------------
|
* 修改人:
|
* 修改时间:
|
* 版本:V1.0.1
|
* 修改说明:
|
*
|
*----------------------------------------------------------------*/
|
#endregion << 版 本 注 释 >>
|
|
using AutoMapper;
|
using SqlSugar;
|
using System.Net;
|
using System.Reflection;
|
using WIDESEA_Common.LocationEnum;
|
using WIDESEA_Common.OtherEnum;
|
using WIDESEA_Common.StockEnum;
|
using WIDESEA_Common.TaskEnum;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseRepository;
|
using WIDESEA_Core.BaseServices;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_DTO.Inbound;
|
using WIDESEA_DTO.Task;
|
using WIDESEA_IBasicService;
|
using WIDESEA_IInboundService;
|
using WIDESEA_IOutboundService;
|
using WIDESEA_IRecordService;
|
using WIDESEA_IStockService;
|
using WIDESEA_ITaskInfoService;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_TaskInfoService
|
{
|
public partial class TaskService : ServiceBase<Dt_Task, IRepository<Dt_Task>>, ITaskService
|
{
|
private readonly IMapper _mapper;
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
private readonly IStockInfoService _stockInfoService;
|
private readonly ILocationInfoService _locationInfoService;
|
private readonly IWarehouseService _warehouseService;
|
private readonly IRoadWayinfoService _roadWayinfoService;
|
|
public IRepository<Dt_Task> Repository => BaseDal;
|
|
private Dictionary<string, OrderByType> _taskOrderBy = new()
|
{
|
{nameof(Dt_Task.Grade),OrderByType.Desc },
|
{nameof(Dt_Task.CreateDate),OrderByType.Asc},
|
};
|
|
public List<int> TaskTypes => typeof(TaskTypeEnum).GetEnumIndexList();
|
|
public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
|
|
public TaskService(IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockInfoService stockInfoService, ILocationInfoService locationInfoService,
|
IWarehouseService warehouseService, IRoadWayinfoService roadWayinfoService) : base(BaseDal)
|
{
|
_mapper = mapper;
|
_unitOfWorkManage = unitOfWorkManage;
|
_stockInfoService = stockInfoService;
|
_locationInfoService = locationInfoService;
|
_warehouseService = warehouseService;
|
_roadWayinfoService=roadWayinfoService;
|
|
}
|
public string MES_InReporttask = WIDESEA_Core.Helper.AppSettings.Configuration["MES_InReporttask"]; //入库反馈信息
|
public string MES_OutReporttask = WIDESEA_Core.Helper.AppSettings.Configuration["MES_OutReporttask"]; //出库反馈信息
|
public string MES_InventoryUpdateApply = WIDESEA_Core.Helper.AppSettings.Configuration["MES_InventoryUpdateApply"]; //储位异动申请
|
public string MES_InventoryUpdateCallback = WIDESEA_Core.Helper.AppSettings.Configuration["MES_InventoryUpdateCallback"]; //储位异动申请
|
public string MES_TaskErrorInfoCallback = WIDESEA_Core.Helper.AppSettings.Configuration["MES_TaskErrorInfoCallback"]; //任务异常上报
|
public string WCS_SendConveyorTask = WIDESEA_Core.Helper.AppSettings.Configuration["WCS_SendConveyorTask"]; //输送线任务下发
|
public string WCS_SendStackerTask = WIDESEA_Core.Helper.AppSettings.Configuration["WCS_SendStackerTask"]; //堆垛机任务下发
|
|
|
|
|
|
/// <summary>
|
/// 任务完成接口
|
/// </summary>
|
/// <param name="wCSTask"></param>
|
/// <returns></returns>
|
public WebResponseContent TaskCompleted(WCSTaskDTO wCSTask)
|
{
|
WebResponseContent webResponse= new WebResponseContent();
|
try
|
{
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == wCSTask.TaskNum && x.PalletCode == wCSTask.PalletCode);
|
if (task == null)
|
return webResponse.Error("未找到任务信息");
|
|
switch ((TaskTypeEnum)task.TaskType)
|
{
|
case TaskTypeEnum.Inbound:
|
return HandleInboundTask(task, wCSTask.TaskType);
|
case TaskTypeEnum.Outbound:
|
return HandleOutboundTask(task, wCSTask.TaskType);
|
case TaskTypeEnum.Relocation:
|
return HandleRelocationTask(task, wCSTask.TaskType);
|
default:
|
return webResponse.Error($"任务类型错误,任务号:{task.TaskId},托盘编号:{task.PalletCode},类型:{task.TaskType}");
|
}
|
}
|
catch (Exception ex)
|
{
|
return webResponse.Error($"WMS任务完成错误:{ex.Message}");
|
}
|
}
|
|
private WebResponseContent HandleInboundTask(Dt_Task task, int wcsTaskType)
|
{
|
WebResponseContent content = new WebResponseContent();
|
switch (wcsTaskType)
|
{
|
case 1:
|
task.TaskStatus = (int)InTaskStatusEnum.PLC_InFinish;
|
int loctype = 0;
|
if (task.Roadway == "1" || task.Roadway == "2")
|
{
|
if(task.PalletType=="1") loctype = (int)LocationTypeEnum.SmallPallet;
|
else if(task.PalletType=="2") loctype = (int)LocationTypeEnum.MediumPallet;
|
}
|
else
|
{
|
loctype = (int)LocationTypeEnum.LargePallet;
|
}
|
//查找货位,更新任务
|
Dt_LocationInfo dt_Location=_locationInfoService.GetLocation(task.Roadway, loctype);
|
Dt_LocationInfo ShallowCargoHold = _locationInfoService.ShallowGetLocation(dt_Location.RoadwayNo, dt_Location.LocationType, dt_Location.Row, dt_Location.Layer, dt_Location.Column);
|
if(ShallowCargoHold==null) return content.Error($"未找到该货位信息,货位编号:{dt_Location.LocationCode}的浅货位");
|
if(ShallowCargoHold.LocationStatus != (int)LocationStatusEnum.Free) return content.Error($"任务号:{task.TaskId},托盘编号:{task.PalletCode},查找的货位浅货位有货,货位编号:{ShallowCargoHold.LocationCode}");
|
|
task.TargetAddress = dt_Location.LocationCode;
|
task.CurrentAddress = task.NextAddress;
|
task.NextAddress= dt_Location.LocationCode;
|
task.TaskStatus = (int)InTaskStatusEnum.PLC_InFinish;
|
dt_Location.LocationStatus = (int)LocationStatusEnum.Lock;
|
|
_locationInfoService.UpdateData(dt_Location);
|
BaseDal.UpdateData(task);
|
return content.OK($"已接收入库输送线完成信息,任务号:{task.TaskId},托盘编号:{task.PalletCode}");
|
|
|
case 2:
|
//上报MES任务完成
|
MES_parameter mES_Parameter = InStoreDocCallback(task.TaskNum, "Finish", "操作成功", task.PalletCode, task.TargetAddress);
|
if (mES_Parameter.Result == "Y")
|
{
|
|
task.TaskStatus = (int)InTaskStatusEnum.SC_OutFinish;
|
BaseDal.DeleteData(task);
|
return content.OK($"已接收入库堆垛机完成信息,任务号:{task.TaskId},托盘编号:{task.PalletCode}");
|
}
|
else
|
{
|
return content.Error("上传MES失败,原因:" + mES_Parameter.ResultMsg);
|
}
|
default:
|
return WebResponseContent.Instance.Error($"WCS上报类型错误:{wcsTaskType}");
|
}
|
}
|
|
private WebResponseContent HandleOutboundTask(Dt_Task task, int wcsTaskType)
|
{
|
WebResponseContent content = new WebResponseContent();
|
switch (wcsTaskType)
|
{
|
case 1:
|
//上报MES任务完成
|
MES_parameter mES_Parameter = OutStoreDocCallback(task.TaskNum, "Finish", "操作成功");
|
if (mES_Parameter.Result == "Y")
|
{
|
task.TaskStatus = (int)OutTaskStatusEnum.PLC_OutFinish;
|
BaseDal.DeleteData(task);
|
return content.OK($"已接收出库输送线完成信息,任务号:{task.TaskId},托盘编号:{task.PalletCode}");
|
}
|
else
|
{
|
return content.Error("上传MES失败,原因:" + mES_Parameter.ResultMsg);
|
}
|
case 2:
|
//获取对应PLC站台信息
|
Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(task.Roadway);
|
task.CurrentAddress = _Roadwayinfo.OutStationCode;
|
task.NextAddress = task.TargetAddress;
|
task.TaskStatus = (int)OutTaskStatusEnum.SC_OutFinish;
|
BaseDal.UpdateData(task);
|
return content.OK($"已接收出库堆垛机完成信息,任务号:{task.TaskId},托盘编号:{task.PalletCode}");
|
default:
|
return content.Error($"WCS上报类型错误:{wcsTaskType}");
|
}
|
}
|
|
private WebResponseContent HandleRelocationTask(Dt_Task task, int wcsTaskType)
|
{
|
if (wcsTaskType == 2)
|
{
|
task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationFinish;
|
BaseDal.UpdateData(task);
|
return WebResponseContent.Instance.OK($"已接收移库堆垛机完成信息,任务号:{task.TaskId},托盘编号:{task.PalletCode}");
|
}
|
return WebResponseContent.Instance.Error($"WCS上报类型错误:{wcsTaskType}");
|
}
|
|
|
|
}
|
}
|