#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>, ITaskExecuteDetailService { private readonly IRepository _taskRepository; public TaskExecuteDetailService(IRepository BaseDal, IRepository 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(taskState.ToString()).ToString(), out int result)) { // 如果转换失败,则将任务状态转换为TaskInStatusEnum枚举类型 if (!int.TryParse(Enum.Parse(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 taskNums, string description = "") { try { List taskExecuteDetails = new List(); 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(taskState.ToString()).ToString(), out int result)) { if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish) isNormal = false; } else if (!int.TryParse(Enum.Parse(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 list = new(); List steps = new(); Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum); if (task != null) { if (!int.TryParse(Enum.Parse(task.TaskType.ToString()).ToString(), out int result)) { steps = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast().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(); 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(task.TaskType.ToString()).ToString(), out result)) { steps = Enum.GetValues(typeof(TaskInStatusEnum)).Cast().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(); 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(task.TaskType.ToString()).ToString(), out result)) { //todo 调用WMS移库完成 } else if (!int.TryParse(Enum.Parse(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 taskExecuteDetails = BaseDal.QueryData(x => x.TaskId == task.TaskId, new Dictionary { { nameof(Dt_TaskExecuteDetail.TaskDetailId), SqlSugar.OrderByType.Asc } }); content = WebResponseContent.Instance.OK(data: taskExecuteDetails); } else { content = WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】"); } } catch (Exception ex) { } return content; } } }