From a9b3ce04ed59794b648db00bc85001a4fb96c932 Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期二, 24 十二月 2024 15:29:03 +0800
Subject: [PATCH] 分拣接口、货位分配及移库任务完成

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs |   75 ++++++++++++++++++++++++++++++++-----
 1 files changed, 64 insertions(+), 11 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
index e0ae17a..bcc8769 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
@@ -17,6 +17,12 @@
 {
     public partial class TaskService
     {
+        /// <summary>
+        /// 鍒ゆ柇鏄惁闇�瑕佺Щ搴�
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <param name="locationCode"></param>
+        /// <returns></returns>
         public WebResponseContent IsRelocation(int taskNum, string locationCode)
         {
             try
@@ -32,19 +38,29 @@
                     return WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔′俊鎭�");
                 }
 
-                if (!_basicService.LocationInfoService.LittleDepthLocationIsEmpty(locationInfo, (PalletTypeEnum)task.PalletType))
+                List<Dt_LocationInfo> littleDepthLocations = _basicService.LocationInfoService.GetGroupLocations(locationInfo);
+
+                Dt_LocationInfo? needRelocationItem = littleDepthLocations.Where(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && x.LocationStatus != LocationStatusEnum.PalletLock.ObjToInt() && x.LocationStatus != LocationStatusEnum.FreeLock.ObjToInt() && x.Depth < locationInfo.Depth).OrderBy(x => x.Depth).FirstOrDefault();
+
+                if (needRelocationItem == null)
                 {
                     return WebResponseContent.Instance.OK(data: _mapper.Map<WMSTaskDTO>(task));
                 }
                 else
                 {
-                    Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == locationCode);
+                    Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == needRelocationItem.LocationCode);
                     if (stockInfo == null)
                     {
                         return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇揣浣嶇殑搴撳瓨淇℃伅");
                     }
 
-                    Dt_LocationInfo? newLocation = _basicService.LocationInfoService.AssignLocation(task.Roadway, (PalletTypeEnum)task.PalletType, task.WarehouseId);
+                    Dt_Task taskTemp = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
+                    if (taskTemp != null)
+                    {
+                        return WebResponseContent.Instance.OK(data: taskTemp);
+                    }
+
+                    Dt_LocationInfo? newLocation = _basicService.LocationInfoService.AssignLocation(needRelocationItem.RoadwayNo, (PalletTypeEnum)task.PalletType, task.WarehouseId);
                     if (newLocation != null)
                     {
                         Dt_Task newTask = new Dt_Task()
@@ -57,7 +73,7 @@
                             OrderNo = "",
                             PalletCode = stockInfo.PalletCode,
                             PalletType = stockInfo.PalletType,
-                            SourceAddress = locationCode,
+                            SourceAddress = needRelocationItem.LocationCode,
                             TargetAddress = newLocation.LocationCode,
                             TaskNum = Repository.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                             TaskStatus = 0,
@@ -68,20 +84,18 @@
                         Repository.AddData(newTask);
                         {
                             LocationStatusEnum lastStatus = (LocationStatusEnum)newLocation.LocationStatus;
-                            newLocation.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
                             _basicService.LocationInfoService.UpdateLocationStatus(newLocation, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
-                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
+                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(newLocation, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
                         }
                         {
-                            LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
-                            locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
-                            _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
-                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
+                            LocationStatusEnum lastStatus = (LocationStatusEnum)needRelocationItem.LocationStatus;
+                            _basicService.LocationInfoService.UpdateLocationStatus(needRelocationItem, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
+                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(needRelocationItem, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
                         }
                         stockInfo.StockStatus = StockStatusEmun.绉诲簱閿佸畾.ObjToInt();
                         _stockRepository.StockInfoRepository.UpdateData(stockInfo);
 
-                        _unitOfWorkManage.RollbackTran();
+                        _unitOfWorkManage.CommitTran();
 
                         return WebResponseContent.Instance.OK(data: _mapper.Map<WMSTaskDTO>(newTask));
                     }
@@ -93,6 +107,45 @@
             }
             catch (Exception ex)
             {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent RelocationTaskCompleted(Dt_Task task)
+        {
+            try
+            {
+                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                if (stockInfo == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇揣浣嶇殑搴撳瓨淇℃伅");
+                }
+
+                Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                if (locationInfoStart == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璧风偣璐т綅淇℃伅");
+                }
+
+                Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+                if (locationInfoEnd == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
+                }
+
+                _unitOfWorkManage.BeginTran();
+                stockInfo.LocationCode = locationInfoEnd.LocationCode;
+                _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+                _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
+                _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
+                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.浜哄伐瀹屾垚 : WIDESEA_Core.Enums.OperateTypeEnum.鑷姩瀹屾垚);
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }

--
Gitblit v1.9.3