From fb745c842df36edc5101291a7f239c11c97bcc2f Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期四, 11 九月 2025 16:46:33 +0800 Subject: [PATCH] 最新代码更新,BST,MES部分 --- 项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReturnBSTOrderController.cs | 19 项目代码/WMS/WMSServices/WIDESEA_DTO/ERP/BSTPurchaseOrderDTO.cs | 2 项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs | 38 项目代码/WMS/WMSServices/WIDESEA_InboundRepository/ReturnBSTOrderDetailRepository.cs | 21 项目代码/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_AGVStationInfo.cs | 2 项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/ERP/ErpBSTController.cs | 37 + 项目代码/WMS/WMSServices/WIDESEA_DTO/Basic/BSTSupplierDTO.cs | 2 项目代码/WMS/WMSServices/WIDESEA_InboundService/ReturnBSTOrderDetailService.cs | 21 项目代码/WMS/WMSServices/WIDESEA_Common/StockEnum/StockStatusMenu.cs | 6 项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnBSTOrderDetail.cs | 101 +++ 项目代码/WMS/WMSServices/WIDESEA_WMSServer/Filter/CustomProfile.cs | 3 项目代码/WMS/WMSServices/WIDESEA_IInboundService/IPurchaseBSTOrderService.cs | 2 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs | 124 ++- 项目代码/WMS/WMSServices/WIDESEA_BasicService/Base/MaterielInfoService.cs | 71 ++ 项目代码/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs | 194 +++--- 项目代码/WMS/WMSServices/WIDESEA_InboundService/ReturnBSTOrderService.cs | 164 ++++++ 项目代码/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs | 15 项目代码/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs | 65 + 项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutBSTOrderService.cs | 56 + 项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnBSTOrderDetailRepository.cs | 17 项目资料/接口协议/博思通利拓接口.xlsx | 0 项目代码/WMS/WMSServices/WIDESEA_BasicService/SupplierInfoService.cs | 70 ++ 项目代码/WMS/WMSServices/WIDESEA_DTO/ERP/BSTOutOrderDTO.cs | 2 项目代码/WMS/WMSServices/WIDESEA_InboundRepository/ReturnBSTOrderRepository.cs | 21 项目代码/WMS/WMSServices/WIDESEA_IInboundService/IReturnBSTOrderService.cs | 23 项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseBSTOrderDetail.cs | 2 项目代码/WMS/WMSServices/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs | 2 项目代码/WMS/WMSServices/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs | 8 项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReturnBSTOrderDetailController.cs | 19 项目资料/接口协议/龙利得MES接口.xlsx | 0 项目代码/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs | 2 项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnBSTOrder.cs | 85 +++ 项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnBSTOrderRepository.cs | 17 项目代码/WMS/WMSServices/WIDESEA_External/ERPService/InvokeERPService.cs | 4 项目代码/WMS/WMSServices/WIDESEA_External/Model/BSTPurchaseUpModel.cs | 13 项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseBSTOrder.cs | 2 项目代码/WMS/WMSServices/WIDESEA_DTO/ERP/BSTReturnOrderDTO.cs | 103 +++ 项目代码/WMS/WMSServices/WIDESEA_IInboundService/IReturnBSTOrderDetailService.cs | 16 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs | 170 +++--- 39 files changed, 1,216 insertions(+), 303 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Base/MaterielInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Base/MaterielInfoService.cs" index 2c00040..f65da62 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Base/MaterielInfoService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Base/MaterielInfoService.cs" @@ -40,19 +40,72 @@ try { List<Dt_MaterielInfo> OldMaterielInfos = BaseDal.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt()); - //鍒ゆ柇閲嶅鎻掑叆 - Dt_MaterielInfo? ExistMaterial = OldMaterielInfos.FirstOrDefault(x => bSTMaterialDTOs.Where(x => x.Way == 1).Select(x => x.MaterialId).Contains(x.MaterialSourceId)); - if (ExistMaterial != null) + //鏂板 + List<BSTMaterialDTO> bSTMaterialsDTOAdd = bSTMaterialDTOs.Where(x => x.Way == 1).ToList(); + //淇敼 + List<BSTMaterialDTO> bSTMaterialsDTOUpdate = bSTMaterialDTOs.Where(x => x.Way == 2).ToList(); + //鍒犻櫎 + List<BSTMaterialDTO> bSTMaterialsDTODel = bSTMaterialDTOs.Where(x => x.Way == 3).ToList(); + List<Dt_MaterielInfo> materielInfosAdd = new List<Dt_MaterielInfo>(); + List<Dt_MaterielInfo> materielInfosUpdate = new List<Dt_MaterielInfo>(); + //鏂板 + if (bSTMaterialsDTOAdd.Count>0) { - return content.Error($"鐗╂枡Id{nameof(BSTMaterialDTO.MaterialId)}:{ExistMaterial.MaterialSourceId}宸插瓨鍦�"); + //鍒ゆ柇閲嶅鎻掑叆 + Dt_MaterielInfo? ExistMaterial = OldMaterielInfos.FirstOrDefault(x => bSTMaterialsDTOAdd.Select(x => x.MaterialId).Contains(x.MaterialSourceId)); + if (ExistMaterial != null) + { + return content.Error($"鐗╂枡{nameof(BSTMaterialDTO.MaterialId)}:{ExistMaterial.MaterialSourceId}宸插瓨鍦�"); + } + + foreach (var item in bSTMaterialsDTOAdd) + { + if (bSTMaterialsDTOUpdate.FirstOrDefault(x=>x.MaterialId==item.MaterialId)!=null) + { + continue; + } + Dt_MaterielInfo materielInfo = _mapper.Map<Dt_MaterielInfo>(item); + materielInfosAdd.Add(materielInfo); + } } - List<Dt_MaterielInfo> materielInfos = new List<Dt_MaterielInfo>(); - foreach (var item in bSTMaterialDTOs) + //鏇存柊 + if (bSTMaterialsDTOUpdate.Count > 0) { - Dt_MaterielInfo materielInfo = _mapper.Map<Dt_MaterielInfo>(item); - materielInfos.Add(materielInfo); + //鑾峰彇宸插瓨鍦ㄧ殑鐗╂枡 + List<Dt_MaterielInfo>? ExistbSTMaterialsUpdate = OldMaterielInfos.Where(x => bSTMaterialsDTOUpdate.Select(x => x.MaterialId).Contains(x.MaterialSourceId)).ToList(); + foreach (var item in bSTMaterialsDTOUpdate) + { + Dt_MaterielInfo? materielInfoUpdate = ExistbSTMaterialsUpdate.FirstOrDefault(x => x.MaterialSourceId == item.MaterialId); + //濡傛灉鐗╂枡宸插瓨鍦ㄥ垯杩涜鏇存敼 + if (materielInfoUpdate!=null) + { + materielInfoUpdate.MaterielCode = item.MaterialNo; + materielInfoUpdate.MaterielName = item.Name; + materielInfoUpdate.MaterielSpec = item.Spec; + materielInfoUpdate.MaterielWide = item.MaterielWide; + materielInfoUpdate.MaterielThickness = item.MaterielThickness; + materielInfoUpdate.MaterielLength = item.MaterielLength; + materielInfoUpdate.MaterielWeight = item.Weight; + materielInfoUpdate.MaterielUnit = item.Unit; + materielInfosUpdate.Add(materielInfoUpdate); + } + else//濡傛灉涓嶅瓨鍦ㄥ垯杩涜鏂板 + { + Dt_MaterielInfo materielInfo = _mapper.Map<Dt_MaterielInfo>(item); + materielInfosAdd.Add(materielInfo); + } + } } - BaseDal.AddData(materielInfos); + //鍒犻櫎 + if (bSTMaterialsDTODel.Count > 0) + { + + } + //鏇存柊鏁版嵁 + _unitOfWorkManage.CommitTran(); + BaseDal.AddData(materielInfosAdd); + BaseDal.UpdateData(materielInfosUpdate); + _unitOfWorkManage.CommitTran(); return content.OK("鎺ユ敹鎴愬姛"); } catch (Exception ex) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" index c3e5351..4d4397a 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" @@ -20,6 +20,7 @@ using WIDESEA_Common.LocationEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Common.WareHouseEnum; +using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; namespace WIDESEA_BasicService { @@ -35,33 +36,28 @@ { throw new Exception($"鏈壘鍒颁粨搴撲俊鎭�"); } - //Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId); - //if (palletTypeInfo == null) - //{ - // if (warehouse.WarehouseCode == WarehouseEnum.HA153.ToString() && warehouse.WarehouseCode == WarehouseEnum.HA71.ToString() && warehouse.WarehouseCode == WarehouseEnum.HA60.ToString()) - // { - // palletTypeInfo = new Dt_PalletTypeInfo() - // { - // LocaitonCount = 1, - // PalletType = 0, - // IsOdd = false, - // }; - // } - // else - // throw new Exception($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�"); - //} + Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId); + if (palletTypeInfo == null) + { + if (warehouse.WarehouseCode == WarehouseEnum.LLDYL.ToString()) + { + throw new Exception($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�"); + } + } return warehouse.WarehouseCode switch { - "LLDCP" or "LLDYL"=> AssignLocation(roadwayNo), + "LLDCP" or "LLDFL" => AssignLocation(roadwayNo), + "LLDYL" => AssignLocationYL(roadwayNo, palletTypeInfo), _ => throw new Exception($"鏈壘鍒颁粨搴撹揣浣嶅垎閰嶆柟娉�") }; } private readonly static object _locker = new object(); + private readonly static object _AssignLocationYL = new object(); private static List<LocationCache> locationCaches = new List<LocationCache>(); /// <summary> - /// + /// 鍒嗛厤璐т綅 /// </summary> /// <param name="roadwayNo"></param> /// <returns></returns> @@ -78,11 +74,8 @@ List<string> lockLocations = locationCaches.Select(x => x.LocationCode).ToList(); - List<Dt_LocationInfo> locationInfos = BaseDal.QueryData(x => x.RoadwayNo == roadwayNo);//鏌ヨ宸烽亾鎵�鏈夎揣浣嶄俊鎭� - Dictionary<string, OrderByType> orderBy = new Dictionary<string, OrderByType>() { - { nameof(Dt_LocationInfo.Column),OrderByType.Desc }, { nameof(Dt_LocationInfo.Layer),OrderByType.Asc }, { nameof(Dt_LocationInfo.Depth),OrderByType.Desc }, @@ -92,7 +85,62 @@ return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭 } } + public Dt_LocationInfo? AssignLocationYL(string roadwayNo, Dt_PalletTypeInfo palletTypeInfo) + { + lock (_AssignLocationYL) + { + List<LocationCache> removeItems = locationCaches.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 5).ToList();//鏌ヨ娣诲姞闈欐�佸彉閲忚秴杩�5鍒嗛挓鐨勮揣浣� + int count = removeItems.Count; + for (int i = 0; i < count; i++) + { + locationCaches.Remove(removeItems[i]);//绉婚櫎鏌ヨ娣诲姞闈欐�佸彉閲忚秴杩�5鍒嗛挓鐨勮揣浣� + } + List<string> lockLocations = locationCaches.Select(x => x.LocationCode).ToList(); + + List<Dt_LocationInfo> locationInfos = BaseDal.QueryData(x => x.RoadwayNo == roadwayNo);//鏌ヨ宸烽亾鎵�鏈夎揣浣嶄俊鎭� + + Dictionary<string, OrderByType> orderBy = new Dictionary<string, OrderByType>() + { + { nameof(Dt_LocationInfo.Column),OrderByType.Desc }, + { nameof(Dt_LocationInfo.Layer),OrderByType.Asc }, + { nameof(Dt_LocationInfo.Depth),OrderByType.Desc }, + { nameof(Dt_LocationInfo.Row),OrderByType.Asc } + }; + if (roadwayNo.Contains("YLDual")) + { + if (palletTypeInfo.LocaitonCount==1) + { + return BaseDal.QueryFirst(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭 + } + else + { + //鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭 + List<Dt_LocationInfo> locationInfosMedium = BaseDal.QueryData(x => x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt() && x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy); + Dt_LocationInfo locationInfo = new Dt_LocationInfo(); + foreach (var item in locationInfosMedium) + { + //鑾峰彇鏇存敼搴撲綅 + Dt_LocationInfo? nearLocation1; + Dt_LocationInfo? nearLocation2; + + nearLocation1 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.Row == item.Row && x.Layer == item.Layer && x.Depth == item.Depth && x.Column == item.Column - 1); + nearLocation2 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.Row == item.Row && x.Layer == item.Layer && x.Depth == item.Depth && x.Column == item.Column + 1); + if (nearLocation1!=null && nearLocation2!=null) + { + locationInfo = item; + } + } + return locationInfo; + } + } + else + { + return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭 + } + + } + } /// <summary> /// 淇敼璐т綅鐘舵�佸強绫诲瀷 /// </summary> @@ -263,27 +311,21 @@ // Repository.UpdateData(locations); //} - public void UpdateLocationStatus(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehousId) + public void UpdateLocationStatus(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehouseId) { List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo); - List<Dt_PalletTypeInfo> palletTypeInfos = _basicRepository.PalletTypeInfoRepository.QueryData(x => x.WarehouseId == warehousId); - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehousId); - //Dt_PalletTypeInfo? palletTypeInfo = palletTypeInfos.FirstOrDefault(x => x.PalletType == palletType && x.WarehouseId == warehousId); - //if (palletTypeInfo == null || warehouse.WarehouseCode == WarehouseEnum.HA60.ToString()) - //{ - // if (warehouse.WarehouseCode == WarehouseEnum.HA153.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA71.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA60.ToString()) - // { - // palletTypeInfo = new Dt_PalletTypeInfo() - // { - // LocaitonCount = 1, - // PalletType = 0, - // IsOdd = false, - // }; - // } - // else - // throw new Exception($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�"); - //} + List<Dt_PalletTypeInfo> palletTypeInfos = _basicRepository.PalletTypeInfoRepository.QueryData(x => x.WarehouseId == warehouseId); + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId); + + Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId); + if (palletTypeInfo == null) + { + if (warehouse.WarehouseCode == WarehouseEnum.LLDYL.ToString()) + { + throw new Exception($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�"); + } + } List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, location); if (locationInfos.Max(x => x.Depth) < 3) { @@ -327,76 +369,42 @@ if (palletTypeInfos.FirstOrDefault(x => x.LocaitonCount == 2) != null) { - Dt_LocationInfo? nearLocation; - //if (palletTypeInfo.IsOdd) - //{ - // nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); - //} - //else - //{ - nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1); - //} + //鑾峰彇鏇存敼搴撲綅 + Dt_LocationInfo? nearLocation1; + Dt_LocationInfo? nearLocation2; - if (nearLocation!=null && location.RoadwayNo.Contains("BC")) - { - if (nearLocation?.LocationType == LocationTypeEnum.SmallPallet.ObjToInt()) - { - nearLocation = null; - } - } - if (location.RoadwayNo == "SC01_BC" && palletType != PalletTypeEnum.SmallPallet.ObjToInt()) - { - nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1); - if (nearLocation?.LocationType == LocationTypeEnum.SmallPallet.ObjToInt()) - { - nearLocation = null; - } - } + nearLocation1 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1); + nearLocation2 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); - if (nearLocation != null) + + if (nearLocation1 != null && nearLocation2 != null) { - List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation); + //鍙岃緟鏂� + List<Dt_LocationInfo> nearLocations = new List<Dt_LocationInfo>() + { + nearLocation1, + nearLocation2 + }; for (int i = 0; i < nearLocations.Count; i++) { - List<int> palletTypes = palletTypeInfos.Select(x => x.PalletType).ToList(); - palletTypes.Add(0); - if (palletTypes.Contains(nearLocations[i].LocationType)) + if (locationStatus == LocationStatusEnum.Lock) { - if (nearLocations[i].LocationType != palletType) + if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) { - nearLocations[i].LocationType = palletType; + nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); } - - if (locationStatus == LocationStatusEnum.Lock) + } + else if (locationStatus == LocationStatusEnum.Free) + { + if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) { - if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) - { - nearLocations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); - } - else if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) - { - nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); - } - } - else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) - { - if (nearLocations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) - { - nearLocations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); - } - else if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) - { - nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); - } + nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); } } } locations.AddRange(nearLocations); } } - - - } else { diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/SupplierInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/SupplierInfoService.cs" index b548127..02e7383 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/SupplierInfoService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/SupplierInfoService.cs" @@ -39,19 +39,71 @@ try { List<Dt_SupplierInfo> OldsupplierInfos = BaseDal.QueryData(x => x.InvOrgId == MaterielInvOrgEnum.鑰佸巶.ObjToInt()); - //鍒ゆ柇閲嶅鎻掑叆 - Dt_SupplierInfo? ExistSupplier = OldsupplierInfos.FirstOrDefault(x => bSTSupplierDTOs.Where(x => x.Way == 1).Select(x => x.VendId).Contains(x.SupplierSourceId)); - if (ExistSupplier != null) + //鏂板 + List<BSTSupplierDTO> bSTSupplierDTOsAdd = bSTSupplierDTOs.Where(x => x.Way == 1).ToList(); + //淇敼 + List<BSTSupplierDTO> bSTSupplierDTOsUpdate = bSTSupplierDTOs.Where(x => x.Way == 2).ToList(); + //鍒犻櫎 + List<BSTSupplierDTO> bSTSupplierDTOsDTODel = bSTSupplierDTOs.Where(x => x.Way == 3).ToList(); + List<Dt_SupplierInfo> supplierInfosAdd = new List<Dt_SupplierInfo>(); + List<Dt_SupplierInfo> supplierInfosUpdate = new List<Dt_SupplierInfo>(); + //鏂板 + if (bSTSupplierDTOsAdd.Count > 0) { - return content.Error($"鐗╂枡Id{nameof(BSTSupplierDTO.VendId)}:{ExistSupplier.SupplierSourceId}宸插瓨鍦�"); + //鍒ゆ柇閲嶅鎻掑叆 + Dt_SupplierInfo? ExistSupplier = OldsupplierInfos.FirstOrDefault(x => bSTSupplierDTOsAdd.Select(x => x.VendId).Contains(x.SupplierSourceId)); + if (ExistSupplier != null) + { + return content.Error($"渚涘簲鍟唟nameof(BSTSupplierDTO.VendId)}:{ExistSupplier.SupplierSourceId}宸插瓨鍦�"); + } + + foreach (var item in bSTSupplierDTOsAdd) + { + if (bSTSupplierDTOsUpdate.FirstOrDefault(x => x.VendId == item.VendId) != null) + { + continue; + } + Dt_SupplierInfo supplierInfo = _mapper.Map<Dt_SupplierInfo>(item); + supplierInfosAdd.Add(supplierInfo); + } } - List<Dt_SupplierInfo> supplierInfos = new List<Dt_SupplierInfo>(); - foreach (var item in bSTSupplierDTOs) + //鏇存柊 + if (bSTSupplierDTOsUpdate.Count > 0) { - Dt_SupplierInfo supplierInfo = _mapper.Map<Dt_SupplierInfo>(item); - supplierInfos.Add(supplierInfo); + //鑾峰彇宸插瓨鍦ㄧ殑鐗╂枡 + List<Dt_SupplierInfo>? ExistbSTSuppliersUpdate = OldsupplierInfos.Where(x => bSTSupplierDTOsUpdate.Select(x => x.VendId).Contains(x.SupplierSourceId)).ToList(); + foreach (var item in bSTSupplierDTOsUpdate) + { + Dt_SupplierInfo? supplierInfoUpdate = ExistbSTSuppliersUpdate.FirstOrDefault(x => x.SupplierSourceId == item.VendId); + //濡傛灉鐗╂枡宸插瓨鍦ㄥ垯杩涜鏇存敼 + if (supplierInfoUpdate != null) + { + supplierInfoUpdate.SupplierSourceId = item.VendId; + supplierInfoUpdate.SupplierCode = item.VendNo; + supplierInfoUpdate.SupplierShortName = item.ShortName; + supplierInfoUpdate.SupplierName = item.ShortName; + supplierInfoUpdate.Contacts = item.BusinessContact; + supplierInfoUpdate.ContactNumber = item.Tel; + supplierInfoUpdate.ContactAddress = item.Address; + supplierInfosUpdate.Add(supplierInfoUpdate); + } + else//濡傛灉涓嶅瓨鍦ㄥ垯杩涜鏂板 + { + Dt_SupplierInfo supplierInfo = _mapper.Map<Dt_SupplierInfo>(item); + supplierInfosAdd.Add(supplierInfo); + } + } } - BaseDal.AddData(supplierInfos); + //鍒犻櫎 + if (bSTSupplierDTOsDTODel.Count > 0) + { + + } + //鏇存柊鏁版嵁 + _unitOfWorkManage.CommitTran(); + BaseDal.AddData(supplierInfosAdd); + BaseDal.UpdateData(supplierInfosUpdate); + _unitOfWorkManage.CommitTran(); content.OK("鎺ユ敹鎴愬姛"); } catch (Exception ex) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs" index 220a508..d0c2417 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs" @@ -30,7 +30,7 @@ InStockLock = 10, /// <summary> - /// 鏈夎揣閿佸畾 + /// 绌洪棽閿佸畾 /// </summary> [Description("绌洪棽閿佸畾")] FreeLock = 20, diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/StockEnum/StockStatusMenu.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/StockEnum/StockStatusMenu.cs" index 7654f86..6dd8f37 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/StockEnum/StockStatusMenu.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/StockEnum/StockStatusMenu.cs" @@ -56,8 +56,10 @@ /// <summary> /// 鎴愬搧搴撳瓨灞炴�э細<br/> /// 1:鎴愬搧<br/> - /// 2:灏炬暟<br/> - /// 3:鐮斿彂<br/> + /// 2:鍗婃垚鍝�<br/> + /// 3:鍘熸潗鏂�<br/> + /// 4:杈呮枡澶囦欢<br/> + /// 5:绌烘墭<br/> /// </summary> public enum ProStockAttributeEnum { diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs" index 0b0b7cc..f9fc847 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs" @@ -28,7 +28,11 @@ /// 杈呮枡搴� /// </summary> [Description("杈呮枡搴�")] - LLDFL = 3 - + LLDFL = 3, + /// <summary> + /// 鑰佸巶鏆傚瓨鍖� + /// </summary> + [Description("鑰佸巶鏆傚瓨鍖�")] + LLDOldCache = 4 } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/Basic/BSTSupplierDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/Basic/BSTSupplierDTO.cs" index f7cef41..a65d823 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/Basic/BSTSupplierDTO.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/Basic/BSTSupplierDTO.cs" @@ -41,7 +41,7 @@ /// <summary> /// 鍟嗗姟鑱旂郴浜� /// </summary> - [PropertyValidate("渚涘簲鍟嗙畝绉�", NotNullAndEmpty = true)] + [PropertyValidate("summary", NotNullAndEmpty = true)] public string BusinessContact { get; set; } /// <summary> diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTOutOrderDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTOutOrderDTO.cs" index 5c18821..fe16398 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTOutOrderDTO.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTOutOrderDTO.cs" @@ -6,7 +6,7 @@ using System.Threading.Tasks; using WIDESEA_Core.Attributes; -namespace WIDESEA_DTO.Basic +namespace WIDESEA_DTO.ERP { /// <summary> /// 鍗氭�濋�氶噰璐叆搴撳崟鎺ユ敹瀹炰綋 diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTPurchaseOrderDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTPurchaseOrderDTO.cs" index f35dc16..a0f9838 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTPurchaseOrderDTO.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTPurchaseOrderDTO.cs" @@ -6,7 +6,7 @@ using System.Threading.Tasks; using WIDESEA_Core.Attributes; -namespace WIDESEA_DTO.Basic +namespace WIDESEA_DTO.ERP { /// <summary> /// 鍗氭�濋�氶噰璐叆搴撳崟鎺ユ敹瀹炰綋 diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTReturnOrderDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTReturnOrderDTO.cs" new file mode 100644 index 0000000..d4647af --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_DTO/ERP/BSTReturnOrderDTO.cs" @@ -0,0 +1,103 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.Attributes; + +namespace WIDESEA_DTO.ERP +{ + /// <summary> + /// 鍗氭�濋�氶��鏂欐帴鏀跺疄浣� + /// </summary> + [ModelValidate] + public class BSTReturnOrderDTO + { + /// <summary> + /// 鏁版嵁鑾峰彇鏂瑰紡鏍囪瘑(1:鏂板 2:淇敼 3:鍒犻櫎) + /// </summary> + [PropertyValidate("鏁版嵁鑾峰彇鏂瑰紡鏍囪瘑(1:鏂板 2:淇敼 3:鍒犻櫎)", NotNullAndEmpty = true)] + public int Way { get; set; } + /// <summary> + /// 閫�鏂欏崟ID + /// </summary> + [PropertyValidate("閫�鏂欏崟ID", NotNullAndEmpty = true)] + public int PaperWreturnId { get; set; } + /// <summary> + /// 閫�鏂欏崟缂栧彿 + /// </summary> + [PropertyValidate("閫�鏂欏崟缂栧彿", NotNullAndEmpty = true)] + public string PaperWreturnNo { get; set; } + /// <summary> + /// 閫�鏂欐棩鏈� + /// </summary> + [PropertyValidate("閫�鏂欐棩鏈�", NotNullAndEmpty = true)] + public long WreturnDate { get; set; } + /// <summary> + /// 閫�鏂欏憳宸� + /// </summary> + [PropertyValidate("閫�鏂欏憳宸�", NotNullAndEmpty = false)] + public string EmployeeName { get; set; } + /// <summary> + /// 閫�鏂欐槑缁� + /// </summary> + [PropertyValidate("閫�鏂欐槑缁�", NotNullAndEmpty = true)] + public List<BSTReturnOrderDTOItem> BstPaperWreturnDetails { get; set; } + } + /// <summary> + /// 閫�鏂欐槑缁� + /// </summary> + public class BSTReturnOrderDTOItem + { + /// <summary> + /// 閫�鏂橧D + /// </summary> + [PropertyValidate("閫�鏂橧D", NotNullAndEmpty = true)] + public int PaperWreturnId { get; set; } + /// <summary> + /// 鐗╂枡ID + /// </summary> + [PropertyValidate("鐗╂枡ID", NotNullAndEmpty = true)] + public int MaterialId { get; set; } + /// <summary> + /// 鐗╂枡鏉$爜 + /// </summary> + [PropertyValidate("鐗╂枡鏉$爜", NotNullAndEmpty = true)] + public string Barcode { get; set; } + /// <summary> + /// 鐗╂枡缂栧彿 + /// </summary> + [PropertyValidate("鐗╂枡缂栧彿", NotNullAndEmpty = true)] + public string MaterialNo { get; set; } + /// <summary> + /// 鐗╂枡鎵规搴忓彿 + /// </summary> + [PropertyValidate("鐗╂枡鎵规搴忓彿", NotNullAndEmpty = true)] + public int SeqNo { get; set; } + /// <summary> + /// 骞呭锛坢m锛� + /// </summary> + [PropertyValidate("骞呭锛坢m锛�", NotNullAndEmpty = true)] + public decimal W { get; set; } + /// <summary> + /// 鐩村緞 + /// </summary> + [PropertyValidate("鐩村緞", NotNullAndEmpty = true)] + public decimal Thick { get; set; } + /// <summary> + /// 闀垮害 + /// </summary> + [PropertyValidate("闀垮害", NotNullAndEmpty = true)] + public decimal ProcurementLength { get; set; } + /// <summary> + /// 閫�璐ф暟閲� + /// </summary> + [PropertyValidate("閫�璐ф暟閲�", NotNullAndEmpty = true)] + public decimal Qty { get; set; } + /// <summary> + /// 鍗曚綅 + /// </summary> + [PropertyValidate("鍗曚綅", NotNullAndEmpty = true)] + public string Unit { get; set; } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_External/ERPService/InvokeERPService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_External/ERPService/InvokeERPService.cs" index 1437228..a1fa83c 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_External/ERPService/InvokeERPService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_External/ERPService/InvokeERPService.cs" @@ -28,7 +28,9 @@ { ContractResolver = new CamelCasePropertyNamesContractResolver() }; - + /// <summary> + /// 璋冪敤ERP鎺ュ彛 + /// </summary> public string BSTPurchaseUp(BSTPurchaseUpModel bSTPurchaseUpModel) { Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x=>x.ApiCode==APIEnum.BSTPurchaseUp.ToString()); diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_External/Model/BSTPurchaseUpModel.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_External/Model/BSTPurchaseUpModel.cs" index 988c272..522616c 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_External/Model/BSTPurchaseUpModel.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_External/Model/BSTPurchaseUpModel.cs" @@ -11,8 +11,21 @@ /// </summary> public class BSTPurchaseUpModel { + /// <summary> + /// 鏉$爜 + /// </summary> public string Barcode { get; set; } + /// <summary> + /// 鏁伴噺 + /// </summary> public int BarcodeQty { get; set;} + /// <summary> + /// RFID + /// </summary> public string Rfid { get; set; } + /// <summary> + /// 鍏ュ簱鏃堕棿 + /// </summary> + public string RfidUpdateTime { get; set; } } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnBSTOrderDetailRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnBSTOrderDetailRepository.cs" new file mode 100644 index 0000000..2a772cd --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnBSTOrderDetailRepository.cs" @@ -0,0 +1,17 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_IInboundRepository +{ + /// <summary> + /// 閫�鏂欐槑缁嗕粨鍌ㄦ帴鍙e眰 + /// </summary> + public interface IReturnBSTOrderDetailRepository : IRepository<Dt_ReturnBSTOrderDetail> + { + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnBSTOrderRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnBSTOrderRepository.cs" new file mode 100644 index 0000000..5295770 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnBSTOrderRepository.cs" @@ -0,0 +1,17 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_IInboundRepository +{ + /// <summary> + /// 閫�鏂欏崟浠撳偍鎺ュ彛灞� + /// </summary> + public interface IReturnBSTOrderRepository : IRepository<Dt_ReturnBSTOrder> + { + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundService/IPurchaseBSTOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundService/IPurchaseBSTOrderService.cs" index 8be3ca0..6b30d55 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundService/IPurchaseBSTOrderService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundService/IPurchaseBSTOrderService.cs" @@ -6,7 +6,7 @@ using WIDESEA_Core; using WIDESEA_Core.BaseServices; using WIDESEA_DTO; -using WIDESEA_DTO.Basic; +using WIDESEA_DTO.ERP; using WIDESEA_IInboundRepository; using WIDESEA_Model.Models; diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundService/IReturnBSTOrderDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundService/IReturnBSTOrderDetailService.cs" new file mode 100644 index 0000000..eff73ed --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundService/IReturnBSTOrderDetailService.cs" @@ -0,0 +1,16 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseServices; +using WIDESEA_IInboundRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_IInboundService +{ + public interface IReturnBSTOrderDetailService : IService<Dt_ReturnBSTOrderDetail> + { + IReturnBSTOrderDetailRepository Repository { get; } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundService/IReturnBSTOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundService/IReturnBSTOrderService.cs" new file mode 100644 index 0000000..e35139b --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_IInboundService/IReturnBSTOrderService.cs" @@ -0,0 +1,23 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core; +using WIDESEA_Core.BaseServices; +using WIDESEA_DTO.ERP; +using WIDESEA_IInboundRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_IInboundService +{ + public interface IReturnBSTOrderService : IService<Dt_ReturnBSTOrder> + { + IReturnBSTOrderRepository Repository { get; } + /// <summary> + /// 鎺ユ敹鍗氭�濋�氶��鏂欎俊鎭� + /// </summary> + /// <returns></returns> + WebResponseContent ReceiveReturnOrder(List<BSTReturnOrderDTO> bSTReturnOrderDTOs); + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs" index de91dfc..798ecbc 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs" @@ -171,16 +171,15 @@ /// <summary> /// 鎴愬搧鍑哄簱 /// </summary> - /// <param name="Count"></param> /// <returns></returns> - WebResponseContent RequestCPWMSTaskOut(int Count); + WebResponseContent RequestCPWMSTaskOut(string materialCode, int Count,int targetId); - /// <summary> - /// 鏃犵汉甯冨嚭搴� - /// </summary> - /// <param name="Count"></param> - /// <returns></returns> - WebResponseContent RequestWFBWMSTaskOut(int Count); + ///// <summary> + ///// 鏃犵汉甯冨嚭搴� + ///// </summary> + ///// <param name="Count"></param> + ///// <returns></returns> + //WebResponseContent RequestWFBWMSTaskOut(int Count); /// <summary> /// 鍘熸枡鍑哄簱浠诲姟 diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundRepository/ReturnBSTOrderDetailRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundRepository/ReturnBSTOrderDetailRepository.cs" new file mode 100644 index 0000000..d55d842 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundRepository/ReturnBSTOrderDetailRepository.cs" @@ -0,0 +1,21 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseRepository; +using WIDESEA_IInboundRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_InboundRepository +{ + /// <summary> + /// 閫�鏂欏崟鏄庣粏浠撳偍瀹炵幇灞� + /// </summary> + public class ReturnBSTOrderDetailRepository : RepositoryBase<Dt_ReturnBSTOrderDetail>, IReturnBSTOrderDetailRepository + { + public ReturnBSTOrderDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) + { + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundRepository/ReturnBSTOrderRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundRepository/ReturnBSTOrderRepository.cs" new file mode 100644 index 0000000..f6465d0 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundRepository/ReturnBSTOrderRepository.cs" @@ -0,0 +1,21 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseRepository; +using WIDESEA_IInboundRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_InboundRepository +{ + /// <summary> + /// 閫�鏂欏崟浠撳偍瀹炵幇灞� + /// </summary> + public class ReturnBSTOrderRepository : RepositoryBase<Dt_ReturnBSTOrder>, IReturnBSTOrderRepository + { + public ReturnBSTOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) + { + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs" index 0c37854..b5470ba 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs" @@ -15,7 +15,7 @@ using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO; -using WIDESEA_DTO.Basic; +using WIDESEA_DTO.ERP; using WIDESEA_IBasicRepository; using WIDESEA_IInboundRepository; using WIDESEA_IInboundService; @@ -67,6 +67,8 @@ List<Dt_PurchaseBSTOrder> purchaseAddBSTOrders = new List<Dt_PurchaseBSTOrder>(); List<Dt_PurchaseBSTOrder> purchaseUpdateBSTOrders = new List<Dt_PurchaseBSTOrder>(); List<Dt_PurchaseBSTOrder> purchaseDeleteBSTOrders = new List<Dt_PurchaseBSTOrder>(); + List<Dt_PurchaseBSTOrderDetail> purchaseBSTOrderDetailsDel = new List<Dt_PurchaseBSTOrderDetail>(); + //鏂板 if (bSTPurchaseOrderDTOsAdd.Count>0) { //鍒ゆ柇渚涘簲鍟� @@ -83,41 +85,73 @@ } //楠岃瘉鏉$爜閲嶅 List<Dt_PurchaseBSTOrderDetail> purchaseBSTOrderDetails = OldpurchaseBSTOrders.SelectMany(x => x.Details).ToList(); - List<PaperReceiptDetailsItem> paperReceiptDetailsItems = bSTPurchaseOrderDTOsAdd.SelectMany(x => x.PaperReceiptDetails).ToList(); - var ExistDetail = purchaseBSTOrderDetails.FirstOrDefault(x => paperReceiptDetailsItems.Select(x => x.Barcode).Contains(x.Barcode)); + List<PaperReceiptDetailsItem> paperReceiptDetailsItemsAdd = bSTPurchaseOrderDTOsAdd.SelectMany(x => x.PaperReceiptDetails).ToList(); + var ExistDetail = purchaseBSTOrderDetails.FirstOrDefault(x => paperReceiptDetailsItemsAdd.Select(x => x.Barcode).Contains(x.Barcode)); if (ExistDetail!=null) { return content.Error($"閲囪喘鏉$爜{nameof(ExistDetail.Barcode)}:{ExistDetail.Barcode}宸插瓨鍦�"); } //鍒ゆ柇鏄惁瀛樺湪鐗╂枡 - PaperReceiptDetailsItem? paperReceiptDetailsItem = paperReceiptDetailsItems.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId)); + PaperReceiptDetailsItem? paperReceiptDetailsItem = paperReceiptDetailsItemsAdd.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId)); if (paperReceiptDetailsItem!=null) { - return content.Error($"閲囪喘鏉$爜{nameof(ExistDetail.Barcode)}:{ExistDetail.Barcode}鐗╂枡Id:{paperReceiptDetailsItem.MaterialId}涓嶅瓨鍦�"); + return content.Error($"閲囪喘鏉$爜{nameof(paperReceiptDetailsItem.Barcode)}:{paperReceiptDetailsItem.Barcode}鐗╂枡Id:{paperReceiptDetailsItem.MaterialId}涓嶅瓨鍦�"); } foreach (var item in bSTPurchaseOrderDTOsAdd) { + if (bSTPurchaseOrderDTOsUpdate.FirstOrDefault(x=>x.PaperReceiptId== item.PaperReceiptId)!=null) + { + continue; + } List<Dt_PurchaseBSTOrderDetail> bSTOrderDetails = item.PaperReceiptDetails.Select(x=>_mapper.Map<Dt_PurchaseBSTOrderDetail>(x)).ToList(); Dt_PurchaseBSTOrder purchaseBSTOrder = _mapper.Map<Dt_PurchaseBSTOrder>(item); purchaseBSTOrder.Details = bSTOrderDetails; purchaseAddBSTOrders.Add(purchaseBSTOrder); } } - + //鏇存柊 if (bSTPurchaseOrderDTOsUpdate.Count > 0) { - List<Dt_PurchaseBSTOrder>? ExistUpdatePurchase = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsUpdate.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).ToList(); - //鏇存柊鐨勫崟鎹槸鍚﹀瓨鍦� - if (ExistUpdatePurchase.Count == bSTPurchaseOrderDTOsUpdate.Count) - { + //瀛樺湪鐨勯噰璐崟 + List<Dt_PurchaseBSTOrder>? ExistpurchaseBSTOrders = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsUpdate.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).Distinct().ToList(); - } - else + foreach (var item in bSTPurchaseOrderDTOsUpdate) { - BSTPurchaseOrderDTO? bSTPurchaseOrderDTO = bSTPurchaseOrderDTOsUpdate.FirstOrDefault(x => !ExistUpdatePurchase.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)); - return content.Error($"鏈壘鍒版寚瀹氶噰璐敹璐у崟{nameof(BSTPurchaseOrderDTO.PaperReceiptId)}:{bSTPurchaseOrderDTO?.PaperReceiptId}"); + Dt_PurchaseBSTOrder? purchaseBSTOrderUpdate = ExistpurchaseBSTOrders.FirstOrDefault(x => x.PaperReceiptId == item.PaperReceiptId); + //濡傛灉璁㈠崟宸插瓨鍦ㄥ垯杩涜鏇存敼 + if (purchaseBSTOrderUpdate != null) + { + if (purchaseBSTOrderUpdate.PurchaseOrderStatus!=InOrderStatusEnum.鏈紑濮�.ObjToInt()) + { + return content.Error($"閲囪喘{nameof(purchaseBSTOrderUpdate.PaperReceiptId)}:{purchaseBSTOrderUpdate.PaperReceiptId}璁㈠崟鍏ュ簱涓紝涓嶅彲鏇存敼"); + } + purchaseBSTOrderDetailsDel.AddRange(purchaseBSTOrderUpdate.Details); + + //鏇存柊 + List<Dt_PurchaseBSTOrderDetail> bSTOrderDetails = item.PaperReceiptDetails.Select(x => _mapper.Map<Dt_PurchaseBSTOrderDetail>(x)).ToList(); + bSTOrderDetails.ForEach(x => + { + x.PurchaseBSTOrderId = purchaseBSTOrderUpdate.Id; + }); + purchaseBSTOrderUpdate.Details = bSTOrderDetails; + purchaseBSTOrderUpdate.PaperReceiptId = item.PaperReceiptId; + purchaseBSTOrderUpdate.PaperReceiptNo = item.PaperReceiptNo; + purchaseBSTOrderUpdate.VendNo = item.VendNo; + purchaseBSTOrderUpdate.ReceiptDate = DateTimeOffset.FromUnixTimeMilliseconds(item.ReceiptDate).DateTime; + purchaseBSTOrderUpdate.TotalProcurementLength = item.TotalProcurementLength; + purchaseUpdateBSTOrders.Add(purchaseBSTOrderUpdate); + } + else //濡傛灉涓嶅瓨鍦ㄥ垯杩涜鏂板 + { + List<Dt_PurchaseBSTOrderDetail> bSTOrderDetails = item.PaperReceiptDetails.Select(x => _mapper.Map<Dt_PurchaseBSTOrderDetail>(x)).ToList(); + Dt_PurchaseBSTOrder purchaseBSTOrder = _mapper.Map<Dt_PurchaseBSTOrder>(item); + purchaseBSTOrder.Details = bSTOrderDetails; + purchaseAddBSTOrders.Add(purchaseBSTOrder); + } } + } + //鍒犻櫎 if (bSTPurchaseOrderDTOsDel.Count>0) { List<Dt_PurchaseBSTOrder>? ExistDelPurchase = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsDel.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).ToList(); @@ -132,8 +166,11 @@ return content.Error($"鏈壘鍒版寚瀹氶噰璐敹璐у崟{nameof(BSTPurchaseOrderDTO.PaperReceiptId)}:{bSTPurchaseOrderDTO?.PaperReceiptId}"); } } + //鏇存柊鏁版嵁 _unitOfWorkManage.BeginTran(); BaseDal.Db.InsertNav(purchaseAddBSTOrders).Include(x => x.Details).ExecuteCommand(); + _purchaseBSTOrderDetailRepository.DeleteData(purchaseBSTOrderDetailsDel); + BaseDal.Db.UpdateNav(purchaseUpdateBSTOrders).Include(x => x.Details).ExecuteCommand(); _unitOfWorkManage.CommitTran(); content.OK("鎺ユ敹鎴愬姛"); } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/ReturnBSTOrderDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/ReturnBSTOrderDetailService.cs" new file mode 100644 index 0000000..94bd890 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/ReturnBSTOrderDetailService.cs" @@ -0,0 +1,21 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseServices; +using WIDESEA_IInboundRepository; +using WIDESEA_IInboundService; +using WIDESEA_Model.Models; + +namespace WIDESEA_InboundService +{ + public class ReturnBSTOrderDetailService : ServiceBase<Dt_ReturnBSTOrderDetail, IReturnBSTOrderDetailRepository>, IReturnBSTOrderDetailService + { + public IReturnBSTOrderDetailRepository Repository => BaseDal; + + public ReturnBSTOrderDetailService(IReturnBSTOrderDetailRepository BaseDal) : base(BaseDal) + { + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/ReturnBSTOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/ReturnBSTOrderService.cs" new file mode 100644 index 0000000..bfaba6f --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/ReturnBSTOrderService.cs" @@ -0,0 +1,164 @@ +锘縰sing AutoMapper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Common.MaterielEnum; +using WIDESEA_Common.OrderEnum; +using WIDESEA_Common.WareHouseEnum; +using WIDESEA_Core; +using WIDESEA_Core.BaseRepository; +using WIDESEA_Core.BaseServices; +using WIDESEA_Core.Helper; +using WIDESEA_DTO.ERP; +using WIDESEA_IBasicRepository; +using WIDESEA_IInboundRepository; +using WIDESEA_IInboundService; +using WIDESEA_InboundRepository; +using WIDESEA_IStockRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_InboundService +{ + public class ReturnBSTOrderService : ServiceBase<Dt_ReturnBSTOrder, IReturnBSTOrderRepository>, IReturnBSTOrderService + { + public IReturnBSTOrderRepository Repository => BaseDal; + private IUnitOfWorkManage _unitOfWorkManage; + private IBasicRepository _basicRepository; + private IStockInfoRepository _stockInfoRepository; + private IReturnBSTOrderDetailRepository _returnBSTOrderDetailRepository; + private IMapper _mapper; + + public ReturnBSTOrderService(IReturnBSTOrderRepository BaseDal,IUnitOfWorkManage unitOfWorkManage,IBasicRepository basicRepository, IStockInfoRepository stockInfoRepository, IReturnBSTOrderDetailRepository returnBSTOrderDetailRepository, IMapper mapper) : base(BaseDal) + { + _unitOfWorkManage = unitOfWorkManage; + _basicRepository = basicRepository; + _stockInfoRepository = stockInfoRepository; + _returnBSTOrderDetailRepository = returnBSTOrderDetailRepository; + _mapper = mapper; + } + /// <summary> + /// 鎺ユ敹鍗氭�濋�氶��鏂欎俊鎭� + /// </summary> + /// <returns></returns> + public WebResponseContent ReceiveReturnOrder(List<BSTReturnOrderDTO> bSTReturnOrderDTOs) + { + WebResponseContent content = new WebResponseContent(); + try + { + List<Dt_ReturnBSTOrder> OldreturnBSTOrders = BaseDal.Db.Queryable<Dt_ReturnBSTOrder>().Includes(x => x.Details).ToList(); + List<Dt_StockInfo> ExiststockInfos = _stockInfoRepository.QueryData(x=>x.WarehouseId==WarehouseEnum.LLDOldCache.ObjToInt()); + //鏂板 + List<BSTReturnOrderDTO> bSTReturnOrderDTOsAdd = bSTReturnOrderDTOs.Where(x => x.Way == 1).ToList(); + //淇敼 + List<BSTReturnOrderDTO> bSTReturnOrderDTOsUpdate = bSTReturnOrderDTOs.Where(x => x.Way == 2).ToList(); + //鍒犻櫎 + List<BSTReturnOrderDTO> bSTReturnOrderDTOsDel = bSTReturnOrderDTOs.Where(x => x.Way == 3).ToList(); + //鑾峰彇鎵�鏈夌墿鏂� + List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.鑰佸巶.ObjToInt() && x.MaterialSourceId != 0); + + List<Dt_ReturnBSTOrder> returnAddBSTOrders = new List<Dt_ReturnBSTOrder>(); + List<Dt_ReturnBSTOrder> returnUpdateBSTOrders = new List<Dt_ReturnBSTOrder>(); + List<Dt_ReturnBSTOrder> returnDeleteBSTOrders = new List<Dt_ReturnBSTOrder>(); + List<Dt_ReturnBSTOrderDetail> returnBSTOrderDetailsDel = new List<Dt_ReturnBSTOrderDetail>(); + List<Dt_StockInfo> stockInfosUpdate = new List<Dt_StockInfo>(); + //鏂板 + if (bSTReturnOrderDTOsAdd.Count > 0) + { + //鍒ゆ柇鍗曟嵁 + Dt_ReturnBSTOrder? ExistAddReturn = OldreturnBSTOrders.FirstOrDefault(x => bSTReturnOrderDTOsAdd.Select(x => x.PaperWreturnId).Contains(x.PaperWreturnId)); + if (ExistAddReturn != null) + { + return content.Error($"閫�鏂欏崟{nameof(BSTReturnOrderDTO.PaperWreturnId)}:{ExistAddReturn.PaperWreturnId}宸插瓨鍦�"); + } + List<BSTReturnOrderDTOItem> bSTReturnOrderDTOItemsAdd = bSTReturnOrderDTOsAdd.SelectMany(x => x.BstPaperWreturnDetails).ToList(); + //鍒ゆ柇鏄惁瀛樺湪鐗╂枡 + BSTReturnOrderDTOItem? bSTReturnOrderDTOItem = bSTReturnOrderDTOItemsAdd.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId)); + if (bSTReturnOrderDTOItem != null) + { + return content.Error($"閫�鏂檣nameof(bSTReturnOrderDTOItem.Barcode)}:{bSTReturnOrderDTOItem.Barcode}鐗╂枡{nameof(BSTReturnOrderDTOItem.MaterialId)}:{bSTReturnOrderDTOItem.MaterialId}涓嶅瓨鍦�"); + } + //楠岃瘉閫�鏂欐潯鐮佹槸鍚﹀湪搴撳瓨涓� + var ExiststockInfo = bSTReturnOrderDTOItemsAdd.FirstOrDefault(x => !ExiststockInfos.Select(x => x.PalletCode).Contains(x.Barcode)); + if (ExiststockInfo != null) + { + return content.Error($"閫�鏂欐潯鐮亄nameof(ExiststockInfo.Barcode)}:{ExiststockInfo.Barcode}鐗╂枡鏈湪鑰佸巶鏆傚瓨鍖�"); + } + //鑾峰彇瀵瑰簲搴撳瓨淇搴撳瓨鏁伴噺 + List<Dt_StockInfo> returnStockinfos = ExiststockInfos.Where(x => bSTReturnOrderDTOItemsAdd.Select(x => x.Barcode).Contains(x.PalletCode)).ToList(); + foreach (var item in bSTReturnOrderDTOsAdd) + { + if (bSTReturnOrderDTOsUpdate.FirstOrDefault(x => x.PaperWreturnId == item.PaperWreturnId) != null) + { + continue; + } + List<Dt_ReturnBSTOrderDetail> bSTOrderDetails = item.BstPaperWreturnDetails.Select(x => _mapper.Map<Dt_ReturnBSTOrderDetail>(x)).ToList(); + Dt_ReturnBSTOrder returnBSTOrder = _mapper.Map<Dt_ReturnBSTOrder>(item); + returnBSTOrder.Details = bSTOrderDetails; + returnAddBSTOrders.Add(returnBSTOrder); + } + } + //鏇存柊 + if (bSTReturnOrderDTOsUpdate.Count > 0) + { + //瀛樺湪鐨勯噰璐崟 + List<Dt_ReturnBSTOrder>? ExistreturnBSTOrders = OldreturnBSTOrders.Where(x => bSTReturnOrderDTOsUpdate.Select(x => x.PaperWreturnId).Contains(x.PaperWreturnId)).Distinct().ToList(); + + foreach (var item in bSTReturnOrderDTOsUpdate) + { + Dt_ReturnBSTOrder? returnBSTOrderUpdate = ExistreturnBSTOrders.FirstOrDefault(x => x.PaperWreturnId == item.PaperWreturnId); + //濡傛灉璁㈠崟宸插瓨鍦ㄥ垯杩涜鏇存敼 + if (returnBSTOrderUpdate != null) + { + if (returnBSTOrderUpdate.ReturnOrderStatus != InOrderStatusEnum.鏈紑濮�.ObjToInt()) + { + return content.Error($"閫�鏂檣nameof(returnBSTOrderUpdate.PaperWreturnId)}:{returnBSTOrderUpdate.PaperWreturnId}璁㈠崟閫�鏂欏叆搴撲腑锛屼笉鍙洿鏀�"); + } + returnBSTOrderDetailsDel.AddRange(returnBSTOrderUpdate.Details); + + //鏇存柊 + List<Dt_ReturnBSTOrderDetail> bSTOrderDetails = item.BstPaperWreturnDetails.Select(x => _mapper.Map<Dt_ReturnBSTOrderDetail>(x)).ToList(); + bSTOrderDetails.ForEach(x => + { + x.ReturnBSTOrderId = returnBSTOrderUpdate.Id; + }); + returnBSTOrderUpdate.Details = bSTOrderDetails; + returnBSTOrderUpdate.PaperWreturnId = item.PaperWreturnId; + returnBSTOrderUpdate.PaperWreturnNo = item.PaperWreturnNo; + returnBSTOrderUpdate.EmployeeName = item.EmployeeName; + returnBSTOrderUpdate.WreturnDate = DateTimeOffset.FromUnixTimeMilliseconds(item.WreturnDate).DateTime; + returnUpdateBSTOrders.Add(returnBSTOrderUpdate); + } + else //濡傛灉涓嶅瓨鍦ㄥ垯杩涜鏂板 + { + List<Dt_ReturnBSTOrderDetail> bSTOrderDetails = item.BstPaperWreturnDetails.Select(x => _mapper.Map<Dt_ReturnBSTOrderDetail>(x)).ToList(); + Dt_ReturnBSTOrder returnBSTOrder = _mapper.Map<Dt_ReturnBSTOrder>(item); + returnBSTOrder.Details = bSTOrderDetails; + returnAddBSTOrders.Add(returnBSTOrder); + } + } + + } + //鍒犻櫎 + if (bSTReturnOrderDTOsDel.Count > 0) + { + + } + //鏇存柊鏁版嵁 + _unitOfWorkManage.BeginTran(); + BaseDal.Db.InsertNav(returnAddBSTOrders).Include(x => x.Details).ExecuteCommand(); + _returnBSTOrderDetailRepository.DeleteData(returnBSTOrderDetailsDel); + BaseDal.Db.UpdateNav(returnUpdateBSTOrders).Include(x => x.Details).ExecuteCommand(); + _unitOfWorkManage.CommitTran(); + content.OK("鎺ユ敹鎴愬姛"); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_AGVStationInfo.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_AGVStationInfo.cs" index ae1dc37..dfa5d87 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_AGVStationInfo.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_AGVStationInfo.cs" @@ -9,7 +9,7 @@ namespace WIDESEA_Model.Models { /// <summary> - /// 鎺ュ彛淇℃伅 + /// AGV绔欑偣淇℃伅琛� /// </summary> [SugarTable(nameof(Dt_AGVStationInfo), "AGV绔欑偣淇℃伅琛�")] public class Dt_AGVStationInfo : BaseEntity diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseBSTOrder.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseBSTOrder.cs" index 587582a..821e6fd 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseBSTOrder.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseBSTOrder.cs" @@ -12,7 +12,7 @@ /// <summary> /// BST閲囪喘鍏ュ簱鍗� /// </summary> - [SugarTable(nameof(Dt_PurchaseBSTOrder), "BST閲囪喘鍏ュ簱鍗�"), ModelValidate] + [SugarTable(nameof(Dt_PurchaseBSTOrder), "BST閲囪喘鍏ュ簱鍗�")] public class Dt_PurchaseBSTOrder : BaseEntity { /// <summary> diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseBSTOrderDetail.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseBSTOrderDetail.cs" index e02d88b..dc9920f 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseBSTOrderDetail.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseBSTOrderDetail.cs" @@ -12,7 +12,7 @@ /// <summary> /// BST閲囪喘鍏ュ簱鍗曟槑缁� /// </summary> - [SugarTable(nameof(Dt_PurchaseBSTOrderDetail), "BST閲囪喘鍏ュ簱鍗曟槑缁�"), ModelValidate] + [SugarTable(nameof(Dt_PurchaseBSTOrderDetail), "BST閲囪喘鍏ュ簱鍗曟槑缁�")] public class Dt_PurchaseBSTOrderDetail : BaseEntity { /// <summary> diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnBSTOrder.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnBSTOrder.cs" new file mode 100644 index 0000000..be050f6 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnBSTOrder.cs" @@ -0,0 +1,85 @@ +锘縰sing SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.Attributes; +using WIDESEA_Core.CodeConfigEnum; +using WIDESEA_Core.DB.Models; + +namespace WIDESEA_Model.Models +{ + /// <summary> + /// BST閫�鏂欏崟 + /// </summary> + [SugarTable(nameof(Dt_ReturnBSTOrder), "BST閫�鏂欏崟")] + public class Dt_ReturnBSTOrder : BaseEntity + { + /// <summary> + /// 涓婚敭 + /// </summary> + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")] + public int Id { get; set; } + + /// <summary> + /// 浠撳簱涓婚敭 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")] + public int WarehouseId { get; set; } + + /// <summary> + /// 閫�鏂欏崟鏉ユ簮ID + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閫�鏂欏崟鏉ユ簮ID")] + public int PaperWreturnId { get; set; } + /// <summary> + /// WMS鍗曟嵁缂栧彿 + /// </summary> + [CodeRule(RuleCodeEnum.TLCodeRule)] + [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "WMS鍗曟嵁缂栧彿", IsOnlyIgnoreUpdate = true)] + public string ReturnInboundNo { get; set; } + + /// <summary> + /// 閫�鏂欏崟缂栧彿(涓婃父) + /// </summary> + [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "閫�鏂欏崟缂栧彿(涓婃父)")] + public string PaperWreturnNo { get; set; } + + /// <summary> + /// 閫�鏂欏憳宸� + /// </summary> + [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "閫�鏂欏憳宸�")] + public string EmployeeName { get; set; } + + /// <summary> + /// 閫�鏂欐�婚暱搴� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閫�鏂欐�婚暱搴�")] + public decimal TotalPaperWreturnLength { get; set; } + + /// <summary> + /// 閫�鏂欏崟鐘舵�� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閫�鏂欏崟鍏ュ簱鐘舵��")] + public int ReturnOrderStatus { get; set; } + + /// <summary> + /// 閫�鏂欐棩鏈� + /// </summary> + [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "閫�鏂欐棩鏈�")] + public DateTime WreturnDate { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")] + public string Remark { get; set; } + + /// <summary> + /// 閲囪喘鍒楄〃 + /// </summary> + [Navigate(NavigateType.OneToMany, nameof(Dt_ReturnBSTOrderDetail.ReturnBSTOrderId), nameof(Id))] + public List<Dt_ReturnBSTOrderDetail> Details { get; set; } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnBSTOrderDetail.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnBSTOrderDetail.cs" new file mode 100644 index 0000000..cadc975 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnBSTOrderDetail.cs" @@ -0,0 +1,101 @@ +锘縰sing SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.DB.Models; + +namespace WIDESEA_Model.Models +{ + /// <summary> + /// BST閫�鏂欏崟鏄庣粏 + /// </summary> + [SugarTable(nameof(Dt_ReturnBSTOrderDetail), "BST閫�鏂欏崟鏄庣粏")] + public class Dt_ReturnBSTOrderDetail : BaseEntity + { + /// <summary> + /// 涓婚敭 + /// </summary> + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")] + public int Id { get; set; } + + /// <summary> + /// 澶磋〃涓婚敭 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "澶磋〃涓婚敭")] + public int ReturnBSTOrderId { get; set; } + + /// <summary> + /// 閫�鏂欐潵婧怚D + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閫�鏂欐潵婧怚D")] + public int PaperWreturnId { get; set; } + + /// <summary> + /// 鐗╂枡鏉ユ簮ID(涓婃父) + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "鐗╂枡鏉ユ簮ID(涓婃父)")] + public int MaterialId { get; set; } + + /// <summary> + /// 鐗╂枡鏉$爜 + /// </summary> + [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡鏉$爜")] + public string Barcode { get; set; } + + /// <summary> + /// 鐗╂枡缂栧彿 + /// </summary> + [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")] + public string MaterialNo { get; set; } + + /// <summary> + /// 鎵规搴忓垪鍙� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "鎵规搴忓垪鍙�")] + public int SeqNo { get; set; } + + /// <summary> + /// 骞呭 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "骞呭")] + public decimal MaterialWide { get; set; } + + /// <summary> + /// 鐩村緞 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "鐩村緞")] + public decimal MaterialThick { get; set; } + + /// <summary> + /// 閫�鏂欓暱搴� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閫�鏂欓暱搴�")] + public decimal ProcurementLength { get; set; } + + /// <summary> + /// 閫�璐ф暟閲� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閫�璐ф暟閲�")] + public decimal Qty { get; set; } + + /// <summary> + /// 閫�鏂欏崟鏄庣粏鐘舵�� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閫�鏂欏崟鏄庣粏鐘舵��")] + public int ReturnBSTOrderDetailStatus { get; set; } + + /// <summary> + /// 鍗曚綅 + /// </summary> + [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鍗曚綅")] + public string Unit { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")] + public string MaterielName { get; set; } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_OutboundService/OutBSTOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_OutboundService/OutBSTOrderService.cs" index 4f27480..988d3c5 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_OutboundService/OutBSTOrderService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_OutboundService/OutBSTOrderService.cs" @@ -5,12 +5,13 @@ using System.Text; using System.Threading.Tasks; using WIDESEA_Common.MaterielEnum; +using WIDESEA_Common.OrderEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; -using WIDESEA_DTO.Basic; +using WIDESEA_DTO.ERP; using WIDESEA_IBasicRepository; using WIDESEA_IOutboundRepository; using WIDESEA_IOutboundService; @@ -24,12 +25,14 @@ private readonly IBasicRepository _basicRepository; private readonly IMapper _mapper; private readonly IUnitOfWorkManage _unitOfWorkManage; + private readonly IOutBSTOrderDetailRepository _outBSTOrderDetailRepository; - public OutBSTOrderService(IOutBSTOrderRepository BaseDal,IBasicRepository basicRepository,IMapper mapper,IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) + public OutBSTOrderService(IOutBSTOrderRepository BaseDal,IBasicRepository basicRepository,IMapper mapper,IUnitOfWorkManage unitOfWorkManage,IOutBSTOrderDetailRepository outBSTOrderDetailRepository) : base(BaseDal) { _basicRepository = basicRepository; _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; + _outBSTOrderDetailRepository = outBSTOrderDetailRepository; } /// <summary> /// 娣诲姞鍑哄簱鎺掔▼淇℃伅 @@ -53,6 +56,7 @@ List<Dt_OutBSTOrder> outBSTAddOrders = new List<Dt_OutBSTOrder>(); List<Dt_OutBSTOrder> outBSTUpOrders = new List<Dt_OutBSTOrder>(); List<Dt_OutBSTOrder> outBSTDelOrders = new List<Dt_OutBSTOrder>(); + List<Dt_OutBSTOrderDetail> outBSTOrderDetailsDel = new List<Dt_OutBSTOrderDetail>(); //鏂板 if (outOrderDTOsAdd.Count>0) { @@ -62,8 +66,8 @@ { return content.Error($"鍑哄簱鎺掔▼Id{nameof(BSTOutOrderDTO.BoardMpsId)}:{ExistAddOutOrder.BoardMpsId}宸插瓨鍦�"); } - List<BstBoardMpsDetailItem> bstBoardMpsDetailItems = outOrderDTOsAdd.SelectMany(x => x.BstBoardMpsDetails).ToList(); //鍒ゆ柇鏄惁瀛樺湪鐗╂枡 + List<BstBoardMpsDetailItem> bstBoardMpsDetailItems = outOrderDTOsAdd.SelectMany(x => x.BstBoardMpsDetails).ToList(); BstBoardMpsDetailItem? bstBoardMpsDetailItem = bstBoardMpsDetailItems.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId)); if (bstBoardMpsDetailItem != null) { @@ -71,6 +75,10 @@ } foreach (var item in outOrderDTOsAdd) { + if (outOrderDTOsUpdate.FirstOrDefault(x => x.BoardMpsId == item.BoardMpsId) != null) + { + continue; + } List<Dt_OutBSTOrderDetail> bSTOrderDetails = item.BstBoardMpsDetails.Select(x => _mapper.Map<Dt_OutBSTOrderDetail>(x)).ToList(); Dt_OutBSTOrder outBSTOrder = _mapper.Map<Dt_OutBSTOrder>(item); outBSTOrder.Details=bSTOrderDetails; @@ -80,16 +88,38 @@ //淇敼 if (outOrderDTOsUpdate.Count > 0) { - List<Dt_OutBSTOrder>? ExistUpdateoutBSTOrders = OldoutBSTOrders.Where(x => outOrderDTOsUpdate.Select(x => x.BoardMpsId).Contains(x.BoardMpsId)).ToList(); - //鏇存柊鐨勫崟鎹槸鍚﹀瓨鍦� - if (ExistUpdateoutBSTOrders.Count == outOrderDTOsUpdate.Count) + List<Dt_OutBSTOrder>? ExistUpdateOutBSTOrders = OldoutBSTOrders.Where(x => outOrderDTOsUpdate.Select(x => x.BoardMpsId).Contains(x.BoardMpsId)).ToList(); + + foreach (var item in outOrderDTOsUpdate) { - - } - else - { - BSTOutOrderDTO? bSTOutOrderDTO = outOrderDTOsUpdate.FirstOrDefault(x => !ExistUpdateoutBSTOrders.Select(x => x.BoardMpsId).Contains(x.BoardMpsId)); - return content.Error($"鏈壘鍒版寚瀹氱敓浜ф帓绋嬪崟Id{nameof(BSTOutOrderDTO.BoardMpsId)}:{bSTOutOrderDTO?.BoardMpsId}"); + Dt_OutBSTOrder? outBSTOrderUpdate = ExistUpdateOutBSTOrders.FirstOrDefault(x=>x.BoardMpsId==item.BoardMpsId); + //濡傛灉璁㈠崟宸插瓨鍦ㄥ垯杩涜鏇存敼 + if (outBSTOrderUpdate != null) + { + if (outBSTOrderUpdate.OutBSTOrderStatus != OutOrderStatusEnum.鏈紑濮�.ObjToInt()) + { + return content.Error($"閲囪喘{nameof(outBSTOrderUpdate.BoardMpsId)}:{outBSTOrderUpdate.BoardMpsId}璁㈠崟鍑哄簱涓紝涓嶅彲鏇存敼"); + } + //鏇存柊鏁版嵁 + outBSTOrderDetailsDel.AddRange(outBSTOrderUpdate.Details); + List<Dt_OutBSTOrderDetail> bSTOrderDetails = item.BstBoardMpsDetails.Select(x => _mapper.Map<Dt_OutBSTOrderDetail>(x)).ToList(); + bSTOrderDetails.ForEach(x => + { + x.OutBSTOrderId = outBSTOrderUpdate.Id; + }); + outBSTOrderUpdate.Details = bSTOrderDetails; + outBSTOrderUpdate.BoardMpsId= item.BoardMpsId; + outBSTOrderUpdate.BoardMpsNo= item.BoardMpsNo; + outBSTOrderUpdate.ProductionDate = DateTimeOffset.FromUnixTimeMilliseconds(item.ProductionDate).DateTime; + outBSTUpOrders.Add(outBSTOrderUpdate); + } + else//濡傛灉涓嶅瓨鍦ㄥ垯杩涜鏂板 + { + List<Dt_OutBSTOrderDetail> bSTOrderDetails = item.BstBoardMpsDetails.Select(x => _mapper.Map<Dt_OutBSTOrderDetail>(x)).ToList(); + Dt_OutBSTOrder outBSTOrder = _mapper.Map<Dt_OutBSTOrder>(item); + outBSTOrder.Details = bSTOrderDetails; + outBSTAddOrders.Add(outBSTOrder); + } } } //鍒犻櫎 @@ -109,6 +139,8 @@ } _unitOfWorkManage.BeginTran(); BaseDal.Db.InsertNav(outBSTAddOrders).Include(x => x.Details).ExecuteCommand(); + _outBSTOrderDetailRepository.DeleteData(outBSTOrderDetailsDel); + BaseDal.Db.UpdateNav(outBSTUpOrders).Include(x => x.Details).ExecuteCommand(); _unitOfWorkManage.CommitTran(); content.OK("鎺ユ敹鎴愬姛"); } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs" index 296426f..b4cc9c5 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs" @@ -71,7 +71,7 @@ var weight = saveModel.MainData["weight"].ObjToInt(); //骞呭 var wide = saveModel.MainData["wide"].ObjToInt(); - Dt_MaterielInfo? materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode== materSn); + Dt_MaterielInfo? materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materSn); if (materielInfo==null) { return content.Error("鏈壘鍒扮墿鏂欎俊鎭�"); 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 4c3a92f..ed643cb 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" @@ -277,28 +277,59 @@ } string roadwayNo = ""; - //闄愬埗鐩村緞 - if (stockInfo.MaterielThickness > 800) + + if (stockInfo.MaterielInvOrgId==MaterielInvOrgEnum.鏂板巶.ObjToInt()) { - //鑾峰彇鍒嗛厤 - 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")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList(); - if (stockInfo.MaterielWide > 2200) + //闄愬埗鐩村緞 + if (stockInfo.MaterielThickness <= 1200) { - 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) + //鑾峰彇鍒嗛厤 + 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) { - item.Count -= count.Count; + 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 = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; } + else + { + //闄愬埗鐩村緞 + if (stockInfo.MaterielThickness >= 800 && stockInfo.MaterielThickness <= 1500) + { + //鑾峰彇鍒嗛厤 + 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(); + if (stockInfo.MaterielWide > 2200) + { + 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 ?? ""; + } + } + return !string.IsNullOrEmpty(roadwayNo) ? (roadwayNo) : throw new Exception("鏈壘鍒板彲鍒嗛厤宸烽亾"); } catch (Exception ex) @@ -316,7 +347,7 @@ try { Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); - if (warehouse.WarehouseCode == WarehouseEnum.LLDCP.ToString()) //鎴愬搧瀹屾垚 + if (warehouse.WarehouseCode == WarehouseEnum.LLDCP.ToString() || warehouse.WarehouseCode == WarehouseEnum.LLDFL.ToString()) //鎴愬搧/杈呮枡瀹屾垚 { Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); if (locationInfoEnd == null) @@ -396,21 +427,23 @@ _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.鑷姩瀹屾垚); - //if (stockInfo.MaterielInvOrgId==MaterielInvOrgEnum.鑰佸巶.ObjToInt()) - //{ - // int Qty = Convert.ToInt32(stockInfo.MaterielWeight); - // BSTPurchaseUpModel bSTPurchaseUpModel = new BSTPurchaseUpModel() - // { - // Barcode = stockInfo.PalletCode, - // BarcodeQty = Qty, - // Rfid = stockInfo.PalletCode - // }; - // BSTResponse bSTResponse = _invokeERPService.BSTPurchaseUp(bSTPurchaseUpModel).DeserializeObject<BSTResponse>(); - // if (bSTResponse.Code==500) - // { - // throw new Exception($"BST涓�鏈烢RP鍚屾鍏ュ簱淇℃伅澶辫触,閿欒淇℃伅{bSTResponse.Msg}"); - // } - //} + //涓婃姤鑰佸巶ERP + if (stockInfo.MaterielInvOrgId == MaterielInvOrgEnum.鑰佸巶.ObjToInt()) + { + int Qty = Convert.ToInt32(stockInfo.MaterielWeight); + BSTPurchaseUpModel bSTPurchaseUpModel = new BSTPurchaseUpModel() + { + Barcode = stockInfo.PalletCode, + BarcodeQty = Qty, + Rfid = stockInfo.PalletCode, + RfidUpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + }; + BSTResponse bSTResponse = _invokeERPService.BSTPurchaseUp(bSTPurchaseUpModel).DeserializeObject<BSTResponse>(); + if (bSTResponse.Code == 500) + { + throw new Exception($"BST涓�鏈烢RP鍚屾鍏ュ簱淇℃伅澶辫触,閿欒淇℃伅锛歿bSTResponse.Msg}"); + } + } _unitOfWorkManage.CommitTran(); } return content.OK(); @@ -430,16 +463,11 @@ { 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.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> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == WarehouseEnum.LLDCP.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 + List<LocationCount> useLocationCounts = Db.Queryable<Dt_Task>().Where(x => (x.WarehouseId == WarehouseEnum.LLDCP.ObjToInt()|| x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt()) && 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) @@ -450,6 +478,7 @@ item.Count -= count.Count; } } + //閫氳繃鍙敤璐т綅鏁伴噺鎺掑簭锛屾渶澶氱殑浼樺厛鍒嗛厤 roadwayNo = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; return !string.IsNullOrEmpty(roadwayNo) ? (roadwayNo) : throw new Exception("鏈壘鍒板彲鍒嗛厤宸烽亾"); } @@ -600,15 +629,13 @@ //鍒嗛厤宸烽亾 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, + WarehouseId= WarehouseEnum.LLDFL.ObjToInt(), StockStatus=StockStatusEmun.MES绌烘墭閫�搴�.ObjToInt() }; @@ -623,7 +650,7 @@ TargetAddress = "", TaskType = TaskTypeEnum.EmptyProductBack.ObjToInt(), TaskStatus = TaskStatusEnum.New.ObjToInt(), - WarehouseId = warehouse.WarehouseId, + WarehouseId = WarehouseEnum.LLDFL.ObjToInt(), PalletType = 1 }; _unitOfWorkManage.BeginTran(); @@ -660,7 +687,8 @@ //{ // return content.Error($"妗嗙爜鏍煎紡閿欒{barCode}"); //} - Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == matCode && x.MaterielInvOrgId == MaterielInvOrgEnum.鏂板巶.ObjToInt() && x.WarehouseId==WarehouseEnum.LLDCP.ObjToInt()); + //鑾峰彇鐗╂枡 + Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == matCode && x.MaterielInvOrgId == MaterielInvOrgEnum.鏂板巶.ObjToInt() && (x.WarehouseId==WarehouseEnum.LLDCP.ObjToInt() || x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt())); if (materielInfo == null) { return content.Error($"鏈壘鍒扮墿鏂欎俊鎭瘂matCode}"); @@ -690,7 +718,7 @@ string roadWay = AssignCPRoadwayNo(); //鑾峰彇鎴愬搧搴� - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.LLDCP.ToString()); + WarehouseEnum warehouseEnum = materielInfo.MaterielSourceType == MaterielTypeEnum.鎴愬搧.ObjToInt() ? WarehouseEnum.LLDCP : WarehouseEnum.LLDFL; Dt_ProStockInfoDetail proStockInfoDetail = new Dt_ProStockInfoDetail() { ProductCode = materielInfo.MaterielCode, @@ -706,7 +734,7 @@ ProStockAttribute = materielInfo.MaterielSourceType, PalletType = 1, LocationCode = "", - WarehouseId = warehouse.WarehouseId, + WarehouseId = warehouseEnum.ObjToInt(), StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt(), proStockInfoDetails = new List<Dt_ProStockInfoDetail> { proStockInfoDetail } }; @@ -722,7 +750,7 @@ TargetAddress = "", TaskType = TaskTypeEnum.Inbound.ObjToInt(), TaskStatus = TaskStatusEnum.New.ObjToInt(), - WarehouseId = warehouse.WarehouseId, + WarehouseId = warehouseEnum.ObjToInt(), PalletType = 1 }; _unitOfWorkManage.BeginTran(); diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs" index 3c00276..ae4290d 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs" @@ -87,7 +87,7 @@ try { Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); - if (warehouse.WarehouseCode == WarehouseEnum.LLDCP.ToString()) //鎴愬搧瀹屾垚 + if (warehouse.WarehouseCode == WarehouseEnum.LLDCP.ToString() || warehouse.WarehouseCode == WarehouseEnum.LLDFL.ToString()) //鎴愬搧瀹屾垚 { Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); if (locationInfoStart == null) @@ -189,7 +189,7 @@ } return tasks; } - public List<Dt_Task> GetTasks(List<Dt_ProStockInfo> stockInfos, TaskTypeEnum taskType) + public List<Dt_Task> GetTasks(List<Dt_ProStockInfo> stockInfos, TaskTypeEnum taskType,List<Dt_LocationInfo> locationInfos) { List<Dt_Task> tasks = new List<Dt_Task>(); for (int i = 0; i < stockInfos.Count; i++) @@ -198,7 +198,7 @@ if (stockInfo != null) { - Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode); + Dt_LocationInfo locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == stockInfo.LocationCode); if (!tasks.Exists(x => x.PalletCode == stockInfo.PalletCode)) { Dt_Task task = new() @@ -226,37 +226,48 @@ /// <summary> /// 鎴愬搧鍑哄簱 /// </summary> - /// <param name="Count"></param> /// <returns></returns> - public WebResponseContent RequestCPWMSTaskOut(int Count) + public WebResponseContent RequestCPWMSTaskOut(string materialCode,int Count, int targetId) { WebResponseContent content = new WebResponseContent(); try { - List<Dt_AGVStationInfo> aGVStationInfos = _agvStationInfoRepository.QueryData(x=>x.StationArea==AGVStationAreaEnum.AreaA.ObjToInt() && x.IsOccupied==WhetherEnum.False.ObjToInt()); + List<Dt_AGVStationInfo> aGVStationInfos = _agvStationInfoRepository.QueryData(x=>x.StationArea == targetId && x.IsOccupied==WhetherEnum.False.ObjToInt()); if (aGVStationInfos.Count< Count) { return content.Error($"鍙敤缂撳瓨鏁颁笉瓒�"); } - List<Dt_ProStockInfo> stockInfos = _stockRepository.ProStockInfoRepository.QueryData(x => x.ProStockAttribute == ProStockAttributeEnum.鎴愬搧.ObjToInt() && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()).OrderBy(x=>x.CreateDate).Take(Count).ToList(); - List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => stockInfos.Select(x => x.LocationCode).Contains(x.LocationCode)); - if (stockInfos.Count < Count) + //鑾峰彇璐т綅 + List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDCP.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt()); + + //鑾峰彇鍙敤搴撳瓨 + List<Dt_ProStockInfo> stockInfos = BaseDal.Db.Queryable<Dt_ProStockInfo>().Where(x => locationInfos.Select(x => x.LocationCode).Contains(x.LocationCode) && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()).Includes(x => x.proStockInfoDetails) + .Where(x => x.proStockInfoDetails + .Any(v => + v.ProductCode == materialCode) + ).ToList(); + + if (stockInfos.Count!=Count) { - return content.Error($"搴撳瓨鏁伴噺涓嶈冻"); + return content.Error($"搴撳瓨{materialCode}鏁伴噺涓嶈冻"); } + List<Dt_LocationInfo> AssignLocations = new List<Dt_LocationInfo>(); foreach (var item in stockInfos) { Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == item.LocationCode); - if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + if (locationInfo != null) { + AssignLocations.Add(locationInfo); item.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); } - else - { - return content.Error($"璐т綅鐘舵�佷笉姝g‘"); - } } - List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OutProduct); + TaskTypeEnum typeEnum = targetId switch + { + (int)AGVStationAreaEnum.AreaA => TaskTypeEnum.OutProduct, + (int)AGVStationAreaEnum.AreaC => TaskTypeEnum.OutWFB, + _ => throw new Exception("鏈壘鍒板搴斾换鍔�") + }; + List<Dt_Task> tasks = GetTasks(stockInfos, typeEnum, AssignLocations); if (tasks == null || tasks.Count <= 0) { return content.Error($"鐢熸垚浠诲姟澶辫触"); @@ -272,9 +283,9 @@ _stockRepository.ProStockInfoRepository.UpdateData(stockInfos); _agvStationInfoRepository.UpdateData(aGVStationInfos); //鏇存柊璐т綅鐘舵�� - _basicRepository.LocationInfoRepository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock); + _basicRepository.LocationInfoRepository.UpdateLocationStatus(AssignLocations, LocationStatusEnum.Lock); //鍔犲叆璐т綅鍙樺姩璁板綍 - _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList()); + _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(AssignLocations, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList()); //鏂板缓浠诲姟 BaseDal.AddData(tasks); _unitOfWorkManage.CommitTran(); @@ -292,65 +303,65 @@ /// </summary> /// <param name="Count"></param> /// <returns></returns> - public WebResponseContent RequestWFBWMSTaskOut(int Count) - { - WebResponseContent content = new WebResponseContent(); - try - { - List<Dt_AGVStationInfo> aGVStationInfos = _agvStationInfoRepository.QueryData(x => x.StationArea == AGVStationAreaEnum.AreaC.ObjToInt() && x.IsOccupied == WhetherEnum.False.ObjToInt()); - if (aGVStationInfos.Count < Count) - { - return content.Error($"鍙敤缂撳瓨鏁颁笉瓒�"); - } - List<Dt_ProStockInfo> stockInfos = _stockRepository.ProStockInfoRepository.QueryData(x => x.ProStockAttribute == ProStockAttributeEnum.杈呮枡澶囦欢.ObjToInt() && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()).OrderBy(x => x.CreateDate).Take(Count).ToList(); - List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => stockInfos.Select(x => x.LocationCode).Contains(x.LocationCode)); - if (stockInfos.Count < Count) - { - return content.Error($"搴撳瓨鏁伴噺涓嶈冻"); - } - foreach (var item in stockInfos) - { - Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == item.LocationCode); - if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) - { - item.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); - } - else - { - return content.Error($"璐т綅鐘舵�佷笉姝g‘"); - } - } - List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OutWFB); - if (tasks == null || tasks.Count <= 0) - { - return content.Error($"鐢熸垚浠诲姟澶辫触"); - } - for (int i = 0; i < tasks.Count; i++) - { - aGVStationInfos[i].IsOccupied = WhetherEnum.True.ObjToInt(); - tasks[i].TargetAddress = aGVStationInfos[i].AGVStationCode; - } - //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅 - _unitOfWorkManage.BeginTran(); - //鏇存柊搴撳瓨鐘舵�� - _stockRepository.ProStockInfoRepository.UpdateData(stockInfos); - _agvStationInfoRepository.UpdateData(aGVStationInfos); - //鏇存柊璐т綅鐘舵�� - _basicRepository.LocationInfoRepository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock); - //鍔犲叆璐т綅鍙樺姩璁板綍 - _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList()); - //鏂板缓浠诲姟 - BaseDal.AddData(tasks); - _unitOfWorkManage.CommitTran(); - PushTasksToWCS(tasks); - content.OK(); - } - catch (Exception ex) - { - content.Error(ex.Message); - } - return content; - } + //public WebResponseContent RequestWFBWMSTaskOut(int Count) + //{ + // WebResponseContent content = new WebResponseContent(); + // try + // { + // List<Dt_AGVStationInfo> aGVStationInfos = _agvStationInfoRepository.QueryData(x => x.StationArea == AGVStationAreaEnum.AreaC.ObjToInt() && x.IsOccupied == WhetherEnum.False.ObjToInt()); + // if (aGVStationInfos.Count < Count) + // { + // return content.Error($"鍙敤缂撳瓨鏁颁笉瓒�"); + // } + // List<Dt_ProStockInfo> stockInfos = _stockRepository.ProStockInfoRepository.QueryData(x => x.ProStockAttribute == ProStockAttributeEnum.杈呮枡澶囦欢.ObjToInt() && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()).OrderBy(x => x.CreateDate).Take(Count).ToList(); + // List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => stockInfos.Select(x => x.LocationCode).Contains(x.LocationCode)); + // if (stockInfos.Count < Count) + // { + // return content.Error($"搴撳瓨鏁伴噺涓嶈冻"); + // } + // foreach (var item in stockInfos) + // { + // Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == item.LocationCode); + // if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + // { + // item.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); + // } + // else + // { + // return content.Error($"璐т綅鐘舵�佷笉姝g‘"); + // } + // } + // List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OutWFB); + // if (tasks == null || tasks.Count <= 0) + // { + // return content.Error($"鐢熸垚浠诲姟澶辫触"); + // } + // for (int i = 0; i < tasks.Count; i++) + // { + // aGVStationInfos[i].IsOccupied = WhetherEnum.True.ObjToInt(); + // tasks[i].TargetAddress = aGVStationInfos[i].AGVStationCode; + // } + // //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅 + // _unitOfWorkManage.BeginTran(); + // //鏇存柊搴撳瓨鐘舵�� + // _stockRepository.ProStockInfoRepository.UpdateData(stockInfos); + // _agvStationInfoRepository.UpdateData(aGVStationInfos); + // //鏇存柊璐т綅鐘舵�� + // _basicRepository.LocationInfoRepository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock); + // //鍔犲叆璐т綅鍙樺姩璁板綍 + // _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList()); + // //鏂板缓浠诲姟 + // BaseDal.AddData(tasks); + // _unitOfWorkManage.CommitTran(); + // PushTasksToWCS(tasks); + // content.OK(); + // } + // catch (Exception ex) + // { + // content.Error(ex.Message); + // } + // return content; + //} /// <summary> /// 鍘熸枡鍑哄簱浠诲姟 /// </summary> @@ -382,6 +393,7 @@ item.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); } } + //鍖哄垎浠诲姟 TaskTypeEnum taskTypeEnum = new(); if (stockInfos.FirstOrDefault()?.MaterielInvOrgId==MaterielInvOrgEnum.鑰佸巶.ObjToInt()) { @@ -438,7 +450,7 @@ List<Dt_OutBSTOrderDetail> outBSTOrderDetails = new List<Dt_OutBSTOrderDetail>(); List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>(); List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>(); - + //鐢熸垚浠诲姟銆佸簱瀛樼瓑淇℃伅 (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_OutBSTOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = OutboundTaskDataHandle(keys); if (result.Item2 != null && result.Item2.Count > 0) { @@ -460,7 +472,7 @@ { tasks.AddRange(result.Item1); } - + //澶勭悊鍑哄簱鏁版嵁 return GenerateOutboundTaskDataUpdate(tasks, stockInfos, outBSTOrderDetails, outStockLockInfos, locationInfos); } catch (Exception ex) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/ERP/ErpBSTController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/ERP/ErpBSTController.cs" index a723b67..da8da61 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/ERP/ErpBSTController.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/ERP/ErpBSTController.cs" @@ -33,13 +33,15 @@ private readonly IInvokeERPService _invokeERPService; private readonly IPurchaseBSTOrderService _purchaseBSTOrderService; private readonly IOutBSTOrderService _outBSTOrderService; + private readonly IReturnBSTOrderService _returnBSTOrderService; - public ErpBSTController(IBasicService basicService, IInvokeERPService invokeERPService,IPurchaseBSTOrderService purchaseBSTOrderService,IOutBSTOrderService outBSTOrderService) + public ErpBSTController(IBasicService basicService, IInvokeERPService invokeERPService,IPurchaseBSTOrderService purchaseBSTOrderService,IOutBSTOrderService outBSTOrderService,IReturnBSTOrderService returnBSTOrderService) { _basicService = basicService; _invokeERPService = invokeERPService; _purchaseBSTOrderService = purchaseBSTOrderService; _outBSTOrderService = outBSTOrderService; + _returnBSTOrderService = returnBSTOrderService; } /// <summary> /// 娣诲姞鑰佸巶鐗╂枡 @@ -53,7 +55,7 @@ } /// <summary> - /// 娣诲姞鑰佸巶渚涘簲鍟嗕俊鎭� + /// 鎺ユ敹鑰佸巶渚涘簲鍟嗕俊鎭� /// </summary> /// <returns></returns> [HttpPost, HttpGet, Route("ReceiveSupplier"), AllowAnonymous] @@ -64,7 +66,7 @@ } /// <summary> - /// 娣诲姞鑰佸巶閲囪喘鍗曚俊鎭� + /// 鎺ユ敹鑰佸巶閲囪喘鍗曚俊鎭� /// </summary> /// <returns></returns> [HttpPost, HttpGet, Route("ReceivePurchaseOrder"), AllowAnonymous] @@ -74,7 +76,7 @@ } /// <summary> - /// 娣诲姞鍑哄簱鎺掔▼淇℃伅 + /// 鎺ユ敹鍑哄簱鎺掔▼淇℃伅 /// </summary> /// <returns></returns> [HttpPost, HttpGet, Route("ReceiveOutOrder"), AllowAnonymous] @@ -82,5 +84,32 @@ { return _outBSTOrderService.AddOutBSTOrder(bSTOutOrderDTOs); } + /// <summary> + /// 鎺ユ敹鍗氭�濋�氶鏂欎俊鎭� + /// </summary> + /// <returns></returns> + [HttpPost, HttpGet, Route("ReceivePicking"), AllowAnonymous] + public WebResponseContent ReceivePicking() + { + return WebResponseContent.Instance.Error("鏈壘鍒板搴斿簱瀛樹俊鎭�") ; + } + /// <summary> + /// 鎺ユ敹鍗氭�濋�氶��鏂欎俊鎭� + /// </summary> + /// <returns></returns> + [HttpPost, HttpGet, Route("ReceiveReturnOrder"), AllowAnonymous] + public WebResponseContent ReceiveReturnOrder([FromBody] List<BSTReturnOrderDTO> bSTReturnOrderDTOs) + { + return _returnBSTOrderService.ReceiveReturnOrder(bSTReturnOrderDTOs); + } + /// <summary> + /// 鎺ユ敹鍗氭�濋�氱洏鐐逛俊鎭� + /// </summary> + /// <returns></returns> + [HttpPost, HttpGet, Route("ReceiveStockCheckOrder"), AllowAnonymous] + public WebResponseContent ReceiveStockCheckOrder([FromBody] List<BSTOutOrderDTO> bSTOutOrderDTOs) + { + return _outBSTOrderService.AddOutBSTOrder(bSTOutOrderDTOs); + } } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReturnBSTOrderController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReturnBSTOrderController.cs" new file mode 100644 index 0000000..e01a496 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReturnBSTOrderController.cs" @@ -0,0 +1,19 @@ +锘縰sing Microsoft.AspNetCore.Mvc; +using WIDESEA_Core.BaseController; +using WIDESEA_IInboundService; +using WIDESEA_Model.Models; + +namespace WIDESEA_WMSServer.Controllers.Inbound +{ + /// <summary> + /// BST閫�鏂欏崟 + /// </summary> + [Route("api/ReturnBSTOrder")] + [ApiController] + public class ReturnBSTOrderController : ApiBaseController<IReturnBSTOrderService, Dt_ReturnBSTOrder> + { + public ReturnBSTOrderController(IReturnBSTOrderService service) : base(service) + { + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReturnBSTOrderDetailController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReturnBSTOrderDetailController.cs" new file mode 100644 index 0000000..43f76d8 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReturnBSTOrderDetailController.cs" @@ -0,0 +1,19 @@ +锘縰sing Microsoft.AspNetCore.Mvc; +using WIDESEA_Core.BaseController; +using WIDESEA_IInboundService; +using WIDESEA_Model.Models; + +namespace WIDESEA_WMSServer.Controllers.Inbound +{ + /// <summary> + /// BST閫�鏂欏崟鏄庣粏 + /// </summary> + [Route("api/ReturnBSTOrderDetail")] + [ApiController] + public class ReturnBSTOrderDetailController : ApiBaseController<IReturnBSTOrderDetailService, Dt_ReturnBSTOrderDetail> + { + public ReturnBSTOrderDetailController(IReturnBSTOrderDetailService service) : base(service) + { + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" index f6446dc..e3ea19a 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" @@ -210,23 +210,37 @@ /// <summary> /// 鎴愬搧鍑哄簱浠诲姟璇锋眰 + /// <param name="targetId"> + /// 1 鏈堝彴鍖�<br/> + /// 2 鍏ュ簱鍖�<br/> + /// 3 缁囧竷鍖�<br/> + /// 4 娣嬭啘鍖�<br/> + /// 5 鏆傚瓨鍖�<br/> + /// 6 鍗板埛鍖�<br/> + /// 7 鍐插垏鍖�<br/> + /// 8 鍘熸枡鍖�<br/> + /// 9 绾歌鍖�<br/> + /// 10 甯冭鍖�<br/> + /// 11 绾告澂鍖�<br/> + /// 12 闆惧寲鍖�<br/> + /// </param> /// </summary> /// <returns></returns> [HttpPost, HttpGet, Route("RequestCPWMSTaskOut"), AllowAnonymous] - public WebResponseContent RequestCPWMSTaskOut(int Count) + public WebResponseContent RequestCPWMSTaskOut(string materialCode,int Count, int targetId) { - return Service.RequestCPWMSTaskOut(Count); + return Service.RequestCPWMSTaskOut(materialCode, Count, targetId); } - /// <summary> - /// 鏃犵汉甯冨嚭搴� - /// </summary> - /// <returns></returns> - [HttpPost, HttpGet, Route("RequestWFBWMSTaskOut"), AllowAnonymous] - public WebResponseContent RequestWFBWMSTaskOut(int Count) - { - return Service.RequestWFBWMSTaskOut(Count); - } + ///// <summary> + ///// 鏃犵汉甯冨嚭搴� + ///// </summary> + ///// <returns></returns> + //[HttpPost, HttpGet, Route("RequestWFBWMSTaskOut"), AllowAnonymous] + //public WebResponseContent RequestWFBWMSTaskOut(int Count) + //{ + // return Service.RequestWFBWMSTaskOut(Count); + //} /// <summary> /// 鍘熸枡鍑哄簱浠诲姟 @@ -292,8 +306,6 @@ /// <summary> /// 鍒涘缓鍘熺焊鐢熶骇鎺掔▼鍑哄簱浠诲姟 /// </summary> - /// <param name="saveModel"></param> - /// <returns></returns> [HttpPost, HttpGet, Route("CreateBSTOutboundTasks"), AllowAnonymous] public WebResponseContent CreateBSTOutboundTasks([FromBody] int[] keys) { diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Filter/CustomProfile.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Filter/CustomProfile.cs" index 2f6f175..1d34367 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Filter/CustomProfile.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Filter/CustomProfile.cs" @@ -40,6 +40,9 @@ //BST鍑哄簱鎺掔▼瀹炰綋杞崲 CreateMap<BSTOutOrderDTO, Dt_OutBSTOrder>().ForMember(x => x.OutBSTOrderStatus, b => b.MapFrom(b => OutOrderStatusEnum.鏈紑濮�.ObjToInt())).ForMember(x => x.ProductionDate, b => b.MapFrom(b => DateTimeOffset.FromUnixTimeMilliseconds(b.ProductionDate).DateTime)).ForMember(x => x.WarehouseId, b => b.MapFrom(b => WarehouseEnum.LLDYL.ObjToInt())); CreateMap<BstBoardMpsDetailItem, Dt_OutBSTOrderDetail>().ForMember(x => x.OutBSTOrderDetailStatus, b => b.MapFrom(b => OutOrderStatusEnum.鏈紑濮�.ObjToInt())); + //BST閫�鏂欏崟瀹炰綋杞崲 + CreateMap<BSTReturnOrderDTO, Dt_ReturnBSTOrder>().ForMember(x => x.ReturnOrderStatus, b => b.MapFrom(b => InOrderStatusEnum.鏈紑濮�.ObjToInt())).ForMember(x => x.WreturnDate, b => b.MapFrom(b => DateTimeOffset.FromUnixTimeMilliseconds(b.WreturnDate).DateTime)).ForMember(x => x.WarehouseId, b => b.MapFrom(b => WarehouseEnum.LLDYL.ObjToInt())); + CreateMap<BSTReturnOrderDTOItem, Dt_ReturnBSTOrderDetail>().ForMember(x => x.ReturnBSTOrderDetailStatus, b => b.MapFrom(b => OutOrderStatusEnum.鏈紑濮�.ObjToInt())).ForMember(x => x.MaterialWide, b => b.MapFrom(b => b.W)).ForMember(x => x.MaterialThick, b => b.MapFrom(b => b.Thick)); } } } diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\345\215\232\346\200\235\351\200\232\345\210\251\346\213\223\346\216\245\345\217\243.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\345\215\232\346\200\235\351\200\232\345\210\251\346\213\223\346\216\245\345\217\243.xlsx" index ddfeacf..24d8651 100644 --- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\345\215\232\346\200\235\351\200\232\345\210\251\346\213\223\346\216\245\345\217\243.xlsx" +++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\345\215\232\346\200\235\351\200\232\345\210\251\346\213\223\346\216\245\345\217\243.xlsx" Binary files differ diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227MES\346\216\245\345\217\243.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227MES\346\216\245\345\217\243.xlsx" index 4c70f37..e2cb09c 100644 --- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227MES\346\216\245\345\217\243.xlsx" +++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227MES\346\216\245\345\217\243.xlsx" Binary files differ -- Gitblit v1.9.3