using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_Model.Models;
namespace WIDESEA_TaskInfoService
{
public partial class TaskService
{
///
/// 立库出库AGV搬运
///
///
///
public WebResponseContent ShelfOutboundCarry(Dt_Task outTask)
{
Dt_CachePoint cachePoint = GetCachePointByStartPoint(outTask.TargetAddress);
Dt_Task task = new()
{
CurrentAddress = outTask.TargetAddress,
Grade = 0,
NextAddress = cachePoint.PointCode,
OrderNo = outTask.OrderNo,
PalletCode = outTask.PalletCode + "-AGV",
Roadway = "",
SourceAddress = outTask.TargetAddress,
TargetAddress = cachePoint.PointCode,
SourceKey = outTask.TaskId,
//TaskNum = outTask.TaskNum,
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(),
//TaskType = TaskTypeEnum.AGVCarry.ObjToInt(),
};
cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt();
_basicService.CachePointService.Repository.UpdateData(cachePoint);
Repository.AddData(task);
return WebResponseContent.Instance.OK();
}
///
/// 叫料
///
///
///
public WebResponseContent CallMateriel(string endPoint)
{
Dt_CachePoint cachePoint = GetCachePointByEndPoint(endPoint);
Dt_Task task = new Dt_Task()
{
CurrentAddress = cachePoint.PointCode,
Grade = 0,
NextAddress = endPoint,
OrderNo = "",
PalletCode = cachePoint.Remark,
Roadway = "",
SourceAddress = cachePoint.PointCode,
TargetAddress = endPoint,
SourceKey = 0,
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(),
//TaskType = TaskTypeEnum.AGVCarry.ObjToInt(),
};
cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt();
_basicService.CachePointService.Repository.UpdateData(cachePoint);
Repository.AddData(task);
return WebResponseContent.Instance.OK();
}
///
/// 物料搬运
///
///
///
public WebResponseContent MaterielCarry(string startPoint)
{
Dt_CachePoint cachePoint = GetCachePointByStartPoint(startPoint);
Dt_Task task = new()
{
CurrentAddress = startPoint,
Grade = 0,
NextAddress = cachePoint.PointCode,
OrderNo = "",
PalletCode = startPoint + "-AGV",
Roadway = "",
SourceAddress = startPoint,
TargetAddress = cachePoint.PointCode,
SourceKey = 0,
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(),
//TaskType = TaskTypeEnum.AGVCarry.ObjToInt(),
};
cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt();
_basicService.CachePointService.Repository.UpdateData(cachePoint);
Repository.AddData(task);
return WebResponseContent.Instance.OK();
}
private Dt_CachePoint GetCachePointByStartPoint(string startPoint)
{
Dt_AreaRouter areaRouter = _basicService.AreaRouterService.Repository.QueryFirst(x => x.StartArea == startPoint);
if (areaRouter == null)
{
throw new Exception("未找到路由信息");
}
Dt_AreaInfo areaInfo = _basicService.AreaInfoService.Repository.QueryFirst(x => x.AreaCode == areaRouter.NextArea);
if (areaInfo == null)
{
throw new Exception("未找到下一区域信息");
}
Dt_CachePoint? cachePoint = _basicService.CachePointService.AssignCachePoint(areaInfo.Id);
if (cachePoint == null)
{
throw new Exception("未找到空闲缓存点");
}
return cachePoint;
}
private Dt_CachePoint GetCachePointByEndPoint(string endPoint)
{
Dt_AreaRouter areaRouter = _basicService.AreaRouterService.Repository.QueryFirst(x => x.NextArea == endPoint);
if (areaRouter == null)
{
throw new Exception("未找到路由信息");
}
Dt_AreaInfo areaInfo = _basicService.AreaInfoService.Repository.QueryFirst(x => x.AreaCode == areaRouter.StartArea);
if (areaInfo == null)
{
throw new Exception("未找到起点缓存区域信息");
}
Dt_CachePoint? cachePoint = _basicService.CachePointService.GetIbStockCachePoint(areaInfo.Id);
if (cachePoint == null)
{
throw new Exception("未找到有货缓存点");
}
return cachePoint;
}
public object AGVTaskFeedBack(AGVTaskFeedBackModel model)
{
Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == Convert.ToInt32(model.Task_id));
if (task == null)
{
return new { code = 404, message = "未找到该任务" };
}
Dt_CachePoint startCachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == task.SourceAddress);
if (startCachePoint != null)
{
startCachePoint.PointStatus = LocationStatusEnum.Free.ObjToInt();
_basicService.CachePointService.Repository.UpdateData(startCachePoint);
}
Dt_CachePoint endCachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == task.TargetAddress);
if (endCachePoint != null)
{
endCachePoint.PointStatus = LocationStatusEnum.InStock.ObjToInt();
_basicService.CachePointService.Repository.UpdateData(endCachePoint);
}
BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
//BaseDal.DeleteData(task);
return new { code = 200, message = "成功" };
}
}
}