dengjunjie
5 天以前 4f39dcc195f28fa275fc2d065fbf1bf6a46c21b7
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -17,24 +17,12 @@
using AutoMapper;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
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;
using WIDESEAWCS_Core.DB.Models;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
@@ -44,6 +32,8 @@
using WIDESEAWCS_Core.Helper;
using WIDESEA_Core.Enums;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_DTO.TaskEnum;
namespace WIDESEAWCS_TaskInfoService
{
@@ -59,7 +49,7 @@
        private Dictionary<string, OrderByType> _taskOrderBy = new()
            {
                {nameof(Dt_Task.Grade),OrderByType.Desc },
                {nameof(Dt_Task.Grade),OrderByType.Asc },
                {nameof(Dt_Task.CreateDate),OrderByType.Asc},
            };
@@ -111,6 +101,10 @@
            {
                _unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.Error($"{ex.Message}");
            }
            finally
            {
                WriteLog.GetLog("接收任务").Write($"接收参数:{JsonConvert.SerializeObject(taskDTOs)}{Environment.NewLine}报文:{JsonConvert.SerializeObject(content)}", "接收任务");
            }
            return content;
        }
@@ -190,11 +184,11 @@
        /// <returns></returns>
        public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
        {
            if(taskTypeGroup == null)
            if (taskTypeGroup == null)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
            if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
            if (taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
            if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
            if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            return null;
        }
@@ -205,20 +199,9 @@
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "")
        public Dt_Task? QueryStackerCraneTask(string deviceNo, string currentAddress = "")
        {
            Dt_Task taskGrade = BaseDal.QueryFirst(x => x.Grade == 0, TaskOrderBy);
            if (taskGrade != null)
            {
                return taskGrade;
            }
            else
            {
                if (string.IsNullOrEmpty(currentAddress))
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskTypeEnums.Contains(x.TaskType) && (x.TaskStatus == (int)TaskInStatusEnum.InNew ||  x.TaskStatus == (int)TaskOutStatusEnum.OutNew)), TaskOrderBy);
                else
                    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
            }
            return BaseDal.QueryFirst(x => x.TaskStatus == (int)InTaskStatusEnum.InNew || x.TaskStatus == (int)OutTaskStatusEnum.OutNew || x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationNew, TaskOrderBy);
        }
        /// <summary>
@@ -229,7 +212,7 @@
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "")
        {
            Dt_Task taskGrade = BaseDal.QueryFirst(x => x.Grade == 0, TaskOrderBy);
            Dt_Task taskGrade = BaseDal.QueryFirst(x => true, TaskOrderBy);
            if (taskGrade != null)
            {
                return taskGrade;
@@ -262,20 +245,6 @@
            }
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池入库类型的新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneRelocationTask(string deviceNo, string currentAddress = "")
        {
            if (string.IsNullOrEmpty(currentAddress))
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            else
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
@@ -283,7 +252,7 @@
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "")
        {
            Dt_Task taskGrade = BaseDal.QueryFirst(x => x.Grade == 0, TaskOrderBy);
            Dt_Task taskGrade = BaseDal.QueryFirst(x => true, TaskOrderBy);
            if (taskGrade != null)
            {
                return taskGrade;
@@ -325,7 +294,7 @@
        /// <returns>返回任务实体对象集合,可能为null</returns>
        public List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo, string outStationCodes)
        {
            List<Dt_Task> taskGrade = BaseDal.QueryData(x => x.Grade == 0, TaskOrderBy);
            List<Dt_Task> taskGrade = BaseDal.QueryData(x => true, TaskOrderBy);
            if (taskGrade != null)
            {
                return taskGrade;
@@ -358,7 +327,7 @@
                }
                else if (task.TaskType == (int)TaskTypeEnum.Relocation)
                {
                    task.TaskStatus = (int)InTaskStatusEnum.RelocationException;
                    task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationException;
                }
                task.ExceptionMessage = message;
@@ -400,7 +369,7 @@
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】!");
                return UpdateTaskStatusToNext(task);
            }
            catch (Exception ex)
@@ -421,7 +390,7 @@
            try
            {
                int oldState = task.TaskStatus;
                if (task.TaskType == (int)TaskTypeEnum.Outbound|| task.TaskType == (int)TaskTypeEnum.PalletOutbound)
                if (task.TaskType == (int)TaskTypeEnum.Outbound || task.TaskType == (int)TaskTypeEnum.PalletOutbound)
                {
                    task.TaskStatus = OutTaskStatusEnum.SC_OutExecuting.ObjToInt();
                }
@@ -431,7 +400,7 @@
                }
                else if (task.TaskType == (int)TaskTypeEnum.Relocation)
                {
                    task.TaskStatus = (int)InTaskStatusEnum.RelocationExecuting;
                    task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting;
                }
                else
                {
@@ -450,7 +419,7 @@
                var response = HttpHelpers.Post<WebResponseContent>(url + "UpdateTaskStatus?taskNum=" + task.TaskNum, "", "更新任务状态");
                if (!response.Status)
                {
                    _unitOfWorkManage.RollbackTran();
                    throw new Exception(response.Message);
                }
                _unitOfWorkManage.CommitTran();
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"人工手动将任务状态从【{oldState}】跳转到【{task.TaskStatus}】" : $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskStatus}】");
@@ -504,7 +473,7 @@
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent StackCraneTaskCompleted(int taskNum)
        public WebResponseContent StackCraneTaskCompleted(int taskNum, string Modifier = "")
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -512,82 +481,52 @@
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                task.ModifyDate = DateTime.Now;
                if (App.User.UserId > 0) Modifier = App.User.UserName;
                task.Modifier = Modifier.IsNullOrEmpty() ? "WMS" : Modifier;
                if (task.TaskType == (int)TaskTypeEnum.Outbound || task.TaskType == (int)TaskTypeEnum.PalletOutbound)
                {
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = (int)OutTaskStatusEnum.OutFinish;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    if(App.User.UserId > 0)
                    _unitOfWorkManage.CommitTran();
                    if (!Modifier.IsNullOrEmpty())
                    {
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCompleted?taskNum=" + task.TaskNum, "", "任务完成");
                        if (response.Status)
                        {
                            _unitOfWorkManage.CommitTran();
                            return content.OK();
                        }
                        else
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content = WebResponseContent.Instance.Error(response.Message);
                        }
                        if (!response.Status) throw new Exception(response.Message);
                    }
                    _unitOfWorkManage.CommitTran();
                    return content.OK();
                }
                else if (task.TaskType == (int)TaskTypeEnum.Inbound  || task.TaskType == (int)TaskTypeEnum.PalletInbound)
                else if (task.TaskType == (int)TaskTypeEnum.Inbound || task.TaskType == (int)TaskTypeEnum.PalletInbound)
                {
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = (int)InTaskStatusEnum.InFinish;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                    if (App.User.UserId > 0)
                    _unitOfWorkManage.CommitTran();
                    if (!Modifier.IsNullOrEmpty())
                    {
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCompleted?taskNum=" + task.TaskNum, "", "任务完成");
                        if (response.Status)
                        {
                            _unitOfWorkManage.CommitTran();
                            return content.OK();
                        }
                        else
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content = WebResponseContent.Instance.Error(response.Message);
                        }
                        if (!response.Status) throw new Exception(response.Message);
                    }
                    _unitOfWorkManage.CommitTran();
                    return content.OK();
                }
                else if (task.TaskType== (int)TaskTypeEnum.Relocation)
                else if (task.TaskType == (int)TaskTypeEnum.Relocation)
                {
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = (int)InTaskStatusEnum.RelocationFinish;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationFinish;
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
                    if (App.User.UserId > 0)
                    _unitOfWorkManage.CommitTran();
                    if (!Modifier.IsNullOrEmpty())
                    {
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCompleted?taskNum=" + task.TaskNum, "", "任务完成");
                        if (response.Status)
                        {
                            _unitOfWorkManage.CommitTran();
                            return content.OK();
                        }
                        else
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content = WebResponseContent.Instance.Error(response.Message);
                        }
                        if (!response.Status) throw new Exception(response.Message);
                    }
                    _unitOfWorkManage.CommitTran();
                    return content.OK();
                }
                else
@@ -597,12 +536,12 @@
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】,异常信息:{ex.Message}");
                //_unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.OK($"任务完成异常,任务号:【{taskNum}】,异常信息:{ex.Message}");
            }
            finally
            {
                WriteLog.GetLog("完成任务").Write(JsonConvert.SerializeObject(content), "完成任务");
                WriteLog.GetLog("完成任务").Write($"操作人:{(App.User.UserId > 0 ? App.User.UserName : "堆垛机")}{Environment.NewLine}任务号:{taskNum}{Environment.NewLine}{JsonConvert.SerializeObject(content)}", "完成任务");
            }
            return content;
        }
@@ -615,17 +554,18 @@
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType == (int)TaskTypeEnum.Outbound  || task.TaskType == (int)TaskTypeEnum.PalletOutbound)
                task.ModifyDate = DateTime.Now;
                task.Modifier = "WMS";
                if (task.TaskType == (int)TaskTypeEnum.Outbound || task.TaskType == (int)TaskTypeEnum.PalletOutbound)
                {
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = (int)OutTaskStatusEnum.OutCancel;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库取消");
                    if (App.User.UserId > 0)
                    {
                        BaseDal.DeleteData(task);
                        _task_HtyService.AddTaskHty(task);
                        task.Modifier = "System";
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCancel?taskNum=" + task.TaskNum, "", "取消任务");
                        if (response.Status)
                        {
@@ -634,6 +574,7 @@
                        }
                        else
                        {
                            UpdateTaskExceptionMessage(task.TaskNum, $"堆垛机任务取消失败");
                            _unitOfWorkManage.RollbackTran();
                            return content = WebResponseContent.Instance.Error(response.Message);
                        }
@@ -645,13 +586,10 @@
                {
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = (int)InTaskStatusEnum.InCancel;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库取消");
                    if (App.User.UserId > 0)
                    {
                        task.Modifier = "System";
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCancel?taskNum=" + task.TaskNum, "", "取消任务");
                        if (response.Status)
                        {
@@ -660,24 +598,24 @@
                        }
                        else
                        {
                            UpdateTaskExceptionMessage(task.TaskNum, $"堆垛机任务取消失败");
                            _unitOfWorkManage.RollbackTran();
                            return content = WebResponseContent.Instance.Error(response.Message);
                        }
                    }
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _unitOfWorkManage.CommitTran();
                    return content.OK();
                }
                else if (task.TaskType == (int)TaskTypeEnum.Relocation)
                {
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = (int)InTaskStatusEnum.RelocationCancel;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationCancel;
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库取消");
                    if (App.User.UserId > 0)
                    {
                        task.Modifier = "System";
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCancel?taskNum=" + task.TaskNum, "", "取消任务");
                        if (response.Status)
                        {
@@ -686,10 +624,13 @@
                        }
                        else
                        {
                            UpdateTaskExceptionMessage(task.TaskNum, $"堆垛机任务取消失败");
                            _unitOfWorkManage.RollbackTran();
                            return content = WebResponseContent.Instance.Error(response.Message);
                        }
                    }
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _unitOfWorkManage.CommitTran();
                    return content.OK();
                }
@@ -705,7 +646,7 @@
            }
            finally
            {
                WriteLog.GetLog("取消任务").Write(JsonConvert.SerializeObject(content), "取消任务");
                WriteLog.GetLog("取消任务").Write($"操作人:{(App.User.UserId > 0 ? App.User.UserName : "")}{Environment.NewLine}任务号:{taskNum}{Environment.NewLine}{JsonConvert.SerializeObject(content)}", "取消任务");
            }
        }
        /// <summary>