zhangchengsong
2026-04-01 a87eee72770da479f043462787c17c534062a318
ÏîÄ¿´úÂë/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -33,11 +33,13 @@
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Metadata;
using System.Security.Cryptography.Xml;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Comm.Http;
using WIDESEA_Common.Log;
using WIDESEA_Core.Enums;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
@@ -46,10 +48,13 @@
using WIDESEAWCS_Core.Utilities;
using WIDESEAWCS_DTO.Enum;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Model.Models.System;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_TaskInfoRepository;
@@ -67,6 +72,7 @@
        private readonly IMapper _mapper;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IDt_roadwayinfoService _Dt_roadwayinfoService;
        private readonly IDt_PlatformStationRepository _dt_PlatformStation;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
            {
@@ -80,7 +86,7 @@
        public string urlWMSdeverror = WIDESEAWCS_Core.Helper.AppSettings.Configuration["urlWMSdeverror"];
        public string urlWMSliftinposition = WIDESEAWCS_Core.Helper.AppSettings.Configuration["urlWMSliftinposition"];
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService task_HtyService, ITask_HtyRepository task_HtyRepository, IUnitOfWorkManage unitOfWork, IDt_roadwayinfoService dt_RoadwayinfoService) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IDt_PlatformStationRepository dt_PlatformStation, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService task_HtyService, ITask_HtyRepository task_HtyRepository, IUnitOfWorkManage unitOfWork, IDt_roadwayinfoService dt_RoadwayinfoService) : base(BaseDal)
        {
            _routerService = routerService;
            _taskExecuteDetailService = taskExecuteDetailService;
@@ -90,6 +96,7 @@
            _mapper = mapper;
            _unitOfWorkManage = unitOfWork;
            _Dt_roadwayinfoService = dt_RoadwayinfoService;
            _dt_PlatformStation = dt_PlatformStation;
        }
        //根据任务号,查询任务
@@ -118,8 +125,8 @@
                    string Result = WMSTaskStatusEnum.outsuccess.GetDescription();
                    //同步给上游反馈任务完成
                    //CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    //if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    task.ModifyDate = DateTime.Now;
                    BaseDal.DeleteData(task);
@@ -132,9 +139,9 @@
                    task.TaskState = (int)TaskInStatusEnum.InFinish;
                    BaseDal.UpdateData(task);
                    string Result = WMSTaskStatusEnum.insuccess.GetDescription();
                    //CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    //if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
@@ -147,9 +154,9 @@
                    task.TaskState = (int)TaskinventoryStatusEnum.inventoryFinish;
                    BaseDal.UpdateData(task);
                    string Result = WMSTaskStatusEnum.insuccess.GetDescription();
                    //CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    //if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
@@ -426,13 +433,13 @@
                {
                    _task_HtyService.AddTaskHty(tasks);
                    BaseDal.DeleteData(tasks);
                    WriteLog.Write_Log("WMS手动删除任务", "删除成功", $"申请删除的条码:{tasks.TaskNum},托盘条码:{tasks.PalletCode}", new { ä¿¡æ¯ = "删除成功" });
                    WriteLog.Write_Log("WMS手动删除任务", "删除成功", $"申请删除的任务号:{tasks.TaskNum},托盘条码:{tasks.PalletCode}", new { ä¿¡æ¯ = "删除成功" });
                    return WebResponseContent.Instance.OK();
                }
                catch (Exception ex)
                {
                    WriteLog.Write_Log("WMS手动删除任务", "删除失败", $"申请删除的条码:{tasks.TaskNum},托盘条码:{tasks.PalletCode}", new { ä¿¡æ¯ = ex.Message });
                    WriteLog.Write_Log("WMS手动删除任务", "删除失败", $"申请删除的任务号:{tasks.TaskNum},托盘条码:{tasks.PalletCode}", new { ä¿¡æ¯ = ex.Message });
                    return WebResponseContent.Instance.Error();
                }
            }
@@ -513,8 +520,8 @@
                {
                    string Result = WMSTaskStatusEnum.outsuccess.GetDescription();
                    //同步给上游反馈任务完成
                    //CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    //if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = App.User?.UserName;
@@ -526,9 +533,9 @@
                else if (task.TaskType == (int)TaskTypeEnum.Inbound)
                {
                    string Result = WMSTaskStatusEnum.insuccess.GetDescription();
                    //CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    //if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = App.User?.UserName;
@@ -540,9 +547,9 @@
                else if (task.TaskType == (int)TaskTypeEnum.Inventorybound)
                {;
                    string Result = WMSTaskStatusEnum.insuccess.GetDescription();
                    //CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    CommandResult command = taskreturn(int.Parse(task.WMStaskid), Result, "invmd", "");
                    //if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    if (command.status != "success") return content.Error($"调取上游返回失败,完成堆垛机任务失败,条码:{task.PalletCode},任务号:{task.TaskNum}");
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = App.User?.UserName;
@@ -564,5 +571,103 @@
            return content;
        }
        /// <summary>
        /// æ‰‹åŠ¨åˆ›å»ºä»»åŠ¡
        /// </summary>
        /// <param name="transfer"></param>
        /// <returns></returns>
        public WebResponseContent CreateManualTask(Dt_Task transfer)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceName.Contains("堆垛机"));
                // åˆ¤æ–­è®¾å¤‡æ˜¯å¦å­˜åœ¨
                if (device == null)
                {
                    content.Error("手动创建任务失败,原因:未找到堆垛机设备");
                    WriteLog.Write_Log("手动任务创建失败", "创建失败", $"原因:未找到堆垛机设备,托盘编号:{transfer.PalletCode},任务类型:{transfer.TaskType},起始地址:{transfer.SourceAddress},目标地址:{transfer.TargetAddress}");
                    return content;
                }
                // åˆ¤æ–­åœ°å€æ˜¯å¦å±žäºŽå½“前设备库
                if (transfer.SourceAddress.Contains(device.DeviceCode) && transfer.TargetAddress.Contains(device.DeviceCode))
                {
                    // å…¥åº“
                    if (transfer.TaskType == 200)
                    {
                        Dt_PlatformStation _PlatformStation = _dt_PlatformStation.QueryFirst(x => x.Station_code == transfer.SourceAddress);
                        if (_PlatformStation == null)
                        {
                            content.Error($"手动创建任务失败,原因:{device.DeviceCode}库不存在这个库口:{transfer.SourceAddress}");
                            WriteLog.Write_Log("手动任务创建失败", "创建失败", $"托盘编号:{transfer.PalletCode},任务类型:{transfer.TaskType},起始地址:{transfer.SourceAddress},目标地址:{transfer.TargetAddress}");
                        }
                        else {
                        // æ­£å¸¸åˆ›å»ºä»»åŠ¡
                        transfer.TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                        transfer.TaskState = 200;
                        transfer.CurrentAddress = transfer.SourceAddress;
                        transfer.NextAddress = transfer.TargetAddress;
                        transfer.Roadway = device.DeviceCode;
                        transfer.Creater = "WCS";
                        transfer.Grade = 1;
                        transfer.CreateDate = DateTime.Now;
                        _unitOfWorkManage.BeginTran();
                        BaseDal.AddData(transfer);
                        _unitOfWorkManage.CommitTran();
                        content.OK("手动任务创建成功!");
                        WriteLog.Write_Log("手动任务创建成功", "创建成功", $"托盘编号:{transfer.PalletCode},任务类型:{transfer.TaskType},起始地址:{transfer.SourceAddress},目标地址:{transfer.TargetAddress}");
                        }
                        return content;
                    }
                    // å‡ºåº“
                    else if (transfer.TaskType == 100)
                    {
                        Dt_PlatformStation _PlatformStation = _dt_PlatformStation.QueryFirst(x => x.Station_code == transfer.TargetAddress);
                        if (_PlatformStation == null)
                        {
                            content.Error($"手动创建任务失败,原因:{device.DeviceCode}库不存在这个库口:{transfer.TargetAddress}");
                        }
                        else
                        {
                            // æ­£å¸¸åˆ›å»ºä»»åŠ¡
                            transfer.TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                            transfer.TaskState = 200;
                            transfer.CurrentAddress = transfer.SourceAddress;
                            transfer.NextAddress = transfer.TargetAddress;
                            transfer.Roadway = device.DeviceCode;
                            transfer.Creater = "WCS";
                            transfer.Grade = 1;
                            transfer.CreateDate = DateTime.Now;
                            _unitOfWorkManage.BeginTran();
                            BaseDal.AddData(transfer);
                            _unitOfWorkManage.CommitTran();
                            content.OK("手动任务创建成功!");
                            WriteLog.Write_Log("手动任务创建成功", "创建成功", $"托盘编号:{transfer.PalletCode},任务类型:{transfer.TaskType},起始地址:{transfer.SourceAddress},目标地址:{transfer.TargetAddress}");
                        }
                        return content;
                    }
                }
                else
                {
                    content.Error($"手动创建任务失败,原因:{device.DeviceCode}库地址不匹配,起始地址:{transfer.SourceAddress},目标地址:{transfer.TargetAddress}");
                    WriteLog.Write_Log("手动任务创建失败", "创建失败", $"托盘编号:{transfer.PalletCode},任务类型:{transfer.TaskType},起始地址:{transfer.SourceAddress},目标地址:{transfer.TargetAddress}");
                }
            }
            catch (Exception ex)
            {
                content.Error($"手动创建任务失败,系统异常:{ex.Message}");
                WriteLog.Write_Log("手动任务异常", "异常", ex.ToString());
            }
            return content;
        }
    }
}