185 lines
8.2 KiB
C#
185 lines
8.2 KiB
C#
using DataCheck;
|
||
using WcsMain.ApiServe.Dto.WcsDto.ElTag;
|
||
using WcsMain.ApiServe.Dto.WMSEntity;
|
||
using WcsMain.ApiServe.Dto.WMSEntity.WmsTask;
|
||
using WcsMain.ApiServe.Factory;
|
||
using WcsMain.Business.CommonAction;
|
||
using WcsMain.Common;
|
||
using WcsMain.Constant.Enum.Stacker;
|
||
using WcsMain.DataBase.Dao;
|
||
using WcsMain.DataBase.TableEntity;
|
||
using WcsMain.StaticData;
|
||
using WcsMain.Utils.Plugins;
|
||
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
|
||
using WcsMain.Constant.ExtendMethod;
|
||
|
||
namespace WcsMain.ApiServe.Service.WmsService;
|
||
|
||
/// <summary>
|
||
/// Wms任务接口逻辑
|
||
/// </summary>
|
||
[Service]
|
||
public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDao)
|
||
{
|
||
/// <summary>
|
||
/// 接收WMS任务数据处理
|
||
/// </summary>
|
||
/// <param name="request"></param>
|
||
/// <returns></returns>
|
||
public WmsApiResponse<List<GetStackerRequest>> GetStackerTask(List<GetStackerRequest> request)
|
||
{
|
||
if (request.Count < 1 || request.Count > 20) return WmsApiResponseFactory.RequestErr<List<GetStackerRequest>>(null, "请求的任务数量只能在 1 至 20 范围内");
|
||
List<GetStackerRequest> errRequest = []; // 存放错误的请求
|
||
/* 插入库存信息 */ // ---- 库存由WMS管理,数据库表也无需操作
|
||
List<AppWmsTask> wmsTasks = [];
|
||
foreach (var taskData in request)
|
||
{
|
||
/* 检验传入的数据格式 */
|
||
bool checkData = CheckData.CheckDataRules(taskData);
|
||
if (!checkData)
|
||
{
|
||
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(taskData);
|
||
errRequest.Add(errorRequest);
|
||
}
|
||
/* 检验起点和终点是否正常 */
|
||
if(taskData.TaskType == (int)WmsTaskTypeEnum.moveTask)
|
||
{
|
||
var existOringin = CommonData.AppLocations.ExistWmsLocation(taskData.Origin);
|
||
var existDestination = CommonData.AppLocations.ExistWmsLocation(taskData.Destination);
|
||
if (!existOringin || !existDestination)
|
||
{
|
||
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(taskData);
|
||
errRequest.Add(errorRequest);
|
||
}
|
||
}
|
||
else if(taskData.TaskType == (int)WmsTaskTypeEnum.inTask)
|
||
{
|
||
var existDestination = CommonData.AppLocations.ExistWmsLocation(taskData.Destination);
|
||
if (!existDestination)
|
||
{
|
||
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(taskData);
|
||
errRequest.Add(errorRequest);
|
||
}
|
||
}
|
||
else if(taskData.TaskType == (int)WmsTaskTypeEnum.outTask)
|
||
{
|
||
var existOringin = CommonData.AppLocations.ExistWmsLocation(taskData.Origin);
|
||
if (!existOringin)
|
||
{
|
||
var errorRequest = ObjectCopy.CopyProperties<GetStackerRequest, GetStackerRequest>(taskData);
|
||
errRequest.Add(errorRequest);
|
||
}
|
||
}
|
||
/* 构造任务 */
|
||
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,
|
||
});
|
||
}
|
||
if(errRequest.Count > 0) // 如果有错误请求,则返回错误请求
|
||
{
|
||
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修改终点" });
|
||
//
|
||
//
|
||
//
|
||
// }
|
||
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
} |