Admin
2026-01-21 00e64cba66377cb75c9c947908627fe9f631746e
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -15,7 +15,10 @@
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using Autofac.Core;
using AutoMapper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Org.BouncyCastle.Math.EC;
using SixLabors.ImageSharp;
@@ -96,6 +99,75 @@
            return WebResponseContent.Instance.OK();
        }
        public WebResponseContent MESManualUpload(SaveModel saveModel)
        {
            WebResponseContent response = new WebResponseContent();
            try
            {
                foreach (var key in saveModel.DelKeys)
                {
                    int taskId = int.Parse(key.ToString());
                    Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == taskId);
                    WebResponseContent taskResult = ProcessTask(task);
                    if (!taskResult.Status)
                    {
                        return taskResult;
                    }
                }
                return response.OK("所有任务处理成功");
            }
            catch (Exception ex)
            {
                return response.Error($"WMS任务完成错误:{ex.Message}");
            }
        }
        private WebResponseContent ProcessTask(Dt_Task task)
        {
            WebResponseContent response = new WebResponseContent();
            switch ((TaskTypeEnum)task.TaskType)
            {
                case TaskTypeEnum.Inbound:
                    if (task.TaskStatus != (int)InTaskStatusEnum.InPLCException &&
                        task.TaskStatus != (int)InTaskStatusEnum.InSCException)
                    {
                        return response.Error($"任务类型错误,任务号:{task.TaskId},托盘编号:{task.PalletCode}");
                    }
                    return HandleInboundTask(task,
                        GetWcsType(task.TaskStatus,
                        (int)InTaskStatusEnum.InPLCException,
                        (int)InTaskStatusEnum.InSCException)
                        );
                case TaskTypeEnum.Outbound:
                    if (task.TaskStatus != (int)OutTaskStatusEnum.OutPLCException &&
                        task.TaskStatus != (int)OutTaskStatusEnum.OutSCException)
                    {
                        return response.Error($"任务类型错误,任务号:{task.TaskId},托盘编号:{task.PalletCode}");
                    }
                    return HandleOutboundTask(task, GetWcsType(task.TaskStatus,
                        (int)OutTaskStatusEnum.OutPLCException,
                        (int)OutTaskStatusEnum.OutSCException));
                case TaskTypeEnum.Relocation:
                    return HandleRelocationTask(task, 2);
                default:
                    return response.Error($"任务类型错误,任务号:{task.TaskId},托盘编号:{task.PalletCode},类型:{task.TaskType}");
            }
        }
        private int GetWcsType(int taskStatus, int plcStatus, int scStatus)
        {
            if (taskStatus == plcStatus) return 1;
            if (taskStatus == scStatus) return 2;
            return 0;
        }
        /// <summary>
        /// ä»»åŠ¡å®ŒæˆæŽ¥å£
@@ -110,15 +182,27 @@
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == wCSTask.TaskNum && x.PalletCode == wCSTask.PalletCode);
                if (task == null)
                    return webResponse.Error("未找到任务信息");
                return TaskCompletedtask(task, wCSTask.TaskType);
            }
            catch (Exception ex)
            {
                return webResponse.Error($"WMS任务完成错误:{ex.Message}");
            }
        }
        public WebResponseContent TaskCompletedtask(Dt_Task task,int wcstype)
        {
            WebResponseContent webResponse = new WebResponseContent();
            try
            {
                switch ((TaskTypeEnum)task.TaskType)
                {
                    case TaskTypeEnum.Inbound:
                        return HandleInboundTask(task, wCSTask.TaskType);
                        return HandleInboundTask(task, wcstype);
                    case TaskTypeEnum.Outbound:
                        return HandleOutboundTask(task, wCSTask.TaskType);
                        return HandleOutboundTask(task, wcstype);
                    case TaskTypeEnum.Relocation:
                        return HandleRelocationTask(task, wCSTask.TaskType);
                        return HandleRelocationTask(task, wcstype);
                    default:
                        return webResponse.Error($"任务类型错误,任务号:{task.TaskId},托盘编号:{task.PalletCode},类型:{task.TaskType}");
                }
@@ -128,6 +212,8 @@
                return webResponse.Error($"WMS任务完成错误:{ex.Message}");
            }
        }
        private WebResponseContent HandleInboundTask(Dt_Task task, int wcsTaskType)
        {
@@ -140,7 +226,7 @@
                        if (string.IsNullOrEmpty(task.TargetAddress))
                        {
                            if(task.TaskStatus == (int)InTaskStatusEnum.PLC_InExecuting)
                            if(task.TaskStatus == (int)InTaskStatusEnum.PLC_InExecuting || task.TaskStatus == (int)InTaskStatusEnum.InPLCException)
                            {
                                int loctype = 0;
                                if (task.Roadway == "1" || task.Roadway == "2")
@@ -155,6 +241,7 @@
                                //查找货位,更新任务
                                Dt_LocationInfo dt_Location = _locationInfoService.GetLocation(task.Roadway, loctype);
                                if(dt_Location==null) return content.Error($"未找到该货位信息,托盘编号:{task.PalletCode}");
                                Dt_LocationInfo ShallowCargoHold = _locationInfoService.ShallowGetLocation(dt_Location.RoadwayNo, dt_Location.LocationType, dt_Location.Row, dt_Location.Layer, dt_Location.Column);
                                if (ShallowCargoHold == null) return content.Error($"未找到该货位信息,货位编号:{dt_Location.LocationCode}的浅货位");
                                if (ShallowCargoHold.LocationStatus != (int)LocationStatusEnum.Free) return content.Error($"任务号:{task.TaskId},托盘编号:{task.PalletCode},查找的货位浅货位有货,货位编号:{ShallowCargoHold.LocationCode}");
@@ -182,6 +269,8 @@
                                dt_StockInfo.StockStatus = (int)StockStatusEmun.入库中;
                                dt_StockInfo.Creater = "MWS";
                                dt_StockInfo.CreateDate = DateTime.Now;
                                dt_StockInfo.Roadway = task.Roadway;
                                _unitOfWorkManage.BeginTran();
                                _stockInfoService.AddData(dt_StockInfo);
@@ -200,7 +289,7 @@
                        else
                        {
                            //判断是否有该站台
                            if (task.TaskStatus == (int)InTaskStatusEnum.PLC_InExecuting)
                            if (task.TaskStatus == (int)InTaskStatusEnum.PLC_InExecuting || task.TaskStatus == (int)InTaskStatusEnum.InPLCException)
                            {
                                string Resultplc = MesInTaskStatusEnum.Finish.GetDescription();
                                MES_parameter mES_PCLParameter = InStoreDocCallback(task.TaskNum, Resultplc, "操作成功", task.PalletCode, task.TargetAddress);
@@ -214,6 +303,13 @@
                                }
                                else
                                {
                                    task.NumberSsuances = task.NumberSsuances + 1;
                                    if (task.NumberSsuances == 3)
                                    {
                                        task.TaskStatus = (int)InTaskStatusEnum.InPLCException;
                                        task.Remark = "输送线入库:上传MES失败,原因:" + mES_PCLParameter.ResultMsg;
                                        BaseDal.UpdateData(task);
                                    }
                                    return content.Error("上传MES失败,原因:" + mES_PCLParameter.ResultMsg);
                                }
                            }
@@ -224,7 +320,7 @@
                        }
                    case 2:
                        if (task.TaskStatus == (int)InTaskStatusEnum.SC_IntExecuting)
                        if (task.TaskStatus == (int)InTaskStatusEnum.SC_IntExecuting || task.TaskStatus == (int)InTaskStatusEnum.InSCException)
                        {
                            string Resultsc = MesInTaskStatusEnum.Finish.GetDescription();
                            //上报MES任务完成
@@ -247,6 +343,13 @@
                            }
                            else
                            {
                                task.NumberSsuances = task.NumberSsuances + 1;
                                if (task.NumberSsuances == 3)
                                {
                                    task.TaskStatus = (int)InTaskStatusEnum.InSCException;
                                    task.Remark = "堆垛机入库,上传MES失败,原因:" + mES_Parameter.ResultMsg;
                                    BaseDal.UpdateData(task);
                                }
                                return content.Error("上传MES失败,原因:" + mES_Parameter.ResultMsg);
                            }
                        }
@@ -274,7 +377,7 @@
                switch (wcsTaskType)
                {
                    case 1:
                        if(task.TaskStatus == (int)OutTaskStatusEnum.PLC_OutExecuting)
                        if(task.TaskStatus == (int)OutTaskStatusEnum.PLC_OutExecuting || task.TaskStatus == (int)OutTaskStatusEnum.OutPLCException)
                        {
                            string Resultplc = MesOutTaskStatusEnum.Finish.GetDescription();
                            //上报MES任务完成
@@ -287,6 +390,13 @@
                            }
                            else
                            {
                                task.NumberSsuances = task.NumberSsuances + 1;
                                if (task.NumberSsuances == 3)
                                {
                                    task.TaskStatus = (int)OutTaskStatusEnum.OutPLCException;
                                    task.Remark = "出库,输送线上传MES失败,原因:" + mES_Parameter.ResultMsg;
                                    BaseDal.UpdateData(task);
                                }
                                return content.Error("上传MES失败,原因:" + mES_Parameter.ResultMsg);
                            }
@@ -298,7 +408,7 @@
                        
                    case 2:
                        if (task.TaskStatus == (int)OutTaskStatusEnum.SC_OutExecuting)
                        if (task.TaskStatus == (int)OutTaskStatusEnum.SC_OutExecuting || task.TaskStatus == (int)OutTaskStatusEnum.OutSCException)
                        {
                            //获取对应PLC站台信息
                            Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(task.Roadway);
@@ -324,6 +434,13 @@
                            }
                            else
                            {
                                task.NumberSsuances = task.NumberSsuances + 1;
                                if (task.NumberSsuances == 3)
                                {
                                    task.TaskStatus = (int)OutTaskStatusEnum.OutSCException;
                                    task.Remark = "堆垛机出库:上传MES失败,原因:" + mES_SCParameter.ResultMsg;
                                    BaseDal.UpdateData(task);
                                }
                                return content.Error("上传MES失败,原因:" + mES_SCParameter.ResultMsg);
                            }
                        }
@@ -381,6 +498,13 @@
                        }
                        else
                        {
                            task.NumberSsuances = task.NumberSsuances + 1;
                            if (task.NumberSsuances == 3)
                            {
                                task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationException;
                                task.Remark = "移库,上传MES失败,原因:" + mES_Parameter.ResultMsg;
                                BaseDal.UpdateData(task);
                            }
                            return responseContent.Error("上传MES失败,原因:" + mES_Parameter.ResultMsg);
                        }
                    }
@@ -404,6 +528,8 @@
        }
        
    }