duyongjia
2024-12-28 6be2bc8324ca81145830b758c110255d9dfdc00b
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -16,6 +16,7 @@
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using SqlSugar;
using System;
@@ -24,12 +25,16 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.Http;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
@@ -44,6 +49,7 @@
        private readonly IRouterService _routerService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IMapper _mapper;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -57,15 +63,15 @@
        public List<int> TaskInboundTypes => typeof(TaskInboundTypeEnum).GetEnumIndexList();
        public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal)
        public string url = AppSettings.Configuration["WMS"];
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        {
            _routerService = routerService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskExecuteDetailRepository = taskExecuteDetailRepository;
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
        }
        /// <summary>
        /// æŽ¥æ”¶WMS任务信息
        /// </summary>
@@ -79,33 +85,41 @@
                List<Dt_Task> tasks = new List<Dt_Task>();
                foreach (var item in taskDTOs)
                {
                    if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null)
                    Dt_Task tasktemp = BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode);
                    if (tasktemp != null)
                    {
                        continue;
                        if (tasktemp.TaskState != (int)TaskInStatusEnum.InFinish && tasktemp.TaskState != (int)TaskOutStatusEnum.OutFinish)
                        {
                            continue;
                        }
                    }
                    Dt_Task task = _mapper.Map<Dt_Task>(item);
                    task.Creater = "WMS";
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    if(item.TaskType==(int)TaskOutboundTypeEnum.OutInventory)
                    {
                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress);
                        //暂不考虑多路径
                        if (routers.Count > 0)
                        {
                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
                            task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                        task.TaskType=(int)TaskOutboundTypeEnum.OutInventory;
                        task.TaskState=(int)TaskOutStatusEnum.OutNew;
                    }
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                    else if (item.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                    {
                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
                        //暂不考虑多路径
                        if (routers.Count > 0)
                        {
                            task.TaskState = (int)TaskInStatusEnum.InNew;
                            task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                        task.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                        task.TaskState = (int)TaskOutStatusEnum.OutNew;
                    }
                    else if (item.TaskType == (int)TaskInboundTypeEnum.Inbound)
                    {
                        task.TaskType = (int)TaskInboundTypeEnum.Inbound;
                        task.TaskState = (int)TaskInStatusEnum.InNew;
                    }
                    else if (item.TaskType == (int)TaskInboundTypeEnum.InInventory)
                    {
                        task.TaskType = (int)TaskInboundTypeEnum.InInventory;
                        task.TaskState = (int)TaskInStatusEnum.InNew;
                    }
                    else if (item.TaskType == (int)TaskInboundTypeEnum.InPick)
                    {
                        task.TaskType = (int)TaskInboundTypeEnum.InPick;
                        task.TaskState = (int)TaskInStatusEnum.InNew;
                    }
                    tasks.Add(task);
                }
@@ -231,7 +245,7 @@
        /// <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)
        {
            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew ), TaskOrderBy);
        }
@@ -457,39 +471,142 @@
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                task.ModifyDate = DateTime.Now;
                task.Modifier = "WMS";
                if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound || task.TaskType == (int)TaskOutboundTypeEnum.OutInventory)
                {
                    UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    try
                    {
                        _unitOfWorkManage.BeginTran();
                        UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                        HttpHelpers.Post<WebResponseContent>(url.Replace("PDA", "Task") + "UpdateTaskStatus?taskNum=" + task.TaskNum, "", "更新任务状态");
                        _unitOfWorkManage.CommitTran();
                        return content.OK();
                    }
                    catch (Exception ex)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return content = WebResponseContent.Instance.Error(ex.Message);
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound || task.TaskType == (int)TaskInboundTypeEnum.InInventory || task.TaskType == (int)TaskInboundTypeEnum.InPick)
                {
                    _unitOfWorkManage.BeginTran();
                    UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.SC_InFinish);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                    HttpHelpers.Post<WebResponseContent>(url.Replace("PDA", "Task") + "UpdateTaskStatus?taskNum=" + task.TaskNum, "", "更新任务状态");
                    UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.InFinish);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"入库任务完成");
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    //todo è°ƒç”¨WMS移库完成
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
                {
                    //if (App.User.UserId > 0)
                    //{
                        task.Modifier = "System";
                        var response = HttpHelpers.Post<WebResponseContent>(url.Replace("PDA", "Task") + "TaskCompleted?taskNum=" + task.TaskNum, "", "任务完成");
                        if (response.Status)
                        {
                            _unitOfWorkManage.CommitTran();
                            return content.OK();
                        }
                        else
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content = WebResponseContent.Instance.Error(response.Message);
                        }
                    //}
                    //_unitOfWorkManage.CommitTran();
                    //return content.OK();
                }
                else
                {
                    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
                }
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
                _unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】,异常信息:{ex.Message}");
            }
            finally
            {
               // WriteLog.GetLog("完成任务").Write($"操作人:{(App.User.UserId > 0 ? App.User.UserName : "")}{Environment.NewLine}任务号:{taskNum}{Environment.NewLine}{JsonConvert.SerializeObject(content)}", "完成任务");
            }
            return content;
        }
        public WebResponseContent GenerateEmptyInBoundTask(string palletCode)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var response = HttpHelpers.Post<WebResponseContent>(url + "EmptyInBound?PalletCode=" + palletCode, "", "请求生成空托入库任务");
                if (response.Status)
                {
                    return content.OK();
                }
                else
                {
                    return content = WebResponseContent.Instance.Error(response.Message);
                }
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"请求生成空托入库任务,托盘号:【{palletCode}】,异常信息:{ex.Message}");
            }
            return content;
        }
        /// <summary>
        /// å‡ºåº“完成调用WMS出库完成接口
        /// </summary>
        /// <param name="palletCode"></param>
        /// <returns></returns>
        public WebResponseContent OutBoundTaskByWMS(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            var response = HttpHelpers.Post<WebResponseContent>(url.Replace("PDA", "Task") + "TaskCompleted?taskNum=" + taskNum, "", "任务完成");
            if (response.Status)
            {
                _unitOfWorkManage.CommitTran();
                return content.OK();
            }
            else
            {
                _unitOfWorkManage.RollbackTran();
                return content = WebResponseContent.Instance.Error(response.Message);
            }
        }
        public WebResponseContent GenerateEmptyOutBoundTask()
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var response = HttpHelpers.Post<WebResponseContent>(url + "EmptyOutBound", "", "请求生成空托出库任务");
                if (response.Status)
                {
                    return content.OK();
                }
                else
                {
                    return content = WebResponseContent.Instance.Error(response.Message);
                }
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"请求生成空托出库任务,异常信息:{ex.Message}");
            }
            return content;
        }
        /// <summary>
        /// æ¢å¤æŒ‚起任务
        /// </summary>