wcs_server_kate_suzhou/WcsMain/ApiServe/Service/WmsService/WmsTaskService.cs

147 lines
6.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DataCheck;
using WcsMain.ApiServe.Controllers.Dto.WcsDto.ElTag;
using WcsMain.ApiServe.Controllers.Dto.WMSEntity;
using WcsMain.ApiServe.Controllers.Dto.WMSEntity.WmsTask;
using WcsMain.ApiServe.Factory;
using WcsMain.Business.CommonAction;
using WcsMain.Common;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.Enum.TaskEnum;
using WcsMain.ExtendMethod;
using WcsMain.StaticData;
using WcsMain.WcsAttribute.AutoFacAttribute;
namespace WcsMain.ApiServe.Service.WmsService;
/// <summary>
/// Wms任务接口逻辑
/// </summary>
[Service]
public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDao, AppWcsTaskDao wcsTaskDao)
{
private readonly AppWmsTaskDao _wmsTaskDao = wmsTaskDao;
private readonly WmsTaskAction _wmsTaskAction = wmsTaskAction;
private readonly AppWcsTaskDao _wcsTaskDao = wcsTaskDao;
/// <summary>
/// 接收WMS任务数据处理
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public WmsApiResponse GetStackerTask(List<GetStackerRequest> request)
{
if (request.Count < 1) return WmsApiResponseFactory.RequestErr("请求的任务数量为 0");
/* 插入库存信息 */ // ---- 库存由WMS管理数据库表也无需操作
List<AppWmsTask> wmsTasks = [];
foreach (var taskData in request)
{
/* 检验传入的数据格式 */
bool checkData = CheckData.CheckDataRules(taskData);
if (!checkData) return WmsApiResponseFactory.RequestErr("请求的任务数据部分存在格式问题,请检查数据格式");
/* 检验起点和终点是否正常 */
var existOringin = CommonData.AppLocations.ExistWmsLocation(taskData.Origin);
var existDestination = CommonData.AppLocations.ExistWmsLocation(taskData.Destination);
if(!existOringin || !existDestination) return WmsApiResponseFactory.RequestErr($"任务号:{taskData.TaskId} 的起点或者终点不正确");
/* 构造任务 */
wmsTasks.Add(new AppWmsTask()
{
TaskId = taskData.TaskId,
TaskType = taskData.TaskType,
TaskStatus = (int)WmsTaskStatusEnum.create,
Priority = taskData.Priority ?? -1,
Origin = taskData.Origin,
MidPoint = taskData.Midpoint,
Destination = taskData.Destination,
VehicleNo = taskData.VehicleNo,
VehicleSize = taskData.VehicleSize ?? -1,
Weight = taskData.Weight ?? -1,
CreateTime = DateTime.Now,
ModifyTime = DateTime.Now,
CreatePerson = StaticString.WMS,
});
}
List<string?> taskIds = []; // 存放任务号
foreach (var checkEntity in wmsTasks)
{
/* 检查任务号是否重复 */
List<AppWmsTask>? checkSame = _wmsTaskDao.Select(new AppWmsTask() { TaskId = checkEntity.TaskId });
if (checkSame == default) return WmsApiResponseFactory.DataBaseErr();
if (checkSame.Count > 0 || taskIds.Exists(e => e == checkEntity.TaskId))
{
return WmsApiResponseFactory.RequestErr($"任务:{checkEntity.TaskId} 已存在,请勿重复");
}
taskIds.Add(checkEntity.TaskId);
}
/* 插入任务数据 */
//int insertRows = _wmsTaskDao.Insert(wmsTasks.ToArray()); // ---- 直接插入任务数据
int insertRows = _wmsTaskDao.InsertTaskAndMarkErr([.. wmsTasks]); // ---- 先清除这个料箱之前未作的任务,然后插入新数据
if (insertRows > 0) return WmsApiResponseFactory.Success($"任务创建成功,任务号:{string.Join(',', taskIds)}");
return WmsApiResponseFactory.Fail("数据插入失败,请稍后重试或者联系我们");
}
/// <summary>
/// 更新任务状态
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public WmsApiResponse UpdateStackerTaskStatus(UpdateStackerTaskStatusRequest request)
{
bool checkData = CheckData.CheckDataRules(request);
if (!checkData) return WmsApiResponseFactory.RequestErr();
/* 校验任务是否存在 */
var tasks = _wmsTaskDao.Select(new AppWmsTask { TaskId = request.TaskId });
if (tasks == default) return WmsApiResponseFactory.DataBaseErr(); // 数据库连接失败
if (tasks.Count == 0) return WmsApiResponseFactory.RequestErr($"任务:{request.TaskId} 不存在");
int? status = request.TaskStatus;
switch(status)
{
case 0:
string resetErrText = _wmsTaskAction.ResetWmsTaskStatus(request.TaskId, request.Destination, StaticString.WMS); // 重置任务
return string.IsNullOrEmpty(resetErrText) ? WmsApiResponseFactory.Success() : WmsApiResponseFactory.Fail(resetErrText);
case 2:
string completeErrText = _wmsTaskAction.CompleteWmsTaskStatus(request.TaskId, StaticString.WMS); // 完成任务
return string.IsNullOrEmpty(completeErrText) ? WmsApiResponseFactory.Success() : WmsApiResponseFactory.Fail(completeErrText);
case 1:
string deleteErrText = _wmsTaskAction.DeleteWmsTaskStatus(request.TaskId, StaticString.WMS); // 删除任务
return string.IsNullOrEmpty(deleteErrText) ? WmsApiResponseFactory.Success() : WmsApiResponseFactory.Fail(deleteErrText);
default:
return WmsApiResponseFactory.RequestErr($"不支持的任务状态:{request.TaskStatus}");
}
}
/// <summary>
/// WMS向WCS发送任务新终点卸货位置有货的时候
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public WmsApiResponse GetStackerTaskNewDestination(GetStackerTaskNewDestinationRequest request)
{
return WmsApiResponseFactory.Fail();
// if(!CheckData.CheckDataRules(request)) return WmsApiResponseFactory.RequestErr();
// /* 查找该任务有没有无法卸货 */
// List<AppWcsTask>? wcsTasks = _wcsTaskDao.Select(new AppWcsTask { TaskId = request.TaskId, TaskStatus = (int)WcsTaskStatusEnum.doubleIn });
// if(wcsTasks == default) return WmsApiResponseFactory.DataBaseErr();
// if(wcsTasks.Count() < 1) return WmsApiResponseFactory.Fail($"任务号:{request.TaskId} 没有无法卸货的情况");
// wcsTasks = [.. wcsTasks.OrderByDescending(x => x.CompleteTime)];
// var wcsTask = wcsTasks[0]; // 获取最新的一条任务
// /* 如果是最后一条任务则更新WMS任务终点 */
// if(wcsTask.IsLastTask())
// {
// _wmsTaskDao.Update(new AppWmsTask { TaskId = request.TaskId, Destination = request.Destination, TaskMsg = "WMS修改终点" });
//
//
//
// }
}
}