From e719f3e5d5d16ee8a9dece97d9889610507628ac Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期一, 18 八月 2025 08:15:27 +0800 Subject: [PATCH] 1 --- 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs | 186 +++++++++++++++++++++++++++++++++++++-------- 1 files changed, 151 insertions(+), 35 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" index 8728bfe..bb167ed 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" @@ -4,6 +4,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Reflection.Metadata; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -16,6 +17,7 @@ using WIDESEA_Core; using WIDESEA_Core.Helper; using WIDESEA_DTO; +using WIDESEA_DTO.Basic; using WIDESEA_DTO.Task; using WIDESEA_Model.Models; @@ -188,16 +190,124 @@ } string roadwayNo = ""; - if (stockInfo.MaterielWide < 2200 && stockInfo.MaterielThickness > 800) + if (stockInfo.MaterielThickness > 800) { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("SC01_YL")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; + List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("YL")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); + roadwayNo = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; + if (stockInfo.MaterielWide > 2200) + { + locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && !x.RoadwayNo.Contains("SC01_YL")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); + roadwayNo = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; + } } - else if (stockInfo.MaterielWide>2200 && stockInfo.MaterielThickness>800) + return !string.IsNullOrEmpty(roadwayNo) ? (roadwayNo) : throw new Exception("鏈壘鍒板彲鍒嗛厤宸烽亾"); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + throw new Exception(ex.Message); + } + } + /// <summary> + /// 鍏ュ簱瀹屾垚 + /// </summary> + public WebResponseContent InboundTaskCompleted(Dt_Task task) + { + try + { + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); + if (warehouse.WarehouseCode == WarehouseEnum.LLDCP.ToString()) //鎴愬搧瀹屾垚 { - List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && !x.RoadwayNo.Contains("SC01_YL")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; + Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (locationInfoEnd == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅"); + } + Dt_AGVStationInfo agvstation = _agvStationInfoRepository.QueryFirst(x => x.AGVStationCode == task.SourceAddress && x.StationArea == AGVStationAreaEnum.AreaA.ObjToInt()); + if (agvstation != null) + { + agvstation.IsOccupied = WhetherEnum.False.ObjToInt(); + } + Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode); + if (proStockInfo != null && proStockInfo.StockStatus == StockStatusEmun.MES绌烘墭閫�搴�.ObjToInt()) + { + task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + _unitOfWorkManage.BeginTran(); + if (agvstation != null) + { + _agvStationInfoRepository.UpdateData(agvstation); + } + proStockInfo.LocationCode = locationInfoEnd.LocationCode; + proStockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.浜哄伐瀹屾垚 : WIDESEA_Core.Enums.OperateTypeEnum.鑷姩瀹屾垚); + _unitOfWorkManage.CommitTran(); + } + else + { + return WebResponseContent.Instance.Error($"鏈壘鍒板搴斿簱瀛樹俊鎭�"); + } } + else//鍘熸枡搴撳畬鎴� + { + Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == task.PalletCode); + if (stockInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒板搴斿簱瀛樹俊鎭�"); + } + Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (locationInfoEnd == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅"); + } + task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + _unitOfWorkManage.BeginTran(); + stockInfo.LocationCode = locationInfoEnd.LocationCode; + stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + _stockService.StockInfoService.Repository.UpdateData(stockInfo); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.浜哄伐瀹屾垚 : WIDESEA_Core.Enums.OperateTypeEnum.鑷姩瀹屾垚); + _unitOfWorkManage.CommitTran(); + } + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error(ex.Message); + } + } + /// <summary> + /// 鍒嗛厤鎴愬搧宸烽亾 + /// </summary> + /// <returns></returns> + public string AssignCPRoadwayNo() + { + try + { + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == 2); + if (warehouse == null) + { + throw new Exception($"鏈壘鍒板贩閬撳搴斾粨搴撲俊鎭�"); + } + + string roadwayNo = ""; + List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("CP")).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 ?? ""; return !string.IsNullOrEmpty(roadwayNo) ? (roadwayNo) : throw new Exception("鏈壘鍒板彲鍒嗛厤宸烽亾"); } catch (Exception ex) @@ -429,46 +539,55 @@ WebResponseContent content = new WebResponseContent(); try { - string palletCode = @"^C\d{5}$"; // 姝e垯琛ㄨ揪寮� - bool isValid = Regex.IsMatch(barCode, palletCode); - if (!isValid) - { - return content.Error($"妗嗙爜鏍煎紡閿欒{barCode}"); - } - if (!OutStartPonits.Contains(startPoint)) + //string palletCode = @"^C\d{5}$"; // 姝e垯琛ㄨ揪寮� + //bool isValid = Regex.IsMatch(barCode, palletCode); + //if (!isValid) + //{ + // return content.Error($"妗嗙爜鏍煎紡閿欒{barCode}"); + //} + Dt_AGVStationInfo agvstation = _agvStationInfoRepository.QueryFirst(x=>x.AGVStationCode==startPoint); + if (agvstation==null) { return content.Error($"璧风偣閿欒{startPoint}"); } //鍒ゆ柇褰撳墠鐐逛綅鏄惁閲嶅 - Dt_Task taskOldPoint = BaseDal.QueryFirst(x => x.SourceAddress == startPoint && (x.TaskStatus == TaskStatusEnum.New.ObjToInt() || x.TaskStatus == TaskStatusEnum.Line_Execute.ObjToInt() || x.TaskStatus == TaskStatusEnum.Line_Executing.ObjToInt())); - //if (taskOldPoint != null) - //{ - // return content.Error($"绔欑偣{startPoint}宸插瓨鍦ㄤ换鍔�"); - //} + Dt_Task taskOldPoint = BaseDal.QueryFirst(x => x.SourceAddress == startPoint && x.TaskStatus == TaskStatusEnum.New.ObjToInt()); + if (taskOldPoint != null) + { + return content.Error($"绔欑偣{startPoint}宸插瓨鍦ㄤ换鍔�"); + } Dt_Task taskOld = BaseDal.QueryFirst(x => x.PalletCode == barCode); if (taskOld != null) { - return content.Error($"鑳舵{barCode}浠诲姟宸插瓨鍦�"); + return content.Error($"鎵樼洏{barCode}浠诲姟宸插瓨鍦�"); } - //if (_stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == barCode) != null) - //{ - // return content.Error($"鑳舵{barCode}搴撳瓨淇℃伅宸插瓨鍦�"); - //} - //todo:涓存椂瑙g粦 - Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == barCode); - if (_stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == barCode) != null) + Dt_ProStockInfo proStockInfoOld = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == barCode); + if (proStockInfoOld!=null) { - proStockInfo.PalletCode = proStockInfo.PalletCode + ":" + DateTime.Now.ToString("MM/dd"); + return content.Error($"鎵樼洏{barCode}宸插瓨鍦�"); } - //鑾峰彇鎴愬搧骞冲簱 - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); + //鍒嗛厤宸烽亾 + string roadWay=AssignCPRoadwayNo(); + + //鑾峰彇鎴愬搧搴� + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.LLDCP.ToString()); + Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo() + { + PalletCode=barCode, + ProStockAttribute=ProStockAttributeEnum.绌烘墭.ObjToInt(), + PalletType=1, + LocationCode="", + WarehouseId=warehouse.WarehouseId, + StockStatus=StockStatusEmun.MES绌烘墭閫�搴�.ObjToInt() + }; + Dt_Task newTask = new Dt_Task() { CurrentAddress = startPoint, Grade = 0, NextAddress = "", PalletCode = barCode, - Roadway = "CL01_CP", + Roadway = roadWay, SourceAddress = startPoint, TargetAddress = "", TaskType = TaskTypeEnum.EmptyProductBack.ObjToInt(), @@ -478,14 +597,11 @@ }; _unitOfWorkManage.BeginTran(); int taskId = BaseDal.AddData(newTask); - if (proStockInfo!=null) - { - _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo); - } + _stockRepository.ProStockInfoRepository.AddData(proStockInfo); newTask.TaskId = taskId; _unitOfWorkManage.CommitTran(); //鎺ㄩ�佷换鍔� - PushTasksToWCS(new List<Dt_Task> { newTask }); + PushTasksToWCS(new List<Dt_Task> { newTask },"AGV"); content.OK("鍙戦�佹垚鍔�"); } catch (Exception ex) -- Gitblit v1.9.3