From 02e4718a9a3f03e2385d4e26ffbedf1ceb89908e Mon Sep 17 00:00:00 2001
From: yanjinhui <3306209981@qq.com>
Date: 星期三, 19 十一月 2025 09:32:27 +0800
Subject: [PATCH] 优化人工入库,防止人工出现散件

---
 新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs |  625 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 567 insertions(+), 58 deletions(-)

diff --git "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs" "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs"
index c274e66..f9114b7 100644
--- "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs"
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs"
@@ -9,8 +9,10 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Transactions;
 using WIDESEA_Common;
 using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.MaterielEnum;
 using WIDESEA_Common.OrderEnum;
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.TaskEnum;
@@ -33,9 +35,8 @@
 
 namespace WIDESEA_SquareCabinServices
 {
-    public class CabinOrderServices : ServiceBase<Dt_CabinOrder, IRepository<Dt_CabinOrder>>, ICabinOrderServices
+    public partial class CabinOrderServices : ServiceBase<Dt_CabinOrder, IRepository<Dt_CabinOrder>>, ICabinOrderServices
     {
-        private readonly IBasicService _basicService;
         private readonly IMedicineGoodsServices _medicineGoodsServices;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly IInventory_BatchServices _inventory_BatchServices;
@@ -43,11 +44,13 @@
         private readonly ICabinOrderDetailServices _cabinOrderDetailServices;
         private readonly ISupplyTaskService _supplyTaskService;
         private readonly ISupplyTaskHtyService _supplyTaskHtyService;
+        private readonly ILocationInfoService _locationInfoService;
+        private readonly IMaterielInfoService _materielInfoService;
+        private readonly IMessageInfoService _messageInfoService;
         public IRepository<Dt_CabinOrder> Repository => BaseDal;
 
-        public CabinOrderServices(IRepository<Dt_CabinOrder> BaseDal, IBasicService basicService, IMedicineGoodsServices medicineGoodsServices, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, ICabinOrderDetailServices cabinOrderDetailServices, ICabinOrderHtyServices cabinOrderHtyServices, ICabinOrderDetailHtyServices cabinOrderDetailHtyServices, ISupplyTaskService supplyTaskService, ISupplyTaskHtyService supplyTaskHtyService) : base(BaseDal)
+        public CabinOrderServices(IRepository<Dt_CabinOrder> BaseDal, IMedicineGoodsServices medicineGoodsServices, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, ICabinOrderDetailServices cabinOrderDetailServices, ICabinOrderHtyServices cabinOrderHtyServices, ICabinOrderDetailHtyServices cabinOrderDetailHtyServices, ISupplyTaskService supplyTaskService, ISupplyTaskHtyService supplyTaskHtyService, IMessageInfoService messageInfoService, IMaterielInfoService materielInfoService, ILocationInfoService locationInfoService) : base(BaseDal)
         {
-            _basicService = basicService;
             _medicineGoodsServices = medicineGoodsServices;
             _unitOfWorkManage = unitOfWorkManage;
             _inventory_BatchServices = inventory_BatchServices;
@@ -55,12 +58,15 @@
             _cabinOrderDetailServices = cabinOrderDetailServices;
             _supplyTaskService = supplyTaskService;
             _supplyTaskHtyService = supplyTaskHtyService;
+            _messageInfoService = messageInfoService;
+            _materielInfoService = materielInfoService;
+            _locationInfoService = locationInfoService;
         }
 
 
 
         /// <summary>
-        /// pda鏌ヨ鍑哄簱鍗曚俊鎭�
+        /// pda鏌ヨ鍏ュ簱鍗曚俊鎭�
         /// </summary>
         /// <param name="saveModel"></param>
         /// <returns></returns>
@@ -121,20 +127,31 @@
                 var LocationCode = saveModel.MainData["LocationCode"].ToString();
                 var orderNo = saveModel.MainData["orderNo"].ToString();
                 var batchNo = saveModel.MainData["batchNo"].ToString();
+                var id = saveModel.MainData["id"].ObjToInt();
                 var materielCode = saveModel.MainData["materielCode"].ToString();
                 var Inqty = saveModel.MainData["Inqty"].ObjToInt();
                 var warehouseCode = saveModel.MainData["warehouseCode"].ToString();
                 Dt_CabinOrder cabinOrder = BaseDal.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == orderNo && x.Warehouse_no == warehouseCode).Includes(x => x.Details).First();
                 if (cabinOrder == null || cabinOrder.OdrderStatus == "宸插畬鎴�")
                     return WebResponseContent.Instance.Error($"鍏ュ簱鍗曞凡瀹屾垚");
-                Dt_CabinOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Goods_no == materielCode && x.Batch_num == batchNo && x.Status == 2).FirstOrDefault();
+                //Dt_CabinOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Goods_no == materielCode && x.Batch_num == batchNo && x.Status == 2).FirstOrDefault();
+                Dt_CabinOrderDetail? cabinOrderDetail = cabinOrder.Details.Where(x => x.Id == id).FirstOrDefault();
                 if (cabinOrderDetail == null || cabinOrderDetail.OrderDetailStatus == "宸插畬鎴�")
                     return WebResponseContent.Instance.Error($"鍏ュ簱鍗曟槑缁嗗凡瀹屾垚");
-                Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == cabinOrderDetail.Goods_no);
+                Dt_MaterielInfo materielInfo = _materielInfoService.Repository.QueryFirst(x => x.MaterielCode == cabinOrderDetail.Goods_no);
                 if (materielInfo == null) return WebResponseContent.Instance.Error($"璇风淮鎶ょ墿鏂欑紪鍙枫�恵cabinOrderDetail.Goods_no}銆戠殑鐗╂枡淇℃伅");
                 cabinOrderDetail.Order_Inqty += Inqty;
                 if (cabinOrderDetail.Order_Inqty > cabinOrderDetail.Order_qty)
                     return WebResponseContent.Instance.Error($"鍏ュ簱鏁伴噺涓嶅彲瓒呭嚭鍗曟嵁鏁伴噺");
+                //澶т欢搴撴暣绠辨牎楠�
+                if (warehouseCode == WarehouseEnum.澶т欢搴�.ObjToInt().ToString("000")&& (materielInfo.MaterielSourceType==MaterielSourceTypeEnum.SelfMadePart))
+                { 
+                    var BoxRule = materielInfo.BoxQty;
+                    if (BoxRule > 0 && Inqty % BoxRule != 0)
+                    {
+                        return WebResponseContent.Instance.Error($"澶т欢搴撳彧鍏佽瀛樻斁鏁寸璐х墿锛佸綋鍓嶅叆搴撴暟閲� {Convert.ToInt32(Inqty)} 涓嶆槸绠辫 {Convert.ToInt32(BoxRule)} 鐨勬暣鏁板��");
+                    }
+                }
 
                 #region 澶勭悊鍏ュ簱鍗曪紝璐т綅锛屽簱瀛橈紝搴撳瓨鎵规淇℃伅
                 _unitOfWorkManage.BeginTran();
@@ -153,16 +170,17 @@
                 #endregion
 
                 #region 璐т綅
-                var location = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode);
+                var location = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode);
                 if (location == null) return WebResponseContent.Instance.Error($"璇风淮鎶よ揣浣嶇紪鍙枫�恵LocationCode}銆戠殑璐т綅淇℃伅");
-                if (location.EnableStatus == EnableStatusEnum.Disable.ObjToInt())
-                    return WebResponseContent.Instance.Error($"璐т綅缂栧彿銆恵LocationCode}銆戝凡绂佺敤锛岃鎭㈠姝e父鍐嶄娇鐢�");
+              
+                //if (location.EnableStatus == EnableStatusEnum.Disable.ObjToInt())
+                //    return WebResponseContent.Instance.Error($"璐т綅缂栧彿銆恵LocationCode}銆戝凡绂佺敤锛岃鎭㈠姝e父鍐嶄娇鐢�");
                 if (location.WarehouseCode != cabinOrderDetail.Reservoirarea)
                     return WebResponseContent.Instance.Error($"璐т綅缂栧彿銆恵LocationCode}銆戞墍灞炲簱鎴夸笌褰撳墠鍏ュ簱鍗曟墍灞炲簱鎴夸笉鍖归厤");
                 if (location.LocationStatus == LocationStatusEnum.Free.ObjToInt())
                 {
                     location.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
-                    _basicService.LocationInfoService.UpdateData(location);
+                    _locationInfoService.UpdateData(location);
                 }
                 #endregion
 
@@ -195,6 +213,21 @@
                         Creater = App.User.UserName,
                         CreateDate = DateTime.Now,
                     };
+                    switch (inventoryInfo.WarehouseCode)
+                    {
+                        case "001":
+                            inventoryInfo.Remark = "鏅鸿兘绔嬪簱";
+                            break;
+                        case "002":
+                            inventoryInfo.Remark = "澶т欢搴�";
+                            break;
+                        case "003":
+                            inventoryInfo.Remark = "楹荤簿搴�";
+                            break;
+                        case "010":
+                            inventoryInfo.Remark = "鍐峰喕搴�";
+                            break;
+                    }
                     _inventoryInfoService.AddData(inventoryInfo);
                 }
                 #endregion
@@ -268,7 +301,7 @@
                         Status = false,
                         StockQuantity = inventoryInfo.StockQuantity,
                         AvailableQuantity = inventoryInfo.StockQuantity,
-                        ValidityPeriod = inventoryInfo.ValidityPeriod,
+                        ValidityPeriod = inventoryInfo.ValidityPeriod.ObjToDate(),
                         SupplyQuantity = inventoryInfo.SupplyQuantity,
                     };
                     _inventory_BatchServices.AddData(inventory_Batch);
@@ -299,6 +332,16 @@
             {
                 string WareCodeMJ = WarehouseEnum.楹荤簿搴�.ObjToInt().ToString("000");
                 string WareCodeLD = WarehouseEnum.鍐峰喕搴�.ObjToInt().ToString("000");
+                #region 妫�鏌ユ槸鍚︽湁鏈畬鎴愮殑鐩樼偣浠诲姟
+                var dt_bath = _inventory_BatchServices.Repository.QueryData(x => order.details.Select(d => d.goods_no).Contains(x.MaterielCode)).ToList();
+                if (dt_bath.Count>=1)
+                {
+                    foreach (var item in dt_bath)
+                    {
+                        if (item.SupplyQuantity > 0) throw new Exception($"鍏ュ簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵dt_bath[0].MaterielCode}銆戝瓨鍦ㄦ湭瀹屾垚鐨勭洏鐩堝叆搴撲换鍔★紝璇峰鐞嗗畬鎴愬悗鍐嶈繘琛屾甯稿叆搴撴搷浣�");
+                    }
+                } 
+                #endregion
                 List<Dt_CabinOrder> dt_CabinOrders = new List<Dt_CabinOrder>();
                 #region 鐗规畩鑽搧鍏ョ壒娈婂簱鎴�
                 if (order.warehouse_no == WareCodeMJ || order.warehouse_no == WareCodeLD)
@@ -314,6 +357,7 @@
                         Warehouse_no = order.warehouse_no,
                         Details = order.details.Select(d => new Dt_CabinOrderDetail
                         {
+                            Reservoirarea = order.warehouse_no,
                             Goods_no = d.goods_no,
                             Order_qty = Math.Abs(d.order_qty),
                             Batch_num = d.batch_num,
@@ -323,11 +367,13 @@
                         }).ToList()
                     };
                     dt_CabinOrders.Add(entityOrder);
-                    webResponseContent.OK(data: dt_CabinOrders);
+                    BaseDal.Db.InsertNav(dt_CabinOrders).Include(x => x.Details).ExecuteCommand();
+                    //webResponseContent.OK(data: dt_CabinOrders);
                 }
                 #endregion
                 else
                 {
+                    #region 鍒涘缓鍏ュ簱鍗曞ご琛ㄣ�佸ぇ浠跺簱鍜岀珛搴�
                     var entityOrder = new Dt_CabinOrder//澶т欢搴撹鍗�
                     {
                         Order_no = order.order_no,
@@ -350,17 +396,19 @@
                         Warehouse_no = WarehouseEnum.绔嬪簱.ObjToInt().ToString("000"),
                         Details = new List<Dt_CabinOrderDetail>()
                     };
+                    #endregion
+
+                    List<Dt_MaterielInfo> materielInfos = _materielInfoService.Repository.QueryData(x => order.details.Select(x => x.goods_no).Contains(x.MaterielCode)).ToList();
+                    List<Dt_MaterielInfo> materielInfosUp = new List<Dt_MaterielInfo>();
                     foreach (var item in order.details)
                     {
                         // 灏嗕笂娓稿叆搴撴暟閲忚浆涓烘鏁�
                         item.order_qty = Math.Abs(item.order_qty);
                         #region 鏍规嵁鐗╂枡缂栫爜鏌ヨ鐗╂枡淇℃伅
-                        Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == item.goods_no);
+                        Dt_MaterielInfo? materielInfo = materielInfos.Where(x => x.MaterielCode == item.goods_no).FirstOrDefault();
                         if (materielInfo == null) throw new Exception($"鏈壘鍒拌嵂鍝佺紪鐮併�恵item.goods_no}銆戠殑淇℃伅");
                         if (!Enum.IsDefined(typeof(MaterielSourceTypeEnum), materielInfo.MaterielSourceType))
                             throw new Exception($"璇疯缃嵂鍝佺紪鍙枫�恵item.goods_no}銆戠殑灞炴�у垎绫�");
-                        if (materielInfo.BoxQty < 1) throw new Exception($"璇疯缃嵂鍝佺紪鍙枫�恵item.goods_no}銆戠殑绠辫鏁伴噺");
-                        if (materielInfo.MinQty < 1) throw new Exception($"璇疯缃嵂鍝佺紪鍙枫�恵item.goods_no}銆戠殑绔嬪簱鏈�浣庡簱瀛樻暟");
                         #endregion
                         #region 澶т欢
                         if (materielInfo.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart)//濡傛灉鐗╂枡鏄ぇ浠�
@@ -380,6 +428,8 @@
                         #endregion
                         else
                         {
+                            if (materielInfo.BoxQty < 1) throw new Exception($"璇疯缃嵂鍝佺紪鍙枫�恵item.goods_no}銆戠殑绠辫鏁伴噺");
+                            if (materielInfo.MinQty < 1) throw new Exception($"璇疯缃嵂鍝佺紪鍙枫�恵item.goods_no}銆戠殑绔嬪簱鏈�浣庡簱瀛樻暟");
                             Dt_CabinOrderDetail orderDetail = null;
                             var ys = item.order_qty % materielInfo.BoxQty; //涓嶈兘鏁撮櫎绠辫鐨勬暎浠舵暟 
                             var xs = (int)(item.order_qty / materielInfo.BoxQty);//淇濈暀鏁存暟
@@ -444,16 +494,29 @@
                                 entityOrder.Details.Add(orderDetail);
                             }
                             #endregion
+                            materielInfosUp.Add(materielInfo);
                         }
-                        _basicService.MaterielInfoService.Repository.UpdateData(materielInfo);
+                        //_materielInfoService.UpdateData(materielInfo);
                     }
-                    if (entityOrder.Details.Count > 0) dt_CabinOrders.Add(entityOrder);
-                    if (entityOrderLK.Details.Count > 0) dt_CabinOrders.Add(entityOrderLK);
-                    webResponseContent.OK(data: dt_CabinOrders);
+                    try
+                    {
+                        _unitOfWorkManage.BeginTran();
+                        if (materielInfosUp.Count > 0) _materielInfoService.UpdateData(materielInfosUp);
+                        if (entityOrder.Details.Count > 0) dt_CabinOrders.Add(entityOrder);
+                        if (entityOrderLK.Details.Count > 0) dt_CabinOrders.Add(entityOrderLK);
+                        if (dt_CabinOrders.Count > 0) BaseDal.Db.InsertNav(dt_CabinOrders).Include(x => x.Details).ExecuteCommand();
+                        _unitOfWorkManage.CommitTran();
+                    }
+                    catch (Exception)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                    }
+                    //webResponseContent.OK(data: dt_CabinOrders);
                 }
             }
             catch (Exception ex)
             {
+                _messageInfoService.AddMessageInfo(MessageGroupByEnum.InOrderAlarm, (order.order_type == "2" ? "鍑哄簱閫�璐�" : "姝e父鍏ュ簱") + $"锛氬崟鍙枫�恵order.order_no}銆�", ex.Message);
                 webResponseContent.Error(ex.Message);
             }
             return webResponseContent;
@@ -461,6 +524,338 @@
         #endregion
 
         #region 鍒涘缓鐩樼泩鍏ュ簱鍗�
+        //public WebResponseContent CreateCheckInOrder(UpstreamOrderInfo 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));
+        //            List<Dt_InventoryInfo> _InventoryInfos = _inventoryInfoService.Repository.QueryData(x => codes.Contains(x.MaterielCode));
+        //            #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();
+        //                if (inventory_Batch.SupplyQuantity != item.order_qty)
+        //                {
+        //                    _messageInfoService.AddMessageInfo(MessageGroupByEnum.InOrderAlarm, "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.SupplyQuantity != 0)
+        //                    {
+        //                        Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty()
+        //                        {
+        //                            WarehouseCode = inventoryInfo.WarehouseCode,
+        //                            OperateType = OperateTypeEnum.鑷姩瀹屾垚.ToString(),
+        //                            InsertTime = DateTime.Now,
+        //                            TaskStatus = SupplyStatusEnum.InFinish.ObjToInt(),
+        //                            BatchNo = inventoryInfo.BatchNo,
+        //                            MaterielName = inventoryInfo.MaterielName,
+        //                            MaterielCode = inventoryInfo.MaterielCode,
+        //                            MaterielSpec = inventoryInfo.MaterielSpec,
+        //                            TaskType = TaskTypeEnum.ChenckIn.ObjToInt(),
+        //                            CreateDate = DateTime.Now,
+        //                            Creater = App.User.UserName,
+        //                            LocationCode = inventoryInfo.LocationCode,
+        //                            OrderNo = order.order_no,
+        //                            StockQuantity = 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();
+        //                }
+        //                infosUp.AddRange(inventoryInfos);
+        //                inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity;
+        //                inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity;
+        //                inventory_Batch.SupplyQuantity = 0;
+        //                batchesUp.Add(inventory_Batch);
+        //                //_inventoryInfoService.UpdateData(inventoryInfos);
+        //                //_inventory_BatchServices.UpdateData(inventory_Batch);
+        //            }
+        //            #endregion
+        //            #region 鍒涘缓鐩樼偣鍗�
+        //            var entityOrder = new Dt_CabinOrder
+        //            {
+        //                Order_no = order.order_no,
+        //                Order_type = order.order_type,
+        //                Supplier_no = order.supplier_no,
+        //                Account_tiem = order.account_time,
+        //                OdrderStatus = "宸插畬鎴�",
+        //                Supplier_name = order.supplier_name,
+        //                Warehouse_no = order.warehouse_no,
+        //                Details = order.details.Select(d => new Dt_CabinOrderDetail
+        //                {
+        //                    Goods_no = d.goods_no,
+        //                    Order_qty = Math.Abs(d.order_qty),
+        //                    Order_Inqty = Math.Abs(d.order_qty),
+        //                    Batch_num = d.batch_num,
+        //                    Exp_date = d.exp_date,
+        //                    Reservoirarea = order.warehouse_no,
+        //                    OrderDetailStatus = "宸插畬鎴�",
+        //                    Status = 2,
+        //                }).ToList()
+        //            };
+        //            _unitOfWorkManage.BeginTran();
+        //            if (supplyTask_Hties.Count > 0) _supplyTaskHtyService.AddData(supplyTask_Hties);
+        //            if (infosUp.Count > 0) _inventoryInfoService.UpdateData(infosUp);
+        //            if (batchesUp.Count > 0) _inventory_BatchServices.UpdateData(batchesUp);
+        //            BaseDal.Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+        //            _unitOfWorkManage.CommitTran();
+        //            //Repository.AddData(entityOrder);
+        //            #endregion
+        //        }
+        //        #endregion
+        //        else
+        //        {
+        //            List<Dt_CabinOrder> cabinOrdersAdd = new List<Dt_CabinOrder>();
+        //            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)).ToList();
+        //            List<Dt_InventoryInfo> _InventoryInfos = _inventoryInfoService.Repository.QueryData(x => codes.Contains(x.MaterielCode)).ToList();
+        //            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.InOrderAlarm, "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).FirstOrDefault(); //淇敼杩欓噷鏈夊彲鑳藉彧鏈夊ぇ浠跺簱鎵嶄細瀛樺湪宸紓
+        //                //var LkQty = Math.Abs(inventoryLK.SupplyQuantity);
+        //                var LkQty = inventoryLK?.SupplyQuantity ?? 0;
+
+        //                //鑾峰彇澶т欢搴撶洏鐐瑰樊寮傛暟
+        //                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);
+        //                if (LkQty + DJQty != Qty)
+        //                {
+        //                    _messageInfoService.AddMessageInfo(MessageGroupByEnum.InOrderAlarm, "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.InFinish.ObjToInt(),
+        //                                BatchNo = inventoryInfo.BatchNo,
+        //                                MaterielName = inventoryInfo.MaterielName,
+        //                                MaterielCode = inventoryInfo.MaterielCode,
+        //                                MaterielSpec = inventoryInfo.MaterielSpec,
+        //                                TaskType = TaskTypeEnum.ChenckIn.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);
+        //                    inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity;
+        //                    inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity;
+        //                    inventory_Batch.SupplyQuantity = 0;
+        //                    //_inventory_BatchServices.UpdateData(inventory_Batch);
+        //                    batchesUp.Add(inventory_Batch);
+        //                    #endregion
+
+        //                    #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
+        //                    var entityOrder = new Dt_CabinOrder
+        //                    {
+        //                        Order_no = order.order_no,
+        //                        Order_type = order.order_type,
+        //                        Supplier_no = order.supplier_no,
+        //                        Account_tiem = order.account_time,
+        //                        OdrderStatus = "宸插畬鎴�",
+        //                        Supplier_name = order.supplier_name,
+        //                        Warehouse_no = WareCodeDJ,
+        //                        Details = order.details.Select(d => new Dt_CabinOrderDetail
+        //                        {
+        //                            Goods_no = d.goods_no,
+        //                            Order_qty = Math.Abs(d.order_qty),
+        //                            Order_Inqty = Math.Abs(d.order_qty),
+        //                            Batch_num = d.batch_num,
+        //                            Exp_date = d.exp_date,
+        //                            Reservoirarea = WareCodeDJ,
+        //                            OrderDetailStatus = "宸插畬鎴�",
+        //                            Status = 2,
+        //                        }).ToList()
+        //                    };
+        //                    //Repository.AddData(entityOrder);
+        //                    //Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+        //                    cabinOrdersAdd.Add(entityOrder);
+        //                    #endregion
+        //                }
+        //                else // LkQty != 0 琛ㄧず绔嬪簱鏈夊樊寮�
+        //                {
+        //                    #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.InFinish.ObjToInt(),
+        //                                BatchNo = inventoryInfo.BatchNo,
+        //                                MaterielName = inventoryInfo.MaterielName,
+        //                                MaterielCode = inventoryInfo.MaterielCode,
+        //                                MaterielSpec = inventoryInfo.MaterielSpec,
+        //                                TaskType = TaskTypeEnum.ChenckIn.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_CabinOrder
+        //                        {
+        //                            Order_no = order.order_no,
+        //                            Order_type = order.order_type,
+        //                            Supplier_no = order.supplier_no,
+        //                            Account_tiem = order.account_time,
+        //                            OdrderStatus = "宸插畬鎴�",
+        //                            Supplier_name = order.supplier_name,
+        //                            Warehouse_no = WareCodeDJ,
+        //                            Details = order.details.Select(d => new Dt_CabinOrderDetail
+        //                            {
+        //                                Goods_no = d.goods_no,
+        //                                Order_qty = DJQty,
+        //                                Order_Inqty = DJQty,
+        //                                Batch_num = d.batch_num,
+        //                                Exp_date = d.exp_date,
+        //                                Reservoirarea = WareCodeDJ,
+        //                                OrderDetailStatus = "宸插畬鎴�",
+        //                                Status = 2,
+        //                            }).ToList()
+        //                        };
+        //                        //Repository.AddData(cabinOrder);
+        //                        //Db.InsertNav(cabinOrder).Include(it => it.Details).ExecuteCommand();
+        //                        cabinOrdersAdd.Add(cabinOrder);
+        //                    }
+        //                    #endregion
+
+        //                    #region 鍒涘缓绔嬪簱鐩樼偣鍗�
+        //                    var entityOrder = new Dt_CabinOrder
+        //                    {
+        //                        Order_no = order.order_no,
+        //                        Order_type = order.order_type,
+        //                        Supplier_no = order.supplier_no,
+        //                        Account_tiem = order.account_time,
+        //                        OdrderStatus = "鏂板缓",
+        //                        Supplier_name = order.supplier_name,
+        //                        Warehouse_no = WareCodeLK,
+        //                        Details = order.details.Select(d => new Dt_CabinOrderDetail
+        //                        {
+        //                            Goods_no = d.goods_no,
+        //                            Order_qty = Math.Abs(LkQty),
+        //                            Batch_num = d.batch_num,
+        //                            Exp_date = d.exp_date,
+        //                            Reservoirarea = WareCodeLK,
+        //                            OrderDetailStatus = "鏂板缓",
+        //                            Status = 0,
+        //                        }).ToList()
+        //                    };
+        //                    //Repository.AddData(entityOrder);
+        //                    //Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+        //                    cabinOrdersAdd.Add(entityOrder);
+        //                    #endregion
+        //                }
+        //            }
+
+        //            _unitOfWorkManage.BeginTran();
+        //            if (supplyTask_Hties.Count > 1) _supplyTaskHtyService.AddData(supplyTask_Hties);
+
+        //            if (infosUp.Count > 0) _inventoryInfoService.UpdateData(infosUp);
+        //            if (batchesUp.Count > 0) _inventory_BatchServices.UpdateData(batchesUp);
+        //            if (cabinOrdersAdd.Count > 0) BaseDal.Db.InsertNav(cabinOrdersAdd).Include(it => it.Details).ExecuteCommand();
+        //            _unitOfWorkManage.CommitTran();
+        //            // 娣诲姞浜嬪姟鎻愪氦鍚庣殑妫�鏌�
+        //            Console.WriteLine($"浜嬪姟鎻愪氦瀹屾垚锛屽噯澶囪繑鍥炪�俢abinOrdersAdd鏁伴噺: {cabinOrdersAdd.Count}");
+        //        }
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        _unitOfWorkManage.RollbackTran();
+        //        //_messageInfoService.AddMessageInfo(MessageGroupByEnum.InOrderAlarm, "鍒涘缓鐩樼泩鍏ュ簱鍗�", ex.Message);
+        //        //return content.Error(ex.Message);
+        //        throw ex;
+        //    }
+        //    //return content;
+        //    return content.OK($"鐩樼泩鍏ュ簱鍗� {order.order_no} 鍒涘缓鎴愬姛");
+        //}
+        #endregion
+        #region 鍒涘缓鐩樼泩鍏ュ簱鍗�(淇敼鍘熺増鍥犱负鍓嶉潰璁㈠崟鍒涘缓澶辫触瀵艰嚧鍚庨潰涔熷垱寤轰笉浜嗛棶棰�)
         public WebResponseContent CreateCheckInOrder(UpstreamOrderInfo order)
         {
             WebResponseContent content = new WebResponseContent();
@@ -468,22 +863,32 @@
             {
                 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));
+                    List<Dt_InventoryInfo> _InventoryInfos = _inventoryInfoService.Repository.QueryData(x => codes.Contains(x.MaterielCode));
                     #region 搴撳瓨銆佸簱瀛樻壒娆″钩璐�
                     foreach (var item in order.details)
                     {
                         //鎵惧簱瀛樻壒娆′俊鎭�
-                        Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num);
-                        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}銆戠殑鐩樼泩鏁伴噺鏈夎");
+                        Dt_Inventory_Batch inventory_Batch = inventory_Batchs.Where(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num).First();
+                        if (inventory_Batch.SupplyQuantity != item.order_qty)
+                        {
+                            _messageInfoService.AddMessageInfo(MessageGroupByEnum.InOrderAlarm, "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 = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo);
+                        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)
+                            if (inventoryInfo.SupplyQuantity != 0)
                             {
                                 Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty()
                                 {
@@ -500,24 +905,28 @@
                                     Creater = App.User.UserName,
                                     LocationCode = inventoryInfo.LocationCode,
                                     OrderNo = order.order_no,
-                                    StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity),
+                                    StockQuantity = inventoryInfo.SupplyQuantity,
                                     SupplyQuantity = 0,
                                     Remark = "鐩樼泩鍏ュ簱"
                                 };
-                                _supplyTaskHtyService.AddData(supplyTask_Hty);
+                                //_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();
                         }
-                        inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity;
+                        infosUp.AddRange(inventoryInfos);
+                        inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity;
+                        inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity;
                         inventory_Batch.SupplyQuantity = 0;
-                        _inventoryInfoService.UpdateData(inventoryInfos);
-                        _inventory_BatchServices.UpdateData(inventory_Batch);
+                        batchesUp.Add(inventory_Batch);
+                        //_inventoryInfoService.UpdateData(inventoryInfos);
+                        //_inventory_BatchServices.UpdateData(inventory_Batch);
                     }
                     #endregion
-
                     #region 鍒涘缓鐩樼偣鍗�
                     var entityOrder = new Dt_CabinOrder
                     {
@@ -540,30 +949,52 @@
                             Status = 2,
                         }).ToList()
                     };
-                    Repository.AddData(entityOrder);
+                    using (var scop = new TransactionScope(TransactionScopeOption.RequiresNew))
+                    {
+                        if (supplyTask_Hties.Count > 0) _supplyTaskHtyService.AddData(supplyTask_Hties);
+                        if (infosUp.Count > 0) _inventoryInfoService.UpdateData(infosUp);
+                        if (batchesUp.Count > 0) _inventory_BatchServices.UpdateData(batchesUp);
+                        BaseDal.Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+                        scop.Complete();
+                    }
                     #endregion
                 }
                 #endregion
                 else
                 {
+                    List<Dt_CabinOrder> cabinOrdersAdd = new List<Dt_CabinOrder>();
                     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)).ToList();
+                    List<Dt_InventoryInfo> _InventoryInfos = _inventoryInfoService.Repository.QueryData(x => codes.Contains(x.MaterielCode)).ToList();
                     foreach (var item in order.details)
                     {
                         //鎵惧簱瀛樻壒娆′俊鎭�
-                        Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num);
-                        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}銆戠殑鐩樼泩鏁伴噺鏈夎");
+                        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.InOrderAlarm, "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 = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo);
+                        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 inventoryLK = inventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).FirstOrDefault(); //淇敼杩欓噷鏈夊彲鑳藉彧鏈夊ぇ浠跺簱鎵嶄細瀛樺湪宸紓
+                        //var LkQty = Math.Abs(inventoryLK.SupplyQuantity);
+                        var LkQty = inventoryLK?.SupplyQuantity ?? 0;
+
                         //鑾峰彇澶т欢搴撶洏鐐瑰樊寮傛暟
                         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}銆戠殑鐗╂枡淇℃伅涓庣墿鏂欐壒娆′俊鎭洏鐩堟暟閲忎笉绗�");
+                        //var DJQty = Math.Abs(inventoryDJ.Sum(x => x.SupplyQuantity));
+                        var DJQty = inventoryDJ.Sum(x => x.SupplyQuantity);
+                        if (LkQty + DJQty != Qty)
+                        {
+                            _messageInfoService.AddMessageInfo(MessageGroupByEnum.InOrderAlarm, "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 搴撳瓨銆佸簱瀛樻壒娆″钩璐�
@@ -587,21 +1018,26 @@
                                         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);
+                                    //_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();
                             }
-                            _inventoryInfoService.UpdateData(inventoryInfos);
-                            inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity;
+                            //_inventoryInfoService.UpdateData(inventoryInfos);
+                            infosUp.AddRange(inventoryInfos);
+                            inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity;
+                            inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity;
                             inventory_Batch.SupplyQuantity = 0;
-                            _inventory_BatchServices.UpdateData(inventory_Batch);
+                            //_inventory_BatchServices.UpdateData(inventory_Batch);
+                            batchesUp.Add(inventory_Batch);
                             #endregion
 
                             #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
@@ -626,10 +1062,12 @@
                                     Status = 2,
                                 }).ToList()
                             };
-                            Repository.AddData(entityOrder);
+                            //Repository.AddData(entityOrder);
+                            //Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+                            cabinOrdersAdd.Add(entityOrder);
                             #endregion
                         }
-                        else
+                        else // LkQty != 0 琛ㄧず绔嬪簱鏈夊樊寮�
                         {
                             #region 澶т欢搴撳簱瀛樺钩璐�
                             inventoryInfos = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList();
@@ -653,18 +1091,21 @@
                                         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);
+                                    //_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();
                             }
-                            _inventoryInfoService.UpdateData(inventoryInfos);
+                            //_inventoryInfoService.UpdateData(inventoryInfos);
+                            infosUp.AddRange(inventoryInfos);
                             #endregion
 
                             #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
@@ -691,7 +1132,9 @@
                                         Status = 2,
                                     }).ToList()
                                 };
-                                Repository.AddData(cabinOrder);
+                                //Repository.AddData(cabinOrder);
+                                //Db.InsertNav(cabinOrder).Include(it => it.Details).ExecuteCommand();
+                                cabinOrdersAdd.Add(cabinOrder);
                             }
                             #endregion
 
@@ -708,7 +1151,7 @@
                                 Details = order.details.Select(d => new Dt_CabinOrderDetail
                                 {
                                     Goods_no = d.goods_no,
-                                    Order_qty = LkQty,
+                                    Order_qty = Math.Abs(LkQty),
                                     Batch_num = d.batch_num,
                                     Exp_date = d.exp_date,
                                     Reservoirarea = WareCodeLK,
@@ -716,11 +1159,78 @@
                                     Status = 0,
                                 }).ToList()
                             };
-                            Repository.AddData(entityOrder);
+                            //Repository.AddData(entityOrder);
+                            //Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+                            cabinOrdersAdd.Add(entityOrder);
                             #endregion
                         }
                     }
+                    using (var scop = new TransactionScope(TransactionScopeOption.RequiresNew))
+                    {
+                        if (supplyTask_Hties.Count > 0) _supplyTaskHtyService.AddData(supplyTask_Hties);
+                        if (infosUp.Count > 0) _inventoryInfoService.UpdateData(infosUp);
+                        if (batchesUp.Count > 0) _inventory_BatchServices.UpdateData(batchesUp);
+                        if (cabinOrdersAdd.Count > 0) BaseDal.Db.InsertNav(cabinOrdersAdd).Include(it => it.Details).ExecuteCommand();
+                        scop.Complete();
+                    }
                 }
+            }
+            catch (Exception ex)
+            {
+                //throw ex;
+                return content.Error(ex.Message);
+            }
+            //return content;
+            return content.OK($"鐩樼泩鍏ュ簱鍗曞垱寤烘垚鍔�");
+        }
+        #endregion
+
+
+
+        /// <summary>
+        /// 浜哄伐鍏ュ簱瀹屾垚
+        /// </summary>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        public WebResponseContent FinishInOrder(int key)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_CabinOrder cabinOrder = BaseDal.QueryFirst(x => x.Id == key);
+                List<Dt_CabinOrder> cabinOrders = Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == cabinOrder.Order_no).Includes(x => x.Details).ToList();//鎵惧嚭鎵�鏈夊嚭搴撳崟鍙风浉鍚岀殑鍑哄簱鍗�
+
+                List<Dt_CabinOrderDetail> cabinOrderDetails = new List<Dt_CabinOrderDetail>();
+                foreach (var item in cabinOrders)
+                {
+                    if (item.Details != null) cabinOrderDetails.AddRange(item.Details);
+
+                    item.Modifier = App.User.UserName;
+                    item.ModifyDate = DateTime.Now;
+                    item.Details = null;
+                }
+                if (cabinOrder.Order_type == InOrderTypeEnum.Allocat.ObjToInt().ToString())
+                {
+                    _cabinOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetails, OperateTypeEnum.浜哄伐瀹屾垚);
+                    BaseDal.DeleteAndMoveIntoHty(cabinOrders, OperateTypeEnum.浜哄伐瀹屾垚);
+                }
+                else
+                {
+                    var url = "http://121.37.118.63:80/GYZ2/95fck/outOrderOk";
+                    if (cabinOrder.Order_type == "2") url = "http://121.37.118.63:80/GYZ2/95fck/outOrderOk";
+                    var requestDate = new
+                    {
+                        order_no = cabinOrder.Order_no
+                    };
+                    var result = HttpHelper.Post(url, requestDate.ToJsonString());
+                    var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result);
+                    if (response == null) throw new Exception("涓婃姤ERP鍏ュ簱鍗曞畬鎴愬け璐ワ紒");
+                    if (response.resultCode != "0" && response.resultMsg != "鏈壘鍒板悎娉曞崟鎹�") throw new Exception(response.resultMsg);
+
+                    _cabinOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetails, OperateTypeEnum.浜哄伐瀹屾垚);
+                    BaseDal.DeleteAndMoveIntoHty(cabinOrders, OperateTypeEnum.浜哄伐瀹屾垚);
+                }
+                content.OK();
             }
             catch (Exception ex)
             {
@@ -728,6 +1238,5 @@
             }
             return content;
         }
-        #endregion
     }
 }

--
Gitblit v1.9.3