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.Convey;
using WcsMain.Enum.Stacker;
using WcsMain.ExtendMethod;
using WcsMain.Plugins;
using WcsMain.StaticData;
using WcsMain.WcsAttribute.AutoFacAttribute;
namespace WcsMain.ApiServe.Service.WmsService;
///
/// Wms任务接口逻辑
///
[Service]
public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDao)
{
///
/// 接收WMS任务数据处理
///
///
///
public WmsApiResponse> GetStackerTask(List request)
{
if (request.Count < 1 || request.Count > 26) return WmsApiResponseFactory.RequestErr>(null, "请求的任务数量只能在 1 至 26 范围内");
List errRequest = []; // 存放错误的请求
/* 插入库存信息 */ // ---- 库存由WMS管理,数据库表也无需操作
List wmsTasks = [];
foreach (var taskData in request)
{
/* 检验传入的数据格式 */
bool checkData = CheckData.CheckDataRules(taskData);
if (!checkData)
{
var errorRequest = ObjectCopy.CopyProperties(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(taskData);
errRequest.Add(errorRequest);
}
}
else if(taskData.TaskType == (int)WmsTaskTypeEnum.inTask)
{
var existDestination = CommonData.AppLocations.ExistWmsLocation(taskData.Destination);
if (!existDestination)
{
var errorRequest = ObjectCopy.CopyProperties(taskData);
errRequest.Add(errorRequest);
}
}
else if(taskData.TaskType == (int)WmsTaskTypeEnum.outTask)
{
var existOringin = CommonData.AppLocations.ExistWmsLocation(taskData.Origin);
if (!existOringin)
{
var errorRequest = ObjectCopy.CopyProperties(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 taskIds = []; // 存放任务号
foreach (var checkEntity in wmsTasks)
{
/* 检查任务号是否重复 */
List? 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, "数据插入失败,请稍后重试或者联系我们");
}
///
/// 更新任务状态
///
///
///
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}");
}
}
///
/// WMS向WCS发送任务新终点,卸货位置有货的时候
///
///
///
public WmsApiResponse GetStackerTaskNewDestination(GetStackerTaskNewDestinationRequest request)
{
return WmsApiResponseFactory.Fail();
// if(!CheckData.CheckDataRules(request)) return WmsApiResponseFactory.RequestErr();
// /* 查找该任务有没有无法卸货 */
// List? 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修改终点" });
//
//
//
// }
}
}