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
|
{
|
/// <summary>
|
/// 穿梭车任务完成
|
/// </summary>
|
/// <param name="taskNum">任务号</param>
|
/// <param name="TaskTypeComplete">完成类型</param>
|
/// <returns></returns>
|
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.ShuttleCar_Charging)//移车充电
|
{
|
task.TaskState = CarChargingTaskEnum.RelocationCarFinish.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.ShuttleCar_Executing.ObjToInt())//移车充电
|
{
|
task.TaskState = CarChargingTaskEnum.ShuttleCar_Finish.ObjToInt();
|
UpdateData(task);
|
}
|
}
|
break;
|
default:
|
break;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
|
/// <summary>
|
/// 添加历史任务
|
/// </summary>
|
/// <param name="task"></param>
|
/// <param name="operateType"></param>
|
/// <returns></returns>
|
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;
|
/// <summary>
|
/// 查询穿梭车出入库任务
|
/// </summary>
|
/// <param name="deviceNo">穿梭车编号</param>
|
/// <param name="currentAddress">当前位置</param>
|
/// <returns></returns>
|
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;
|
}
|
/// <summary>
|
/// 获取移库任务
|
/// </summary>
|
/// <param name="deviceNo"></param>
|
/// <param name="currentAddress"></param>
|
/// <returns></returns>
|
public Dt_Task ShuttleCarRelocationTask(string deviceNo, string currentAddress = "")
|
{
|
List<Dt_Task> 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;
|
}
|
}
|
}
|