From 2aec0a99e559fb11b7046b148e5f357b3208cb66 Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期五, 12 九月 2025 10:06:22 +0800 Subject: [PATCH] 推送最新代码 --- 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs | 331 ------------------------------------------------------- 1 files changed, 1 insertions(+), 330 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs" index 3b97fd6..5f81491 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs" @@ -12,342 +12,13 @@ using WIDESEA_Core; using WIDESEA_Core.Helper; using WIDESEA_DTO; -using WIDESEA_DTO.MES; using WIDESEA_Model.Models; namespace WIDESEA_TaskInfoService { public partial class TaskService { - /// <summary> - /// 鍏ュ簱浠诲姟鐢宠鍒嗛厤璐т綅 - /// </summary> - /// <param name="taskNum">浠诲姟鍙�</param> - /// <param name="roadwayNos">宸烽亾鍙�</param> - /// <returns></returns> - public WebResponseContent AssignRoadwayByHeight(List<string> roadwayNos, int taskNum, int heightType = 0) - { - try - { - if (heightType == 0 || heightType > 3) - { - return WebResponseContent.Instance.Error($"楂樺害閿欒"); - } - - 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); - } - string roadwayNo = ""; - if (heightType == 1) - { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer <= 3).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; - } - else if (heightType == 2) - { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 4).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; - } - else if (heightType == 3) - { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 5).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; - } - - return !string.IsNullOrEmpty(roadwayNo) ? WebResponseContent.Instance.OK(data: roadwayNo) : WebResponseContent.Instance.Error("鏈壘鍒板彲鍒嗛厤宸烽亾"); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - return WebResponseContent.Instance.Error(ex.Message); - } - } - - /// <summary> - /// - /// </summary> - /// <param name="roadwayNos"></param> - /// <param name="palletCode"></param> - /// <param name="heightType"></param> - /// <returns></returns> - public WebResponseContent AssignRoadwayByHeightAndCode(List<string> roadwayNos, string palletCode, int heightType = 0) - { - try - { - if (heightType == 0 || heightType > 3) - { - return WebResponseContent.Instance.Error($"楂樺害閿欒"); - } - if (roadwayNos == null || roadwayNos.Count == 0) - { - return WebResponseContent.Instance.Error($"宸烽亾涓嶈兘涓虹┖"); - } - Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.RoadwayNo == roadwayNos[0]); - if (locationInfo == null) - { - return WebResponseContent.Instance.Error($"鏈壘鍒板贩閬撳搴旇揣浣�"); - } - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == locationInfo.WarehouseId); - if (warehouse == null) - { - return WebResponseContent.Instance.Error($"鏈壘鍒板贩閬撳搴斾粨搴撲俊鎭�"); - } - - int palletType = _inboundOrderService.GetPalletType(warehouse, palletCode); - if (palletType == -1) - { - return WebResponseContent.Instance.Error($"鎵樼洏鍙疯В鏋愭墭鐩樼被鍨嬮敊璇�"); - } - - string roadwayNo = ""; - if (heightType == 1) - { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer <= 3).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; - } - else if (heightType == 2) - { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 4).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; - } - else if (heightType == 3) - { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 5).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; - } - - return !string.IsNullOrEmpty(roadwayNo) ? WebResponseContent.Instance.OK(data: roadwayNo) : WebResponseContent.Instance.Error("鏈壘鍒板彲鍒嗛厤宸烽亾"); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - return WebResponseContent.Instance.Error(ex.Message); - } - } - - public string AssignRoadwayNo(List<string> roadwayNos, string palletCode, int heightType = 0) - { - try - { - if (heightType == 0 || heightType > 3) - { - throw new Exception($"楂樺害閿欒"); - } - if (roadwayNos == null || roadwayNos.Count == 0) - { - throw new Exception($"宸烽亾涓嶈兘涓虹┖"); - } - Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.RoadwayNo == roadwayNos[0]); - if (locationInfo == null) - { - throw new Exception($"鏈壘鍒板贩閬撳搴旇揣浣�"); - } - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == locationInfo.WarehouseId); - if (warehouse == null) - { - throw new Exception($"鏈壘鍒板贩閬撳搴斾粨搴撲俊鎭�"); - } - - int palletType = _inboundOrderService.GetPalletType(warehouse, palletCode); - if (palletType == -1) - { - throw new Exception($"鎵樼洏鍙疯В鏋愭墭鐩樼被鍨嬮敊璇�"); - } - - string roadwayNo = ""; - if (heightType == 1) - { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer <= 3).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; - } - else if (heightType == 2) - { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 4).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; - } - else if (heightType == 3) - { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 5).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; - } - - return !string.IsNullOrEmpty(roadwayNo) ? ( roadwayNo) : throw new Exception("鏈壘鍒板彲鍒嗛厤宸烽亾"); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - throw new Exception(ex.Message); - } - } - - /// <summary> - /// 鍏ュ簱浠诲姟鐢宠鍒嗛厤璐т綅 - /// </summary> - /// <param name="taskNum">浠诲姟鍙�</param> - /// <param name="roadwayNos">宸烽亾鍙�</param> - /// <returns></returns> - public WebResponseContent AssignRoadway(int taskNum, List<string> roadwayNos, 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); - } - bool IsBCS = task.PalletType == PalletTypeEnum.SmallPallet.ObjToInt(); - //鑾峰彇姣忎釜宸烽亾1-3灞傦紝4灞傦紝5灞傜殑璐т綅 - List<LocationCount> locationCounts = new List<LocationCount>(); - if (heightType == 1) - { - locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer <= 3 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - } - else if(heightType == 2) - { - locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer == 4 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - } - else if(heightType == 3) - { - locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer == 5 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - } - string roadwayNo=string.Empty; - foreach (var location in locationCounts.OrderBy(x => x.Count)) - { - if (location.Count <= 2) - continue; - roadwayNo = location?.RoadwayNo ?? ""; - break; - } - return !string.IsNullOrEmpty(roadwayNo) ? WebResponseContent.Instance.OK(data: roadwayNo) : WebResponseContent.Instance.Error("鏈壘鍒板彲鍒嗛厤宸烽亾"+ $"锛歿locationCounts.Serialize()}"); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - return WebResponseContent.Instance.Error(ex.Message); - } - } - - /// <summary> - /// 鍏ュ簱浠诲姟鐢宠鍒嗛厤璐т綅 - /// </summary> - /// <param name="roadwayNos">宸烽亾鍙�</param> - /// <returns></returns> - public WebResponseContent SingleAssignRoadway(List<string> roadwayNos) - { - try - { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - - string roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; - - return !string.IsNullOrEmpty(roadwayNo) ? WebResponseContent.Instance.OK(data: roadwayNo) : WebResponseContent.Instance.Error("鏈壘鍒板彲鍒嗛厤宸烽亾"); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - return WebResponseContent.Instance.Error(ex.Message); - } - } - - public WebResponseContent HandSubstrateOut(int orderId) - { - try - { - Dt_MesOutboundOrder mesOutboundOrder = _outboundService.MesOutboundOrderService.Repository.QueryFirst(x => x.Id == orderId); - if (mesOutboundOrder == null) - { - return WebResponseContent.Instance.Error($"鏈壘鍒拌璁㈠崟"); - } - - if (mesOutboundOrder.OrderStatus != OutOrderStatusEnum.鏈紑濮�.ObjToInt()) - { - return WebResponseContent.Instance.Error($"璇ヨ鍗曚笉鍙啀鍑哄簱"); - } - - List<Dt_Task> tasks = new List<Dt_Task>(); - - List<Dt_StockInfo>? stockInfos = null; - List<Dt_OutStockLockInfo>? outStockLockInfos = null; - List<Dt_LocationInfo>? locationInfos = null; - { - (List<Dt_StockInfo>, Dt_MesOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesOutboundOrderService.AssignStockOutbound(mesOutboundOrder); - if (result.Item1 != null && result.Item1.Count > 0) - { - tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound); - result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); - result.Item3.ForEach(x => - { - x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(); - }); - - stockInfos = result.Item1; - mesOutboundOrder = result.Item2; - outStockLockInfos = result.Item3; - locationInfos = result.Item4; - } - else - { - throw new Exception("鏃犲簱瀛�"); - } - } - - tasks.ForEach(x => - { - if (mesOutboundOrder.OrderType == MesOutboundOrderTypeEnum.HandSubstrateOut.ObjToInt()) - { - x.TaskType = TaskTypeEnum.MesHandOutbound.ObjToInt(); - } - else if (mesOutboundOrder.OrderType == MesOutboundOrderTypeEnum.HandSubstrateOutPick.ObjToInt()) - { - x.TaskType = TaskTypeEnum.MesHandPickOutbound.ObjToInt(); - } - }); - - mesOutboundOrder.OrderStatus = OutOrderStatusEnum.鍑哄簱涓�.ObjToInt(); - - _unitOfWorkManage.BeginTran(); - - int id = BaseDal.AddData(tasks); - outStockLockInfos.ForEach(x => - { - x.OrderNo = mesOutboundOrder.TaskNo; - x.OrderDetailId = id; - }); - _outboundService.MesOutboundOrderService.Repository.UpdateData(mesOutboundOrder); - if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) - { - WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks); - - if (!content.Status) - { - _unitOfWorkManage.RollbackTran(); - return WebResponseContent.Instance.Error(content.Message); - } - } - _unitOfWorkManage.CommitTran(); - PushTasksToWCS(tasks); - - return WebResponseContent.Instance.OK(); - } - catch (Exception ex) - { - return WebResponseContent.Instance.Error(ex.Message); - } - } - - + } public class LocationCount -- Gitblit v1.9.3