From 696edbff3c8812e4b820f624d66a02ae6ddb1a06 Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期四, 16 四月 2026 13:40:18 +0800
Subject: [PATCH] Merge branch 'htq20251215' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu into htq20251215

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs |  293 +++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 237 insertions(+), 56 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_InboundService/InboundOrderService.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_InboundService/InboundOrderService.cs"
index 4458ba2..418c05f 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_InboundService/InboundOrderService.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_InboundService/InboundOrderService.cs"
@@ -7,6 +7,7 @@
 using WIDESEA_Common.LocationEnum;
 using WIDESEA_Common.OrderEnum;
 using WIDESEA_Common.StockEnum;
+using WIDESEA_Common.TaskEnum;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
@@ -18,6 +19,7 @@
 using WIDESEA_Core.Utilities;
 using WIDESEA_DTO.Base;
 using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.Stock;
 using WIDESEA_IBasicService;
 using WIDESEA_IInboundService;
 using WIDESEA_IRecordService;
@@ -46,9 +48,12 @@
         private readonly IRepository<Dt_StockInfo> _stockRepository;
         private readonly IRepository<Dt_LocationInfo> _locationInfoRepository;
         private readonly IBasicService _basicService;
+        private readonly IRepository<Dt_AllocateOrder> _allocateOrderRepository;
+        private readonly IRepository<Dt_OutboundOrder> _outboundOrderRepository;
+        private readonly IRepository<Dt_OutboundOrderDetail> _outboundOrderDetailRepository;
         public IRepository<Dt_InboundOrder> Repository => BaseDal;
 
-        public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_StockInfo> stockRepository, IRepository<Dt_LocationType> locationTypeRepository, IMaterielInfoService materielInfoService, IBasicService basicService, IRepository<Dt_LocationInfo> locationInfoRepository) : base(BaseDal)
+        public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_StockInfo> stockRepository, IRepository<Dt_LocationType> locationTypeRepository, IMaterielInfoService materielInfoService, IBasicService basicService, IRepository<Dt_LocationInfo> locationInfoRepository, IRepository<Dt_AllocateOrder> allocateOrderRepository, IRepository<Dt_OutboundOrder> outboundOrderRepository, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository) : base(BaseDal)
         {
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
@@ -65,6 +70,9 @@
             _materielInfoService = materielInfoService;
             _basicService = basicService;
             _locationInfoRepository = locationInfoRepository;
+            _allocateOrderRepository = allocateOrderRepository;
+            _outboundOrderRepository = outboundOrderRepository;
+            _outboundOrderDetailRepository = outboundOrderDetailRepository;
         }
 
         public async Task<WebResponseContent> ReceiveInboundOrder(List<Dt_InboundOrder> models, int operateType)
@@ -105,9 +113,10 @@
 
                     foreach (var item in model.Details)
                     {
+                        Dt_MaterielInfo materielInfo = materielInfos.First(x => x.MaterielCode == item.MaterielCode);
                         //var purchaseToStockResult = await _materialUnitService.ConvertPurchaseToStockAsync(item.MaterielCode, item.BarcodeQty);
 
-                        UnitConvertResultDTO totalResult = _basicService.UnitQuantityConvert(item.MaterielCode, item.Unit, item.BarcodeUnit, item.OrderQuantity);
+                        UnitConvertResultDTO totalResult = _basicService.UnitQuantityConvert(item.MaterielCode, item.Unit, materielInfo.inventoryUOM, item.OrderQuantity);
                         item.Unit = totalResult.ToUnit;
                         item.OrderQuantity = totalResult.ToQuantity;
                         if (materielInfos.Any())
@@ -466,12 +475,12 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                
+
                 (bool, string, object?) result2 = ModelValidate.ValidateModelData(materielGroupDTO);
                 if (!result2.Item1) return content = WebResponseContent.Instance.Error(result2.Item2);
 
                 bool code = _locationTypeRepository.Db.Queryable<Dt_LocationType>().Where(x => x.LocationType == materielGroupDTO.WarehouseCode).Any();
-                bool statu = _locationInfoRepository.Db.Queryable<Dt_LocationInfo>().Where(x => x.LocationType == materielGroupDTO.WarehouseCode && x.LocationStatus == (int)LocationStatusEnum.Free && x.EnableStatus == (int)EnableEnum.Enable).Any();
+                bool statu = _locationInfoRepository.Db.Queryable<Dt_LocationInfo>().Where(x => x.LocationType == materielGroupDTO.WarehouseCode && x.LocationStatus == (int)LocationStatusEnum.Free && x.EnableStatus == (int)EnableStatusEnum.Normal).Any();
                 if (!statu)
                 {
                     return content = WebResponseContent.Instance.Error($"璇ュ尯鍩熸棤璐т綅鍙垎閰�");
@@ -659,9 +668,9 @@
                 {
                     resultDTO.UniqueUnit = "";
                 }
-                var inbound =_inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo);
+                var inbound = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo);
                 var inboundDetails = _inboundOrderDetailRepository.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.OrderId == inbound.First().Id).ToList();
-                resultDTO.StockSumQuantity = inboundDetails.Where(x=>x.ReceiptQuantity==0).Sum(x=>x.OrderQuantity);
+                resultDTO.StockSumQuantity = inboundDetails.Where(x => x.ReceiptQuantity == 0).Sum(x => x.OrderQuantity);
                 resultDTO.StockCount = inboundDetails.Where(x => x.ReceiptQuantity == 0).Count();
                 //var validDetails = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(s => s.OrderNo == orderNo).ToList();
                 //resultDTO.StockSumQuantity = orderDetail.Details.Sum(d => d.OrderQuantity);
@@ -680,91 +689,165 @@
             }
         }
 
-        public WebResponseContent UndoPalletGroup(string palletCode, string barcode = "")
+        /// <summary>
+        /// 鎾ら攢缁勭洏锛堟櫤鑳借瘑鍒緭鍏ユ槸鎵樼洏鍙锋垨鏉$爜锛�
+        /// </summary>
+        /// <param name="code">鎵樼洏鍙锋垨鏉$爜</param>
+        /// <returns>鎿嶄綔缁撴灉</returns>
+        public WebResponseContent UndoPalletGroup(string code)
         {
-
-            if (string.IsNullOrWhiteSpace(palletCode))
+            if (string.IsNullOrWhiteSpace(code))
             {
-                return WebResponseContent.Instance.Error("鎵樼洏鍙蜂笉鑳戒负绌�");
+                return WebResponseContent.Instance.Error("鎵樼洏鍙锋垨鏉$爜涓嶈兘涓虹┖");
             }
-
 
             try
             {
                 _unitOfWorkManage.BeginTran();
 
-                // 2. 鏌ヨ鎵樼洏搴撳瓨涓昏褰曪紙閬垮厤鏃犳暟鎹姏寮傚父锛�
-                var stock = _stockRepository.Db.Queryable<Dt_StockInfo>()
-                    .Includes(o => o.Details)
-                    .First(x => x.PalletCode == palletCode
-                                         && (x.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨
-                                             || x.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()));
+              
+                string palletCode = null;
+                string barcode = null;
+                int stockStatus = 0; 
 
-                if (stock == null)
+                // 1. 鍏堝皾璇曟寜鎵樼洏鍙锋煡璇�
+                var stockByPallet = _stockRepository.Db.Queryable<Dt_StockInfo>()
+                    .Includes(o => o.Details)
+                    .First(x => x.PalletCode == code
+                        && (x.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨
+                            || x.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()));
+
+                if (stockByPallet != null)
                 {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺彿{palletCode}瀵瑰簲鐨勫簱瀛樿褰�");
+                    // 璇嗗埆涓烘墭鐩樺彿
+                    palletCode = code;
+                    stockStatus = stockByPallet.StockStatus; 
+
+                    var task = _taskRepository.Db.Queryable<Dt_Task>().Where(t => t.PalletCode == palletCode).ToList();
+                    if (task != null && task.Any())
+                    {
+                        return WebResponseContent.Instance.Error($"鎵樼洏鍙� {palletCode} 瀛樺湪鏈畬鎴愮殑浠诲姟锛屾棤娉曟挙閿�");
+                    }
+
+                    if (stockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt())
+                    {
+                        return WebResponseContent.Instance.Error($"鎵樼洏鍙� {palletCode} 澶勪簬鍏ュ簱纭鐘舵�侊紝绂佹鏁存墭鐩樻挙閿�锛岃鍗曠嫭鎾ら攢鏉$爜");
+                    }
+                }
+                else
+                {
+                    var detail = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(d => d.Barcode == code).First();
+
+                    if (detail != null)
+                    {
+                        var stockInfo = _stockRepository
+                            .Db.Queryable<Dt_StockInfo>()
+                            .Where(s => s.Id == detail.StockId && (s.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨 || s.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()))
+                            .First();
+
+                        if (stockInfo != null)
+                        {
+                            barcode = code;
+                            palletCode = stockInfo.PalletCode;
+                            stockStatus = stockInfo.StockStatus; 
+                        }
+                    }
+                    else
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return WebResponseContent.Instance.Error($"鏈壘鍒� {code} 瀵瑰簲鐨勬墭鐩樻垨鏉$爜璁板綍");
+                    }
                 }
 
-                // 3. 鍦烘櫙1锛氬垹闄ゆ寚瀹氭潯鐮�
+                // 鏍规嵁璇嗗埆缁撴灉鎵ц鎾ら攢閫昏緫
                 if (!string.IsNullOrWhiteSpace(barcode))
                 {
+                    // ===== 鎾ら攢鎸囧畾鏉$爜 =====
+                    var stock = _stockRepository.Db.Queryable<Dt_StockInfo>()
+                        .Includes(o => o.Details)
+                        .First(x => x.PalletCode == palletCode
+                            && (x.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨
+                                || x.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()));
+
+                    if (stock == null)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺彿 {palletCode} 瀵瑰簲鐨勫簱瀛樿褰�");
+                    }
+
                     var targetDetail = stock.Details?.FirstOrDefault(x => x.Barcode == barcode);
                     if (targetDetail == null)
                     {
                         _unitOfWorkManage.RollbackTran();
-                        return WebResponseContent.Instance.Error($"鎵樼洏{palletCode}涓嬫湭鎵惧埌鏉$爜{barcode}鐨勬槑缁嗚褰�");
+                        return WebResponseContent.Instance.Error($"鎵樼洏 {palletCode} 涓嬫湭鎵惧埌鏉$爜 {barcode} 鐨勬槑缁嗚褰�");
+                    }
+
+                    if (stockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt())
+                    {
+                        var totalDetails = stock.Details?.Count ?? 0;
+                        if (totalDetails <= 1)
+                        {
+                            _unitOfWorkManage.RollbackTran();
+                            return WebResponseContent.Instance.Error($"鎵樼洏 {palletCode} 澶勪簬鍏ュ簱纭鐘舵�侊紝褰撳墠浠呭墿浣欐渶鍚�1鏉℃槑缁嗭紝绂佹鎾ら攢锛堝繀椤讳繚鐣欒嚦灏�1鏉″簱瀛樻槑缁嗭級");
+                        }
                     }
 
                     ResetInboundOrderStatus(new List<string> { targetDetail.OrderNo }, new List<string> { targetDetail.Barcode });
-                    // 鍒犻櫎鎸囧畾鏄庣粏
                     _stockDetailRepository.DeleteData(targetDetail);
 
-
-                    // 閲嶆柊鏌ヨ鍓╀綑鏄庣粏锛堜繚璇佹暟鎹噯纭�э級
                     var remainingDetails = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>()
                         .Where(x => x.StockId == stock.Id)
                         .ToList();
 
-                    // 鍓╀綑鏄庣粏涓虹┖ 鈫� 鍒犻櫎涓昏〃 + 閲嶇疆鍏ュ簱鍗曞強鏄庣粏鐘舵��
                     if (!remainingDetails.Any())
                     {
-                        // 閲嶇疆鍏ュ簱鍗曞強鏄庣粏鐘舵��
-                        ResetInboundOrderStatus(stock.Details.Select(d => d.OrderNo).Distinct().ToList());
-
-                        _stockRepository.DeleteData(stock);
+                        if (stockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨)
+                        {
+                            ResetInboundOrderStatus(stock.Details.Select(d => d.OrderNo).Distinct().ToList());
+                            _stockRepository.DeleteData(stock);
+                        }
                         _unitOfWorkManage.CommitTran();
-                        return WebResponseContent.Instance.OK($"鏉$爜{barcode}鎾ら攢鎴愬姛锛屾墭鐩樻棤鍓╀綑鏄庣粏锛屽凡鍒犻櫎鎵樼洏骞堕噸缃叧鑱斿叆搴撳崟鐘舵��");
+                        return WebResponseContent.Instance.OK($"鏉$爜 {barcode} 鎾ら攢鎴愬姛锛屾墭鐩樻棤鍓╀綑鏄庣粏锛屽凡閲嶇疆鍏宠仈鍏ュ簱鍗曠姸鎬�");
                     }
 
                     _unitOfWorkManage.CommitTran();
-                    return WebResponseContent.Instance.OK($"鏉$爜{barcode}鎾ら攢鎴愬姛锛屾墭鐩樹粛鏈夊墿浣欐槑缁�");
+                    return WebResponseContent.Instance.OK($"鏉$爜 {barcode} 鎾ら攢鎴愬姛锛屾墭鐩樹粛鏈夊墿浣欐槑缁�");
                 }
-
-                // 鍒犻櫎鏁存墭鐩橈紙鏃犳潯鐮佷紶鍏ワ級
-                if (stock.Details == null || !stock.Details.Any())
+                else
                 {
+                    var stock = _stockRepository.Db.Queryable<Dt_StockInfo>()
+                        .Includes(o => o.Details)
+                        .First(x => x.PalletCode == palletCode
+                            && (x.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨
+                                || x.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()));
+
+                    if (stock == null)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺彿 {palletCode} 瀵瑰簲鐨勫簱瀛樿褰�");
+                    }
+
+                    if (stock.Details == null || !stock.Details.Any())
+                    {
+                        _stockRepository.DeleteData(stock);
+                        _unitOfWorkManage.CommitTran();
+                        return WebResponseContent.Instance.OK("鎵樼洏鏃犳槑缁嗚褰曪紝宸茬洿鎺ュ垹闄ゆ墭鐩樹富鏁版嵁");
+                    }
+
+                    var relatedOrderNos = stock.Details.Select(d => d.OrderNo).Distinct().ToList();
+                    if (!relatedOrderNos.Any())
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return WebResponseContent.Instance.Error("搴撳瓨鏄庣粏鏈叧鑱斾换浣曞叆搴撳崟鍙凤紝鏃犳硶瀹屾垚鎾ら攢");
+                    }
+
+                    ResetInboundOrderStatus(relatedOrderNos, stock.Details.Select(d => d.Barcode).ToList());
+                    _stockDetailRepository.DeleteData(stock.Details);
                     _stockRepository.DeleteData(stock);
+
                     _unitOfWorkManage.CommitTran();
-                    return WebResponseContent.Instance.OK("鎵樼洏鏃犳槑缁嗚褰曪紝宸茬洿鎺ュ垹闄ゆ墭鐩樹富鏁版嵁");
+                    return WebResponseContent.Instance.OK("鎵樼洏鎾ら攢鎴愬姛锛屽凡閲嶇疆鍏宠仈鍏ュ簱鍗曞強鏄庣粏鐘舵��");
                 }
-
-                // 鏈夋槑缁� 鈫� 閲嶇疆鍏ュ簱鍗曞強鏄庣粏鐘舵�� + 鍒犻櫎搴撳瓨
-                var relatedOrderNos = stock.Details.Select(d => d.OrderNo).Distinct().ToList();
-                if (!relatedOrderNos.Any())
-                {
-                    _unitOfWorkManage.RollbackTran();
-                    return WebResponseContent.Instance.Error("搴撳瓨鏄庣粏鏈叧鑱斾换浣曞叆搴撳崟鍙凤紝鏃犳硶瀹屾垚鎾ら攢");
-                }
-
-                // 閲嶇疆鍏ュ簱鍗曚富鐘舵�� + 鏄庣粏鐘舵��
-                ResetInboundOrderStatus(relatedOrderNos, stock.Details.Select(d => d.Barcode).ToList());
-
-                // 4.3 鍒犻櫎搴撳瓨鏄庣粏鍜屼富琛�
-                _stockDetailRepository.DeleteData(stock.Details);
-                _stockRepository.DeleteData(stock);
-
-                _unitOfWorkManage.CommitTran();
-                return WebResponseContent.Instance.OK("鎵樼洏鎾ら攢鎴愬姛锛屽凡閲嶇疆鍏宠仈鍏ュ簱鍗曞強鏄庣粏鐘舵��");
             }
             catch (Exception ex)
             {
@@ -803,6 +886,10 @@
                 {
                     detail.ReceiptQuantity = 0;
                     detail.OrderDetailStatus = 0;
+                    if(inboundOrder.BusinessType == "11")
+                    {
+                        detail.WarehouseCode = "";
+                    }
                     _inboundOrderDetailRepository.UpdateData(detail);
                 }
             }
@@ -844,13 +931,23 @@
                         {
                             sugarQueryable1 = sugarQueryable1.Where(x => x.InboundOrderNo.Contains(searchParameters.Value.ToString())
                             || x.UpperOrderNo.Contains(searchParameters.Value.ToString()) ||
-                            x.Details.Any(d => d.Barcode == searchParameters.Value.ToString()));
+                            x.Details.Any(d => d.Barcode == searchParameters.Value.ToString()) ||
+                            x.Details.Any(d => d.OutBoxbarcodes == searchParameters.Value.ToString()));
                         }
                         searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_InboundOrder.OrderType).FirstLetterToLower());
                         if (searchParameters != null)
                         {
                             sugarQueryable1 = sugarQueryable1.Where(x => x.OrderType.Equals(searchParameters.Value.ToString()));
                         }
+
+                        var detailMaterielCode = searchParametersList.FirstOrDefault(x => x.Name == "materielCode");
+                        if(detailMaterielCode!=null && !string.IsNullOrEmpty(detailMaterielCode.Value?.ToString()))
+                        {
+                            string materielCode = detailMaterielCode.Value.ToString().Trim();
+                            sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(d => d.MaterielCode.Contains(materielCode)));
+
+                        }
+
                         //var dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
                         //return new PageGridData<Dt_InboundOrder>(totalCount, dataList);
                     }
@@ -903,14 +1000,98 @@
         {
             WebResponseContent content = new WebResponseContent();
             var inbound = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo).First();
-            if(inbound == null)
+            if (inbound == null)
             {
                 return content.Error();
             }
 
             var details = _inboundOrderDetailRepository.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.OrderId == inbound.Id && x.ReceiptQuantity == 0).ToList();
 
-            return content.OK(data:details);
+            return content.OK(data: details);
+        }
+
+        public WebResponseContent GetLocationType(string code)
+        {
+           var warehouseAreaName = _warehouseAreaRepository.QueryFirst(x => x.Code == code);
+            if(string.IsNullOrWhiteSpace(warehouseAreaName.ToString()))
+            {
+                return WebResponseContent.Instance.Error("鏈壘鍒颁粨搴撳悕绉�");
+            }
+            var locationTypeDesc = _locationTypeRepository.Db.Queryable<Dt_LocationType>().Where(x => string.Equals(x.LocationTypeDesc, warehouseAreaName.Name, StringComparison.OrdinalIgnoreCase)).First();
+
+            return WebResponseContent.Instance.OK(data:locationTypeDesc.LocationType);
+        }
+
+        public WebResponseContent HandCloseOrder(List<string> orderNos)
+        {
+            try
+            {
+                foreach (var orderNo in orderNos)
+                {
+                    var inbound = _inboundOrderRepository.QueryFirst(x => x.InboundOrderNo == orderNo);
+                    var outbound = _outboundOrderRepository.QueryFirst(x=>x.OrderNo == orderNo);
+                    
+                    if (inbound != null)
+                    {
+                        if (inbound.OrderStatus != (int)InOrderStatusEnum.鏈紑濮� && inbound.OrderStatus != (int)InOrderStatusEnum.鍏ュ簱涓�)
+                        {
+                            return WebResponseContent.Instance.Error($"璇ュ崟鎹姸鎬佷笉鍙互鍏抽棴");
+                        }
+                        inbound.OrderStatus = (int)InOrderStatusEnum.鎵嬪姩鍏抽棴;
+                        inbound.Operator = App.User.UserName;
+                        _inboundOrderRepository.UpdateData(inbound);
+
+                        var inboundItems = _inboundOrderDetailRepository.QueryData(x => x.OrderId == inbound.Id);
+                        if(inboundItems.FirstOrDefault().OrderDetailStatus == (int)OrderDetailStatusEnum.New)
+                        {
+                            foreach (var item in inboundItems)
+                            {
+                                item.OrderDetailStatus = (int)InOrderStatusEnum.鎵嬪姩鍏抽棴;
+                                item.Modifier = App.User.UserName;
+                                BaseDal.Db.Updateable<Dt_InboundOrderDetail>(item).ExecuteCommand();
+                            }
+                        }
+                    }
+                    else if (outbound != null)
+                    {
+                        if(outbound.OrderStatus ==(int)OutOrderStatusEnum.鍑哄簱瀹屾垚)
+                        {
+                            return WebResponseContent.Instance.Error($"璇ュ崟鎹姸鎬佷笉鍙互鍏抽棴");
+                        }
+                        if(outbound.OrderStatus == (int)OutOrderStatusEnum.鍑哄簱涓�)
+                        {
+                           var outboundDetails = _outboundOrderDetailRepository.QueryData(x => x.OrderId == outbound.Id);
+                            if (outboundDetails == null)
+                            {
+                                return WebResponseContent.Instance.Error("璇ュ崟鎹姸鎬佷笉鑳藉叧闂�");
+                            }
+                            var detailStatus = outboundDetails.All(x => x.LockQuantity == x.OverOutQuantity);
+                            if (!detailStatus)
+                            {
+                                return WebResponseContent.Instance.Error("璇ュ崟鎹湁姝e湪鍑哄簱鐨勭墿鏂欙紝涓嶈兘鍏抽棴");
+                            }
+                        }
+                        outbound.OrderStatus = (int)OutOrderStatusEnum.鍏抽棴;
+                        outbound.Operator = App.User.UserName;
+                        _outboundOrderRepository.UpdateData(outbound);
+
+                        var outboundItems = BaseDal.Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.OrderId == outbound.Id).ToList();
+                        if(outboundItems.FirstOrDefault().OrderDetailStatus == (int)OrderDetailStatusEnum.New)
+                        foreach(var item in outboundItems)
+                        {
+                            item.OrderDetailStatus = (int)OutOrderStatusEnum.鍏抽棴;
+                            item.Modifier = App.User.UserName;
+                            BaseDal.Db.Updateable<Dt_OutboundOrderDetail>(item).ExecuteCommand();
+                        }
+                    }
+                    
+                }
+                return WebResponseContent.Instance.OK($"鍗曟嵁鍏抽棴鎴愬姛");
+            }
+            catch (Exception e)
+            {
+                return WebResponseContent.Instance.Error(e.Message);
+            }
         }
     }
 }

--
Gitblit v1.9.3