wangxinhui
2026-03-23 531c6e89dc07bb6997e6249a6cd9f53a9bd474a5
出库逻辑变更
已修改8个文件
114 ■■■■■ 文件已修改
项目代码/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/StackerCraneJob_YLSC2.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/StackerCraneJob_YLSC3.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutSGOrderDetail.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutSGOrderService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -172,6 +172,11 @@
        Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "");
        /// <summary>
        /// åŽŸæ–™åº“ä»»åŠ¡æŸ¥è¯¢
        /// </summary>
        Dt_Task QueryStackerYLTask(string deviceNo,TaskTypeGroup? taskTypeGroup=null);
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池入库类型的新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -77,6 +77,12 @@
            return Service.TaskStatusRecovery(taskNum);
        }
        [HttpPost, HttpGet, Route("QueryStackerYLTask"),AllowAnonymous]
        public Dt_Task QueryStackerYLTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
        {
            return Service.QueryStackerYLTask(deviceNo, taskTypeGroup);
        }
        [HttpPost, HttpGet, Route("RollbackTaskStatusToLast")]
        public WebResponseContent RollbackTaskStatusToLast(int taskNum)
        {
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -701,6 +701,77 @@
            else
                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.CurrentAddress == currentAddress && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
        }
        private static int OldorNew = 0;
        /// <summary>
        /// åŽŸæ–™åº“ä»»åŠ¡æŸ¥è¯¢
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerYLTask(string deviceNo,TaskTypeGroup? taskTypeGroup= null)
        {
            if (taskTypeGroup == null)
            {
                Dt_Task taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.SC_Execute && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt(), TaskOrderBy);
                if (taskSend == null)
                {
                    OldorNew = 1;
                    List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                            .ThenBy(t => t.Grade)
                            .ThenBy(t => t.TaskNum)
                            .ToList();
                    if (specificTasks.Any())
                    {
                        //根据时间筛查严格排序
                        Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                            .ThenBy(t => t.Grade)
                            .ThenBy(t => t.TaskNum)
                            .FirstOrDefault();
                        Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
                        if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
                        {
                            taskSend = taskCheckSend;
                        }
                    }
                }
                else
                {
                    OldorNew = 0;
                }
                return taskSend;
            }
            else
            {
                Dt_Task taskSend = null;
                if (OldorNew == 0)
                {
                    OldorNew = 1;
                    List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                            .ThenBy(t => t.Grade)
                            .ThenBy(t => t.TaskNum)
                            .ToList();
                    if (specificTasks.Any())
                    {
                        //根据时间筛查严格排序
                        Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                            .ThenBy(t => t.Grade)
                            .ThenBy(t => t.TaskNum)
                            .FirstOrDefault();
                        Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
                        if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
                        {
                            taskSend = taskCheckSend;
                        }
                    }
                }
                else
                {
                    OldorNew = 0;
                    taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt() && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
                }
                return taskSend;
            }
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池入库类型的新增的任务
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/Ô­ÁÏ¿â/StackerCraneJob_YLSC2.cs
@@ -229,7 +229,7 @@
            Dt_Task? task;
            if (commonStackerCrane.LastTaskType == null)
            {
                task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
                task = _taskService.QueryStackerYLTask(commonStackerCrane.DeviceCode);
            }
            else
            {
@@ -239,13 +239,13 @@
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                    if (task == null)
                    {
                        task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                        task = _taskService.QueryStackerYLTask(commonStackerCrane.DeviceCode, TaskTypeGroup.OutbondGroup);
                    }
                }
                else
                {
                    //上一个为入库则查是否存在出库任务 äº¤æ›¿æ‰§è¡Œ
                    task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                    task = _taskService.QueryStackerYLTask(commonStackerCrane.DeviceCode, TaskTypeGroup.OutbondGroup);
                    if (task == null)
                    {
                        task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/Ô­ÁÏ¿â/StackerCraneJob_YLSC3.cs
@@ -280,7 +280,7 @@
            Dt_Task? task;
            if (commonStackerCrane.LastTaskType == null)
            {
                task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
                task = _taskService.QueryStackerYLTask(commonStackerCrane.DeviceCode);
            }
            else
            {
@@ -290,13 +290,13 @@
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                    if (task == null)
                    {
                        task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                        task = _taskService.QueryStackerYLTask(commonStackerCrane.DeviceCode, TaskTypeGroup.OutbondGroup);
                    }
                }
                else
                {
                    //上一个为入库则查是否存在出库任务 äº¤æ›¿æ‰§è¡Œ
                    task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                    task = _taskService.QueryStackerYLTask(commonStackerCrane.DeviceCode, TaskTypeGroup.OutbondGroup);
                    if (task == null)
                    {
                        task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutSGOrderDetail.cs
@@ -121,5 +121,11 @@
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "出库单明细状态")]
        public int OutSGOrderDetailStatus { get; set; }
        /// <summary>
        /// é¡ºåºå·
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "顺序号")]
        public int Number { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutSGOrderService.cs
@@ -129,8 +129,8 @@
            try
            {
                //获取所有排程单
                List<Dt_OutSGOrder> outSGOrders = BaseDal.Db.Queryable<Dt_OutSGOrder>().Includes(x => x.Details).ToList();
                List<Dt_OutSGOrderDetail> outSGOrderDetails= outSGOrders.SelectMany(x=>x.Details).ToList();
                //List<Dt_OutSGOrder> outSGOrders = BaseDal.Db.Queryable<Dt_OutSGOrder>().Includes(x => x.Details).ToList();
                //List<Dt_OutSGOrderDetail> outSGOrderDetails= outSGOrders.SelectMany(x=>x.Details).ToList();
                ////判断单据
                //Dt_OutSGOrderDetail? ExistAddOutOrderDetail = outSGOrderDetails.FirstOrDefault(x => outOrderDTOs.Select(t => t.BoardMpsDetailId).Distinct().Contains(x.BoardMpsDetailId));
                //if (ExistAddOutOrderDetail != null)
@@ -171,11 +171,13 @@
                    //判断工单是否已经存在
                    if (ExistOutSGOrder != null)
                    {
                        outSGOrderDetail.Number = ExistOutSGOrder.Number;
                        ExistOutSGOrder.Details.Add(outSGOrderDetail);
                    }
                    else
                    {
                        Dt_OutSGOrder outSGOrder = _mapper.Map<Dt_OutSGOrder>(item);
                        outSGOrderDetail.Number = outSGOrder.Number;
                        outSGOrder.Details = new List<Dt_OutSGOrderDetail>() { outSGOrderDetail };
                        AddOutSGOrders.Add(outSGOrder);
                    }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -223,7 +223,7 @@
                            }
                            if (outStockLockInfosMES != null && outStockLockInfosMES.Count() > 0)
                            {
                                Dt_AGVStationInfo aGVStationInfo = _basicRepository.AGVStationInfoRepository.QueryFirst(x=>x.AGVStationCode==task.TargetAddress);
                                Dt_AGVStationInfo aGVStationInfo = _basicRepository.AGVStationInfoRepository.QueryFirst(x=>x.AGVStationCode==task.TargetAddress || x.MESPointCode == task.TargetAddress);
                                MESDeliveryModel mESDeliveryModel = MESDeliveryUp(outStockLockInfosMES, aGVStationInfo.MESPointCode);
                                MESResponse response = _invokeMESService.MESDelivery(mESDeliveryModel).DeserializeObject<MESResponse>() ?? throw new Exception("未获取到返回信息");
                                if (!response.Result)
@@ -804,8 +804,12 @@
                {
                    tasks.ForEach(x =>
                    {
                        string orderNos = string.Join(",", outStockLockInfos.Where(t => t.PalletCode == x.PalletCode).Select(x => x.OrderNo).Distinct());
                        List<Dt_OutStockLockInfo> outStockNos = outStockLockInfos.Where(t => t.PalletCode == x.PalletCode).ToList();
                        List<int> outDetailIds = outStockNos.Select(t => t.OrderDetailId).ToList();
                        int numberNo = outboundOrderDetails.Where(t => outDetailIds.Contains(t.Id)).OrderBy(x => x.Number).FirstOrDefault().Number;
                        string orderNos = string.Join(",", outStockNos.Select(t => t.OrderNo).Distinct());
                        x.OrderNo = orderNos;
                        x.Grade = numberNo;
                    });
                }
                BaseDal.AddData(tasks);