From 3212f32acdce5938956131ecfb530e361250f82f Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期六, 25 十月 2025 18:51:56 +0800
Subject: [PATCH] 优化出入库流程、盘点流程

---
 新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs |  276 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 274 insertions(+), 2 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 f35bfb2..c274e66 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"
@@ -232,7 +232,7 @@
                     MaterielName = inventoryInfo.MaterielName,
                     MaterielCode = inventoryInfo.MaterielCode,
                     MaterielSpec = inventoryInfo.MaterielSpec,
-                    TaskType = TaskTypeEnum.InPick.ObjToInt(),
+                    TaskType = cabinOrder.Order_type == "1" ? TaskTypeEnum.In.ObjToInt() : TaskTypeEnum.OutReturn.ObjToInt(),
                     CreateDate = DateTime.Now,
                     Creater = App.User.UserName,
                     LocationCode = location.LocationCode,
@@ -297,9 +297,11 @@
             WebResponseContent webResponseContent = new WebResponseContent();
             try
             {
+                string WareCodeMJ = WarehouseEnum.楹荤簿搴�.ObjToInt().ToString("000");
+                string WareCodeLD = WarehouseEnum.鍐峰喕搴�.ObjToInt().ToString("000");
                 List<Dt_CabinOrder> dt_CabinOrders = new List<Dt_CabinOrder>();
                 #region 鐗规畩鑽搧鍏ョ壒娈婂簱鎴�
-                if (order.warehouse_no == WarehouseEnum.楹荤簿搴�.ObjToInt().ToString("000") || order.warehouse_no == WarehouseEnum.鍐峰喕搴�.ObjToInt().ToString("000"))
+                if (order.warehouse_no == WareCodeMJ || order.warehouse_no == WareCodeLD)
                 {
                     var entityOrder = new Dt_CabinOrder
                     {
@@ -457,5 +459,275 @@
             return webResponseContent;
         }
         #endregion
+
+        #region 鍒涘缓鐩樼泩鍏ュ簱鍗�
+        public WebResponseContent CreateCheckInOrder(UpstreamOrderInfo order)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string WareCodeMJ = WarehouseEnum.楹荤簿搴�.ObjToInt().ToString("000");
+                string WareCodeLD = WarehouseEnum.鍐峰喕搴�.ObjToInt().ToString("000");
+                #region 鐗规畩搴撴埧
+                if (order.warehouse_no == WareCodeMJ || order.warehouse_no == WareCodeLD)
+                {
+                    #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}銆戠殑鐩樼泩鏁伴噺鏈夎");
+                        //鎵炬墍鏈夊簱瀛�
+                        List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo);
+                        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.StockQuantity - inventoryInfo.SupplyQuantity),
+                                    SupplyQuantity = 0,
+                                    Remark = "鐩樼泩鍏ュ簱"
+                                };
+                                _supplyTaskHtyService.AddData(supplyTask_Hty);
+                            }
+                            #endregion
+                            inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+                            inventoryInfo.SupplyQuantity = 0;
+                            inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                        }
+                        inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity;
+                        inventory_Batch.SupplyQuantity = 0;
+                        _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()
+                    };
+                    Repository.AddData(entityOrder);
+                    #endregion
+                }
+                #endregion
+                else
+                {
+                    string WareCodeLK = WarehouseEnum.绔嬪簱.ObjToInt().ToString("000");
+                    string WareCodeDJ = WarehouseEnum.澶т欢搴�.ObjToInt().ToString("000");
+
+                    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}銆戠殑鐩樼泩鏁伴噺鏈夎");
+                        //鎵炬墍鏈夊簱瀛�
+                        List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo);
+                        //鑾峰彇绔嬪簱鐩樼偣宸紓鏁�
+                        var inventoryLK = inventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).First();
+                        var LkQty = Math.Abs(inventoryLK.StockQuantity - inventoryLK.SupplyQuantity);
+                        //鑾峰彇澶т欢搴撶洏鐐瑰樊寮傛暟
+                        var inventoryDJ = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList();
+                        var DJQty = Math.Abs(inventoryDJ.Sum(x => x.StockQuantity) - inventoryDJ.Sum(x => x.SupplyQuantity));
+                        if (LkQty + DJQty != Qty) throw new Exception($"銆恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐗╂枡淇℃伅涓庣墿鏂欐壒娆′俊鎭洏鐩堟暟閲忎笉绗�");
+                        if (LkQty == 0)//绔嬪簱鏃犲樊寮�
+                        {
+                            #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.StockQuantity - inventoryInfo.SupplyQuantity),
+                                        SupplyQuantity = 0,
+                                        Remark = "鐩樼泩鍏ュ簱"
+                                    };
+                                    _supplyTaskHtyService.AddData(supplyTask_Hty);
+                                }
+                                #endregion
+                                inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+                                inventoryInfo.SupplyQuantity = 0;
+                                inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                            }
+                            _inventoryInfoService.UpdateData(inventoryInfos);
+                            inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity;
+                            inventory_Batch.SupplyQuantity = 0;
+                            _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 = 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);
+                            #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.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.StockQuantity - inventoryInfo.SupplyQuantity),
+                                        SupplyQuantity = 0,
+                                        Remark = "鐩樼泩鍏ュ簱"
+                                    };
+                                    _supplyTaskHtyService.AddData(supplyTask_Hty);
+                                }
+                                #endregion
+                                inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+                                inventoryInfo.SupplyQuantity = 0;
+                                inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                            }
+                            _inventoryInfoService.UpdateData(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);
+                            }
+                            #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 = LkQty,
+                                    Batch_num = d.batch_num,
+                                    Exp_date = d.exp_date,
+                                    Reservoirarea = WareCodeLK,
+                                    OrderDetailStatus = "鏂板缓",
+                                    Status = 0,
+                                }).ToList()
+                            };
+                            Repository.AddData(entityOrder);
+                            #endregion
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        #endregion
     }
 }

--
Gitblit v1.9.3