1
huangxiaoqiang
2025-10-23 82149871f30f4564d84272649352496a2ab0a38e
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -9,6 +9,7 @@
using SixLabors.Fonts.Tables.AdvancedTypographic;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
@@ -108,15 +109,19 @@
            //stockInfo_Hty.ModifyDate = DateTime.Now; 
            stock.ModifyDate = DateTime.Now;
            stock.LocationCode = task.TargetAddress;
            var result1 = UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound);
            var result2 = UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound);
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                //await DeleteStockInfoAsync(stock.Id);
                //await DeleteStockInfoDetailsAsync(stock.StockInfoDetails);
                //await AddStockInfoHtyAsync(stockInfo_Hty);
                _stockInfoRepository.UpdateData(stock);
                UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound);
                UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound);
                await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1);
                await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1);
                await _locationRepository.UpdateDataAsync(result1.Item2);
                await _locationRepository.UpdateDataAsync(result2.Item2);
                await DeleteTaskAsync(task.TaskId);
                await AddTaskHtyAsync(taskHty);
@@ -157,11 +162,12 @@
            stock.ModifyDate = DateTime.Now;
            stock.LocationCode = task.TargetAddress;
            var result = UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticRelocation);
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                //UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
                UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticRelocation);
                await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1);
                await _locationRepository.UpdateDataAsync(result.Item2);
                _stockInfoRepository.UpdateData(stock);
                await DeleteTaskAsync(task.TaskId);
                await AddTaskHtyAsync(taskHty);
@@ -205,14 +211,18 @@
            taskHty.FinishTime = DateTime.Now;
            taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.人工完成 : (int)OperateTypeEnum.自动完成;
            taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System";
            var result1 = UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
            var result2 = UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                await _stockInfoRepository.UpdateDataAsync(stock);
                await DeleteTaskAsync(task.TaskId);
                await AddTaskHtyAsync(taskHty);
                UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
                UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
                await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1);
                await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1);
                await _locationRepository.UpdateDataAsync(result1.Item2);
                await _locationRepository.UpdateDataAsync(result2.Item2);
            });
            content.OK("入库完成");
        }
@@ -396,37 +406,45 @@
            {
                return content.Error($"起点库位{StartAddress.LocationCode}搬运路径被占用,请人工确认再下发任务");
            }
            Dt_Task taskNew = new Dt_Task();
            DtLocationInfo Endlocation= new DtLocationInfo();
            if (taskDto.AreaId != 0)
            {
                switch (taskDto.AreaId)
                {
                    case 1:
                        return await InboundStakerArea(taskDto, StartAddress);
                        Endlocation = await GetEmptyLocation("SC1");
                        taskNew = InboundStakerArea(taskDto, StartAddress, Endlocation);
                        break;
                    case 2:
                    case 3:
                    case 4:
                    case 5:
                    case 6:
                        return await InboundAGVCacheArea(taskDto, StartAddress, await GetAGVEmptyCacheLocation(taskDto.AreaId, StartAddress));
                        Endlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId, StartAddress);
                        taskNew = InboundAGVCacheArea(taskDto, StartAddress, Endlocation);
                        break;
                    default:
                        return content.Error("请选择正确的区域信息");
                }
            }
            else if (taskDto.TargetAddress != null)
            {
                var location = _locationRepository.QueryFirst(x => x.LocationCode == taskDto.TargetAddress);
                if (location != null && location.LocationStatus == (int)LocationEnum.Free && location.EnalbeStatus == 1)
                Endlocation = _locationRepository.QueryFirst(x => x.LocationCode == taskDto.TargetAddress);
                if (Endlocation != null && Endlocation.LocationStatus == (int)LocationEnum.Free && Endlocation.EnalbeStatus == 1)
                {
                    switch (location.AreaId)
                    switch (Endlocation.AreaId)
                    {
                        case 1:
                            return await InboundStakerArea(taskDto, StartAddress);
                            taskNew = InboundStakerArea(taskDto, StartAddress, Endlocation);
                            break;
                        case 2:
                        case 3:
                        case 4:
                        case 5:
                        case 6:
                            return await InboundAGVCacheArea(taskDto, StartAddress, location);
                            taskNew = InboundAGVCacheArea(taskDto, StartAddress, Endlocation);
                            break;
                        default:
                            return content.Error("货位区域未找到");
                    }
@@ -438,8 +456,22 @@
            }
            else
            {
                return content.OK("请选择入库区域或终点地址");
                return content.Error("请选择入库区域或终点地址");
            }
            var taskDTO = CreateListTaskDTO(taskNew);
            var result1 = UpdateLocationStatus(StartAddress, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
            var result2 = UpdateLocationStatus(Endlocation, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1);
                await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1);
                await _locationRepository.UpdateDataAsync(result1.Item2);
                await _locationRepository.UpdateDataAsync(result2.Item2);
                BaseDal.AddData(taskNew);
            });
            return content = await SendWCSTask(taskDTO);
        }
        catch (Exception err)
        {
@@ -447,18 +479,18 @@
        }
    }
    public async Task<WebResponseContent> InboundStakerArea(RequestTaskDto taskDto,DtLocationInfo StartAddress)
    {
        WebResponseContent content = new WebResponseContent();
        try
    public Dt_Task InboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress,DtLocationInfo EndLocation)
        {
            var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1");
            Dt_Task taskNew = new Dt_Task
        if (EndLocation == null)
        {
            throw new Exception("无法获取货位信息");
        }
        return new Dt_Task
            {
                Grade = 1,
                Roadway = "SC1",
                TargetAddress = "SC1",
            TargetAddress = EndLocation.LocationCode,
                Dispatchertime = DateTime.Now,
                MaterialNo = "",
                NextAddress = station.stationChildCode,
@@ -474,31 +506,15 @@
                AGVTaskNum = GenerateUniqueId(),
                Floor = "1F",
            };
            var taskDTO = CreateListTaskDTO(taskNew);
            BaseDal.AddData(taskNew);
            UpdateLocationStatus(StartAddress, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
            //UpdateLocationStatus(location, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
            //return content.OK();
            return content = await SendWCSTask(taskDTO);
        }
        catch (Exception ex)
        {
            _unitOfWorkManage.RollbackTran();
            return content.Error(ex.Message);
        }
    }
    public async Task<WebResponseContent> InboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location)
    public Dt_Task InboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            if (location == null)
            {
                return content.Error("起点未定义或终点区域未找到空闲库位");
            throw new Exception("无法获取货位信息");
            }
            Dt_Task taskNew = new Dt_Task();
            if (StartAddress.Floor != location.Floor)
@@ -509,24 +525,8 @@
            {
                taskNew = RequestAGVCarryTask(StartAddress, location, (int)TaskInboundTypeEnum.Inbound, taskDto.PalletCode);
            }
        return taskNew;
                
            var taskDTO = CreateListTaskDTO(taskNew);
            _unitOfWorkManage.BeginTran();
            UpdateLocationStatus(StartAddress, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
            UpdateLocationStatus(location, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
            BaseDal.AddData(taskNew);
            _unitOfWorkManage.CommitTran();
            //return content.OK();
            return content = await SendWCSTask(taskDTO);
        }
        catch (Exception ex)
        {
            _unitOfWorkManage.RollbackTran();
            return content.Error(ex.Message);
        }
    }
    #endregion è¯·æ±‚任务入库
@@ -637,7 +637,9 @@
            {
                return content.Error("该托盘库存已在出库缓存区");
            }
            return await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = palletCode, AreaId = 2, Position = stcok.LocationCode ,TaskType = (int)TaskOutboundTypeEnum.OutOther });
            Dt_Task taskNew= await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = palletCode, AreaId = 2, Position = stcok.LocationCode, TaskType = (int)TaskOutboundTypeEnum.OutOther });
            return content.OK(data: taskNew);
        }
        catch (Exception ex)
        {
@@ -651,25 +653,22 @@
    /// </summary>
    /// <param name="taskDto"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> RequestOutboundTaskAsync(RequestTaskDto taskDto)
    {
        WebResponseContent content = new WebResponseContent();
        try
    public async Task<Dt_Task> RequestOutboundTaskAsync(RequestTaskDto taskDto)
        {
            DtStockInfo stcok = await _stockInfoRepository.QueryFirstAsync(x => x.PalletCode == taskDto.PalletCode);
            if (stcok == null)
            {
                return content.Error("托盘信息不存在,请确认托盘已入库成功");
            throw new Exception("托盘信息不存在,请确认托盘已入库成功");
            }
            var StartAddress = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position);
            if (StartAddress == null)
            {
                return content.Error("起点库位未找到");
            throw new Exception("起点库位未找到");
            }
            if (!LocationIsOutBound(StartAddress))
            {
                return content.Error($"起点库位{StartAddress.LocationCode}出库路径被占用,请人工确认再下发任务");
            throw new Exception($"起点库位{StartAddress.LocationCode}出库路径被占用,请人工确认再下发任务");
            }
            DtLocationInfo location = null;
            if (taskDto.AreaId != 0)
@@ -690,51 +689,43 @@
                if (location != null && location.LocationStatus != (int)LocationEnum.Free && location.EnalbeStatus == 1)
                {
                    return content.OK("目标库位不可用");
                throw new Exception("目标库位不可用");
                }
            }
            else
            {
                return content.OK("请选择入库区域或终点地址");
            throw new Exception("请选择入库区域或终点地址");
            }
            switch (StartAddress.AreaId)
            {
                case 1:
                    return await OutboundStakerArea(taskDto, StartAddress, location);
                return OutboundStakerArea(taskDto, StartAddress, location);
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                    return await OutboundAGVCacheArea(taskDto, StartAddress, location);
                return OutboundAGVCacheArea(taskDto, StartAddress, location);
                default:
                    return content.Error("请选择正确的区域信息");
            }
        }
        catch (Exception ex)
        {
            return content.Error(ex.Message);
                throw new Exception("请选择正确的区域信息");
        }
    }
    public async Task<WebResponseContent> OutboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location)
    {
        WebResponseContent content = new WebResponseContent();
        try
    public Dt_Task OutboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location)
        {
            var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1");
            if (location == null)
            {
                return content.Error("终点区域未找到空闲库位");
            throw new Exception("终点区域未找到空闲库位");
            }
            if (location.AreaId == 5 || location.AreaId == 6)
            {
                return content.Error("当前区域不可出库,请联系管理员");
            throw new Exception("当前区域不可出库,请联系管理员");
            }
            Dt_Task taskNew = new Dt_Task
        return new Dt_Task
            {
                Grade = Convert.ToInt32(StartAddress.Remark),
                Roadway = "SC1",
@@ -754,29 +745,13 @@
                AGVTaskNum = GenerateUniqueId(),
                Floor = "1F",
            };
            var taskDTO = CreateListTaskDTO(taskNew);
            UpdateLocationStatus(StartAddress, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound);
            UpdateLocationStatus(location, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound);
            BaseDal.AddData(taskNew);
            //return content.OK();
            return content = await SendWCSTask(taskDTO);
        }
        catch (Exception ex)
        {
            return content.Error(ex.Message);
        }
    }
    public async Task<WebResponseContent> OutboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location)
    {
        WebResponseContent content = new WebResponseContent();
        try
    public Dt_Task OutboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location)
        {
            if (location == null)
            {
                return content.Error("起点未定义或终点区域未找到空闲库位");
            throw new Exception("起点未定义或终点区域未找到空闲库位");
            }
            Dt_Task taskNew = new Dt_Task();
            if (StartAddress.Floor != location.Floor)
@@ -787,20 +762,8 @@
            {
                taskNew = RequestAGVCarryTask(StartAddress, location, taskDto.TaskType, taskDto.PalletCode);
            }
        return taskNew;
            var taskDTO = CreateListTaskDTO(taskNew);
            UpdateLocationStatus(StartAddress, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound);
            UpdateLocationStatus(location, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound);
            BaseDal.AddData(taskNew);
            //return content.OK();
            return content = await SendWCSTask(taskDTO);
        }
        catch (Exception ex)
        {
            return content.Error(ex.Message);
        }
    }
    #endregion è¯·æ±‚出库(实盘&空盘)
@@ -874,8 +837,7 @@
    public Dt_Task RequestAcrossFloorTask(DtLocationInfo StartAddress,DtLocationInfo EndAddress,int TaskType,string palletCode)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == StartAddress.Floor);
            return new Dt_Task
            {
@@ -898,11 +860,7 @@
                AGVTaskNum = GenerateUniqueId(),
                Floor = StartAddress.Floor,
            };
        }
        catch (Exception ex)
        {
            return null;
        }
    }
    #endregion
@@ -910,8 +868,7 @@
    public Dt_Task RequestAGVCarryTask(DtLocationInfo StartAddress, DtLocationInfo EndAddress, int TaskType, string palletCode)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            return new Dt_Task
            {
                Grade = StartAddress.Column,
@@ -933,11 +890,6 @@
                AGVTaskNum = GenerateUniqueId(),
                Floor = StartAddress.Floor,
            };
        }
        catch (Exception ex)
        {
            return null;
        }
    }
    #endregion
@@ -1247,7 +1199,7 @@
    #region å†…部调用方法
    public void UpdateLocationStatus(DtLocationInfo location, LocationEnum locationStatus, int taskNum, int StatusChangeType)
    public (List<DtLocationStatusChangeRecord>,List<DtLocationInfo>) UpdateLocationStatus(DtLocationInfo location, LocationEnum locationStatus, int taskNum, int StatusChangeType)
    {
        List<DtLocationInfo> locations = GetGroupLocations(location);
@@ -1305,26 +1257,116 @@
                }
            }
        }
        List<LocationChangeRecordDto> changeRecordDto = new List<LocationChangeRecordDto>();
        List<DtLocationStatusChangeRecord> changeRecordDto = new List<DtLocationStatusChangeRecord>();
        foreach (var item in Beforelocation)
        {
            var loc = locations.Where(x => x.LocationCode == item.LocationCode).FirstOrDefault();
            if (loc != null)
            {
                changeRecordDto.Add(new LocationChangeRecordDto()
                DtLocationStatusChangeRecord dtLocationStatusChangeRecord = new DtLocationStatusChangeRecord()
                {
                    ChangeType = StatusChangeType,
                    LocationCode = item.LocationCode,
                    LocationId = loc.Id,
                    Creater = "System",
                    TaskNum = taskNum,
                    AfterStatus = loc.LocationStatus,
                    BeforeStatus = item.LocationStatus,
                    TaskNum = taskNum,
                    LocationId = loc.Id,
                    LocationCode = loc.LocationCode,
                    ChangeType = StatusChangeType,
                });
            }
        }
        _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto);
                };
        _locationRepository.UpdateData(locations);
                changeRecordDto.Add(dtLocationStatusChangeRecord);
            }
        }
        //_locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto);
        //_locationRepository.UpdateData(locations);
        return (changeRecordDto,locations);
    }
    public (List<DtLocationStatusChangeRecord>, List<DtLocationInfo>) UpdateLocationStatus(string locationCode, LocationEnum locationStatus, int taskNum, int StatusChangeType)
    {
        var location = _locationRepository.QueryFirst(x => x.LocationCode == locationCode);
        List<DtLocationInfo> locations = GetGroupLocations(location);
        List<DtLocationInfo> Beforelocation = locations.Select(x => new DtLocationInfo
        {
            Id = x.Id,
            LocationCode = x.LocationCode,
            LocationStatus = x.LocationStatus
        }).ToList();
        foreach (var item in locations)
        {
            if (locationStatus == LocationEnum.Lock)
            {
                if (item.LocationCode == location.LocationCode)
                {
                    item.LocationStatus = (int)LocationEnum.Lock;
                }
                else if (item.LocationStatus == (int)LocationEnum.Free)
                {
                    item.LocationStatus = (int)LocationEnum.FreeDisable;
                }
            }
            else if (locationStatus == LocationEnum.InStock)
            {
                if (item.LocationCode == location.LocationCode)
                {
                    item.LocationStatus = (int)LocationEnum.InStock;
                }
                else if (item.LocationStatus == (int)LocationEnum.FreeDisable)
                {
                    item.LocationStatus = (int)LocationEnum.Free;
                }
            }
            else if (locationStatus == LocationEnum.InStockDisable)
            {
                if (item.LocationStatus == (int)LocationEnum.InStock)
                {
                    item.LocationStatus = (int)LocationEnum.InStockDisable;
                }
                else if (item.LocationStatus == (int)LocationEnum.Free)
                {
                    item.LocationStatus = (int)LocationEnum.FreeDisable;
                }
            }
            else if (locationStatus == LocationEnum.Free)
            {
                if (item.LocationCode == location.LocationCode)
                {
                    item.LocationStatus = (int)LocationEnum.Free;
                }
                else if (item.LocationStatus == (int)LocationEnum.FreeDisable || item.LocationStatus == (int)LocationEnum.InStockDisable)
                {
                    item.LocationStatus = (int)LocationEnum.Free;
                }
            }
        }
        List<DtLocationStatusChangeRecord> changeRecordDto = new List<DtLocationStatusChangeRecord>();
        foreach (var item in Beforelocation)
        {
            var loc = locations.Where(x => x.LocationCode == item.LocationCode).FirstOrDefault();
            if (loc != null)
            {
                DtLocationStatusChangeRecord dtLocationStatusChangeRecord = new DtLocationStatusChangeRecord()
                {
                    ChangeType = StatusChangeType,
                    LocationCode = item.LocationCode,
                    LocationId = loc.Id,
                    Creater = "System",
                    TaskNum = taskNum,
                    AfterStatus = loc.LocationStatus,
                    BeforeStatus = item.LocationStatus,
                };
                changeRecordDto.Add(dtLocationStatusChangeRecord);
            }
        }
        //_locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto);
        //_locationRepository.UpdateData(locations);
        return (changeRecordDto, locations);
    }
    public List<DtLocationInfo> GetGroupLocations(DtLocationInfo location)
@@ -1606,8 +1648,6 @@
    /// <returns></returns>
    public async Task<DtLocationInfo> GetEmptyLocation(string roadWay)
    {
        try
        {
            List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.RoadwayNo == "SC1" && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1);
            if (locations.Count < 2)
            {
@@ -1643,15 +1683,8 @@
                return null;
            }
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    public async Task<DtLocationInfo> GetAGVEmptyCacheLocation(int AreaId, DtLocationInfo loc)
    {
        try
        {
            if(loc==null)
            {
@@ -1669,12 +1702,6 @@
                default:
                    return null;
            }
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    /// <summary>
@@ -1683,8 +1710,6 @@
    /// <param name="AreaId"></param>
    /// <returns></returns>
    public async Task<DtLocationInfo> FromDeepToShallow(int AreaId, DtLocationInfo loc)
    {
        try
        {
            List<DtLocationInfo> locations = new List<DtLocationInfo>();
@@ -1719,11 +1744,6 @@
            return locationInfos.Distinct().OrderByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    /// <summary>
    /// ç”±æµ…到深
@@ -1731,8 +1751,6 @@
    /// <param name="AreaId"></param>
    /// <returns></returns>
    public async Task<DtLocationInfo> FromShallowToDeep(int AreaId, DtLocationInfo loc)
    {
        try
        {
            List<DtLocationInfo> locations = new List<DtLocationInfo>();
@@ -1770,34 +1788,24 @@
            }
            return locationInfos.Distinct().OrderBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    public async Task<DtLocationInfo> AGVLIKU(int AreaId)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == 0 && x.EnalbeStatus == 1);
            var location = locations.OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault();
            return location;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    public bool LocationIsOutBound(DtLocationInfo location)
    {
        try
        {
            int sum = 0;
            if (location.AreaId == 1)
            {
@@ -1839,11 +1847,7 @@
            }
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }