From 07b532a6a6adf0a9d965b037cf98c1f98accd138 Mon Sep 17 00:00:00 2001
From: yanjinhui <3306209981@qq.com>
Date: 星期五, 07 十一月 2025 20:11:09 +0800
Subject: [PATCH] 优化出入退货代码

---
 新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs |  733 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 607 insertions(+), 126 deletions(-)

diff --git "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs" "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
index b18e5ac..4a33baa 100644
--- "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
@@ -21,6 +21,7 @@
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Outbound;
 using WIDESEA_DTO.SquareCabin;
 using WIDESEA_IBasicService;
 using WIDESEA_ISquareCabinServices;
@@ -62,7 +63,138 @@
         }
         public override WebResponseContent UpdateData(SaveModel saveModel)
         {
-            return base.UpdateData(saveModel);
+            try
+            {
+                int id = saveModel.MainData["id"].ObjToInt();
+                var warehouse_no = saveModel.MainData["warehouse_no"].ToString();
+                var out_no = saveModel.MainData["out_no"].ToString();
+                //OutboundOrderAddDTO outboundOrder = saveModel.MainData.DicToModel<OutboundOrderAddDTO>();
+                //Dt_DeliveryOrder deliveryOrder = BaseDal.QueryFirst(x => x.Id == id);
+                List<DeliveryOrderDetailAddDTO> orderDetailAddDTOs = saveModel.DetailData.DicToIEnumerable<DeliveryOrderDetailAddDTO>();
+                orderDetailAddDTOs = orderDetailAddDTOs.Where(x => x.id == 0).ToList();
+                if (orderDetailAddDTOs.Count < 1) return WebResponseContent.Instance.OK();
+                if (orderDetailAddDTOs.Where(x => string.IsNullOrEmpty(x.locationCode)).Any()) return WebResponseContent.Instance.Error("璐т綅鍙蜂负蹇呭~瀛楁!");
+                if (orderDetailAddDTOs.Where(x => string.IsNullOrEmpty(x.exp_date)).Any()) return WebResponseContent.Instance.Error("鏁堟湡涓哄繀濉瓧娈�!");
+                var LocationCodes = orderDetailAddDTOs.Select(x => x.locationCode);
+                List<Dt_LocationInfo> locationInfos = _locationInfoService.Repository.QueryData(x => x.WarehouseCode == warehouse_no && LocationCodes.Contains(x.LocationCode));
+                var diff = LocationCodes.Except(locationInfos.Select(x => x.LocationCode)).ToArray();
+                if (diff.Length > 0) return WebResponseContent.Instance.Error($"璐т綅缂栧彿銆恵string.Join(", ", diff)}銆戜笉灞炰簬褰撳墠搴撴埧");
+                var array1 = orderDetailAddDTOs.Select(x => x.goods_no);
+                var MaterielInfos = _materielInfoService.Repository.QueryData(x => array1.Contains(x.MaterielCode));
+                var array2 = MaterielInfos.Select(x => x.MaterielCode);
+                diff = array1.Except(array2).ToArray();
+                if (diff.Length > 0) return WebResponseContent.Instance.Error($"璇风淮鎶ょ墿鏂欑紪鍙枫�恵string.Join(", ", diff)}銆戠殑鐗╂枡淇℃伅");
+                if (warehouse_no == WarehouseEnum.绔嬪簱.ObjToInt().ToString("000"))
+                {
+                    var MaterielInfos1 = MaterielInfos.Where(x => x.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart).ToList();
+                    if (MaterielInfos1.Count > 0)
+                    {
+                        return WebResponseContent.Instance.Error($"鐗╂枡缂栧彿銆恵string.Join(", ", MaterielInfos1.Select(x => x.MaterielCode))}銆戠殑鐗╂枡灞炴�у垎绫讳负澶т欢锛屼笉鍙叆绔嬪簱");
+                    }
+                }
+                var InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.WarehouseCode == warehouse_no && array2.ToList().Contains(x.MaterielCode));
+                var Batchs = _inventory_BatchServices.Repository.QueryData(x => array2.Contains(x.MaterielCode));
+                List<Dt_DeliveryOrderDetail> deliveryOrderDetails = new List<Dt_DeliveryOrderDetail>();
+                List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>();
+                List<Dt_InventoryInfo> inventoryInfos = new List<Dt_InventoryInfo>();
+                List<Dt_Inventory_Batch> inventory_Batches = new List<Dt_Inventory_Batch>();
+                foreach (var item in orderDetailAddDTOs)
+                {
+                    if (InventoryInfos.Where(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num).Any())
+                        return WebResponseContent.Instance.Error($"鐗╂枡缂栧彿銆恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戝凡瀛樺湪搴撳瓨");
+                    #region 娣诲姞鐩樼偣鍗曡鎯�
+                    Dt_DeliveryOrderDetail dt_DeliveryOrde = new Dt_DeliveryOrderDetail()
+                    {
+                        DeliveryOrderId = id,
+                        Reservoirarea = warehouse_no,
+                        Status = 2,
+                        Order_qty = 0,
+                        Order_Outqty = item.order_Outqty,
+                        Goods_no = item.goods_no,
+                        OotDetailStatus = "鏂板缓",
+                        Batch_num = item.batch_num,
+                        Creater = App.User.UserName,
+                        CreateDate = DateTime.Now,
+                    };
+                    deliveryOrderDetails.Add(dt_DeliveryOrde);
+                    #endregion
+
+                    #region 娣诲姞搴撳瓨銆佹壒娆′俊鎭�佺洏鐐逛换鍔�
+                    var MaterielInfo = MaterielInfos.First(x => x.MaterielCode == item.goods_no);
+                    Dt_InventoryInfo inventoryInfo = new Dt_InventoryInfo()
+                    {
+                        BatchNo = item.batch_num,
+                        MaterielCode = MaterielInfo.MaterielCode,
+                        AvailableQuantity = 0,
+                        CreateDate = DateTime.Now,
+                        Creater = App.User.UserName,
+                        InDate = DateTime.Now,
+                        LocationCode = item.locationCode,
+                        MaterielName = MaterielInfo.MaterielName,
+                        MaterielSpec = MaterielInfo.MaterielSpec,
+                        OutboundQuantity = 0,
+                        StockQuantity = 0,
+                        StockStatus = StockStatusEmun.鐩樼偣閿佸畾.ObjToInt(),
+                        SupplyQuantity = 0,
+                        WarehouseCode = warehouse_no,
+                        ValidityPeriod = item.exp_date
+                    };
+                    inventoryInfos.Add(inventoryInfo);
+                    Dt_Inventory_Batch? inventory_Batch = Batchs.FirstOrDefault(x => x.BatchNo == item.batch_num && x.MaterielCode == item.goods_no);
+                    if (inventory_Batch == null)
+                    {
+                        inventory_Batch = new Dt_Inventory_Batch()
+                        {
+                            BatchNo = inventoryInfo.BatchNo,
+                            CreateDate = inventoryInfo.CreateDate,
+                            Creater = inventoryInfo.Creater,
+                            MaterielCode = inventoryInfo.MaterielCode,
+                            ERPStockQuantity = 0,
+                            MaterielName = inventoryInfo.MaterielName,
+                            MaterielSpec = inventoryInfo.MaterielSpec,
+                            OutboundQuantity = inventoryInfo.OutboundQuantity,
+                            ProductionDate = inventoryInfo.ProductionDate,
+                            Status = false,
+                            StockQuantity = inventoryInfo.StockQuantity,
+                            AvailableQuantity = inventoryInfo.AvailableQuantity,
+                            ValidityPeriod = inventoryInfo.ValidityPeriod.ObjToDate(),
+                            SupplyQuantity = inventoryInfo.SupplyQuantity,
+                        };
+                        inventory_Batches.Add(inventory_Batch);
+                    }
+                    Dt_SupplyTask supplyTask = new Dt_SupplyTask()
+                    {
+                        WarehouseCode = warehouse_no,
+                        TaskStatus = SupplyStatusEnum.NewCheck.ObjToInt(),
+                        BatchNo = inventoryInfo.BatchNo,
+                        MaterielName = inventoryInfo.MaterielName,
+                        MaterielCode = inventoryInfo.MaterielCode,
+                        MaterielSpec = inventoryInfo.MaterielSpec,
+                        TaskType = TaskTypeEnum.OutInventory.ObjToInt(),
+                        CreateDate = DateTime.Now,
+                        Creater = App.User.UserName,
+                        LocationCode = inventoryInfo.LocationCode,
+                        OrderNo = out_no,
+                        StockQuantity = inventoryInfo.StockQuantity,
+                        SupplyQuantity = 0,
+                        Remark = "鐩樼偣"
+                    };
+                    supplyTasks.Add(supplyTask);
+                    #endregion
+                }
+                _unitOfWorkManage.BeginTran();
+                _deliveryOrderDetailServices.AddData(deliveryOrderDetails);
+                _inventoryInfoService.AddData(inventoryInfos);
+                if (inventory_Batches.Count > 0) _inventory_BatchServices.AddData(inventory_Batches);
+                _supplyTaskService.AddData(supplyTasks);
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK("鐩樼偣璇︽儏娣诲姞鎴愬姛,璇烽�氳繃ERP骞宠处锛�");
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
         }
 
         #region 鍒涘缓鍑哄簱鍗�
@@ -108,8 +240,8 @@
                     List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>();
                     List<Dt_Inventory_Batch> batchesUp = new List<Dt_Inventory_Batch>();
                     List<Dt_InventoryInfo> inventoryInfosUp = new List<Dt_InventoryInfo>();
-                    var inventory_Batchs = _inventory_BatchServices.Repository.QueryData(x => entityOrder.Details.Select(e => e.Goods_no).Contains(x.MaterielCode));
-                    var InventoryInfos = _inventoryInfoService.Repository.QueryData(x => entityOrder.Details.Select(e => e.Goods_no).Contains(x.MaterielCode) && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt() && x.AvailableQuantity > 0 && x.WarehouseCode == outorder.warehouse_no);
+                    var inventory_Batchs = _inventory_BatchServices.Repository.QueryData(x => entityOrder.Details.Select(e => e.Goods_no).Contains(x.MaterielCode)).ToList();
+                    var InventoryInfos = _inventoryInfoService.Repository.QueryData(x => entityOrder.Details.Select(e => e.Goods_no).Contains(x.MaterielCode) && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt() && x.AvailableQuantity > 0 && x.WarehouseCode == outorder.warehouse_no).ToList();
                     foreach (var item in entityOrder.Details)
                     {
                         Dt_Inventory_Batch? inventory_Batch = inventory_Batchs.Where(x => x.MaterielCode == item.Goods_no && x.BatchNo == item.Batch_num).FirstOrDefault();
@@ -185,7 +317,7 @@
                     _supplyTaskService.AddData(supplyTasks);
                     _inventory_BatchServices.UpdateData(batchesUp);
                     _inventoryInfoService.UpdateData(inventoryInfosUp);
-                    BaseDal.Db.CopyNew().InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
+                    BaseDal.Db.InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
                     _unitOfWorkManage.CommitTran();
                     #endregion
                 }
@@ -355,7 +487,7 @@
                             #region 鏁翠欢浼樺厛鍒嗛厤澶т欢搴�,璁″垝搴撳瓨,娣诲姞鍑哄簱浠诲姟
                             foreach (var item in dt_InventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ))
                             {
-                                if (xs <= 0) break;
+                                if (xs <= 0 || item.AvailableQuantity <= 0) break;
                                 decimal outqty = 0;
                                 while (item.AvailableQuantity > 0 && xs > 0)
                                 {
@@ -438,7 +570,7 @@
                                 #region 娣诲姞鍑哄簱浠诲姟銆佷慨鏀瑰簱瀛樹俊鎭�
                                 Dt_InventoryInfo? inventoryInfo = dt_InventoryInfos.FirstOrDefault(x => x.WarehouseCode == WareCodeLK);
                                 if (inventoryInfo == null)
-                                    throw new Exception($"鏈壘鍒扮墿鏂欑紪鍙枫�恵detail.goods_no}銆戝湪绔嬪簱涓殑搴撳瓨淇℃伅");
+                                    throw new Exception($"鍑哄簱鍗曘�恵outorder.order_no}銆戣鎯呭瓨鍦ㄦ暎浠�,鐗╂枡缂栧彿銆恵detail.goods_no}銆戠墿鏂欐壒娆°�恵detail.batch_num}銆戞墍闇�鏁伴噺銆恵Convert.ToInt32(orderDetailLK.Order_qty)}銆戣浜哄伐璋冩嫧琛ヨ揣鍏ョ珛搴�");
                                 inventoryInfo.AvailableQuantity -= orderDetailLK.Order_qty;
                                 inventoryInfo.OutboundQuantity += orderDetailLK.Order_qty;
                                 Dt_SupplyTask supplyTask = new Dt_SupplyTask()
@@ -478,9 +610,9 @@
                         _inventory_BatchServices.UpdateData(batchesUp);
                         _inventoryInfoService.UpdateData(inventoryInfosUp);
                         if (entityOrder.Details.Count > 0)
-                            BaseDal.Db.CopyNew().InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
+                            BaseDal.Db.InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
                         if (entityOrderLK.Details.Count > 0)
-                            BaseDal.Db.CopyNew().InsertNav(entityOrderLK).Include(x => x.Details).ExecuteCommand();
+                            BaseDal.Db.InsertNav(entityOrderLK).Include(x => x.Details).ExecuteCommand();
                         _unitOfWorkManage.CommitTran();
                     }
                     catch (Exception ex)
@@ -501,6 +633,340 @@
         #endregion
 
         #region 鍒涘缓鐩樹簭鍑哄簱鍗�
+        //public WebResponseContent CreateCheckOutOrder(UpstramOutOrderInfo order)
+        //{
+        //    WebResponseContent content = new WebResponseContent();
+        //    try
+        //    {
+        //        string WareCodeMJ = WarehouseEnum.楹荤簿搴�.ObjToInt().ToString("000");
+        //        string WareCodeLD = WarehouseEnum.鍐峰喕搴�.ObjToInt().ToString("000");
+        //        List<Dt_SupplyTask_Hty> supplyTask_Hties = new List<Dt_SupplyTask_Hty>();
+        //        List<Dt_Inventory_Batch> batchesUp = new List<Dt_Inventory_Batch>();
+        //        List<Dt_InventoryInfo> infosUp = new List<Dt_InventoryInfo>();
+        //        var codes = order.details.Select(x => x.goods_no).ToList();
+        //        #region 鐗规畩搴撴埧
+        //        if (order.warehouse_no == WareCodeMJ || order.warehouse_no == WareCodeLD)
+        //        {
+        //            List<Dt_Inventory_Batch> inventory_Batchs = _inventory_BatchServices.Repository.QueryData(x => codes.Contains(x.MaterielCode)).ToList();
+        //            List<Dt_InventoryInfo> _InventoryInfos = _inventoryInfoService.Repository.QueryData(x => codes.Contains(x.MaterielCode)).ToList();
+        //            #region 搴撳瓨銆佸簱瀛樻壒娆″钩璐�
+        //            foreach (var item in order.details)
+        //            {
+        //                //鎵惧簱瀛樻壒娆′俊鎭�
+        //                Dt_Inventory_Batch inventory_Batch = inventory_Batchs.Where(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num).First();
+        //                var Qty = Math.Abs(inventory_Batch.SupplyQuantity);
+        //                if (Qty != item.order_qty)
+        //                {
+        //                    _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, "ERP鎶ユ崯鍑哄簱閿欒", $"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+        //                    throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+        //                }
+        //                    //鎵炬墍鏈夊簱瀛�
+        //                    List<Dt_InventoryInfo> inventoryInfos = _InventoryInfos.Where(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo).ToList();
+        //                foreach (var inventoryInfo in inventoryInfos)
+        //                {
+        //                    #region 娣诲姞鐩樹簭鍑哄簱浠诲姟
+        //                    if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity)
+        //                    {
+        //                        Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty()
+        //                        {
+        //                            WarehouseCode = inventoryInfo.WarehouseCode,
+        //                            OperateType = OperateTypeEnum.鑷姩瀹屾垚.ToString(),
+        //                            InsertTime = DateTime.Now,
+        //                            TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt(),
+        //                            BatchNo = inventoryInfo.BatchNo,
+        //                            MaterielName = inventoryInfo.MaterielName,
+        //                            MaterielCode = inventoryInfo.MaterielCode,
+        //                            MaterielSpec = inventoryInfo.MaterielSpec,
+        //                            TaskType = TaskTypeEnum.ChenckOut.ObjToInt(),
+        //                            CreateDate = DateTime.Now,
+        //                            Creater = App.User.UserName,
+        //                            LocationCode = inventoryInfo.LocationCode,
+        //                            OrderNo = order.order_no,
+        //                            StockQuantity = Math.Abs(inventoryInfo.SupplyQuantity),
+        //                            SupplyQuantity = 0,
+        //                            Remark = "鐩樹簭鍏ュ簱"
+        //                        };
+        //                        //_supplyTaskHtyService.AddData(supplyTask_Hty);
+        //                        supplyTask_Hties.Add(supplyTask_Hty);
+        //                    }
+        //                    #endregion
+        //                    inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
+        //                    inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity;
+        //                    inventoryInfo.SupplyQuantity = 0;
+        //                    inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+        //                    // 妫�鏌ュ簱瀛樻槸鍚︿负0锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                          
+        //                }
+        //                inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity;
+        //                inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity;
+        //                inventory_Batch.SupplyQuantity = 0;
+        //                infosUp.AddRange(inventoryInfos);
+        //                batchesUp.Add(inventory_Batch);
+        //                // 妫�鏌ユ壒娆″簱瀛樻槸鍚︿负0锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                     
+        //                //_inventoryInfoService.UpdateData(inventoryInfos);
+        //                //_inventory_BatchServices.UpdateData(inventory_Batch);
+        //            }
+        //            #endregion
+
+        //            #region 鍒涘缓鐩樼偣鍗�
+        //            var entityOrder = new Dt_DeliveryOrder
+        //            {
+        //                Out_no = order.order_no,
+        //                Out_type = order.order_type,
+        //                Client_no = order.client_no,
+        //                Client_name = order.client_name,
+        //                OutStatus = "宸插畬鎴�",
+        //                Account_time = order.account_time,
+        //                Warehouse_no = order.warehouse_no,
+        //                Details = order.details.Select(d => new Dt_DeliveryOrderDetail
+        //                {
+        //                    Goods_no = d.goods_no,
+        //                    Order_qty = Math.Abs(d.order_qty),
+        //                    Order_Outqty = Math.Abs(d.order_qty),
+        //                    Batch_num = d.batch_num,
+        //                    Exp_date = d.exp_date,
+        //                    Reservoirarea = order.warehouse_no,
+        //                    OotDetailStatus = "宸插畬鎴�",
+        //                    Status = 2,
+        //                }).ToList()
+        //            };
+        //            _unitOfWorkManage.BeginTran();
+        //            _supplyTaskHtyService.AddData(supplyTask_Hties);
+        //            _inventoryInfoService.UpdateData(infosUp);
+        //            _inventory_BatchServices.UpdateData(batchesUp);
+        //            //BaseDal.Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+        //            _unitOfWorkManage.CommitTran();
+        //            #endregion
+        //        }
+        //        #endregion
+        //        else
+        //        {
+        //            List<Dt_DeliveryOrder> deliveryOrdersAdd = new List<Dt_DeliveryOrder>();
+        //            string WareCodeLK = WarehouseEnum.绔嬪簱.ObjToInt().ToString("000");
+        //            string WareCodeDJ = WarehouseEnum.澶т欢搴�.ObjToInt().ToString("000");
+        //            List<Dt_Inventory_Batch> inventory_Batchs = _inventory_BatchServices.Repository.QueryData(x => codes.Contains(x.MaterielCode));
+        //            List<Dt_InventoryInfo> _InventoryInfos = _inventoryInfoService.Repository.QueryData(x => codes.Contains(x.MaterielCode));
+        //            foreach (var item in order.details)
+        //            {
+        //                //鎵惧簱瀛樻壒娆′俊鎭�
+        //                Dt_Inventory_Batch inventory_Batch = inventory_Batchs.Where(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num).First();
+        //                var Qty = Math.Abs(inventory_Batch.SupplyQuantity);
+        //                if (Qty != item.order_qty)
+        //                {
+        //                    _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, "ERP鎶ユ崯鍑哄簱閿欒", $"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+        //                    throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+        //                } 
+        //                //鎵炬墍鏈夊簱瀛�
+        //                List<Dt_InventoryInfo> inventoryInfos = _InventoryInfos.Where(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo).ToList();
+        //                //鑾峰彇绔嬪簱鐩樼偣宸紓鏁�
+        //                var inventoryLK = inventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).First();
+        //                //var LkQty = Math.Abs(inventoryLK.SupplyQuantity);
+        //                var LkQty = inventoryLK.SupplyQuantity;
+        //                //鑾峰彇澶т欢搴撶洏鐐瑰樊寮傛暟
+        //                var inventoryDJ = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList();
+        //                //var DJQty = Math.Abs(inventoryDJ.Sum(x => x.SupplyQuantity));
+        //                var DJQty = inventoryDJ.Sum(x => x.SupplyQuantity);
+        //                var count = Math.Abs(LkQty + DJQty);
+        //                if (count != Qty) {
+        //                    _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, "ERP鎶ユ崯鍑哄簱閿欒", $"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+        //                    throw new Exception($"銆恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐗╂枡淇℃伅涓庣墿鏂欐壒娆′俊鎭洏浜忔暟閲忎笉绗�");
+        //                }
+        //                if (LkQty == 0)//绔嬪簱鏃犵洏鐐瑰樊寮傦紝鍙湁澶т欢搴撴湁宸紓
+        //                {
+        //                    #region 搴撳瓨銆佸簱瀛樻壒娆″钩璐�
+        //                    foreach (var inventoryInfo in inventoryInfos)
+        //                    {
+        //                        #region 娣诲姞鐩樹簭鍑哄簱浠诲姟
+        //                        if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity)
+        //                        {
+        //                            Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty()
+        //                            {
+        //                                WarehouseCode = inventoryInfo.WarehouseCode,
+        //                                OperateType = OperateTypeEnum.鑷姩瀹屾垚.ToString(),
+        //                                InsertTime = DateTime.Now,
+        //                                TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt(),
+        //                                BatchNo = inventoryInfo.BatchNo,
+        //                                MaterielName = inventoryInfo.MaterielName,
+        //                                MaterielCode = inventoryInfo.MaterielCode,
+        //                                MaterielSpec = inventoryInfo.MaterielSpec,
+        //                                TaskType = TaskTypeEnum.ChenckOut.ObjToInt(),
+        //                                CreateDate = DateTime.Now,
+        //                                Creater = App.User.UserName,
+        //                                LocationCode = inventoryInfo.LocationCode,
+        //                                OrderNo = order.order_no,
+        //                                StockQuantity = Math.Abs(inventoryInfo.SupplyQuantity),
+        //                                SupplyQuantity = 0,
+        //                                Remark = "鐩樹簭鍏ュ簱"
+        //                            };
+        //                            //_supplyTaskHtyService.AddData(supplyTask_Hty);
+        //                            supplyTask_Hties.Add(supplyTask_Hty);
+        //                        }
+        //                        #endregion
+        //                        // 鏇存柊搴撳瓨淇℃伅
+        //                        inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
+        //                        inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity;
+        //                        inventoryInfo.SupplyQuantity = 0;
+        //                        inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+        //                        // 妫�鏌ュ簱瀛樻槸鍚︿负0锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                            
+        //                    }
+        //                    //鏇存柊鎵规淇℃伅
+        //                    //_inventoryInfoService.UpdateData(inventoryInfos);
+        //                    inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity;
+        //                    inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity;
+        //                    inventory_Batch.SupplyQuantity = 0;
+        //                    //_inventory_BatchServices.UpdateData(inventory_Batch);
+        //                    infosUp.AddRange(inventoryInfos);
+        //                    batchesUp.Add(inventory_Batch);
+        //                    #endregion
+
+        //                    #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
+        //                    var entityOrder = new Dt_DeliveryOrder
+        //                    {
+        //                        Out_no = order.order_no,
+        //                        Out_type = order.order_type,
+        //                        Client_no = order.client_no,
+        //                        Account_time = order.account_time,
+        //                        OutStatus = "宸插畬鎴�",
+        //                        Client_name = order.client_name,
+        //                        Warehouse_no = WareCodeDJ,
+        //                        Details = order.details.Select(d => new Dt_DeliveryOrderDetail
+        //                        {
+        //                            Goods_no = d.goods_no,
+        //                            Order_qty = Math.Abs(d.order_qty),
+        //                            Order_Outqty = Math.Abs(d.order_qty),
+        //                            Batch_num = d.batch_num,
+        //                            Exp_date = d.exp_date,
+        //                            Reservoirarea = WareCodeDJ,
+        //                            OotDetailStatus = "宸插畬鎴�",
+        //                            Status = 2,
+        //                        }).ToList()
+        //                    };
+        //                    //Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+        //                    //Repository.AddData(entityOrder);
+        //                    deliveryOrdersAdd.Add(entityOrder);
+        //                    #endregion
+        //                }
+        //                else //绔嬪簱鏈夌洏鐐瑰樊寮傦紙闇�瑕佸嚭搴擄級锛屽ぇ浠跺簱鍙兘鏈夋垨娌℃湁宸紓
+        //                {
+        //                    #region 澶т欢搴撳簱瀛樺钩璐�
+        //                    inventoryInfos = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList();
+        //                    foreach (var inventoryInfo in inventoryInfos)
+        //                    {
+        //                        #region 娣诲姞鐩樹簭鍑哄簱浠诲姟
+        //                        if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity)
+        //                        {
+        //                            Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty()
+        //                            {
+        //                                WarehouseCode = inventoryInfo.WarehouseCode,
+        //                                OperateType = OperateTypeEnum.鑷姩瀹屾垚.ToString(),
+        //                                InsertTime = DateTime.Now,
+        //                                TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt(),
+        //                                BatchNo = inventoryInfo.BatchNo,
+        //                                MaterielName = inventoryInfo.MaterielName,
+        //                                MaterielCode = inventoryInfo.MaterielCode,
+        //                                MaterielSpec = inventoryInfo.MaterielSpec,
+        //                                TaskType = TaskTypeEnum.ChenckOut.ObjToInt(),
+        //                                CreateDate = DateTime.Now,
+        //                                Creater = App.User.UserName,
+        //                                LocationCode = inventoryInfo.LocationCode,
+        //                                OrderNo = order.order_no,
+        //                                StockQuantity = Math.Abs(inventoryInfo.SupplyQuantity),
+        //                                SupplyQuantity = 0,
+        //                                Remark = "鐩樹簭鍑哄簱"
+        //                            };
+        //                            //_supplyTaskHtyService.AddData(supplyTask_Hty);
+        //                            supplyTask_Hties.Add(supplyTask_Hty);
+        //                        }
+        //                        #endregion
+        //                        inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
+        //                        inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity;
+        //                        inventoryInfo.SupplyQuantity = 0;
+        //                        inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+        //                    }
+        //                    //_inventoryInfoService.UpdateData(inventoryInfos);
+        //                    infosUp.AddRange(inventoryInfos);
+        //                    #endregion
+
+        //                    #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
+        //                    if (DJQty != 0)
+        //                    {
+        //                        var cabinOrder = new Dt_DeliveryOrder
+        //                        {
+        //                            Out_no = order.order_no,
+        //                            Out_type = order.order_type,
+        //                            Client_name = order.client_name,
+        //                            Account_time = order.account_time,
+        //                            OutStatus = "宸插畬鎴�",
+        //                            Client_no = order.client_no,
+        //                            Warehouse_no = WareCodeDJ,
+        //                            Details = order.details.Select(d => new Dt_DeliveryOrderDetail
+        //                            {
+        //                                Goods_no = d.goods_no,
+        //                                Order_qty = DJQty,
+        //                                Order_Outqty = DJQty,
+        //                                Batch_num = d.batch_num,
+        //                                Exp_date = d.exp_date,
+        //                                Reservoirarea = WareCodeDJ,
+        //                                OotDetailStatus = "宸插畬鎴�",
+        //                                Status = 2,
+        //                            }).ToList()
+        //                        };
+        //                        //Repository.AddData(cabinOrder);
+        //                        //Db.InsertNav(cabinOrder).Include(it => it.Details).ExecuteCommand();
+        //                        deliveryOrdersAdd.Add(cabinOrder);
+        //                    }
+        //                    #endregion
+        //                    //杩欓噷
+        //                    #region 鍒涘缓绔嬪簱鐩樼偣鍗�
+        //                    var entityOrder = new Dt_DeliveryOrder
+        //                    {
+        //                        Out_no = order.order_no,
+        //                        Out_type = order.order_type,
+        //                        Client_no = order.client_no,
+        //                        Account_time = order.account_time,
+        //                        OutStatus = "鏂板缓",
+        //                        Client_name = order.client_name,
+        //                        Warehouse_no = WareCodeLK,
+        //                        Details = order.details.Select(d => new Dt_DeliveryOrderDetail
+        //                        {
+        //                            Goods_no = d.goods_no,
+        //                            Order_qty = Math.Abs(LkQty), //缁欎笅娓竁CS鐨勬槸瑕佹暣鏁�
+        //                            Batch_num = d.batch_num,
+        //                            Exp_date = d.exp_date,
+        //                            Reservoirarea = WareCodeLK,
+        //                            OotDetailStatus = "鏂板缓",
+        //                            Status = 0,
+        //                        }).ToList()
+        //                    };
+        //                    //Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+        //                    //Repository.AddData(entityOrder);
+        //                    deliveryOrdersAdd.Add(entityOrder);
+        //                    #endregion
+        //                }
+        //                //return WebResponseContent.Instance.OK("鎴愬姛");
+        //            }
+        //            _unitOfWorkManage.BeginTran();
+        //            _supplyTaskHtyService.AddData(supplyTask_Hties);
+        //            _inventoryInfoService.UpdateData(infosUp);
+        //            _inventory_BatchServices.UpdateData(batchesUp);
+        //            BaseDal.Db.InsertNav(deliveryOrdersAdd).Include(it => it.Details).ExecuteCommand();
+        //            _unitOfWorkManage.CommitTran();
+        //        }
+        //        return WebResponseContent.Instance.OK("鎴愬姛");
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        _unitOfWorkManage.RollbackTran();
+        //        content.Error(ex.Message);
+        //    }
+        //    return content;
+        //}
+        #endregion
+
+
+        #region 鍒涘缓鐩樹簭鍑哄簱鍗� 锛堟坊鍔犲垹闄ゅ簱瀛樹负0鐨勬儏鍐碉級
         public WebResponseContent CreateCheckOutOrder(UpstramOutOrderInfo order)
         {
             WebResponseContent content = new WebResponseContent();
@@ -510,20 +976,29 @@
                 string WareCodeLD = WarehouseEnum.鍐峰喕搴�.ObjToInt().ToString("000");
                 List<Dt_SupplyTask_Hty> supplyTask_Hties = new List<Dt_SupplyTask_Hty>();
                 List<Dt_Inventory_Batch> batchesUp = new List<Dt_Inventory_Batch>();
+                List<Dt_Inventory_Batch> batchesDel = new List<Dt_Inventory_Batch>();//鍒犻櫎
                 List<Dt_InventoryInfo> infosUp = new List<Dt_InventoryInfo>();
+                List<Dt_InventoryInfo> infosDel = new List<Dt_InventoryInfo>();//鍒犻櫎
                 var codes = order.details.Select(x => x.goods_no).ToList();
+
                 #region 鐗规畩搴撴埧
                 if (order.warehouse_no == WareCodeMJ || order.warehouse_no == WareCodeLD)
                 {
-                    List<Dt_Inventory_Batch> inventory_Batchs = _inventory_BatchServices.Repository.QueryData(x => codes.Contains(x.MaterielCode));
-                    List<Dt_InventoryInfo> _InventoryInfos = _inventoryInfoService.Repository.QueryData(x => codes.Contains(x.MaterielCode));
+                    List<Dt_Inventory_Batch> inventory_Batchs = _inventory_BatchServices.Repository.QueryData(x => codes.Contains(x.MaterielCode)).ToList();
+                    List<Dt_InventoryInfo> _InventoryInfos = _inventoryInfoService.Repository.QueryData(x => codes.Contains(x.MaterielCode)).ToList();
+
                     #region 搴撳瓨銆佸簱瀛樻壒娆″钩璐�
                     foreach (var item in order.details)
                     {
                         //鎵惧簱瀛樻壒娆′俊鎭�
                         Dt_Inventory_Batch inventory_Batch = inventory_Batchs.Where(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num).First();
-                        var Qty = Math.Abs(inventory_Batch.StockQuantity - inventory_Batch.SupplyQuantity);
-                        if (Qty != item.order_qty) throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+                        var Qty = Math.Abs(inventory_Batch.SupplyQuantity);
+                        if (Qty != item.order_qty)
+                        {
+                            _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, "ERP鎶ユ崯鍑哄簱閿欒", $"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+                            throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+                        }
+
                         //鎵炬墍鏈夊簱瀛�
                         List<Dt_InventoryInfo> inventoryInfos = _InventoryInfos.Where(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo).ToList();
                         foreach (var inventoryInfo in inventoryInfos)
@@ -546,24 +1021,35 @@
                                     Creater = App.User.UserName,
                                     LocationCode = inventoryInfo.LocationCode,
                                     OrderNo = order.order_no,
-                                    StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity),
+                                    StockQuantity = Math.Abs(inventoryInfo.SupplyQuantity),
                                     SupplyQuantity = 0,
                                     Remark = "鐩樹簭鍏ュ簱"
                                 };
-                                //_supplyTaskHtyService.AddData(supplyTask_Hty);
                                 supplyTask_Hties.Add(supplyTask_Hty);
                             }
                             #endregion
-                            inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+
+                            inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
+                            inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity;
                             inventoryInfo.SupplyQuantity = 0;
                             inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+
+                            // 妫�鏌ュ簱瀛樻槸鍚︿负0锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                            if (inventoryInfo.StockQuantity <= 0)
+                                infosDel.Add(inventoryInfo);
+                            else
+                                infosUp.Add(inventoryInfo);
                         }
-                        inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity;
+
+                        inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity;
+                        inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity;
                         inventory_Batch.SupplyQuantity = 0;
-                        infosUp.AddRange(inventoryInfos);
-                        batchesUp.Add(inventory_Batch);
-                        //_inventoryInfoService.UpdateData(inventoryInfos);
-                        //_inventory_BatchServices.UpdateData(inventory_Batch);
+
+                        // 妫�鏌ユ壒娆″簱瀛樻槸鍚︿负0锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                        if (inventory_Batch.StockQuantity <= 0)
+                            batchesDel.Add(inventory_Batch);
+                        else
+                            batchesUp.Add(inventory_Batch);
                     }
                     #endregion
 
@@ -589,10 +1075,19 @@
                             Status = 2,
                         }).ToList()
                     };
+
                     _unitOfWorkManage.BeginTran();
                     _supplyTaskHtyService.AddData(supplyTask_Hties);
-                    _inventoryInfoService.UpdateData(infosUp);
-                    _inventory_BatchServices.UpdateData(batchesUp);
+
+                    if (infosUp.Any())
+                        _inventoryInfoService.UpdateData(infosUp);
+                    if (infosDel.Any())
+                        _inventoryInfoService.DeleteData(infosDel);
+                    if (batchesUp.Any())
+                        _inventory_BatchServices.UpdateData(batchesUp);
+                    if (batchesDel.Any())
+                        _inventory_BatchServices.DeleteData(batchesDel);
+
                     BaseDal.Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
                     _unitOfWorkManage.CommitTran();
                     #endregion
@@ -605,22 +1100,35 @@
                     string WareCodeDJ = WarehouseEnum.澶т欢搴�.ObjToInt().ToString("000");
                     List<Dt_Inventory_Batch> inventory_Batchs = _inventory_BatchServices.Repository.QueryData(x => codes.Contains(x.MaterielCode));
                     List<Dt_InventoryInfo> _InventoryInfos = _inventoryInfoService.Repository.QueryData(x => codes.Contains(x.MaterielCode));
+
                     foreach (var item in order.details)
                     {
                         //鎵惧簱瀛樻壒娆′俊鎭�
                         Dt_Inventory_Batch inventory_Batch = inventory_Batchs.Where(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num).First();
-                        var Qty = Math.Abs(inventory_Batch.StockQuantity - inventory_Batch.SupplyQuantity);
-                        if (Qty != item.order_qty) throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+                        var Qty = Math.Abs(inventory_Batch.SupplyQuantity);
+                        if (Qty != item.order_qty)
+                        {
+                            _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, "ERP鎶ユ崯鍑哄簱閿欒", $"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+                            throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+                        }
+
                         //鎵炬墍鏈夊簱瀛�
                         List<Dt_InventoryInfo> inventoryInfos = _InventoryInfos.Where(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo).ToList();
-                        //鑾峰彇绔嬪簱鐩樼偣宸紓鏁�.銆傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘��
+                        //鑾峰彇绔嬪簱鐩樼偣宸紓鏁�
                         var inventoryLK = inventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).First();
-                        var LkQty = Math.Abs(inventoryLK.StockQuantity - inventoryLK.SupplyQuantity);
+                        var LkQty = inventoryLK.SupplyQuantity;
                         //鑾峰彇澶т欢搴撶洏鐐瑰樊寮傛暟
                         var inventoryDJ = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList();
-                        var DJQty = Math.Abs(inventoryDJ.Sum(x => x.StockQuantity) - inventoryDJ.Sum(x => x.SupplyQuantity));
-                        if (LkQty + DJQty != Qty) throw new Exception($"銆恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐗╂枡淇℃伅涓庣墿鏂欐壒娆′俊鎭洏鐩堟暟閲忎笉绗�");
-                        if (LkQty == 0)//绔嬪簱鏃犲樊寮�
+                        var DJQty = inventoryDJ.Sum(x => x.SupplyQuantity);
+                        var count = Math.Abs(LkQty + DJQty);
+
+                        if (count != Qty)
+                        {
+                            _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, "ERP鎶ユ崯鍑哄簱閿欒", $"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+                            throw new Exception($"銆恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐗╂枡淇℃伅涓庣墿鏂欐壒娆′俊鎭洏浜忔暟閲忎笉绗�");
+                        }
+
+                        if (LkQty == 0)//绔嬪簱鏃犵洏鐐瑰樊寮傦紝鍙湁澶т欢搴撴湁宸紓
                         {
                             #region 搴撳瓨銆佸簱瀛樻壒娆″钩璐�
                             foreach (var inventoryInfo in inventoryInfos)
@@ -643,24 +1151,37 @@
                                         Creater = App.User.UserName,
                                         LocationCode = inventoryInfo.LocationCode,
                                         OrderNo = order.order_no,
-                                        StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity),
+                                        StockQuantity = Math.Abs(inventoryInfo.SupplyQuantity),
                                         SupplyQuantity = 0,
                                         Remark = "鐩樹簭鍏ュ簱"
                                     };
-                                    //_supplyTaskHtyService.AddData(supplyTask_Hty);
                                     supplyTask_Hties.Add(supplyTask_Hty);
                                 }
                                 #endregion
-                                inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+
+                                // 鏇存柊搴撳瓨淇℃伅
+                                inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
+                                inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity;
                                 inventoryInfo.SupplyQuantity = 0;
                                 inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+
+                                // 妫�鏌ュ簱瀛樻槸鍚︿负0锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                                if (inventoryInfo.StockQuantity <= 0)
+                                    infosDel.Add(inventoryInfo);
+                                else
+                                    infosUp.Add(inventoryInfo);
                             }
-                            //_inventoryInfoService.UpdateData(inventoryInfos);
-                            inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity;
+
+                            //鏇存柊鎵规淇℃伅
+                            inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity;
+                            inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity;
                             inventory_Batch.SupplyQuantity = 0;
-                            //_inventory_BatchServices.UpdateData(inventory_Batch);
-                            infosUp.AddRange(inventoryInfos);
-                            batchesUp.Add(inventory_Batch);
+
+                            // 妫�鏌ユ壒娆″簱瀛樻槸鍚︿负0锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                            if (inventory_Batch.StockQuantity <= 0)
+                                batchesDel.Add(inventory_Batch);
+                            else
+                                batchesUp.Add(inventory_Batch);
                             #endregion
 
                             #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
@@ -685,16 +1206,14 @@
                                     Status = 2,
                                 }).ToList()
                             };
-                            //Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
-                            //Repository.AddData(entityOrder);
                             deliveryOrdersAdd.Add(entityOrder);
                             #endregion
                         }
-                        else
+                        else //绔嬪簱鏈夌洏鐐瑰樊寮傦紙闇�瑕佸嚭搴擄級锛屽ぇ浠跺簱鍙兘鏈夋垨娌℃湁宸紓
                         {
                             #region 澶т欢搴撳簱瀛樺钩璐�
-                            inventoryInfos = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList();
-                            foreach (var inventoryInfo in inventoryInfos)
+                            var inventoryInfosDJ = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList();
+                            foreach (var inventoryInfo in inventoryInfosDJ)
                             {
                                 #region 娣诲姞鐩樹簭鍑哄簱浠诲姟
                                 if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity)
@@ -714,20 +1233,25 @@
                                         Creater = App.User.UserName,
                                         LocationCode = inventoryInfo.LocationCode,
                                         OrderNo = order.order_no,
-                                        StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity),
+                                        StockQuantity = Math.Abs(inventoryInfo.SupplyQuantity),
                                         SupplyQuantity = 0,
                                         Remark = "鐩樹簭鍑哄簱"
                                     };
-                                    //_supplyTaskHtyService.AddData(supplyTask_Hty);
                                     supplyTask_Hties.Add(supplyTask_Hty);
                                 }
                                 #endregion
-                                inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+
+                                inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
+                                inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity;
                                 inventoryInfo.SupplyQuantity = 0;
                                 inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+
+                                // 妫�鏌ュ簱瀛樻槸鍚︿负0锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                                if (inventoryInfo.StockQuantity <= 0)
+                                    infosDel.Add(inventoryInfo);
+                                else
+                                    infosUp.Add(inventoryInfo);
                             }
-                            //_inventoryInfoService.UpdateData(inventoryInfos);
-                            infosUp.AddRange(inventoryInfos);
                             #endregion
 
                             #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
@@ -754,8 +1278,6 @@
                                         Status = 2,
                                     }).ToList()
                                 };
-                                //Repository.AddData(cabinOrder);
-                                //Db.InsertNav(cabinOrder).Include(it => it.Details).ExecuteCommand();
                                 deliveryOrdersAdd.Add(cabinOrder);
                             }
                             #endregion
@@ -773,7 +1295,7 @@
                                 Details = order.details.Select(d => new Dt_DeliveryOrderDetail
                                 {
                                     Goods_no = d.goods_no,
-                                    Order_qty = LkQty,
+                                    Order_qty = Math.Abs(LkQty), //缁欎笅娓竁CS鐨勬槸瑕佹暣鏁�
                                     Batch_num = d.batch_num,
                                     Exp_date = d.exp_date,
                                     Reservoirarea = WareCodeLK,
@@ -781,20 +1303,27 @@
                                     Status = 0,
                                 }).ToList()
                             };
-                            //Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
-                            //Repository.AddData(entityOrder);
                             deliveryOrdersAdd.Add(entityOrder);
                             #endregion
                         }
-                        //return WebResponseContent.Instance.OK("鎴愬姛");
                     }
+
                     _unitOfWorkManage.BeginTran();
                     _supplyTaskHtyService.AddData(supplyTask_Hties);
-                    _inventoryInfoService.UpdateData(infosUp);
-                    _inventory_BatchServices.UpdateData(batchesUp);
+
+                    if (infosUp.Any())
+                        _inventoryInfoService.UpdateData(infosUp);
+                    if (infosDel.Any())
+                        _inventoryInfoService.DeleteData(infosDel);
+                    if (batchesUp.Any())
+                        _inventory_BatchServices.UpdateData(batchesUp);
+                    if (batchesDel.Any())
+                        _inventory_BatchServices.DeleteData(batchesDel);
+
                     BaseDal.Db.InsertNav(deliveryOrdersAdd).Include(it => it.Details).ExecuteCommand();
                     _unitOfWorkManage.CommitTran();
                 }
+
                 return WebResponseContent.Instance.OK("鎴愬姛");
             }
             catch (Exception ex)
@@ -806,70 +1335,6 @@
         }
         #endregion
 
-
-        //鐩樼偣 鎷挎暣涓壒娆′俊鎭〃鐨勫晢鍝佹壒鍙峰拰鍟嗗搧缂栧彿鏉ヨ繘琛岀洏鐐�
-        public WebResponseContent InventoryGood(string batchNo, string goodsNo)
-        {
-            var response = new WebResponseContent();
-            try
-            {
-                // 1锔忊儯 鏌ユ壘鎸囧畾鎵规涓庣墿鏂欑殑搴撳瓨淇℃伅
-                var batchInfo = BaseDal.Db.CopyNew().Queryable<Dt_Inventory_Batch>()
-                    .Where(x => x.BatchNo == batchNo && x.MaterielCode == goodsNo)
-                    .First();
-
-                if (batchInfo == null)
-                    return response.Error($"鏈壘鍒拌鐗╂枡 [{goodsNo}] 鎵规 [{batchNo}] 鐨勫簱瀛樹俊鎭�");
-
-                // 2锔忊儯 缁勮璇锋眰 DTO锛堝畬鍏ㄧ鍚堟帴鍙f枃妗g粨鏋勶級
-                var ediDto = new TowcsDto.ToediOutInfo
-                {
-                    customerCode = "905",
-                    materialCode = "YY",                              // 鐗╂枡绫诲瀷CODE
-                    externalOrderNo = $"PDCK-{batchInfo.Id}",          // 澶栭儴鍑哄簱鍗曞彿
-                    outOrderType = "20",                               // 鐩樼偣鍑哄簱鍗�
-                    priority = 1,
-                    Is_cancel = 0,
-                    details = new List<TowcsDto.ToeOutdiInDetail>
-            {
-                new TowcsDto.ToeOutdiInDetail
-                {
-                    batchNo = batchInfo.BatchNo,
-                    productCode = batchInfo.MaterielCode,
-                    productName = batchInfo.MaterielName,
-                    productSpecifications = batchInfo.MaterielSpec,
-                    quantity = (int)batchInfo.SupplyQuantity,
-                    //stocktakingDetails = new List<TowcsDto.ToOutediInStock>
-                    //{
-                    //    // 鐩樼偣鏄庣粏鍙牴鎹疄闄呮墭鐩樻媶鍒嗭紱姝ゅ绀轰緥浠�1鏉�
-                    //    new TowcsDto.ToOutediInStock
-                    //    {
-                    //        palletCode = "FC00001",
-                    //        quantity = batchInfo.SupplyQuantity.ToString()
-                    //    }
-                    //}
-                }
-            }
-                };
-
-                // 3锔忊儯 璋冪敤鎺ュ彛
-                string url = "http://172.16.1.2:9357/file-admin/api/out/ediOut";
-                var result = HttpHelper.Post(url, ediDto.ToJsonString());
-                var resp = JsonConvert.DeserializeObject<TowcsDto.TowcsResponse<object>>(result);
-
-                // 4锔忊儯 鍝嶅簲澶勭悊
-                if (resp == null)
-                    return response.Error("WCS 鏃犲搷搴�");
-                if (resp.code != "0")
-                    return response.Error($"WCS杩斿洖澶辫触: {resp.msg}");
-
-                return response.OK("鐩樼偣鍑哄簱涓嬪彂鎴愬姛");
-            }
-            catch (Exception ex)
-            {
-                return response.Error("鐩樼偣澶辫触锛�" + ex.Message);
-            }
-        }
 
 
         /// <summary>
@@ -952,6 +1417,13 @@
             }
             return content;
         }
+
+
+        /// <summary>
+        /// 澶勭悊鍑哄簱鍗曘�佸簱瀛樹俊鎭�佸嚭搴撲换鍔°�佽皟鎷ㄤ换鍔�
+        /// </summary>
+        /// <param name="supplyTask"></param>
+        /// <returns></returns>
         public WebResponseContent OutTaskFinish(Dt_SupplyTask supplyTask, Dt_DeliveryOrder deliveryOrder)
         {
             WebResponseContent content = new WebResponseContent();
@@ -985,8 +1457,7 @@
                 #endregion
 
                 #region 搴撳瓨鎵规 濡傛灉浠诲姟绫诲瀷鏄皟鎷ㄥ嚭搴撲换鍔★紙8锛夊氨涓嶄慨鏀规壒娆″簱瀛�
-                Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.BatchNo == inventoryInfo.BatchNo && x.MaterielCode ==
-                    inventoryInfo.MaterielCode);
+                Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.BatchNo == inventoryInfo.BatchNo && x.MaterielCode ==inventoryInfo.MaterielCode);
                 if (supplyTask.TaskType != TaskTypeEnum.AllocatOut.ObjToInt())
                 {
                     inventory_Batch.StockQuantity -= supplyTask.StockQuantity;
@@ -996,12 +1467,12 @@
                 supplyTask.TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt();
 
                 _unitOfWorkManage.BeginTran();
-                if (inventory_Batch.StockQuantity <= 0)
+                if (inventory_Batch.StockQuantity <= 0)//濡傛灉搴撳瓨鏁伴噺灏忎簬0灏卞垹闄ゅ簱瀛樻壒娆′俊鎭�
                     _inventory_BatchServices.DeleteData(inventory_Batch);
                 else
                     _inventory_BatchServices.UpdateData(inventory_Batch);
-                _materielInfoService.UpdateData(materielInfo);
-                if (inventoryInfo.StockQuantity <= 0)
+                //_materielInfoService.UpdateData(materielInfo);
+                if (inventoryInfo.StockQuantity <= 0)//濡傛灉搴撳瓨鏁伴噺灏忎簬0灏卞垹闄ゅ簱瀛樹俊鎭�
                     _inventoryInfoService.DeleteData(inventoryInfo);
                 else
                     _inventoryInfoService.UpdateData(inventoryInfo);
@@ -1017,7 +1488,15 @@
                 {
                     materielInfo.Business_qty -= supplyTask.StockQuantity;
                     if (materielInfo.Business_qty < materielInfo.MinQty)
+                    {
                         CreateAllocatInOut(materielInfo);//鍒涘缓璋冩嫧浠诲姟
+                    }
+                    else
+                    {
+                        _materielInfoService.UpdateData(materielInfo);
+                    }
+                       
+
                 }
                 #endregion
                 _unitOfWorkManage.CommitTran();
@@ -1031,12 +1510,14 @@
             }
             return content;
         }
+
+     
         public WebResponseContent OutTaskFinish(Dt_SupplyTask supplyTask)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_DeliveryOrder? cabinOrder = BaseDal.Db.CopyNew().Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == supplyTask.OrderNo && x.Warehouse_no == supplyTask.WarehouseCode).Includes(x => x.Details).First();
+                Dt_DeliveryOrder? cabinOrder = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == supplyTask.OrderNo && x.Warehouse_no == supplyTask.WarehouseCode).Includes(x => x.Details).First();
                 if (cabinOrder == null) return WebResponseContent.Instance.OK($"鍑哄簱鍗曞凡瀹屾垚");
 
                 Dt_DeliveryOrderDetail? cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == supplyTask.BatchNo && x.Reservoirarea == supplyTask.WarehouseCode && x.Goods_no == supplyTask.MaterielCode).FirstOrDefault();
@@ -1060,7 +1541,7 @@
                     //_deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetail, OperateTypeEnum.鑷姩瀹屾垚);
                 }
                 _deliveryOrderDetailServices.Repository.UpdateData(cabinOrderDetail);
-                var cabinOrder1 = BaseDal.Db.CopyNew().Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == cabinOrder.Out_no && x.Warehouse_no == supplyTask.WarehouseCode && x.Out_type != "20").Includes(x => x.Details).First();
+                var cabinOrder1 = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == cabinOrder.Out_no && x.Warehouse_no == supplyTask.WarehouseCode && x.Out_type != "20").Includes(x => x.Details).First();
                 if (!cabinOrder1.Details.Where(x => x.OotDetailStatus != "宸插畬鎴�").Any())
                     cabinOrder.OutStatus = "宸插畬鎴�";
                 Repository.UpdateData(cabinOrder);

--
Gitblit v1.9.3