From b2c6ce78c7c95c37f9c3e9ea11e86a7af7b0d3fd Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期三, 05 十一月 2025 09:35:30 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |  463 ++++++++++++++++++++++++++-------------------------------
 1 files changed, 208 insertions(+), 255 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index a7b5dca..358c522 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -21,7 +21,10 @@
 using Newtonsoft.Json;
 using Org.BouncyCastle.Asn1.Ocsp;
 using SqlSugar;
+using System.Reflection;
+using System.Reflection.Emit;
 using System.Threading.Tasks;
+using System.Xml.Linq;
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.LocationEnum;
 using WIDESEA_Common.OrderEnum;
@@ -31,6 +34,7 @@
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
 using WIDESEA_DTO.Basic;
 using WIDESEA_DTO.Task;
@@ -53,8 +57,11 @@
         private readonly IRepository<Dt_StockInfo> _stockRepository;
         private readonly ILocationInfoService _locationInfoService;
         private readonly IInboundOrderService _inboundOrderService;
+        private readonly IInboundOrderDetailService _inboundOrderDetailService;
         private readonly ILocationStatusChangeRecordService _locationStatusChangeRecordService;
         private readonly IESSApiService _eSSApiService;
+        private readonly IStockService _stockService;
+        private readonly IRecordService _recordService;
         public IRepository<Dt_Task> Repository => BaseDal;
 
         private Dictionary<string, SqlSugar.OrderByType> _taskOrderBy = new()
@@ -66,15 +73,15 @@
         private Dictionary<string, string> stations = new Dictionary<string, string>
         {
             {"3-5","3-9" },
-             {"2-5","2-9" },
-              {"1-11","1-1" },
+            {"2-5","2-9" },
+            {"1-11","1-1" },
         };
 
         public List<int> TaskTypes => typeof(TaskTypeEnum).GetEnumIndexList();
 
         public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
 
-        public TaskService(IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfo> stockRepository, ILocationInfoService locationInfoService, IInboundOrderService inboundOrderService, ILocationStatusChangeRecordService locationStatusChangeRecordService, IESSApiService eSSApiService, ILogger<TaskService> logger) : base(BaseDal)
+        public TaskService(IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfo> stockRepository, ILocationInfoService locationInfoService, IInboundOrderService inboundOrderService, ILocationStatusChangeRecordService locationStatusChangeRecordService, IESSApiService eSSApiService, ILogger<TaskService> logger, IStockService stockService, IRecordService recordService, IInboundOrderDetailService inboundOrderDetailService) : base(BaseDal)
         {
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
@@ -84,247 +91,9 @@
             _locationStatusChangeRecordService = locationStatusChangeRecordService;
             _eSSApiService = eSSApiService;
             _logger = logger;
-        }
-
-        public async Task<WebResponseContent> RequestInboundTask(string palletCode, string stationCode)
-        {
-            try
-            {
-                Dt_Task dbtask = Repository.QueryFirst(x => x.PalletCode == palletCode);
-                if (dbtask != null)
-                {
-                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡鐢熸垚浠诲姟");
-                }
-
-                Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
-                if (stockInfo == null)
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�");
-                }
-
-                if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎷i�夊畬鎴�.ObjToInt())
-                {
-                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱");
-                }
-                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
-                {
-                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅");
-                }
-
-                Dt_LocationInfo? locationInfo = _locationInfoService.AssignLocation();
-                if (locationInfo == null)
-                {
-                    return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅");
-                }
-
-
-                var newTask = new Dt_Task()
-                {
-                    CurrentAddress = stationCode,
-                    Grade = 0,
-                    NextAddress = stations.GetValueOrDefault(stationCode) ?? "",
-                    PalletCode = palletCode,
-                    Roadway = locationInfo.RoadwayNo,
-                    SourceAddress = stationCode,
-                    TargetAddress = locationInfo.LocationCode,
-                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
-                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
-                    WarehouseId = stockInfo.WarehouseId,
-                    PalletType = stockInfo.PalletType,
-                };
-
-                if (stockInfo.PalletType == PalletTypeEnum.Empty.ObjToInt())
-                {
-                    _unitOfWorkManage.BeginTran();
-                    int taskId = BaseDal.AddData(newTask);
-                    newTask.TaskId = taskId;
-
-                    locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
-                    _locationInfoService.UpdateData(locationInfo);
-                    stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
-                    _stockRepository.UpdateData(stockInfo);
-                    _unitOfWorkManage.CommitTran();
-                }
-                else
-                {
-                    //鑾峰彇鏄惁瀛樺湪鍏ュ簱鍗�
-                    Dt_InboundOrder? inboundOrder = null;
-                    if (stockInfo != null && stockInfo.Details.Count > 0)
-                    {
-                        string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? "";
-                        inboundOrder = _inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt());
-                    }
-
-                    if (inboundOrder != null)
-                    {
-                        if (inboundOrder.OrderType == InOrderTypeEnum.Allocat.ObjToInt())
-                        {
-                            newTask.TaskType = TaskTypeEnum.InAllocate.ObjToInt();
-                        }
-                        else if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
-                        {
-                            newTask.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt();
-                        }
-                    }
-                    if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
-                    {
-                        stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
-                    }
-                    else if (stockInfo.StockStatus == StockStatusEmun.MES閫�搴�.ObjToInt())
-                    {
-                        newTask.TaskType = TaskTypeEnum.MesMatReturn.ObjToInt();
-                    }
-                    else if (stockInfo.StockStatus == StockStatusEmun.鎷i�夊畬鎴�.ObjToInt())
-                    {
-                        stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
-                        newTask.TaskType = TaskTypeEnum.InPick.ObjToInt();
-                    }
-                    else if (stockInfo.StockStatus == StockStatusEmun.閫佹搴撳瓨瀹屾垚.ObjToInt())
-                    {
-                        stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
-                        newTask.TaskType = TaskTypeEnum.InQuality.ObjToInt();
-                    }
-                    else if (stockInfo.StockStatus == StockStatusEmun.鐩樼偣搴撳瓨瀹屾垚.ObjToInt())
-                    {
-                        stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
-                        newTask.TaskType = TaskTypeEnum.InInventory.ObjToInt();
-                    }
-                    else
-                    {
-                        stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
-                    }
-
-                    LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
-                    _unitOfWorkManage.BeginTran();
-                    int taskId = BaseDal.AddData(newTask);
-                    newTask.TaskId = taskId;
-
-                    _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, locationInfo.LocationStatus, StockChangeType.Inbound.ObjToInt(), inboundOrder.InboundOrderNo, newTask.TaskNum);
-
-                    locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
-                    _locationInfoService.UpdateData(locationInfo);
-
-                    _stockRepository.UpdateData(stockInfo);
-                    _unitOfWorkManage.CommitTran();
-                }
-                TaskModel esstask = new TaskModel()
-                {
-                    taskType = "putaway",
-                    taskGroupCode = "",
-                    groupPriority = 0,
-                    tasks = new List<TasksType>
-                    {
-                            new()
-                            {
-                                taskCode=newTask.TaskNum.ToString(),
-                                taskPriority=0,
-                                taskDescribe=new TaskDescribeType{
-                                containerCode=palletCode,
-                                containerType= "CT_KUBOT_STANDARD",
-                                fromLocationCode=stations.GetValueOrDefault(stationCode)??"",
-                                toStationCode="",
-                                toLocationCode=locationInfo.LocationCode,
-                                deadline=0,storageTag=""
-                                }
-                            }
-                    }
-                };
-                _logger.LogInformation("鍒涘缓浠诲姟Request:  " + JsonConvert.SerializeObject(esstask));
-                var result = await _eSSApiService.CreateTaskAsync(esstask);
-
-                _logger.LogInformation("鍒涘缓浠诲姟杩斿洖:  " + result);
-                if (result)
-                {
-                    return WebResponseContent.Instance.OK();
-                }
-                else
-                {
-                    return WebResponseContent.Instance.Error("涓嬪彂鏈哄櫒浜轰换鍔″け璐ワ紒");
-                }
-            }
-            catch (Exception ex)
-            {
-                return WebResponseContent.Instance.Error(ex.Message);
-            }
-        }
-
-        /// <summary>
-        /// 鍏ョ┖绠�
-        /// </summary>
-        /// <param name="palletCode"></param>
-        /// <param name="address"></param>
-        /// <param name="WarehouseId"></param>
-        /// <returns></returns>
-        public WebResponseContent InEmpty(string palletCode, string address, int WarehouseId)
-        {
-            try
-            {
-
-                Dt_Task dbtask = Repository.QueryFirst(x => x.PalletCode == palletCode);
-                if (dbtask != null)
-                {
-                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡鐢熸垚浠诲姟");
-                }
-
-                Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).First();
-                if (stockInfo == null)
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�");
-                }
-                if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎷i�夊畬鎴�.ObjToInt())
-                {
-                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱");
-                }
-                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
-                {
-                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅");
-                }
-                //stockInfo = new Dt_StockInfo()
-                //{
-                //    PalletCode = barcode,
-                //    StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
-                //    WarehouseId = WarehouseId,
-                //    PalletType = PalletTypeEnum.Empty.ObjToInt(),
-                //    Details = new List<Dt_StockInfoDetail>()
-                //};
-
-                var locationInfo = _locationInfoService.AssignLocation();
-                if (locationInfo == null)
-                {
-                    return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅");
-                }
-
-                Dt_Task newTask = new Dt_Task()
-                {
-                    CurrentAddress = address,
-                    Grade = 0,
-                    NextAddress = locationInfo.LocationCode,
-                    PalletCode = palletCode,
-                    Roadway = locationInfo.RoadwayNo,
-                    SourceAddress = address,
-                    TargetAddress = locationInfo.LocationCode,
-                    TaskType = TaskTypeEnum.InEmpty.ObjToInt(),
-                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
-                    WarehouseId = stockInfo.WarehouseId,
-                    PalletType = stockInfo.PalletType
-                };
-                locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
-                _unitOfWorkManage.BeginTran();
-                int taskId = BaseDal.AddData(newTask);
-                newTask.TaskId = taskId;
-                _locationInfoService.UpdateData(locationInfo);
-                stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
-                _stockRepository.AddData(stockInfo);
-                _unitOfWorkManage.CommitTran();
-
-
-                return WebResponseContent.Instance.OK();
-            }
-            catch (Exception ex)
-            {
-                _unitOfWorkManage.RollbackTran();
-                return WebResponseContent.Instance.Error(ex.Message);
-            }
+            _stockService = stockService;
+            _recordService = recordService;
+            _inboundOrderDetailService = inboundOrderDetailService;
         }
 
         /// <summary>
@@ -332,22 +101,151 @@
         /// </summary>
         /// <param name="taskNum"></param>
         /// <returns></returns>
-        public async Task<WebResponseContent> TaskCompleted(int taskNum)
+        public async Task<WebResponseContent> TaskCompleted(string taskNum)
         {
+            try
+            {
+                Dt_Task task;
+                if (int.TryParse(taskNum, out var newTaskNum))
+                {
+                    task = BaseDal.QueryFirst(x => x.TaskNum == newTaskNum);
+                    if (task == null)
+                    {
+                        return WebResponseContent.Instance.Error("鏈壘鍒颁换鍔′俊鎭�");
+                    }
+                }
+                else
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒颁换鍔′俊鎭�");
+                }
+
+                MethodInfo? methodInfo = GetType().GetMethod(((TaskTypeEnum)task.TaskType) + "TaskCompleted");
+                if (methodInfo != null)
+                {
+                    WebResponseContent? responseContent = (WebResponseContent?)methodInfo.Invoke(this, new object[] { task });
+                    if (responseContent != null)
+                    {
+                        return responseContent;
+                    }
+                }
+                return WebResponseContent.Instance.Error("鏈壘鍒颁换鍔$被鍨嬪搴斾笟鍔″鐞嗛�昏緫");
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+        /// <summary>
+        /// 鍏ュ簱瀹屾垚
+        /// </summary>
+        /// <param name="task"></param>
+        /// <returns></returns>
+        public WebResponseContent InboundTaskCompleted(Dt_Task task)
+        {
+            decimal beforeQuantity = 0;
+
+            //鏌ュ簱瀛�
+            Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).First();
+            if (stockInfo == null)
+            {
+                return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅");
+            }
+            if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt())
+            {
+                return WebResponseContent.Instance.Error($"鏈壘鍒拌鎵樼洏搴撳瓨鏄庣粏淇℃伅");
+            }
+            //鏌ヨ揣浣�
+            Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+            if (locationInfo == null)
+            {
+                return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
+            }
+
+            var ordernos = stockInfo.Details.GroupBy(x => x.OrderNo).Select(o => o.Key).ToList();
+            var inboundOrders = _inboundOrderService.Repository.Db.Queryable<Dt_InboundOrder>().Where(x => ordernos.Contains(x.InboundOrderNo)).Includes(x => x.Details).ToList();
+            Dt_InboundOrderDetail? inboundOrderDetail = null;
+
+            foreach (var inboundOrder in inboundOrders)
+            {
+                //鏍囧噯鍏ュ簱娴佺▼鏌ユ壘鍏ュ簱鍗曟嵁
+                if (inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt())
+                {
+                    foreach (var item in stockInfo.Details.Where(x => x.OrderNo == inboundOrder.InboundOrderNo).ToList())
+                    {
+                        var inbounddetail = inboundOrder.Details.Where(x => x.lineNo == item.InboundOrderRowNo && x.Barcode == item.Barcode).FirstOrDefault();
+                        if (inbounddetail != null)
+                        {
+                            inbounddetail.OverInQuantity += item.StockQuantity;
+                            if (inbounddetail.OverInQuantity == inbounddetail.OrderQuantity)
+                            {
+                                inbounddetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+                            }
+                            else if (inbounddetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
+                            {
+                                inbounddetail.OrderDetailStatus = OrderDetailStatusEnum.Inbounding.ObjToInt();
+                            }
+                            _inboundOrderDetailService.UpdateData(inbounddetail);
+                        }
+                    }
+                    if (inboundOrder.Details.Count == inboundOrder.Details.Where(x => x.OrderQuantity == x.OverInQuantity).Count())
+                    {
+                        inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt();
+                    }
+                    else if (inboundOrder.OrderStatus == InOrderStatusEnum.鏈紑濮�.ObjToInt())
+                    {
+                        inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
+                    }
+                    _inboundOrderService.UpdateData(inboundOrder);
+                }
+            }
+            stockInfo.LocationCode = task.TargetAddress;
+            stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+            stockInfo.Details.ForEach(x =>
+            {
+                x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+            });
+            _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+            _stockService.StockInfoDetailService.Repository.UpdateData(stockInfo.Details);
+
+            beforeQuantity = stockInfo.Details.Where(x => x.Id != 0).Sum(x => x.StockQuantity);
+
+            int beforeStatus = locationInfo.LocationStatus;
+            if (stockInfo.PalletType == PalletTypeEnum.Empty.ObjToInt())
+            {
+                locationInfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt();
+            }
+            else
+            {
+                locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+            }
+            _locationInfoService.Repository.UpdateData(locationInfo);
+
+            task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+
+            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+
+            _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
+
+            _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, beforeQuantity, stockInfo.Details.Sum(x => x.StockQuantity) + beforeQuantity, WIDESEA_Common.StockEnum.StockChangeType.MaterielGroup);
+
+
+            return WebResponseContent.Instance.OK();
+        }
+
+
+        public async Task<WebResponseContent> InEmptyTaskCompleted(Dt_Task task)
+        {
+
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_Task task = await Repository.QueryFirstAsync(x => x.TaskNum == taskNum);
-                if (task == null)
-                {
-                    return await Task.FromResult(WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔′俊鎭�"));
-                }
+
                 Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                 if (locationInfo == null)
                 {
                     return content.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
                 }
-                Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First();
+                Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).First();
                 if (stockInfo == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅");
@@ -361,13 +259,24 @@
                 {
                     return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
                 }
-                LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
-                locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+
+
+                var beforelocationStatus = locationInfo.LocationStatus;
+                locationInfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt();
+                _locationInfoService.Repository.UpdateData(locationInfo);
 
                 stockInfo.LocationCode = locationInfo.LocationCode;
+                stockInfo.PalletCode = task.PalletCode;
+                stockInfo.LocationCode = task.TargetAddress;
+                stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                _stockRepository.UpdateData(stockInfo);
 
-                Dt_InboundOrder? inboundOrder = _inboundOrderService.Repository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == stockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
-                Dt_InboundOrderDetail? inboundOrderDetail = null;
+                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? WIDESEA_Core.Enums.OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+
+                _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforelocationStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
+
+
 
                 return content;
             }
@@ -376,5 +285,49 @@
                 return await Task.FromResult(WebResponseContent.Instance.Error(ex.Message));
             }
         }
+
+
+
+        public async Task<WebResponseContent> OutEmptyTaskCompleted(Dt_Task task)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).First();
+                if (stockInfo == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑搴撳瓨淇℃伅");
+                }
+                Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+
+                if (locationInfo == null)
+                {
+                    return content.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
+                }
+
+                _stockRepository.Db.Deleteable(stockInfo);
+
+                int beforeStatus = locationInfo.LocationStatus;
+
+                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+
+                _locationInfoService.Repository.UpdateData(locationInfo);
+
+
+                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+
+                _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Outbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
+
+                return WebResponseContent.Instance.OK();
+
+            }
+            catch (Exception ex)
+            {
+                return await Task.FromResult(WebResponseContent.Instance.Error(ex.Message));
+            }
+        }
+
     }
 }

--
Gitblit v1.9.3