using SqlSugar.Extensions;
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_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
namespace WIDESEAWCS_TaskInfoService
{
public partial class TaskService
{
public WebResponseContent ManualTask(int TaskId, int TaskType)
{
WebResponseContent content = new WebResponseContent();
try
{
var Task = BaseDal.QueryFirst(x => x.TaskId == TaskId);
if (Task == null) throw new Exception("未找到任务信息");
switch ((ManualTaskEnum)TaskType)
{
case ManualTaskEnum.SCTaskSend:
content = SCTaskSend(Task);
break;
case ManualTaskEnum.SCTaskCompleted:
content = SCTaskCompleted(Task);
break;
case ManualTaskEnum.Completed:
content = Completed(Task);
break;
case ManualTaskEnum.Cancel:
content = Cancel(Task);
break;
default:
break;
}
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
///
/// 重新下发堆垛机任务
///
///
///
public WebResponseContent SCTaskSend(Dt_Task task)
{
WebResponseContent content = new WebResponseContent();
try
{
if (TaskInboundTypes.Contains(task.TaskType))
{
if (task.TaskState != TaskInStatusEnum.SC_InExecuting.ObjToInt())
throw new Exception("任务状态不等于堆垛机入库执行中,不可重新下发");
task.TaskState = TaskInStatusEnum.Line_InFinish.ObjToInt();
content = UpdateData(task);
}
else if (TaskOutboundTypes.Contains(task.TaskType))
{
if (task.TaskState != TaskOutStatusEnum.SC_OutExecuting.ObjToInt())
throw new Exception("任务状态不等于堆垛机出库执行中,不可重新下发");
task.TaskState = TaskOutStatusEnum.Car_OutFinish.ObjToInt();
content = UpdateData(task);
}
else if (task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt())
{
if (task.TaskState != TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt())
throw new Exception("任务状态不等于堆垛机移库执行中,不可重新下发");
task.TaskState = TaskRelocationStatusEnum.CarSource_Finish.ObjToInt();
content = UpdateData(task);
}
else if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt())
{
if (task.TaskState != TaskCarStatusEnum.SC_CarExecuting.ObjToInt())
throw new Exception("任务状态不等于堆垛机移车执行中,不可重新下发");
task.TaskState = TaskCarStatusEnum.ShuttleCar_Finish.ObjToInt();
content = UpdateData(task);
}
else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt())
{
if (task.TaskState != CarChargingTaskEnum.CarChargingSC_CarExecuting.ObjToInt())
throw new Exception("任务状态不等于堆垛机移车执行中,不可重新下发");
task.TaskState = CarChargingTaskEnum.CarCharging_Finish.ObjToInt();
content = UpdateData(task);
}
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
///
/// 完成堆垛机任务
///
///
///
public WebResponseContent SCTaskCompleted(Dt_Task task)
{
try
{
if (TaskInboundTypes.Contains(task.TaskType))
{
if (task.TaskState != TaskInStatusEnum.SC_InExecuting.ObjToInt())
throw new Exception("任务状态不等于堆垛机入库执行中");
}
else if (TaskOutboundTypes.Contains(task.TaskType))
{
if (task.TaskState != TaskOutStatusEnum.SC_OutExecuting.ObjToInt())
throw new Exception("任务状态不等于堆垛机出库执行中");
}
else if (task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt())
{
if (task.TaskState != TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt())
throw new Exception("任务状态不等于堆垛机移库执行中");
}
else if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt())
{
if (task.TaskState != TaskCarStatusEnum.SC_CarExecuting.ObjToInt())
throw new Exception("任务状态不等于堆垛机移车执行中");
}
else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt())
{
if (task.TaskState != CarChargingTaskEnum.CarChargingSC_CarExecuting.ObjToInt())
throw new Exception("任务状态不等于堆垛机移车执行中");
}
return StackCraneTaskCompleted(task.TaskNum);
}
catch (Exception ex)
{
return WebResponseContent.Instance.Error(ex.Message);
}
}
///
/// 完成任务
///
///
///
public WebResponseContent Completed(Dt_Task task)
{
try
{
if (TaskInboundTypes.Contains(task.TaskType))
{
if (task.TaskState < TaskInStatusEnum.SC_InFinish.ObjToInt())
{
task.TaskState = TaskInStatusEnum.SC_InExecuting.ObjToInt();
UpdateData(task);
StackCraneTaskCompleted(task.TaskNum);
}
AddTask_Hty(task, TaskOperateTypeEnum.ManualCompletion);
}
else if (TaskOutboundTypes.Contains(task.TaskType))
{
if (task.TaskState < TaskOutStatusEnum.SC_OutFinish.ObjToInt())
{
task.TaskState = TaskOutStatusEnum.SC_OutExecuting.ObjToInt();
UpdateData(task);
StackCraneTaskCompleted(task.TaskNum);
}
AddTask_Hty(task, TaskOperateTypeEnum.ManualCompletion);
}
else if (task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt())
{
if (task.TaskState < TaskRelocationStatusEnum.SC_RelocationFinish.ObjToInt())
{
task.TaskState = TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt();
UpdateData(task);
StackCraneTaskCompleted(task.TaskNum);
}
AddTask_Hty(task, TaskOperateTypeEnum.ManualCompletion);
}
else if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt())
{
task.TaskState = TaskCarStatusEnum.SC_CarFinish.ObjToInt();
UpdateData(task);
}
else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt())
{
task.TaskState = CarChargingTaskEnum.CarChargingSC_CarFinish.ObjToInt();
UpdateData(task);
}
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
{
return WebResponseContent.Instance.Error(ex.Message);
}
}
///
/// 取消任务
///
///
///
public WebResponseContent Cancel(Dt_Task task)
{
try
{
if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() || task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt())
AddTask_Hty(task, TaskOperateTypeEnum.ManualDeletion);
if (!TaskInboundTypes.Contains(task.TaskType))
throw new Exception("无权限");
if (task.TaskState > TaskInStatusEnum.Line_InExecuting.ObjToInt() && !string.IsNullOrEmpty(task.TargetAddress))
throw new Exception("已分配目标地址,不可取消");
task.TaskState = TaskInStatusEnum.InCancel.ObjToInt();
BaseDal.UpdateData(task);
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
{
return WebResponseContent.Instance.Error(ex.Message);
}
}
///
/// 人工操作任务
/// 1:完成;2:取消
///
///
///
public WebResponseContent ManualTask(SaveModel saveModel)
{
WebResponseContent webResponseContent = new WebResponseContent();
try
{
var Tasks = BaseDal.QueryData(x => saveModel.DelKeys.Contains(x.TaskId));
if (Tasks.Where(x => !TaskInboundTypes.Contains(x.TaskType)).Any()) throw new Exception("只可取消入库任务");
if (Tasks.Where(x => x.TaskState > TaskInStatusEnum.AGV_InFinish.ObjToInt()).Any()) throw new Exception("暂不可取消已上输送线任务");
//var UserName = App.User?.UserName;
Tasks.ForEach(x =>
{
x.TaskState = TaskInStatusEnum.InCancel.ObjToInt();
//x.Modifier = UserName;
//x.ModifyDate = DateTime.Now;
});
BaseDal.UpdateData(Tasks);
webResponseContent.OK();
}
catch (Exception ex)
{
webResponseContent.Error(ex.Message);
}
return webResponseContent;
}
public WebResponseContent ModifyBarcode(WMSTaskDTO wMSTask)
{
WebResponseContent content = new WebResponseContent();
try
{
Dt_Task? dt_Task = BaseDal.QueryFirst(x => x.TaskNum == wMSTask.TaskNum);
if (dt_Task == null) throw new Exception($"WCS未找到任务,任务号:【{wMSTask.TaskNum}】");
dt_Task.PalletCode = wMSTask.PalletCode;
BaseDal.UpdateData(dt_Task);
content.OK();
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
}
}