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, (int)TaskCarStatusEnum.ShuttleCar_Executing);//只能根据任务号查询任务
|
var task = GetTaskInfo(taskNum);
|
if (task != null)
|
{
|
switch (TaskTypeComplete)
|
{
|
case 1://入库完成
|
{
|
if (TaskInboundTypes.Contains(task.TaskType) && task.TaskState == TaskInStatusEnum.Car_InExecuting.ObjToInt())
|
{
|
//int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
|
task.CurrentAddress = task.NextAddress;
|
task.NextAddress = string.Empty;
|
task.TaskState = (int)TaskInStatusEnum.InFinish;
|
AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车入库完成");
|
}
|
}
|
break;
|
case 2://出库完成
|
{
|
if (TaskOutboundTypes.Contains(task.TaskType) && task.TaskState == TaskOutStatusEnum.Car_OutExecuting.ObjToInt())
|
{
|
//int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
|
task.TaskState = (int)TaskOutStatusEnum.Car_OutFinish;
|
task.ModifyDate = DateTime.Now;
|
task.Modifier = "System";
|
UpdateData(task);
|
}
|
}
|
break;
|
case 10://充电完成
|
{
|
if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt() && task.TaskState == (int)CarChargingTask.ShuttleCar_Charging)//移车充电
|
{
|
task.TaskState = (int)CarChargingTask.RelocationCarFinish;
|
AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
|
_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车充电完成");
|
}
|
}
|
break;
|
case 13://A侧回零完成
|
case 14://B侧回零完成
|
{
|
if (TaskRelocationTypes.Contains(task.TaskType))//移库任务
|
{
|
if (task.TaskState == TaskRelocationStatusEnum.CarSource_Executing.ObjToInt())
|
task.TaskState = TaskRelocationStatusEnum.CarSource_Finish.ObjToInt();
|
else if (task.TaskState == TaskRelocationStatusEnum.CarTarget_Executing.ObjToInt())
|
task.TaskState = TaskRelocationStatusEnum.RelocationFinish.ObjToInt();
|
UpdateData(task);
|
}
|
else if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() && task.TaskState == TaskCarStatusEnum.ShuttleCar_Executing.ObjToInt())//移车任务
|
{
|
task.TaskState = (int)TaskCarStatusEnum.ShuttleCar_Finish;
|
UpdateData(task);
|
}
|
else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt() && task.TaskState == CarChargingTask.ShuttleCar_Executing.ObjToInt())//移车充电
|
{
|
task.TaskState = (int)CarChargingTask.ShuttleCar_Finish;
|
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;
|
}
|
|
/// <summary>
|
/// 查询穿梭车出入库任务
|
/// </summary>
|
/// <param name="deviceNo">穿梭车编号</param>
|
/// <param name="currentAddress">当前位置</param>
|
/// <returns></returns>
|
public Dt_Task QueryShuttleCarTask(string deviceNo, string currentAddress = "")
|
{
|
if (string.IsNullOrEmpty(currentAddress))
|
return 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
|
return 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);
|
}
|
/// <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;
|
if (string.IsNullOrEmpty(currentAddress))
|
tasks = BaseDal.QueryData(x => x.ShuttleCarCode == deviceNo && (TaskRelocationTypes.Contains(x.TaskType) && (x.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationFinish || x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew)));
|
else
|
tasks = BaseDal.QueryData(x => x.ShuttleCarCode == deviceNo && x.CurrentAddress == currentAddress && (TaskRelocationTypes.Contains(x.TaskType) && (x.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationFinish || x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew)));
|
return tasks.OrderBy(x=>x.TaskNum).First();
|
}
|
}
|
}
|