wangxinhui
10 天以前 2aec0a99e559fb11b7046b148e5f357b3208cb66
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -141,6 +141,7 @@
                {
                    return content.Error($"鏈壘鍒板彲鍒嗛厤宸烽亾");
                }
                //鐢熸垚浠诲姟
                Dt_Task newTask = new Dt_Task()
                {
                    CurrentAddress = stationCode,
@@ -154,6 +155,7 @@
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = stockInfo.WarehouseId,
                    PalletType = stockInfo.PalletType,
                    TaskLength = (int)stockInfo.MaterielWide
                };
                if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
@@ -281,31 +283,18 @@
                if (stockInfo.MaterielInvOrgId==MaterielInvOrgEnum.鏂板巶.ObjToInt())
                {
                    //闄愬埗鐩村緞
                    if (stockInfo.MaterielThickness <= 1200)
                    if (stockInfo.MaterielThickness <= 1250)
                    {
                        //鑾峰彇鍒嗛厤
                        List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("YLDual")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                        //宸烽亾浠诲姟鍒嗛厤鏁伴噺
                        List<LocationCount> useLocationCounts = Db.Queryable<Dt_Task>().Where(x => x.WarehouseId == warehouse.WarehouseId
                        && locationCounts.Select(j => j.RoadwayNo).Contains(x.Roadway)
                        && TaskInboundTypes.Contains(x.TaskType)).GroupBy(x => x.Roadway).Select(x => new LocationCount { RoadwayNo = x.Roadway, Count = SqlFunc.AggregateCount(x) }).ToList();
                        foreach (var item in locationCounts)
                        {
                            LocationCount? count = useLocationCounts.FirstOrDefault(x => x.RoadwayNo == item.RoadwayNo);
                            if (count != null)
                            {
                                item.Count -= count.Count;
                            }
                        }
                        roadwayNo = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                        roadwayNo = HandleRoadway(locationCounts, warehouse);
                    }
                }
                else
                {
                    //闄愬埗鐩村緞
                    if (stockInfo.MaterielThickness >= 800 && stockInfo.MaterielThickness <= 1500)
                    if (stockInfo.MaterielThickness >= 800 && stockInfo.MaterielThickness <= 1450)
                    {
                        //鑾峰彇鍒嗛厤
                        List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("YL") && !x.RoadwayNo.Contains("YLDual")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
@@ -314,19 +303,7 @@
                            locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo == "SC02_YL").GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                        }
                        //宸烽亾浠诲姟鍒嗛厤鏁伴噺
                        List<LocationCount> useLocationCounts = Db.Queryable<Dt_Task>().Where(x => x.WarehouseId == warehouse.WarehouseId
                        && locationCounts.Select(j => j.RoadwayNo).Contains(x.Roadway)
                        && TaskInboundTypes.Contains(x.TaskType)).GroupBy(x => x.Roadway).Select(x => new LocationCount { RoadwayNo = x.Roadway, Count = SqlFunc.AggregateCount(x) }).ToList();
                        foreach (var item in locationCounts)
                        {
                            LocationCount? count = useLocationCounts.FirstOrDefault(x => x.RoadwayNo == item.RoadwayNo);
                            if (count != null)
                            {
                                item.Count -= count.Count;
                            }
                        }
                        roadwayNo = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                        roadwayNo = HandleRoadway(locationCounts, warehouse);
                    }
                }
                
@@ -337,6 +314,23 @@
                _unitOfWorkManage.RollbackTran();
                throw new Exception(ex.Message);
            }
        }
        //澶勭悊鍒嗛厤宸烽亾 浠诲姟鏁伴噺
        public string HandleRoadway(List<LocationCount> locationCounts, Dt_Warehouse warehouse)
        {
            //宸烽亾浠诲姟鍒嗛厤鏁伴噺
            List<LocationCount> useLocationCounts = Db.Queryable<Dt_Task>().Where(x => x.WarehouseId == warehouse.WarehouseId
            && locationCounts.Select(j => j.RoadwayNo).Distinct().Contains(x.Roadway)
            && TaskInboundTypes.Contains(x.TaskType)).GroupBy(x => x.Roadway).Select(x => new LocationCount { RoadwayNo = x.Roadway, Count = SqlFunc.AggregateCount(x) }).ToList();
            foreach (var item in locationCounts)
            {
                LocationCount? count = useLocationCounts.FirstOrDefault(x => x.RoadwayNo == item.RoadwayNo);
                if (count != null)
                {
                    item.Count -= count.Count;
                }
            }
            return locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
        }
        /// <summary>
        /// 鍏ュ簱瀹屾垚
@@ -527,7 +521,6 @@
                    task.TaskStatus = TaskStatusEnum.SC_Execute.ObjToInt();
                }
                LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                //鏇存柊閿佸畾璐т綅
                _unitOfWorkManage.BeginTran();
@@ -543,54 +536,7 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="taskNum"></param>
        /// <param name="roadwayNo"></param>
        /// <param name="heightType"></param>
        /// <returns></returns>
        public WebResponseContent AssignInboundTaskLocationByHeight(int taskNum, string roadwayNo, int heightType)
        {
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null)
                {
                    return WebResponseContent.Instance.Error($"鏈壘鍒拌鍏ュ簱浠诲姟");
                }
                if (_basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress) != null)
                {
                    return WebResponseContent.Instance.OK(data: task.TargetAddress);
                }
                Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, task.PalletType, task.WarehouseId, heightType: heightType);
                if (locationInfo == null)
                {
                    return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅");
                }
                task.Roadway = roadwayNo;
                task.TargetAddress = locationInfo.LocationCode;
                task.TaskStatus = TaskStatusEnum.SC_Execute.ObjToInt();
                LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                _unitOfWorkManage.BeginTran();
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation);
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, task.PalletType, LocationStatusEnum.Lock, task.WarehouseId);
                BaseDal.UpdateData(task);
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK(data: locationInfo.LocationCode);
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// 绌烘鍥炲簱
        /// </summary>
@@ -671,7 +617,7 @@
        }
        private readonly static object _lockerFLorCP = new object();
        /// <summary>
        /// 杈呮枡鎴愬搧鍏ュ簱
        /// 杈呮枡/鎴愬搧涓存椂鍏ュ簱
        /// </summary>
        /// <returns></returns>
        public WebResponseContent InboundFLOrCPTask(string barCode, string startPoint,string matCode,int matCount)