qinchulong
2025-05-27 c020f31a67fc5aa5644511bddff075f7ecc85234
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,229 @@
#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 WIDESEA_Core.Enums;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_DTO.TaskEnum;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_TaskInfoService
{
    public class TaskExecuteDetailService : ServiceBase<Dt_TaskExecuteDetail, ITaskExecuteDetailRepository>, ITaskExecuteDetailService
    {
        private readonly ITaskRepository _taskRepository;
        public TaskExecuteDetailService(ITaskExecuteDetailRepository BaseDal, ITaskRepository taskRepository) : base(BaseDal)
        {
            _taskRepository = taskRepository;
        }
        public void AddTaskExecuteDetail(int taskId, string description = "")
        {
            try
            {
                bool isNormal = true;
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskId == taskId);
                if (task == null) return;
                int taskNum = task.TaskNum;
                int TaskStatus = task.TaskStatus;
                if (!int.TryParse(Enum.Parse<OutTaskStatusEnum>(TaskStatus.ToString()).ToString(), out int result))
                {
                    if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish)
                        isNormal = false;
                }
                else if (!int.TryParse(Enum.Parse<InTaskStatusEnum>(TaskStatus.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 = taskId,
                    TaskState = TaskStatus,
                    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 TaskStatus = task.TaskStatus;
                    if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(TaskStatus.ToString()).ToString(), out int result))
                    {
                        if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish)
                            isNormal = false;
                    }
                    else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(TaskStatus.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 = TaskStatus,
                        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.TaskStatus) + 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;
        }
    }
}