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 |  553 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 447 insertions(+), 106 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 fdb77d2..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"
@@ -240,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();
@@ -633,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();
@@ -642,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.SupplyQuantity);
-                        if (Qty != item.order_qty) throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+                        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)
@@ -682,22 +1025,31 @@
                                     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锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                            if (inventoryInfo.StockQuantity <= 0)
+                                infosDel.Add(inventoryInfo);
+                            else
+                                infosUp.Add(inventoryInfo);
                         }
+
                         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
 
@@ -723,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
@@ -739,25 +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.SupplyQuantity);
-                        if (Qty != item.order_qty) throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+                        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) throw new Exception($"銆恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐗╂枡淇℃伅涓庣墿鏂欐壒娆′俊鎭洏浜忔暟閲忎笉绗�");
-                        if (LkQty == 0)//绔嬪簱鏃犲樊寮�
+
+                        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)
@@ -784,22 +1155,33 @@
                                         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锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                                if (inventoryInfo.StockQuantity <= 0)
+                                    infosDel.Add(inventoryInfo);
+                                else
+                                    infosUp.Add(inventoryInfo);
                             }
-                            //_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);
+
+                            // 妫�鏌ユ壒娆″簱瀛樻槸鍚︿负0锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                            if (inventory_Batch.StockQuantity <= 0)
+                                batchesDel.Add(inventory_Batch);
+                            else
+                                batchesUp.Add(inventory_Batch);
                             #endregion
 
                             #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
@@ -824,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)
@@ -857,17 +1237,21 @@
                                         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锛屽鏋滄槸鍒欐爣璁颁负鍒犻櫎
+                                if (inventoryInfo.StockQuantity <= 0)
+                                    infosDel.Add(inventoryInfo);
+                                else
+                                    infosUp.Add(inventoryInfo);
                             }
-                            //_inventoryInfoService.UpdateData(inventoryInfos);
-                            infosUp.AddRange(inventoryInfos);
                             #endregion
 
                             #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
@@ -894,12 +1278,10 @@
                                         Status = 2,
                                     }).ToList()
                                 };
-                                //Repository.AddData(cabinOrder);
-                                //Db.InsertNav(cabinOrder).Include(it => it.Details).ExecuteCommand();
                                 deliveryOrdersAdd.Add(cabinOrder);
                             }
                             #endregion
-                            //杩欓噷
+
                             #region 鍒涘缓绔嬪簱鐩樼偣鍗�
                             var entityOrder = new Dt_DeliveryOrder
                             {
@@ -921,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)
@@ -946,68 +1335,6 @@
         }
         #endregion
 
-
-        //鐩樼偣 鎷挎暣涓壒娆′俊鎭〃鐨勫晢鍝佹壒鍙峰拰鍟嗗搧缂栧彿鏉ヨ繘琛岀洏鐐�
-        public WebResponseContent InventoryGood(string batchNo, string goodsNo)
-        {
-            var response = new WebResponseContent();
-            try
-            {
-                // 1锔忊儯 鏌ユ壘鎸囧畾鎵规涓庣墿鏂欑殑搴撳瓨淇℃伅
-                var batchInfo = _inventory_BatchServices.Repository.QueryFirst(x => x.BatchNo == batchNo && x.MaterielCode == goodsNo);
-
-                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>
@@ -1091,6 +1418,12 @@
             return content;
         }
 
+
+        /// <summary>
+        /// 澶勭悊鍑哄簱鍗曘�佸簱瀛樹俊鎭�佸嚭搴撲换鍔°�佽皟鎷ㄤ换鍔�
+        /// </summary>
+        /// <param name="supplyTask"></param>
+        /// <returns></returns>
         public WebResponseContent OutTaskFinish(Dt_SupplyTask supplyTask, Dt_DeliveryOrder deliveryOrder)
         {
             WebResponseContent content = new WebResponseContent();
@@ -1124,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;
@@ -1135,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);
@@ -1156,7 +1488,15 @@
                 {
                     materielInfo.Business_qty -= supplyTask.StockQuantity;
                     if (materielInfo.Business_qty < materielInfo.MinQty)
+                    {
                         CreateAllocatInOut(materielInfo);//鍒涘缓璋冩嫧浠诲姟
+                    }
+                    else
+                    {
+                        _materielInfoService.UpdateData(materielInfo);
+                    }
+                       
+
                 }
                 #endregion
                 _unitOfWorkManage.CommitTran();
@@ -1171,6 +1511,7 @@
             return content;
         }
 
+     
         public WebResponseContent OutTaskFinish(Dt_SupplyTask supplyTask)
         {
             WebResponseContent content = new WebResponseContent();

--
Gitblit v1.9.3