using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_TaskInfoService
{
public partial class TaskService
{
///
/// 穿梭车任务完成
///
/// 任务号
/// 完成类型
///
public WebResponseContent ShuttleCarTaskCompleted(int taskNum, short TaskTypeComplete)
{
WebResponseContent content = new WebResponseContent().OK();
try
{
var task = GetTaskInfo(taskNum);
if (task != null)
{
switch (TaskTypeComplete)
{
case 1://入库完成
{
if (TaskInboundTypes.Contains(task.TaskType) && task.TaskState == TaskInStatusEnum.Car_InExecuting.ObjToInt())
{
task.TaskState = TaskInStatusEnum.InFinish.ObjToInt();
AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车入库完成");
}
else if (TaskRelocationTypes.Contains(task.TaskType) && task.TaskState == TaskRelocationStatusEnum.CarTarget_Executing.ObjToInt())
{
task.TaskState = TaskRelocationStatusEnum.RelocationFinish.ObjToInt();
AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车移库完成");
}
}
break;
case 2://出库完成
{
if (TaskOutboundTypes.Contains(task.TaskType) && task.TaskState == TaskOutStatusEnum.Car_OutExecuting.ObjToInt())
{
task.TaskState = TaskOutStatusEnum.Car_OutFinish.ObjToInt();
UpdateData(task);
}
else if (TaskRelocationTypes.Contains(task.TaskType) && task.TaskState == TaskRelocationStatusEnum.CarSource_Executing.ObjToInt())
{
task.TaskState = TaskRelocationStatusEnum.CarSource_Finish.ObjToInt();
UpdateData(task);
}
}
break;
case 10://充电完成
{
if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt() && task.TaskState == (int)CarChargingTaskEnum.CarCharging_Charging)//移车充电
{
task.TaskState = CarChargingTaskEnum.CarChargingFinish.ObjToInt();
AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车充电完成");
}
}
break;
case 13://A侧回零完成
case 14://B侧回零完成
{
if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() && task.TaskState == TaskCarStatusEnum.ShuttleCar_Executing.ObjToInt())//移车任务
{
task.TaskState = TaskCarStatusEnum.ShuttleCar_Finish.ObjToInt();
UpdateData(task);
}
else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt() && task.TaskState == CarChargingTaskEnum.CarCharging_Executing.ObjToInt())//移车充电
{
task.TaskState = CarChargingTaskEnum.CarCharging_Finish.ObjToInt();
UpdateData(task);
}
}
break;
default:
break;
}
}
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
///
/// 添加历史任务
///
///
///
///
public WebResponseContent AddTask_Hty(Dt_Task task, TaskOperateTypeEnum operateType)
{
WebResponseContent content = new WebResponseContent();
try
{
Db.Ado.BeginTran();
content = _taskHtyService.AddTask_Hty(task, operateType);//添加历史任务删除任务
if (!content.Status) throw new Exception(content.Message);
content = DeleteData(task);
if (!content.Status) throw new Exception(content.Message);
Db.Ado.CommitTran();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
content.Error(ex.Message);
}
return content;
}
public static int tasktype = 0;
///
/// 查询穿梭车出入库任务
///
/// 穿梭车编号
/// 当前位置
///
public Dt_Task QueryShuttleCarTask(string deviceNo, string currentAddress = "")
{
Dt_Task? _Task = null;
if (tasktype == 0)
{
if (string.IsNullOrEmpty(currentAddress))
_Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
else
_Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
}
else
{
if (TaskInboundTypes.Contains(tasktype))
{
_Task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy) ?? BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish, TaskOrderBy);
}
else if (TaskOutboundTypes.Contains(tasktype))
{
_Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish, TaskOrderBy) ?? BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
}
}
if (_Task != null) tasktype = _Task.TaskType;
return _Task;
}
///
/// 获取移库任务
///
///
///
///
public Dt_Task ShuttleCarRelocationTask(string deviceNo, string currentAddress = "")
{
List tasks = null;
Dt_Task? task = null;
if (string.IsNullOrEmpty(currentAddress))
tasks = BaseDal.QueryData(x => /*x.ShuttleCarCode == deviceNo &&*/ TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew).OrderBy(x => x.TaskNum).ToList();
else
tasks = BaseDal.QueryData(x => /*x.ShuttleCarCode == deviceNo &&*/ x.CurrentAddress == currentAddress && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew).OrderBy(x => x.TaskNum).ToList();
if (tasks != null && tasks.Count > 0)
{
task = tasks[0];
}
return task;
}
}
}