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

185 lines
8.1 KiB
C#
Raw Normal View History

2024-10-07 09:51:55 +08:00
using DataCheck;
using WcsMain.ApiServe.Dto.WcsDto.ElTag;
using WcsMain.ApiServe.Dto.WMSEntity;
using WcsMain.ApiServe.Dto.WMSEntity.WmsTask;
2024-10-07 09:51:55 +08:00
using WcsMain.ApiServe.Factory;
using WcsMain.Business.CommonAction;
using WcsMain.Common;
using WcsMain.Constant.Enum.Stacker;
2024-10-07 09:51:55 +08:00
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.StaticData;
using WcsMain.Utils.Plugins;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
2024-11-15 11:51:41 +08:00
using WcsMain.Constant.ExtendMethod;
using WcsMain.Common.DataService;
2024-11-22 08:08:45 +08:00
using WcsMain.DataBase.MixDao;
2024-10-07 09:51:55 +08:00
namespace WcsMain.ApiServe.Service.WmsService;
/// <summary>
/// Wms任务接口逻辑
/// </summary>
[Service]
public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDao, DataBaseData dataBaseData)
2024-10-07 09:51:55 +08:00
{
/// <summary>
/// 接收WMS任务数据处理
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
2024-11-22 08:08:45 +08:00
public WmsApiResponse<List<GetStackerRequest>> GetStackerTask(GetStackerRequest request)
2024-10-07 09:51:55 +08:00
{
2024-11-22 08:08:45 +08:00
//if (request.Count < 1 || request.Count > 20) return WmsApiResponseFactory.RequestErr<List<GetStackerRequest>>(null, "请求的任务数量只能在 1 至 20 范围内");
2024-10-07 09:51:55 +08:00
List<GetStackerRequest> errRequest = []; // 存放错误的请求
/* 插入库存信息 */ // ---- 库存由WMS管理数据库表也无需操作
List<AppWmsTask> wmsTasks = [];
2024-11-22 08:08:45 +08:00
/* 检验传入的数据格式 */
bool checkData = CheckData.CheckDataRules(request);
if (!checkData)
2024-10-07 09:51:55 +08:00
{
2024-11-22 08:08:45 +08:00
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(request);
errRequest.Add(errorRequest);
2024-10-07 09:51:55 +08:00
}
2024-11-22 08:08:45 +08:00
///* 检验起点和终点是否正常 */
//if (request.TaskType == (int)WmsTaskTypeEnum.moveTask)
//{
// var existOringin = CommonData.AppLocations.ExistWmsLocation(request.Origin);
// var existDestination = CommonData.AppLocations.ExistWmsLocation(request.Destination);
// if (!existOringin || !existDestination)
// {
// var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(request);
// errRequest.Add(errorRequest);
// }
//}
//else if (request.TaskType == (int)WmsTaskTypeEnum.inTask)
//{
// var existDestination = CommonData.AppLocations.ExistWmsLocation(request.Destination);
// if (!existDestination)
// {
// var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(request);
// errRequest.Add(errorRequest);
// }
//}
//else if (request.TaskType == (int)WmsTaskTypeEnum.outTask)
//{
// var existOringin = CommonData.AppLocations.ExistWmsLocation(request.Origin);
// if (!existOringin)
// {
// var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(request);
// errRequest.Add(errorRequest);
// }
//}
/* 构造任务 */
wmsTasks.Add(new AppWmsTask()
{
TaskId = request.TaskId,
WcsId = dataBaseData.GetNewUUID2(),
TaskType = request.TaskType,
TaskStatus = (int)WmsTaskStatusEnum.create,
Priority = request.Priority ?? -1,
Origin = request.Origin,
MidPoint = request.Midpoint,
Destination = request.Destination,
VehicleNo = request.VehicleNo,
VehicleSize = request.VehicleSize ?? -1,
Weight = request.Weight ?? -1,
CreateTime = DateTime.Now,
ModifyTime = DateTime.Now,
CreatePerson = StaticString.WMS,
});
if (errRequest.Count > 0) // 如果有错误请求,则返回错误请求
2024-10-07 09:51:55 +08:00
{
return WmsApiResponseFactory.RequestErr(errRequest, "请求的任务数据存在异常");
}
List<string?> taskIds = []; // 存放任务号
foreach (var checkEntity in wmsTasks)
{
/* 检查任务号是否重复 */
List<AppWmsTask>? checkSame = wmsTaskDao.Select(new AppWmsTask() { TaskId = checkEntity.TaskId });
if (checkSame == default) return WmsApiResponseFactory.DataBaseErr(errRequest);
if (checkSame.Count > 0 || taskIds.Exists(e => e == checkEntity.TaskId))
{
return WmsApiResponseFactory.RequestErr(errRequest, $"任务:{checkEntity.TaskId} 已存在,请勿重复");
}
taskIds.Add(checkEntity.TaskId);
}
/* 插入任务数据 */
//int insertRows = wmsTaskDao.Insert(wmsTasks.ToArray()); // ---- 直接插入任务数据
int insertRows = wmsTaskDao.InsertTaskAndMarkErr([.. wmsTasks]); // ---- 先清除这个料箱之前未作的任务,然后插入新数据
if (insertRows > 0) return WmsApiResponseFactory.Success(errRequest, $"任务创建成功,任务号:{string.Join(',', taskIds)}");
return WmsApiResponseFactory.Fail(errRequest, "数据插入失败,请稍后重试或者联系我们");
}
/// <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修改终点" });
//
//
//
// }
}
}