From 2929a5bd618ed09a11ee88309da5b9af9d2011c0 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期五, 10 一月 2025 20:53:54 +0800 Subject: [PATCH] 辅料仓逻辑优化 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 158 insertions(+), 21 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs" index 677a7a6..b291525 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs" @@ -1,49 +1,51 @@ -锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.Text; +锘縰sing HslCommunication.WebSocket; +using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using WIDESEA_Common.CommonEnum; using WIDESEA_Common.LocationEnum; +using WIDESEA_Common.StockEnum; using WIDESEA_Core; +using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; +using WIDESEA_Core.Const; +using WIDESEA_Core.DB; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; +using WIDESEA_Core.Seed; using WIDESEA_Core.Utilities; using WIDESEA_DTO.Basic; using WIDESEA_IBasicRepository; using WIDESEA_IBasicService; +using WIDESEA_IStockRepository; using WIDESEA_Model.Models; namespace WIDESEA_BasicService { public partial class LocationInfoService : ServiceBase<Dt_LocationInfo, ILocationInfoRepository>, ILocationInfoService { + private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IBasicRepository _basicRepository; + private readonly IStockInfoRepository _stockInfoRepository; public ILocationInfoRepository Repository => BaseDal; - public LocationInfoService(ILocationInfoRepository BaseDal, IBasicRepository basicRepository) : base(BaseDal) + public LocationInfoService(ILocationInfoRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IStockInfoRepository stockInfoRepository) : base(BaseDal) { + _unitOfWorkManage = unitOfWorkManage; _basicRepository = basicRepository; + _stockInfoRepository = stockInfoRepository; } - public override WebResponseContent AddData(SaveModel saveModel) - { - Dt_LocationInfo locationInfo = saveModel.MainData.DicToModel<Dt_LocationInfo>(); - return base.AddData(locationInfo); - } - - public override WebResponseContent UpdateData(SaveModel saveModel) - { - return base.UpdateData(saveModel); - } - - public override WebResponseContent DeleteData(object[] keys) - { - return base.DeleteData(keys); - } - + /// <summary> + /// 鎵归噺鍚敤璐т綅 + /// </summary> + /// <param name="keys">璐т綅涓婚敭鏁扮粍</param> + /// <returns></returns> public WebResponseContent LocationEnableStatus(int[] keys) { List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => keys.Contains(x.Id)); @@ -56,6 +58,11 @@ return WebResponseContent.Instance.OK(); } + /// <summary> + /// 鎵归噺绂佺敤璐т綅 + /// </summary> + /// <param name="keys">璐т綅涓婚敭鏁扮粍</param> + /// <returns></returns> public WebResponseContent LocationDisableStatus(int[] keys) { List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => keys.Contains(x.Id)); @@ -68,16 +75,146 @@ return WebResponseContent.Instance.OK(); } + /// <summary> + /// 鍗曚釜鍚敤璐т綅 + /// </summary> + /// <param name="key">璐т綅涓婚敭</param> + /// <returns></returns> public WebResponseContent LocationEnableStatus(int key) { return LocationEnableStatus(new int[] { key }); } + /// <summary> + /// 鍗曚釜绂佺敤璐т綅 + /// </summary> + /// <param name="key">璐т綅涓婚敭</param> + /// <returns></returns> public WebResponseContent LocationDisableStatus(int key) { return LocationDisableStatus(new int[] { key }); } + /// <summary> + /// 鑾峰彇杈呮枡浠撳簱瀛� + /// </summary> + /// <returns></returns> + public WebResponseContent GetContainerInfo() + { + try + { + SqlSugarClient TesugarClient = new SqlSugarClient(new ConnectionConfig + { + ConfigId = MainDb.CurrentDbConnId, + ConnectionString = AppSettings.Get("TeConnectionString").DecryptDES(AppSecret.DB), + IsAutoCloseConnection = true, + DbType = MainDb.DbType, + }); + + var ContainerInfos = TesugarClient.Queryable("ContainerInfo", "x").Where("WaId", "=", 8).Where("UpState", "=", 2).ToList(); + if (ContainerInfos != null) + { + List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>(); + foreach (var item in ContainerInfos) + { + dynamic ruleConfig = item; + int id = ruleConfig.CId;//涓婚敭 + string BoxNo = ruleConfig.BoxNo;//绠卞彿 + string LNo = ruleConfig.LNo;//璐т綅缂栧彿 + Dt_StockInfo stockInfo = new Dt_StockInfo() + { + LocationCode = LNo == "骞冲簱浣�" ? LNo : GetLocationCode(LNo), + PalletCode = BoxNo, + StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), + WarehouseId = 5, + PalletType = PalletTypeEnum.LargestPallet.ObjToInt(), + Details = new List<Dt_StockInfoDetail>() + }; + var ContainerDetailsInfos = TesugarClient.Queryable("ContainerDetailsInfo", "x").Where("CId", "=", id).ToList(); + if (ContainerDetailsInfos.Count < 1) stockInfo.PalletType = PalletTypeEnum.Empty.ObjToInt(); + foreach (var ContainerDetailsInfo in ContainerDetailsInfos) + { + dynamic ruleConfig1 = ContainerDetailsInfo; + string MaterialCode = ruleConfig1.MaterialCode;//鐗╂枡缂栧彿 + string MaterialName = ruleConfig1.MaterialName;//鐗╂枡鍚嶇О + string MaterialLot = ruleConfig1.MaterialLot;//鐗╂枡鎵瑰彿 + var PackQty = ruleConfig1.PackQty;//鏁伴噺 + string ProduceData = ruleConfig1.ProduceData;//鐢熸垚鏃ユ湡 + string ValidData = ruleConfig1.ValidData;//鏈夋晥鏈� + string Unit = ruleConfig1.Unit;//鍗曚綅 + string Standard = ruleConfig1.Standard;//澶囨敞 + int MId = ruleConfig1.MId;//鍏ュ簱鍗曟槑缁嗚鍙� + string Model = ruleConfig1.Model;//鍗曟嵁缂栧彿 + Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() + { + MaterielCode = MaterialCode, + MaterielName = MaterialName, + BatchNo = MaterialLot, + OrderNo = Model, + SerialNumber = "", + StockQuantity = (float)PackQty, + OutboundQuantity = 0, + Unit = Unit, + Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), + ProductionDate = ProduceData, + EffectiveDate = ValidData ?? DateTime.Parse(ProduceData).AddYears(2).ToString("yyyy-MM-dd"), + Remark = Standard, + InboundOrderRowNo = MId, + }; + stockInfo.Details.Add(stockInfoDetail); + } + stockInfos.Add(stockInfo); + } + var LocationCodes = stockInfos.Where(x => x.LocationCode != "骞冲簱浣�").Select(stockInfo => stockInfo.LocationCode).ToList(); + List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => LocationCodes.Contains(x.LocationCode)); + locationInfos.ForEach(x => + { + x.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + x.EnableStatus = EnableStatusEnum.Normal.ObjToInt(); + }); + _unitOfWorkManage.BeginTran(); + _stockInfoRepository.Db.InsertNav(stockInfos).Include(x => x.Details).ExecuteCommand(); + Repository.UpdateData(locationInfos); + _unitOfWorkManage.CommitTran(); + } + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error(ex.Message); + } + return WebResponseContent.Instance.OK(); + } + /// <summary> + /// 鑾峰彇璐т綅缂栧彿 + /// </summary> + /// <param name="locationCode"></param> + /// <returns></returns> + string GetLocationCode(string locationCode) + { + var a = locationCode.Substring(0, 1); + var Row = a switch + { + "A" => "001", + "B" => "002", + "C" => "003", + "D" => "004", + "E" => "005", + _ => throw new Exception($"鏈畾涔夌殑鎺�,鍦板潃:銆恵locationCode}銆�"), + }; + var Column = locationCode.Substring(4, 2); + if (locationCode.Length == 7) + Column = locationCode.Substring(5, 2); + var Layer = locationCode.Substring(2, 2); + locationCode = "AGV_FL-" + Row + "-0" + Column + "-0" + Layer + "-01"; + return locationCode; + } + + /// <summary> + /// 鍒濆鍖栬揣浣� + /// </summary> + /// <param name="initializationLocationDTO"></param> + /// <returns></returns> public WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO) { try @@ -89,7 +226,7 @@ List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>(); for (int i = 0; i < initializationLocationDTO.MaxRow; i++) { - if((i + 1) % initializationLocationDTO.MaxRow == 1) + if ((i + 1) % initializationLocationDTO.MaxRow == 1) { depth = initializationLocationDTO.Depth; } @@ -111,13 +248,13 @@ { Dt_LocationInfo locationInfo = new Dt_LocationInfo() { - AreaId = 0, + WarehouseId = 0, Column = j + 1, EnableStatus = EnableStatusEnum.Normal.ObjToInt(), Layer = k + 1, LocationStatus = LocationStatusEnum.Free.ObjToInt(), LocationType = LocationTypeEnum.Undefined.ObjToInt(), - RoadwayNo = $"R{initializationLocationDTO.Roadway.ToString()}", + RoadwayNo = $"{initializationLocationDTO.Roadway.ToString()}", Row = i + 1, Depth = depth, }; -- Gitblit v1.9.3