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