From 7ec2fdc761acd483a621c590fae3a60af7b464ba Mon Sep 17 00:00:00 2001
From: yanjinhui <3306209981@qq.com>
Date: 星期二, 04 十一月 2025 15:17:08 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhiHuiQiCe/FangCangZhiNeng

---
 新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs |  152 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 142 insertions(+), 10 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 f61e1a2..fdb77d2 100644
--- "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
@@ -21,6 +21,7 @@
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Outbound;
 using WIDESEA_DTO.SquareCabin;
 using WIDESEA_IBasicService;
 using WIDESEA_ISquareCabinServices;
@@ -62,7 +63,138 @@
         }
         public override WebResponseContent UpdateData(SaveModel saveModel)
         {
-            return base.UpdateData(saveModel);
+            try
+            {
+                int id = saveModel.MainData["id"].ObjToInt();
+                var warehouse_no = saveModel.MainData["warehouse_no"].ToString();
+                var out_no = saveModel.MainData["out_no"].ToString();
+                //OutboundOrderAddDTO outboundOrder = saveModel.MainData.DicToModel<OutboundOrderAddDTO>();
+                //Dt_DeliveryOrder deliveryOrder = BaseDal.QueryFirst(x => x.Id == id);
+                List<DeliveryOrderDetailAddDTO> orderDetailAddDTOs = saveModel.DetailData.DicToIEnumerable<DeliveryOrderDetailAddDTO>();
+                orderDetailAddDTOs = orderDetailAddDTOs.Where(x => x.id == 0).ToList();
+                if (orderDetailAddDTOs.Count < 1) return WebResponseContent.Instance.OK();
+                if (orderDetailAddDTOs.Where(x => string.IsNullOrEmpty(x.locationCode)).Any()) return WebResponseContent.Instance.Error("璐т綅鍙蜂负蹇呭~瀛楁!");
+                if (orderDetailAddDTOs.Where(x => string.IsNullOrEmpty(x.exp_date)).Any()) return WebResponseContent.Instance.Error("鏁堟湡涓哄繀濉瓧娈�!");
+                var LocationCodes = orderDetailAddDTOs.Select(x => x.locationCode);
+                List<Dt_LocationInfo> locationInfos = _locationInfoService.Repository.QueryData(x => x.WarehouseCode == warehouse_no && LocationCodes.Contains(x.LocationCode));
+                var diff = LocationCodes.Except(locationInfos.Select(x => x.LocationCode)).ToArray();
+                if (diff.Length > 0) return WebResponseContent.Instance.Error($"璐т綅缂栧彿銆恵string.Join(", ", diff)}銆戜笉灞炰簬褰撳墠搴撴埧");
+                var array1 = orderDetailAddDTOs.Select(x => x.goods_no);
+                var MaterielInfos = _materielInfoService.Repository.QueryData(x => array1.Contains(x.MaterielCode));
+                var array2 = MaterielInfos.Select(x => x.MaterielCode);
+                diff = array1.Except(array2).ToArray();
+                if (diff.Length > 0) return WebResponseContent.Instance.Error($"璇风淮鎶ょ墿鏂欑紪鍙枫�恵string.Join(", ", diff)}銆戠殑鐗╂枡淇℃伅");
+                if (warehouse_no == WarehouseEnum.绔嬪簱.ObjToInt().ToString("000"))
+                {
+                    var MaterielInfos1 = MaterielInfos.Where(x => x.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart).ToList();
+                    if (MaterielInfos1.Count > 0)
+                    {
+                        return WebResponseContent.Instance.Error($"鐗╂枡缂栧彿銆恵string.Join(", ", MaterielInfos1.Select(x => x.MaterielCode))}銆戠殑鐗╂枡灞炴�у垎绫讳负澶т欢锛屼笉鍙叆绔嬪簱");
+                    }
+                }
+                var InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.WarehouseCode == warehouse_no && array2.ToList().Contains(x.MaterielCode));
+                var Batchs = _inventory_BatchServices.Repository.QueryData(x => array2.Contains(x.MaterielCode));
+                List<Dt_DeliveryOrderDetail> deliveryOrderDetails = new List<Dt_DeliveryOrderDetail>();
+                List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>();
+                List<Dt_InventoryInfo> inventoryInfos = new List<Dt_InventoryInfo>();
+                List<Dt_Inventory_Batch> inventory_Batches = new List<Dt_Inventory_Batch>();
+                foreach (var item in orderDetailAddDTOs)
+                {
+                    if (InventoryInfos.Where(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num).Any())
+                        return WebResponseContent.Instance.Error($"鐗╂枡缂栧彿銆恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戝凡瀛樺湪搴撳瓨");
+                    #region 娣诲姞鐩樼偣鍗曡鎯�
+                    Dt_DeliveryOrderDetail dt_DeliveryOrde = new Dt_DeliveryOrderDetail()
+                    {
+                        DeliveryOrderId = id,
+                        Reservoirarea = warehouse_no,
+                        Status = 2,
+                        Order_qty = 0,
+                        Order_Outqty = item.order_Outqty,
+                        Goods_no = item.goods_no,
+                        OotDetailStatus = "鏂板缓",
+                        Batch_num = item.batch_num,
+                        Creater = App.User.UserName,
+                        CreateDate = DateTime.Now,
+                    };
+                    deliveryOrderDetails.Add(dt_DeliveryOrde);
+                    #endregion
+
+                    #region 娣诲姞搴撳瓨銆佹壒娆′俊鎭�佺洏鐐逛换鍔�
+                    var MaterielInfo = MaterielInfos.First(x => x.MaterielCode == item.goods_no);
+                    Dt_InventoryInfo inventoryInfo = new Dt_InventoryInfo()
+                    {
+                        BatchNo = item.batch_num,
+                        MaterielCode = MaterielInfo.MaterielCode,
+                        AvailableQuantity = 0,
+                        CreateDate = DateTime.Now,
+                        Creater = App.User.UserName,
+                        InDate = DateTime.Now,
+                        LocationCode = item.locationCode,
+                        MaterielName = MaterielInfo.MaterielName,
+                        MaterielSpec = MaterielInfo.MaterielSpec,
+                        OutboundQuantity = 0,
+                        StockQuantity = 0,
+                        StockStatus = StockStatusEmun.鐩樼偣閿佸畾.ObjToInt(),
+                        SupplyQuantity = 0,
+                        WarehouseCode = warehouse_no,
+                        ValidityPeriod = item.exp_date
+                    };
+                    inventoryInfos.Add(inventoryInfo);
+                    Dt_Inventory_Batch? inventory_Batch = Batchs.FirstOrDefault(x => x.BatchNo == item.batch_num && x.MaterielCode == item.goods_no);
+                    if (inventory_Batch == null)
+                    {
+                        inventory_Batch = new Dt_Inventory_Batch()
+                        {
+                            BatchNo = inventoryInfo.BatchNo,
+                            CreateDate = inventoryInfo.CreateDate,
+                            Creater = inventoryInfo.Creater,
+                            MaterielCode = inventoryInfo.MaterielCode,
+                            ERPStockQuantity = 0,
+                            MaterielName = inventoryInfo.MaterielName,
+                            MaterielSpec = inventoryInfo.MaterielSpec,
+                            OutboundQuantity = inventoryInfo.OutboundQuantity,
+                            ProductionDate = inventoryInfo.ProductionDate,
+                            Status = false,
+                            StockQuantity = inventoryInfo.StockQuantity,
+                            AvailableQuantity = inventoryInfo.AvailableQuantity,
+                            ValidityPeriod = inventoryInfo.ValidityPeriod.ObjToDate(),
+                            SupplyQuantity = inventoryInfo.SupplyQuantity,
+                        };
+                        inventory_Batches.Add(inventory_Batch);
+                    }
+                    Dt_SupplyTask supplyTask = new Dt_SupplyTask()
+                    {
+                        WarehouseCode = warehouse_no,
+                        TaskStatus = SupplyStatusEnum.NewCheck.ObjToInt(),
+                        BatchNo = inventoryInfo.BatchNo,
+                        MaterielName = inventoryInfo.MaterielName,
+                        MaterielCode = inventoryInfo.MaterielCode,
+                        MaterielSpec = inventoryInfo.MaterielSpec,
+                        TaskType = TaskTypeEnum.OutInventory.ObjToInt(),
+                        CreateDate = DateTime.Now,
+                        Creater = App.User.UserName,
+                        LocationCode = inventoryInfo.LocationCode,
+                        OrderNo = out_no,
+                        StockQuantity = inventoryInfo.StockQuantity,
+                        SupplyQuantity = 0,
+                        Remark = "鐩樼偣"
+                    };
+                    supplyTasks.Add(supplyTask);
+                    #endregion
+                }
+                _unitOfWorkManage.BeginTran();
+                _deliveryOrderDetailServices.AddData(deliveryOrderDetails);
+                _inventoryInfoService.AddData(inventoryInfos);
+                if (inventory_Batches.Count > 0) _inventory_BatchServices.AddData(inventory_Batches);
+                _supplyTaskService.AddData(supplyTasks);
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK("鐩樼偣璇︽儏娣诲姞鎴愬姛,璇烽�氳繃ERP骞宠处锛�");
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
         }
 
         #region 鍒涘缓鍑哄簱鍗�
@@ -185,7 +317,7 @@
                     _supplyTaskService.AddData(supplyTasks);
                     _inventory_BatchServices.UpdateData(batchesUp);
                     _inventoryInfoService.UpdateData(inventoryInfosUp);
-                    BaseDal.Db.CopyNew().InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
+                    BaseDal.Db.InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
                     _unitOfWorkManage.CommitTran();
                     #endregion
                 }
@@ -438,7 +570,7 @@
                                 #region 娣诲姞鍑哄簱浠诲姟銆佷慨鏀瑰簱瀛樹俊鎭�
                                 Dt_InventoryInfo? inventoryInfo = dt_InventoryInfos.FirstOrDefault(x => x.WarehouseCode == WareCodeLK);
                                 if (inventoryInfo == null)
-                                    throw new Exception($"鏈壘鍒扮墿鏂欑紪鍙枫�恵detail.goods_no}銆戠墿鏂欐壒娆°�恵detail.batch_num}銆戝湪绔嬪簱涓殑搴撳瓨淇℃伅锛涙墍闇�鏁伴噺銆恵orderDetailLK.Order_qty}銆戣琛ヨ揣");
+                                    throw new Exception($"鍑哄簱鍗曘�恵outorder.order_no}銆戣鎯呭瓨鍦ㄦ暎浠�,鐗╂枡缂栧彿銆恵detail.goods_no}銆戠墿鏂欐壒娆°�恵detail.batch_num}銆戞墍闇�鏁伴噺銆恵Convert.ToInt32(orderDetailLK.Order_qty)}銆戣浜哄伐璋冩嫧琛ヨ揣鍏ョ珛搴�");
                                 inventoryInfo.AvailableQuantity -= orderDetailLK.Order_qty;
                                 inventoryInfo.OutboundQuantity += orderDetailLK.Order_qty;
                                 Dt_SupplyTask supplyTask = new Dt_SupplyTask()
@@ -478,9 +610,9 @@
                         _inventory_BatchServices.UpdateData(batchesUp);
                         _inventoryInfoService.UpdateData(inventoryInfosUp);
                         if (entityOrder.Details.Count > 0)
-                            BaseDal.Db.CopyNew().InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
+                            BaseDal.Db.InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
                         if (entityOrderLK.Details.Count > 0)
-                            BaseDal.Db.CopyNew().InsertNav(entityOrderLK).Include(x => x.Details).ExecuteCommand();
+                            BaseDal.Db.InsertNav(entityOrderLK).Include(x => x.Details).ExecuteCommand();
                         _unitOfWorkManage.CommitTran();
                     }
                     catch (Exception ex)
@@ -822,9 +954,7 @@
             try
             {
                 // 1锔忊儯 鏌ユ壘鎸囧畾鎵规涓庣墿鏂欑殑搴撳瓨淇℃伅
-                var batchInfo = BaseDal.Db.CopyNew().Queryable<Dt_Inventory_Batch>()
-                    .Where(x => x.BatchNo == batchNo && x.MaterielCode == goodsNo)
-                    .First();
+                var batchInfo = _inventory_BatchServices.Repository.QueryFirst(x => x.BatchNo == batchNo && x.MaterielCode == goodsNo);
 
                 if (batchInfo == null)
                     return response.Error($"鏈壘鍒拌鐗╂枡 [{goodsNo}] 鎵规 [{batchNo}] 鐨勫簱瀛樹俊鎭�");
@@ -960,6 +1090,7 @@
             }
             return content;
         }
+
         public WebResponseContent OutTaskFinish(Dt_SupplyTask supplyTask, Dt_DeliveryOrder deliveryOrder)
         {
             WebResponseContent content = new WebResponseContent();
@@ -1039,12 +1170,13 @@
             }
             return content;
         }
+
         public WebResponseContent OutTaskFinish(Dt_SupplyTask supplyTask)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_DeliveryOrder? cabinOrder = BaseDal.Db.CopyNew().Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == supplyTask.OrderNo && x.Warehouse_no == supplyTask.WarehouseCode).Includes(x => x.Details).First();
+                Dt_DeliveryOrder? cabinOrder = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == supplyTask.OrderNo && x.Warehouse_no == supplyTask.WarehouseCode).Includes(x => x.Details).First();
                 if (cabinOrder == null) return WebResponseContent.Instance.OK($"鍑哄簱鍗曞凡瀹屾垚");
 
                 Dt_DeliveryOrderDetail? cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == supplyTask.BatchNo && x.Reservoirarea == supplyTask.WarehouseCode && x.Goods_no == supplyTask.MaterielCode).FirstOrDefault();
@@ -1068,7 +1200,7 @@
                     //_deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetail, OperateTypeEnum.鑷姩瀹屾垚);
                 }
                 _deliveryOrderDetailServices.Repository.UpdateData(cabinOrderDetail);
-                var cabinOrder1 = BaseDal.Db.CopyNew().Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == cabinOrder.Out_no && x.Warehouse_no == supplyTask.WarehouseCode && x.Out_type != "20").Includes(x => x.Details).First();
+                var cabinOrder1 = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == cabinOrder.Out_no && x.Warehouse_no == supplyTask.WarehouseCode && x.Out_type != "20").Includes(x => x.Details).First();
                 if (!cabinOrder1.Details.Where(x => x.OotDetailStatus != "宸插畬鎴�").Any())
                     cabinOrder.OutStatus = "宸插畬鎴�";
                 Repository.UpdateData(cabinOrder);

--
Gitblit v1.9.3