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;
|
}
|
/// <summary>
|
/// 重新下发堆垛机任务
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
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;
|
}
|
/// <summary>
|
/// 完成堆垛机任务
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
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);
|
}
|
}
|
/// <summary>
|
/// 完成任务
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
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);
|
}
|
}
|
/// <summary>
|
/// 取消任务
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 人工操作任务
|
/// 1:完成;2:取消
|
/// </summary>
|
/// <param name="saveModel"></param>
|
/// <returns></returns>
|
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;
|
}
|
}
|
}
|