Browse Source

新增焊点计算及码垛位获取功能

在 `SxServiceExtension.cs` 中添加了焊点计算和获取码垛位的方法,新增的 `GetAvailablePalletizingStationsByConfiguration` 方法根据配置信息返回可用的码垛位列表。

在 `SXService.cs` 中修改了对 `sxSysConfig` 的查询方式,去掉了 `First()` 调用,直接获取所有符合条件的记录,并调用新方法获取可用的码垛位。

清理了焊点相关处理的代码,移除了注释部分,提升了代码整洁性。

新增 `SpecialStockOut` 方法,用于处理超时码垛逻辑。
林豪 左 1 month ago
parent
commit
e9f233835c
2 changed files with 59 additions and 42 deletions
  1. 45 0
      wms.service/Extensions/SxServiceExtension.cs
  2. 14 42
      wms.service/Service/SXService.cs

+ 45 - 0
wms.service/Extensions/SxServiceExtension.cs

@@ -4,6 +4,7 @@ using System.Collections.Generic;
 using System.Data;
 using System.Linq;
 using wms.dto.response.sx;
+using wms.sqlsugar;
 using wms.sqlsugar.model.sx;
 
 namespace wms.service.Extensions
@@ -13,6 +14,8 @@ namespace wms.service.Extensions
     /// </summary>
     public static class SxServiceExtension
     {
+        #region 焊点计算
+
         /// <summary>
         /// 装箱时处理焊点盘
         /// </summary>
@@ -97,5 +100,47 @@ namespace wms.service.Extensions
 
             return currentBoxes;
         }
+
+        #endregion 焊点计算
+
+        #region 获取码垛位
+
+        /// <summary>
+        /// 根据配置信息获取可用码垛位
+        /// </summary>
+        /// <param name="palletizingList">现有码垛位</param>
+        /// <param name="config">配置表</param>
+        /// <param name="code">配置信息code</param>
+        /// <returns></returns>
+        public static List<sxSysConfig> GetAvailablePalletizingStationsByConfiguration(this List<sxSysConfig> palletizingList, Repository<sxSysConfig> config, string code)
+        {
+            // 获取配置中的机器人列表
+            var configuredRobots = config.GetFirst(x => x.Code == code).SContent.Split("|");
+
+            // 定义机器人及其对应的码垛位映射关系
+            var robotToPalletizingMap = new Dictionary<string, List<string>>
+            {
+               { "robot1", new List<string> { "8090", "8092" } },
+               { "robot2", new List<string> { "8096", "8098" } },
+               { "robot3", new List<string> { "8307" } }
+            };
+
+            // 获取所有符合条件的码垛位
+            var availablePalletizingCodes = configuredRobots
+                .SelectMany(robot =>
+                {
+                    if (robotToPalletizingMap.TryGetValue(robot, out var palletizingList))
+                    {
+                        return palletizingList;
+                    }
+                    return Enumerable.Empty<string>();
+                })
+                .Distinct();
+
+            // 返回匹配的码垛位列表
+            return palletizingList.Where(palletizing => availablePalletizingCodes.Contains(palletizing.Code)).ToList();
+        }
+
+        #endregion 获取码垛位
     }
 }

+ 14 - 42
wms.service/Service/SXService.cs

@@ -3534,7 +3534,8 @@ namespace wms.service.Service
                         continue;
                     }
 
-                    var equips = _sysconfigrepository.Context.Ado.SqlQuery<sxSysConfig>("select * from WMS_ZT_01SX.dbo.V_PalletizingPack where code =" + item.Equip).First();
+                    var equips = _sysconfigrepository.Context.Ado.SqlQuery<sxSysConfig>("select * from WMS_ZT_01SX.dbo.V_PalletizingPack where code =" + item.Equip);
+
                     if (equips == null)
                     {
                         continue;
@@ -3866,6 +3867,7 @@ namespace wms.service.Service
 
             //取视图码垛设备号
             var equiplist = _sysconfigrepository.Context.Ado.SqlQuery<sxSysConfig>("select * from WMS_ZT_01SX.dbo.V_PalletizingPack");
+            equiplist = equiplist.GetAvailablePalletizingStationsByConfiguration(_sysconfigrepository, "CP_Palletizing");
             if (!equiplist.Where(p => string.IsNullOrEmpty(p.Default1) && string.IsNullOrEmpty(p.Cache1State) && string.IsNullOrEmpty(p.Memo)).Any())
             {
                 res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
@@ -6275,6 +6277,8 @@ namespace wms.service.Service
             }
 
             var equiplist = _sysconfigrepository.Context.Ado.SqlQuery<sxSysConfig>("select * from WMS_ZT_01SX.dbo.V_PalletizingPack");
+
+            equiplist = equiplist.GetAvailablePalletizingStationsByConfiguration(_sysconfigrepository, "SPC_Palletizing");
             var iscontinue = false;
             foreach (var palletequip in equiplist.OrderByDescending(p => p.Default3).ThenBy(p => p.Default1))
             {
@@ -7877,25 +7881,6 @@ namespace wms.service.Service
                         var tempoutrecord = invlist2.ToList();
                         var solderinvlist = SxServiceExtension.ProcessWeldingPointsBoxing(rule, invlist2, out invlist2);
 
-                        //var solderinvlist = new List<StockTemp>();
-                        //if (rule.PerSolderMaxCount > 0)  //允许焊点盘
-                        //{
-                        //    int rulemaxcount = rule.FullCountQty / ((rule.SpoolType == "BS60" || rule.SpoolType == "BS40") ? 72 : 36) * rule.SolderMaxCount;
-                        //    var solcount = rulemaxcount;
-                        //    if (solcount <= 0)
-                        //    {
-                        //        solcount = 0;
-                        //    }
-                        //    ;
-                        //    solderinvlist = invlist2.Where(p => p.SolderCount <= rule.PerSolderMaxCount && p.SolderCount > 0).OrderBy(p => p.ProductTime).ThenByDescending(p => p.SolderCount).Take(solcount).ToList();
-                        //    invlist2 = invlist2.Where(p => p.SolderCount == 0);
-                        //}
-                        //else
-                        //{
-                        //    //不允许焊点盘
-                        //    invlist2 = invlist2.Where(p => p.SolderCount == 0).OrderBy(p => p.ProductTime);
-                        //}
-
                         #endregion 焊点相关处理
 
                         var returninvlist = new List<StockTemp>();
@@ -8215,24 +8200,6 @@ namespace wms.service.Service
 
                             var tempoutrecord = invlist2.ToList();
                             var solderinvlist = SxServiceExtension.ProcessWeldingPointsBoxing(rule, invlist2, out invlist2);
-                            //var solderinvlist = new List<StockTemp>();
-                            //if (rule.PerSolderMaxCount > 0)  //允许焊点盘
-                            //{
-                            //    int rulemaxcount = rule.FullCountQty / ((rule.SpoolType == "BS60" || rule.SpoolType == "BS40") ? 72 : 36) * rule.SolderMaxCount;
-                            //    var solcount = rulemaxcount;
-                            //    if (solcount <= 0)
-                            //    {
-                            //        solcount = 0;
-                            //    }
-                            //    ;
-                            //    solderinvlist = invlist2.Where(p => p.SolderCount <= rule.PerSolderMaxCount && p.SolderCount > 0).OrderBy(p => p.ProductTime).ThenByDescending(p => p.SolderCount).Take(solcount).ToList();
-                            //    invlist2 = invlist2.Where(p => p.SolderCount == 0);
-                            //}
-                            //else
-                            //{
-                            //    //不允许焊点盘
-                            //    invlist2 = invlist2.Where(p => p.SolderCount == 0).OrderBy(p => p.ProductTime);
-                            //}
 
                             #endregion 焊点相关处理
 
@@ -15926,6 +15893,11 @@ namespace wms.service.Service
             return res;
         }
 
+        /// <summary>
+        /// 超时码垛
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
         public SRes SpecialStockOut(PalletizingPackStockOutRequest request)
         {
             var res = new SRes();
@@ -16044,8 +16016,8 @@ namespace wms.service.Service
             var timeOutHoldHours = int.Parse(wms.util.AppSettings.GetConfig("TimeOutHoldHours"));
             //
             var invlist = from loc in _basewarecellrepository.GetList(p => p.IsStop == LocationStop.LocationInvoke.GetHashCode() && p.StateNum == LocationState.LocationState_Full)
-                          join stock in _billInvnowrepository.GetList(p => p.InvStateCode == InvState.InvEcecState_In.ToString() && p.ExecStateCode == InvLockState.InvState_Normal.ToString() && p.Grade == "A" && string.IsNullOrEmpty(p.PreStock) && !p.ProductMachCode.Contains("R") //&& p.ContUsageQty <= 0
-                          && !p.InDocsNo.StartsWith("CHA") && p.IsMulti == false && (DateTime.Now - p.ProductTime).TotalHours > timeOutHoldHours)
+                          join stock in _billInvnowrepository.GetList(p => p.InvStateCode == InvState.InvEcecState_In.ToString() && p.ExecStateCode == InvLockState.InvState_Normal.ToString() && p.Grade == "A" && string.IsNullOrEmpty(p.PreStock) && !p.ProductMachCode.Contains("R")
+                          && (DateTime.Now - p.ProductTime).TotalHours > timeOutHoldHours)
                           on loc.ContGrpBarCode equals stock.ContGrpBarCode
                           select new StockTemp
                           {
@@ -16083,8 +16055,8 @@ namespace wms.service.Service
                           };
 
             var invlist1 = from loc in _basewarecellrepository.GetList(p => p.IsStop == LocationStop.LocationInvoke.GetHashCode() && p.StateNum == LocationState.LocationState_Full)
-                           join stock in _billInvnowrepository.GetList(p => p.InvStateCode == InvState.InvEcecState_In.ToString() && p.ExecStateCode == InvLockState.InvState_Normal.ToString() && p.Grade == "A" && string.IsNullOrEmpty(p.PreStock) && p.ProductMachCode.Contains("R") //&& p.ContUsageQty <= 0
-                           && !p.InDocsNo.StartsWith("CHA") && p.IsMulti == false && (DateTime.Now - p.OneInTime).TotalHours > timeOutHoldHours)
+                           join stock in _billInvnowrepository.GetList(p => p.InvStateCode == InvState.InvEcecState_In.ToString() && p.ExecStateCode == InvLockState.InvState_Normal.ToString() && p.Grade == "A" && string.IsNullOrEmpty(p.PreStock) && p.ProductMachCode.Contains("R")
+                             && (DateTime.Now - p.OneInTime).TotalHours > timeOutHoldHours)
                            on loc.ContGrpBarCode equals stock.ContGrpBarCode
                            select new StockTemp
                            {