1
Huangxiaoqiang-03
2024-10-31 0bfe24ddf438636aeef8c1e6989d5c8c28b0bb1a
1
已修改6个文件
已重命名1个文件
369 ■■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Http/HttpHelpers.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Enum/TaskRelocationStatusEnum.cs 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/TaskEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Http/HttpHelpers.cs
ÎļþÃû´Ó ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Http/HttpHelper.cs ÐÞ¸Ä
@@ -6,7 +6,7 @@
namespace WIDESEA_Comm.Http
{
    public class HttpHelper
    public class HttpHelpers
    {
        private const int Timeout = 10 * 1000;
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Enum/TaskRelocationStatusEnum.cs
@@ -12,17 +12,26 @@
        /// <summary>
        /// æ–°å»ºç§»åº“任务
        /// </summary>
        [Description("新建移库任务")]
        RelocationNew = 300,
            /// <summary>
            /// ç§»åº“任务执行中
            /// </summary>
        SC_RelocationExecuting = 140,
        /// <summary>
        /// ç§»åº“任务执行中
        /// </summary>
        [Description("移库任务执行中")]
        RelocationExecuting = 145,
        /// <summary>
        /// ç§»åº“任务完成
        /// </summary>
        SC_RelocationFinish = 145,
        [Description("移库任务取消")]
        RelocationFinish = 310,
        /// <summary>
        /// ç§»åº“任务取消
        /// </summary>
        [Description("移库任务取消")]
        RelocationCancel = 320,
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -21,6 +21,9 @@
    // æ³¨æ„ï¼Œhttp://127.0.0.1:1818 å’Œ http://localhost:1818 æ˜¯ä¸ä¸€æ ·çš„
    "IPs": "http://127.0.0.1:8080,http://localhost:8080"
  },
  "WMS": "http://localhost:9290/api/Task/",
  "ApiName": "WIDESEA",
  "ExpMinutes": 120,
  "QuartzJobAutoStart": true
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -26,8 +26,10 @@
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Comm.Http;
using WIDESEA_Common.Log;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
@@ -40,6 +42,7 @@
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Core.Helper;
namespace WIDESEAWCS_TaskInfoService
{
@@ -73,7 +76,7 @@
            _task_HtyService = task_HtyService;
            _task_HtyRepository = task_HtyRepository;
        }
        public string url = AppSettings.Configuration["WMS"];
        /// <summary>
        /// æŽ¥æ”¶WMS任务信息
        /// </summary>
@@ -93,28 +96,6 @@
                    }
                    Dt_Task task = _mapper.Map<Dt_Task>(item);
                    task.Creater = "WMS";
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    {
                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress);
                        //暂不考虑多路径
                        if (routers.Count > 0)
                        {
                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
                            task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                    }
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                    {
                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
                        //暂不考虑多路径
                        if (routers.Count > 0)
                        {
                            task.TaskState = (int)TaskInStatusEnum.InNew;
                            task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                    }
                    tasks.Add(task);
                }
                BaseDal.AddData(tasks);
@@ -149,9 +130,9 @@
                    RoadWay = "SC01",
                    SourceAddress = sourceAddress,
                    TargetAddress = "SC01",
                    TaskState = (int)TaskInStatusEnum.InNew,
                    TaskState = TaskInStatusEnum.InNew.ObjToInt(),
                    Id = 0,
                    TaskType = (int)TaskInboundTypeEnum.Inbound
                    TaskType = TaskInboundTypeEnum.Inbound.ObjToInt()
                };
                content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
@@ -171,7 +152,7 @@
        /// <returns></returns>
        public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress)
        {
            return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
            return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.SC_OutFinish.ObjToInt()) && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
@@ -182,7 +163,7 @@
        /// <returns></returns>
        public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == TaskInStatusEnum.Line_InExecuting.ObjToInt() || x.TaskState == TaskOutStatusEnum.Line_OutExecuting.ObjToInt()), TaskOrderBy);
        }
        /// <summary>
@@ -193,7 +174,7 @@
        /// <returns></returns>
        public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == TaskInStatusEnum.Line_InFinish.ObjToInt() || x.TaskState == TaskOutStatusEnum.Line_OutFinish.ObjToInt()), TaskOrderBy);
        }
        /// <summary>
@@ -205,11 +186,11 @@
        public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
        {
            if(taskTypeGroup == null)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.Line_InFinish.ObjToInt() || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt()), TaskOrderBy);
            if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.Line_InFinish.ObjToInt(), TaskOrderBy);
            if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
            return null;
        }
@@ -229,9 +210,9 @@
            else
            {
                if (string.IsNullOrEmpty(currentAddress))
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt()), TaskOrderBy);
                else
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt()), TaskOrderBy);
            }
        }
@@ -250,10 +231,29 @@
            }
            else
            {
                if (string.IsNullOrEmpty(currentAddress))
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
                Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                if (task != null && tasks == null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else if (task == null && tasks != null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
            }
        }
        /// <summary>
@@ -265,9 +265,9 @@
        public Dt_Task QueryStackerCraneRelocationTask(string deviceNo, string currentAddress = "")
        {
            if (string.IsNullOrEmpty(currentAddress))
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
            else
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
@@ -285,28 +285,28 @@
            }
            else
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
                Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                if (task != null && tasks == null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else if (task == null && tasks != null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt(), TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
            }
@@ -327,7 +327,7 @@
            }
            else
            {
                return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.TargetAddress == outStationCodes, TaskOrderBy);
                return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt() && x.TargetAddress == outStationCodes, TaskOrderBy);
            }
        }
@@ -413,32 +413,15 @@
                int oldState = task.TaskState;
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    if (task.TaskState >= (int)TaskOutStatusEnum.OutFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = nextStatus;
                    task.TaskState = TaskOutStatusEnum.SC_OutExecuting.ObjToInt();
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    if (task.TaskState >= (int)TaskInStatusEnum.InFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                    {
                        Random random = new Random();
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = $"{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}";
                        task.TargetAddress = task.NextAddress;
                    }
                    task.TaskState = TaskInStatusEnum.SC_InExecuting.ObjToInt();
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    task.TaskState = TaskRelocationStatusEnum.RelocationExecuting.ObjToInt();
                }
                else
                {
@@ -513,56 +496,59 @@
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == TaskOutStatusEnum.SC_OutExecuting.ObjToInt())
                {
                    List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
                    if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息");
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = nextStatus;
                    task.CurrentAddress = task.NextAddress;
                    task.NextAddress = routers.FirstOrDefault().ChildPosi;
                    task.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.UpdateData(task);
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    //todo åŒæ­¥åˆ°WMS
                    //暂不考虑多个出库口
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState ==TaskInStatusEnum.SC_InExecuting.ObjToInt())
                {
                    //todo
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    task.TaskState = TaskInStatusEnum.InFinish.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.UpdateData(task);
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                    WMSTaskDTO taskDTO = new WMSTaskDTO()
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                        Grade = 1,
                        PalletCode = task.PalletCode + "S",
                        RoadWay = "SC01",
                        SourceAddress = task.TargetAddress,
                        TargetAddress = "CLOutAreaA",
                        TaskState = (int)TaskOutStatusEnum.OutNew,
                        Id = 0,
                        TaskType = (int)TaskOutboundTypeEnum.Outbound
                    };
                    content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    //todo è°ƒç”¨WMS移库完成
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
                {
                    task.TaskState = TaskRelocationStatusEnum.RelocationFinish.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else
                {
@@ -572,7 +558,11 @@
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】,异常信息:{ex.Message}");
            }
            finally
            {
                WriteLog.GetLog("完成任务").Write(JsonConvert.SerializeObject(content), "完成任务");
            }
            return content;
        }
@@ -581,22 +571,69 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryData(x => x.TaskNum == taskNum).FirstOrDefault();
                if (task != null)
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState != TaskOutStatusEnum.SC_OutExecuting.ObjToInt())
                {
                    if (task.TaskState != (int)TaskOutStatusEnum.SC_OutExecuting || task.TaskState != (int)TaskInStatusEnum.SC_InExecuting || task.TaskState != (int)TaskRelocationStatusEnum.SC_RelocationFinish)
                    task.TaskState = TaskOutStatusEnum.OutCancel.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库取消");
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        task.TaskState = 501;
                        task.Modifier = "WMS";
                        BaseDal.DeleteData(task);
                        _task_HtyService.AddTaskHty(task);
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState != TaskInStatusEnum.SC_InExecuting.ObjToInt())
                {
                    task.TaskState = TaskInStatusEnum.InCancel.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库取消");
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup && task.TaskState != TaskRelocationStatusEnum.RelocationExecuting.ObjToInt())
                {
                    task.TaskState = TaskRelocationStatusEnum.RelocationCancel.ObjToInt();
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库取消");
                    var response = HttpHelpers.Post<WebResponseContent>(url + "TaskComplete?", task.TaskNum, "任务完成");
                    if (response.Status)
                    {
                        return content.OK();
                    }
                    else
                    {
                        content = WebResponseContent.Instance.Error(response.Message);
                    }
                }
                else
                {
                    return content.Error("未找到WCS任务");
                    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
                }
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -46,7 +46,8 @@
                {
                    if (getStackerObject.StackerCraneTaskCompletedValue(speStackerCrane) == StackerCraneTaskCompleted.WorkCompleted)
                    {
                        Console.WriteLine(1);
                        _taskService.StackCraneTaskCompleted(speStackerCrane.CurrentTaskNum);
                        speStackerCrane.SetValue(StackerCraneDBName.WorkType, 2);
                    }
                    else
                    {
@@ -57,14 +58,31 @@
                                Dt_Task? task = GetTask(speStackerCrane);
                                if (task != null)
                                {
                                    StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                                    if (stackerCraneTaskCommand != null)
                                    if (task.TaskType == TaskTypeGroup.OutbondGroup.ObjToInt())
                                    {
                                        bool sendFlag = speStackerCrane.SendCommand(stackerCraneTaskCommand);
                                        if (sendFlag)
                                        //todo出库判断货架状态
                                        StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                                        if (stackerCraneTaskCommand != null)
                                        {
                                            speStackerCrane.LastTaskType = task.TaskType;
                                            _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                            bool sendFlag = speStackerCrane.SendCommand(stackerCraneTaskCommand);
                                            if (sendFlag)
                                            {
                                                speStackerCrane.LastTaskType = task.TaskType;
                                                _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                                        if (stackerCraneTaskCommand != null)
                                        {
                                            bool sendFlag = speStackerCrane.SendCommand(stackerCraneTaskCommand);
                                            if (sendFlag)
                                            {
                                                speStackerCrane.LastTaskType = task.TaskType;
                                                _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                            }
                                        }
                                    }
                                }
@@ -195,9 +213,9 @@
                    string[] sourceCodes = task.SourceAddress.Split("-");
                    if (sourceCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
                    }
                    else
                    {
@@ -208,9 +226,9 @@
                    string[] targetCodes = task.TargetAddress.Split("-");
                    if (targetCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
                    }
                    else
                    {
@@ -232,9 +250,9 @@
                    string[] targetCodes = task.TargetAddress.Split("-");
                    if (targetCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
                    }
                    else
                    {
@@ -245,9 +263,9 @@
                    string[] sourceCodes = task.SourceAddress.Split("-");
                    if (sourceCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
                    }
                    else
                    {
@@ -269,9 +287,9 @@
                    string[] targetCodes = task.TargetAddress.Split("-");
                    if (targetCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
                    }
                    else
                    {
@@ -282,9 +300,9 @@
                    string[] sourceCodes = task.SourceAddress.Split("-");
                    if (sourceCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
                    }
                    else
                    {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/TaskEnum.cs
@@ -165,6 +165,12 @@
        /// </summary>
        [Description("移库任务完成")]
        RelocationFinish = 310,
        /// <summary>
        /// ç§»åº“任务取消
        /// </summary>
        [Description("移库任务取消")]
        RelocationCancel = 320,
    }
    #endregion å…¥åº“任务状态
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -531,7 +531,7 @@
                _basicService.LocationInfoService.RelocationFree(locationStart, task.TaskNum);
                _basicService.LocationInfoService.Repository.UpdateData(locationEnd);
                task.TaskStatus = InTaskStatusEnum.RelocationFinish.ObjToInt();
                task.TaskStatus = InTaskStatusEnum.RelocationCancel.ObjToInt();
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                _unitOfWorkManage.CommitTran();