Browse Source

重构移库任务逻辑,新增扩展方法

在 `SxServiceExtension.cs` 中新增 `MoveTask` 静态方法,负责申请移库库位及创建移库任务,增强了业务逻辑的清晰度和可维护性。删除 `SXService.cs` 中的原 `MoveTask` 方法,改为调用新扩展方法,简化了服务层实现。同时,更新了 `ApplyLoc` 方法的调用方式,确保参数传递符合新签名。
林豪 左 1 month ago
parent
commit
5add5ca6cc
2 changed files with 209 additions and 175 deletions
  1. 201 1
      wms.service/Extensions/SxServiceExtension.cs
  2. 8 174
      wms.service/Service/SXService.cs

+ 201 - 1
wms.service/Extensions/SxServiceExtension.cs

@@ -508,6 +508,206 @@ namespace wms.service.Extensions
             return result;
         }
 
+        /// <summary>
+        ///  申请移库库位及创建移库任务
+        /// </summary>
+        /// <param name="Cell">目标货位</param>
+        /// <param name="_wcstaskoldrepository">历史任务表</param>
+        /// <param name="_basewarehouserepository">仓库表</param>
+        /// <param name="_billInvnowrepository">库存表</param>
+        /// <param name="_basewarecellrepository">货位表</param>
+        /// <param name="_taskrepository">任务表</param>
+        /// <param name="_taskdetailrepository">任务明细表</param>
+        /// <param name="_db">数据库链接</param>
+        /// <param name="_logger">日志</param>
+        /// <param name="_mapper">映射器</param>
+        /// <param name="lockerPalletizingPackTask">装箱任务锁</param>
+        /// <param name="lockerApplyLoc">申请货位锁</param>
+        /// <returns></returns>
+        public static SRes MoveTask(
+            this string Cell,
+            RepositoryTask<WCS_TaskOld> _wcstaskoldrepository,
+            Repository<BaseWarehouse> _basewarehouserepository,
+            Repository<BillInvnow> _billInvnowrepository,
+            Repository<BaseWarecell> _basewarecellrepository,
+            RepositoryTask<WCS_TaskInfo> _taskrepository,
+            RepositoryTask<WCS_TaskDtl> _taskdetailrepository,
+            ITenant _db,
+            ILogger<SXService> _logger,
+            IMapper _mapper,
+            object lockerPalletizingPackTask,
+            object lockerApplyLoc)
+        {
+            lock (lockerPalletizingPackTask)
+            {
+                var res = new SRes() { Memo1 = "1" };
+
+                var cellform = _basewarecellrepository.GetFirst(p => p.Code == Cell && p.Depth == 2);
+                if (cellform == null)
+                {
+                    res.ResCode = ResponseStatusCodeEnum.WareLocationCodeNotExist.GetHashCode();
+                    res.ResMsg = "该任务所在货位不是二深货位";
+                    res.Memo1 = "1";
+                    return res;
+                }
+                var cellTo = _basewarecellrepository.GetFirst(p => p.Col == cellform.Col && p.Layer == cellform.Layer && p.Shelf == cellform.Shelf && p.Depth == 1 && p.IsStop == 0 && p.Floor == cellform.Floor && p.Tunnel == cellform.Tunnel);
+                if (cellTo == null)
+                {
+                    res.ResCode = ResponseStatusCodeEnum.WareLocationCodeNotExist.GetHashCode();
+                    res.ResMsg = Cell + "对应一深位货位被禁用或者不存在";
+                    res.Memo1 = "1";  //1:不允许生成出库任务;2:允许
+                    return res;
+                }
+                lock (lockerApplyLoc)
+                {
+                    try
+                    {
+                        if (cellTo.StateNum == LocationState.LocationState_Empty)
+                        {
+                            res.Memo1 = "2";
+                            return res;
+                        }
+                        else if (cellTo.StateNum == LocationState.LocationState_Full)
+                        {
+                            var stock = _billInvnowrepository.GetFirst(p => p.ContGrpBarCode == cellTo.ContGrpBarCode && p.InvStateCode == InvState.InvEcecState_In.ToString());
+                            if (stock == null)
+                            {
+                                res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
+                                res.ResMsg = "一深位库存信息异常,没有查到库存信息";
+                                res.Memo1 = "1";
+                                return res;
+                            }
+
+                            //库位
+                            var cell = ApplyLoc(new ApplyLocRequest()
+                            {
+                                IsMove = true,
+                                MaterialId = stock.MatId,
+                                MaterialCode = stock.MatCode,
+                                TunnelNum = cellTo.Tunnel,
+                                WarehuoseId = cellTo.WarehouseId,
+                                Floor = cellTo.Floor,
+                                Fork = 2,
+                                Wbgroup = stock.WbGroupCode,
+                                Wind = stock.Wind,
+                                IsControlpanel = stock.IsControlpanel,
+                                IsTorsChk = stock.IsTorsChk,
+                                TorsChkQty = stock.TorsChkQty,
+                                ProductTime = stock.ProductTime
+                            }, _basewarecellrepository, _basewarehouserepository, _billInvnowrepository, _logger);
+                            if (string.IsNullOrEmpty(cell.ResData.CellNo))
+                            {
+                                res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
+                                res.ResMsg = cell.ResMsg;
+                                res.Memo1 = "1";
+                                return res;
+                            }
+                            if (!_basewarecellrepository.IsAny(p => p.Code == cell.ResData.CellNo && p.Row == cell.ResData.Row && p.Col == cell.ResData.Colomn && p.Layer == cell.ResData.Layer && p.StateNum == LocationState.LocationState_Empty && p.IsStop == 0))
+                            {
+                                res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
+                                res.ResMsg = cell.ResData.CellNo + "已被使用";
+                                res.Memo1 = "1";
+                                return res;
+                            }
+
+                            if (_wcstaskoldrepository.AsQueryable().Where(p => p.Status < TaskStatus.Finish && (p.Type == TaskType.EnterDepot || p.Type == TaskType.TransferDepot) && p.AddrTo == cell.ResData.CellNo).SplitTable(p => p.Take(2)).Any())
+                            {
+                                res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
+                                res.ResMsg = cell.ResData.CellNo + "存在未结束的入库任务或移库任务,不允许使用";
+                                res.Memo1 = "1";
+                                return res;
+                            }
+                            var wcs = new WCS_TaskInfo()
+                            {
+                                Type = TaskType.TransferDepot,
+                                Status = TaskStatus.NewBuild,
+                                Priority = 0,
+                                Device = cellTo.SCRel,
+                                SrmStation = "",
+                                AddrFrom = cellTo.Code,
+                                AddrTo = cell.ResData.CellNo,
+                                LastInteractionPoint = "",
+                                BarCode = stock.ContGrpBarCode,
+                                Length = stock.LengthQty,
+                                AddTime = DateTime.Now,
+                                StartTime = DateTime.Now,
+                                DocID = 0,
+                                PalletType = 1,
+                                ProdLine = 0,
+                                AddWho = "wms",
+                                WarehouseCode = cellTo.WarehouseCode,
+                                Enabled = true,
+                                WorkBench = "",
+                                Tunnel = cellTo.Tunnel.ToString(),
+                                Floor = cellTo.Floor,
+                                BusType = CpTaskBusType.TaskBusType_CP_Move.GetDescription()
+                            };
+
+                            _db.BeginTran();
+
+                            var celltemp = _basewarecellrepository.GetSingle(p => p.Code == cell.ResData.CellNo);
+                            if (celltemp.StateNum != LocationState.LocationState_Empty || celltemp.ContGrpId > 0 || !string.IsNullOrEmpty(celltemp.ContGrpBarCode))
+                            {
+                                _db.RollbackTran();
+                                res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
+                                res.ResMsg = cell.ResData.CellNo + "已被使用";
+                                res.Memo1 = "1";
+                                _logger.LogInformation("货位状态1:" + celltemp.StateNum + ",code:" + cell.ResData.CellNo);
+                                return res;
+                            }
+                            _logger.LogInformation("货位状态2:" + celltemp.StateNum + ",code:" + cell.ResData.CellNo);
+                            var task = _taskrepository.InsertReturnEntity(wcs);
+                            _wcstaskoldrepository.InsertableSplitTable(_mapper.Map<WCS_TaskOld>(task));
+                            var taskdlt = new WCS_TaskDtl()
+                            {
+                                ID = Guid.NewGuid(),
+                                CurPoint = task.AddrFrom,
+                                AddTime = DateTime.Now,
+                                AddWho = "wms",
+                                Enabled = true,
+                                ParentTaskCode = task.ID,
+                                Desc = task.AddrFrom + "移库至" + task.AddrTo,
+                            };
+                            _taskdetailrepository.InsertableSplitTable(taskdlt);
+                            _basewarecellrepository.UpdateModelColumns(p => new BaseWarecell() { StateNum = LocationState.LocationState_StockMove, EditTime = DateTime.Now }, p => p.Code == task.AddrFrom);
+                            _basewarecellrepository.UpdateModelColumns(p => new BaseWarecell() { StateNum = LocationState.LocationState_StockMove, EditTime = DateTime.Now }, p => p.Code == task.AddrTo);
+                            _db.CommitTran();
+                            res.Memo1 = "2";
+                        }
+                        else if (cellTo.StateNum == LocationState.LocationState_StockIn)
+                        {
+                            res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                            res.ResMsg = "一升位有入库任务,二升位不允许出库";
+                            res.Memo1 = "1";
+                            return res;
+                        }
+                        else if (cellTo.StateNum == LocationState.LocationState_StockOut)
+                        {
+                            res.Memo1 = "2";
+                            return res;
+                        }
+                        else if (cellTo.StateNum == LocationState.LocationState_StockMove)
+                        {
+                            res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                            res.ResMsg = "一升位有移库任务,二升位不允许出库";
+                            res.Memo1 = "1";
+                            return res;
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        _db.RollbackTran();
+                        _logger.LogInformation("移库任务创建失败" + ex.ToString());
+                        res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
+                        res.ResMsg = WcsContractWcsMoveTaskEnum.失败.GetDescription();
+                        res.Memo1 = "1";
+                    }
+                }
+
+                return res;
+            }
+        }
+
         /// <summary>
         /// 申请货位
         /// </summary>
@@ -517,7 +717,7 @@ namespace wms.service.Extensions
         /// <param name="_billInvnowrepository">库存表</param>
         /// <param name="_logger">日志</param>
         /// <returns></returns>
-        private static SRes<ApplyStockInLocResponse> ApplyLoc(
+        public static SRes<ApplyStockInLocResponse> ApplyLoc(
             ApplyLocRequest reqEntity,
             Repository<BaseWarecell> _basewarecellrepository,
             Repository<BaseWarehouse> _basewarehouserepository,

+ 8 - 174
wms.service/Service/SXService.cs

@@ -7488,178 +7488,6 @@ namespace wms.service.Service
             return res;
         }
 
-        private SRes MoveTask(string Cell)
-        {
-            lock (lockerPalletizingPackTask)
-            {
-                var res = new SRes() { Memo1 = "1" };
-
-                var cellform = _basewarecellrepository.GetFirst(p => p.Code == Cell && p.Depth == 2);
-                if (cellform == null)
-                {
-                    res.ResCode = ResponseStatusCodeEnum.WareLocationCodeNotExist.GetHashCode();
-                    res.ResMsg = "该任务所在货位不是二深货位";
-                    res.Memo1 = "1";
-                    return res;
-                }
-                var cellTo = _basewarecellrepository.GetFirst(p => p.Col == cellform.Col && p.Layer == cellform.Layer && p.Shelf == cellform.Shelf && p.Depth == 1 && p.IsStop == 0 && p.Floor == cellform.Floor && p.Tunnel == cellform.Tunnel);
-                if (cellTo == null)
-                {
-                    res.ResCode = ResponseStatusCodeEnum.WareLocationCodeNotExist.GetHashCode();
-                    res.ResMsg = Cell + "对应一深位货位被禁用或者不存在";
-                    res.Memo1 = "1";  //1:不允许生成出库任务;2:允许
-                    return res;
-                }
-                lock (lockerApplyLoc)
-                {
-                    try
-                    {
-                        if (cellTo.StateNum == LocationState.LocationState_Empty)
-                        {
-                            res.Memo1 = "2";
-                            return res;
-                        }
-                        else if (cellTo.StateNum == LocationState.LocationState_Full)
-                        {
-                            var stock = _billInvnowrepository.GetFirst(p => p.ContGrpBarCode == cellTo.ContGrpBarCode && p.InvStateCode == InvState.InvEcecState_In.ToString());
-                            if (stock == null)
-                            {
-                                res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
-                                res.ResMsg = "一深位库存信息异常,没有查到库存信息";
-                                res.Memo1 = "1";
-                                return res;
-                            }
-
-                            //库位
-                            var cell = ApplyLoc(new ApplyLocRequest()
-                            {
-                                IsMove = true,
-                                MaterialId = stock.MatId,
-                                MaterialCode = stock.MatCode,
-                                TunnelNum = cellTo.Tunnel,
-                                WarehuoseId = cellTo.WarehouseId,
-                                Floor = cellTo.Floor,
-                                Fork = 2,
-                                Wbgroup = stock.WbGroupCode,
-                                Wind = stock.Wind,
-                                IsControlpanel = stock.IsControlpanel,
-                                IsTorsChk = stock.IsTorsChk,
-                                TorsChkQty = stock.TorsChkQty,
-                                ProductTime = stock.ProductTime
-                            });
-                            if (string.IsNullOrEmpty(cell.ResData.CellNo))
-                            {
-                                res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
-                                res.ResMsg = cell.ResMsg;
-                                res.Memo1 = "1";
-                                return res;
-                            }
-                            if (!_basewarecellrepository.IsAny(p => p.Code == cell.ResData.CellNo && p.Row == cell.ResData.Row && p.Col == cell.ResData.Colomn && p.Layer == cell.ResData.Layer && p.StateNum == LocationState.LocationState_Empty && p.IsStop == 0))
-                            {
-                                res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
-                                res.ResMsg = cell.ResData.CellNo + "已被使用";
-                                res.Memo1 = "1";
-                                return res;
-                            }
-
-                            if (_wcstaskoldrepository.AsQueryable().Where(p => p.Status < TaskStatus.Finish && (p.Type == TaskType.EnterDepot || p.Type == TaskType.TransferDepot) && p.AddrTo == cell.ResData.CellNo).SplitTable(p => p.Take(2)).Any())
-                            {
-                                res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
-                                res.ResMsg = cell.ResData.CellNo + "存在未结束的入库任务或移库任务,不允许使用";
-                                res.Memo1 = "1";
-                                return res;
-                            }
-                            var wcs = new WCS_TaskInfo()
-                            {
-                                Type = TaskType.TransferDepot,
-                                Status = TaskStatus.NewBuild,
-                                Priority = 0,
-                                Device = cellTo.SCRel,
-                                SrmStation = "",
-                                AddrFrom = cellTo.Code,
-                                AddrTo = cell.ResData.CellNo,
-                                LastInteractionPoint = "",
-                                BarCode = stock.ContGrpBarCode,
-                                Length = stock.LengthQty,
-                                AddTime = DateTime.Now,
-                                StartTime = DateTime.Now,
-                                DocID = 0,
-                                PalletType = 1,
-                                ProdLine = 0,
-                                AddWho = "wms",
-                                WarehouseCode = cellTo.WarehouseCode,
-                                Enabled = true,
-                                WorkBench = "",
-                                Tunnel = cellTo.Tunnel.ToString(),
-                                Floor = cellTo.Floor,
-                                BusType = CpTaskBusType.TaskBusType_CP_Move.GetDescription()
-                            };
-
-                            _db.BeginTran();
-
-                            var celltemp = _basewarecellrepository.GetSingle(p => p.Code == cell.ResData.CellNo);
-                            if (celltemp.StateNum != LocationState.LocationState_Empty || celltemp.ContGrpId > 0 || !string.IsNullOrEmpty(celltemp.ContGrpBarCode))
-                            {
-                                _db.RollbackTran();
-                                res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
-                                res.ResMsg = cell.ResData.CellNo + "已被使用";
-                                res.Memo1 = "1";
-                                _logger.LogInformation("货位状态1:" + celltemp.StateNum + ",code:" + cell.ResData.CellNo);
-                                return res;
-                            }
-                            _logger.LogInformation("货位状态2:" + celltemp.StateNum + ",code:" + cell.ResData.CellNo);
-                            var task = _taskrepository.InsertReturnEntity(wcs);
-                            _wcstaskoldrepository.InsertableSplitTable(_mapper.Map<WCS_TaskOld>(task));
-                            var taskdlt = new WCS_TaskDtl()
-                            {
-                                ID = Guid.NewGuid(),
-                                CurPoint = task.AddrFrom,
-                                AddTime = DateTime.Now,
-                                AddWho = "wms",
-                                Enabled = true,
-                                ParentTaskCode = task.ID,
-                                Desc = task.AddrFrom + "移库至" + task.AddrTo,
-                            };
-                            _taskdetailrepository.InsertableSplitTable(taskdlt);
-                            _basewarecellrepository.UpdateModelColumns(p => new BaseWarecell() { StateNum = LocationState.LocationState_StockMove, EditTime = DateTime.Now }, p => p.Code == task.AddrFrom);
-                            _basewarecellrepository.UpdateModelColumns(p => new BaseWarecell() { StateNum = LocationState.LocationState_StockMove, EditTime = DateTime.Now }, p => p.Code == task.AddrTo);
-                            _db.CommitTran();
-                            res.Memo1 = "2";
-                        }
-                        else if (cellTo.StateNum == LocationState.LocationState_StockIn)
-                        {
-                            res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
-                            res.ResMsg = "一升位有入库任务,二升位不允许出库";
-                            res.Memo1 = "1";
-                            return res;
-                        }
-                        else if (cellTo.StateNum == LocationState.LocationState_StockOut)
-                        {
-                            res.Memo1 = "2";
-                            return res;
-                        }
-                        else if (cellTo.StateNum == LocationState.LocationState_StockMove)
-                        {
-                            res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
-                            res.ResMsg = "一升位有移库任务,二升位不允许出库";
-                            res.Memo1 = "1";
-                            return res;
-                        }
-                    }
-                    catch (Exception ex)
-                    {
-                        _db.RollbackTran();
-                        _logger.LogInformation("移库任务创建失败" + ex.ToString());
-                        res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
-                        res.ResMsg = WcsContractWcsMoveTaskEnum.失败.GetDescription();
-                        res.Memo1 = "1";
-                    }
-                }
-
-                return res;
-            }
-        }
-
         /// <summary>
         /// 移库任务
         /// </summary>
@@ -7727,7 +7555,7 @@ namespace wms.service.Service
                         }
                         var wareshouse = _basewarehouserepository.GetFirst(p => p.Code == wcstask.WarehouseCode);
                         //库位
-                        var cell = ApplyLoc(new ApplyLocRequest()
+                        var cell = SxServiceExtension.ApplyLoc(new ApplyLocRequest()
                         {
                             IsMove = true,
                             MaterialId = stock.MatId,
@@ -7742,7 +7570,7 @@ namespace wms.service.Service
                             IsTorsChk = stock.IsTorsChk,
                             TorsChkQty = stock.TorsChkQty,
                             ProductTime = stock.ProductTime
-                        });
+                        }, _basewarecellrepository, _basewarehouserepository, _billInvnowrepository, _logger);
                         if (string.IsNullOrEmpty(cell.ResData.CellNo))
                         {
                             res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
@@ -12490,5 +12318,11 @@ namespace wms.service.Service
         {
             return (value * 100).ToString("F2") + "%";
         }
+
+        private SRes MoveTask(string code)
+        {
+            return code.MoveTask(_wcstaskoldrepository, _basewarehouserepository, _billInvnowrepository, _basewarecellrepository,
+                                 _taskrepository, _taskdetailrepository, _db, _logger, _mapper, lockerPalletizingPackTask, lockerApplyLoc);
+        }
     }
 }