#region << 版 本 注 释 >> 
 | 
/*---------------------------------------------------------------- 
 | 
 * 命名空间:WIDESEAWCS_TaskInfoService 
 | 
 * 创建者:胡童庆 
 | 
 * 创建时间:2024/8/2 16:13:36 
 | 
 * 版本:V1.0.0 
 | 
 * 描述: 
 | 
 * 
 | 
 * ---------------------------------------------------------------- 
 | 
 * 修改人: 
 | 
 * 修改时间: 
 | 
 * 版本:V1.0.1 
 | 
 * 修改说明: 
 | 
 *  
 | 
 *----------------------------------------------------------------*/ 
 | 
#endregion << 版 本 注 释 >> 
 | 
  
 | 
using System; 
 | 
using System.Collections.Generic; 
 | 
using System.ComponentModel; 
 | 
using System.Linq; 
 | 
using System.Reflection; 
 | 
using System.Text; 
 | 
using System.Threading.Tasks; 
 | 
using WIDESEAWCS_Common.TaskEnum; 
 | 
using WIDESEAWCS_Core; 
 | 
using WIDESEAWCS_Core.BaseRepository; 
 | 
using WIDESEAWCS_Core.BaseServices; 
 | 
using WIDESEAWCS_Core.Enums; 
 | 
using WIDESEAWCS_ITaskInfoService; 
 | 
using WIDESEAWCS_Model.Models; 
 | 
  
 | 
namespace WIDESEAWCS_TaskInfoService 
 | 
{ 
 | 
    public class TaskExecuteDetailService : ServiceBase<Dt_TaskExecuteDetail, IRepository<Dt_TaskExecuteDetail>>, ITaskExecuteDetailService 
 | 
    { 
 | 
        private readonly IRepository<Dt_Task> _taskRepository; 
 | 
  
 | 
        public TaskExecuteDetailService(IRepository<Dt_TaskExecuteDetail> BaseDal, IRepository<Dt_Task> taskRepository) : base(BaseDal) 
 | 
        { 
 | 
            _taskRepository = taskRepository; 
 | 
        } 
 | 
  
 | 
        public void AddTaskExecuteDetail(int taskId, string description = "") 
 | 
        { 
 | 
            // 尝试执行添加任务执行详情的方法 
 | 
            try 
 | 
            { 
 | 
                // 初始化是否正常为true 
 | 
                bool isNormal = true; 
 | 
                // 根据任务id查询任务 
 | 
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskId == taskId); 
 | 
                // 如果任务为空,则返回 
 | 
                if (task == null) return; 
 | 
                // 获取任务数量 
 | 
                int taskNum = task.TaskNum; 
 | 
                // 获取任务状态 
 | 
                int taskState = task.TaskState; 
 | 
  
 | 
                // 尝试将任务状态转换为TaskOutStatusEnum枚举类型 
 | 
                if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result)) 
 | 
                { 
 | 
                    // 如果转换失败,则将任务状态转换为TaskInStatusEnum枚举类型 
 | 
                    if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result)) 
 | 
                    { 
 | 
                        // 如果转换失败,则将isNormal设置为false 
 | 
                        isNormal = false; 
 | 
                    } 
 | 
                } 
 | 
                // 如果转换成功,则判断任务状态是否大于OutFinish 
 | 
                else if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish) 
 | 
                { 
 | 
                    // 如果大于,则将isNormal设置为false 
 | 
                    isNormal = false; 
 | 
                } 
 | 
                // 创建任务执行详情对象 
 | 
                Dt_TaskExecuteDetail taskExecuteDetail = new() 
 | 
                { 
 | 
                    // 设置是否手动执行 
 | 
                    IsManual = App.User.UserId > 0, 
 | 
                    // 设置是否正常 
 | 
                    IsNormal = isNormal, 
 | 
                    // 设置任务数量 
 | 
                    TaskNum = taskNum, 
 | 
                    // 设置任务id 
 | 
                    TaskId = taskId, 
 | 
                    // 设置任务状态 
 | 
                    TaskState = taskState, 
 | 
                    // 设置描述 
 | 
                    Description = description, 
 | 
                    // 设置当前地址 
 | 
                    CurrentAddress = task.CurrentAddress, 
 | 
                    // 设置下一个地址 
 | 
                    NextAddress = task.NextAddress, 
 | 
                }; 
 | 
                // 添加任务执行详情 
 | 
                BaseDal.AddData(taskExecuteDetail); 
 | 
            } 
 | 
            catch (Exception ex) 
 | 
            { 
 | 
                 
 | 
            } 
 | 
        } 
 | 
  
 | 
        public void AddTaskExecuteDetail(List<int> taskNums, string description = "") 
 | 
        { 
 | 
            try 
 | 
            { 
 | 
                List<Dt_TaskExecuteDetail> taskExecuteDetails = new List<Dt_TaskExecuteDetail>(); 
 | 
                foreach (var item in taskNums) 
 | 
                { 
 | 
                    bool isNormal = true; 
 | 
                    Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == item); 
 | 
                    if (task == null) return; 
 | 
                    int taskNum = task.TaskNum; 
 | 
                    int taskState = task.TaskState; 
 | 
  
 | 
                    if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result)) 
 | 
                    { 
 | 
                        if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish) 
 | 
                            isNormal = false; 
 | 
                    } 
 | 
                    else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result)) 
 | 
                    { 
 | 
                        if ((int)(TaskInStatusEnum)result > (int)TaskInStatusEnum.InFinish) 
 | 
                            isNormal = false; 
 | 
                    } 
 | 
                    Dt_TaskExecuteDetail taskExecuteDetail = new() 
 | 
                    { 
 | 
                        IsManual = App.User.UserId > 0, 
 | 
                        IsNormal = isNormal, 
 | 
                        TaskNum = taskNum, 
 | 
                        TaskId = task.TaskId, 
 | 
                        TaskState = taskState, 
 | 
                        Description = description, 
 | 
                        CurrentAddress = task.CurrentAddress, 
 | 
                        NextAddress = task.NextAddress, 
 | 
                    }; 
 | 
                    taskExecuteDetails.Add(taskExecuteDetail); 
 | 
                } 
 | 
  
 | 
                BaseDal.AddData(taskExecuteDetails); 
 | 
            } 
 | 
            catch (Exception ex) 
 | 
            { 
 | 
  
 | 
            } 
 | 
        } 
 | 
  
 | 
        public WebResponseContent GetDetailInfo(int taskNum) 
 | 
        { 
 | 
            WebResponseContent content = new(); 
 | 
            try 
 | 
            { 
 | 
                int active = -1; 
 | 
                List<object> list = new(); 
 | 
                List<int> steps = new(); 
 | 
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum); 
 | 
                if (task != null) 
 | 
                { 
 | 
  
 | 
                    if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(task.TaskType.ToString()).ToString(), out int result)) 
 | 
                    { 
 | 
                        steps = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().Where(x => x <= (int)TaskOutStatusEnum.OutFinish).ToList(); 
 | 
  
 | 
                        foreach (var item in steps) 
 | 
                        { 
 | 
                            object obj; 
 | 
                            FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString()); 
 | 
                            DescriptionAttribute? descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>(); 
 | 
                            if (descriptionAttribute != null) 
 | 
                            { 
 | 
                                obj = new { title = item, description = descriptionAttribute.Description }; 
 | 
                            } 
 | 
                            else 
 | 
                            { 
 | 
                                obj = new { title = item, description = ((TaskOutStatusEnum)item).ToString() }; 
 | 
                            } 
 | 
                            list.Add(obj); 
 | 
                        } 
 | 
                    } 
 | 
                    else if (!int.TryParse(Enum.Parse<TaskInboundTypeEnum>(task.TaskType.ToString()).ToString(), out result)) 
 | 
                    { 
 | 
                        steps = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().Where(x => x <= (int)TaskInStatusEnum.InFinish).ToList(); 
 | 
                        foreach (var item in steps) 
 | 
                        { 
 | 
                            object obj; 
 | 
                            FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString()); 
 | 
                            DescriptionAttribute? descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>(); 
 | 
                            if (descriptionAttribute != null) 
 | 
                            { 
 | 
                                obj = new { title = item, description = descriptionAttribute.Description }; 
 | 
                            } 
 | 
                            else 
 | 
                            { 
 | 
                                obj = new { title = item, description = ((TaskInStatusEnum)item).ToString() }; 
 | 
                            } 
 | 
                            list.Add(obj); 
 | 
                        } 
 | 
                    } 
 | 
                    else if (!int.TryParse(Enum.Parse<TaskRelocationTypeEnum>(task.TaskType.ToString()).ToString(), out result)) 
 | 
                    { 
 | 
                        //todo 调用WMS移库完成 
 | 
                    } 
 | 
                    else if (!int.TryParse(Enum.Parse<TaskOtherTypeEnum>(task.TaskType.ToString()).ToString(), out result)) 
 | 
                    { 
 | 
  
 | 
                    } 
 | 
                    else 
 | 
                    { 
 | 
                        throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】"); 
 | 
                    } 
 | 
                    active = steps.IndexOf(task.TaskState) + 1; 
 | 
  
 | 
                } 
 | 
  
 | 
                content = WebResponseContent.Instance.OK(data: new { active, list }); 
 | 
            } 
 | 
            catch (Exception ex) 
 | 
            { 
 | 
  
 | 
            } 
 | 
            return content; 
 | 
        } 
 | 
  
 | 
        public WebResponseContent GetDetailDatas(int taskNum) 
 | 
        { 
 | 
            WebResponseContent content = new(); 
 | 
            try 
 | 
            { 
 | 
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum); 
 | 
                if (task != null) 
 | 
                { 
 | 
                    List<Dt_TaskExecuteDetail> taskExecuteDetails = BaseDal.QueryData(x => x.TaskId == task.TaskId, new Dictionary<string, SqlSugar.OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), SqlSugar.OrderByType.Asc } }); 
 | 
  
 | 
                    content = WebResponseContent.Instance.OK(data: taskExecuteDetails); 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    content = WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】"); 
 | 
                } 
 | 
            } 
 | 
            catch (Exception ex) 
 | 
            { 
 | 
  
 | 
            } 
 | 
            return content; 
 | 
        } 
 | 
    } 
 | 
} 
 |