From d8db1698c125618c1b5f62b009204ddc5d4eed5a Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期三, 19 三月 2025 20:34:08 +0800
Subject: [PATCH] 成品代码更新....

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs |  391 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 353 insertions(+), 38 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
index 9fce273..86aad6c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
@@ -29,6 +29,7 @@
 using WIDESEA_DTO.Task;
 using WIDESEA_DTO.Stock;
 using SqlSugar;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
 
 namespace WIDESEA_TaskInfoService
 {
@@ -76,7 +77,7 @@
                       (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
                     if (locationInfo == null)
                     {
-                        return responseContent.Error($"娴嬭瘯鏋惰揣浣�:{stockInfo.LocationCode}鍑哄簱鏉′欢涓嶆弧瓒�");
+                        return responseContent.Error($"娴嬭瘯鏋惰揣浣嶃�傘�傘�傘�傘�傘�傘�傘�傘��:{stockInfo.LocationCode}鍑哄簱鏉′欢涓嶆弧瓒�");
                     }
                     //鐢熸垚娴嬭瘯鏋跺嚭搴撲换鍔� 閿佸畾搴撳瓨 鏇存敼璐т綅鐘舵��
                     Dt_Task taskOut = new()
@@ -293,7 +294,6 @@
             }
             return content;
         }
-
         /// <summary>
         /// 
         /// </summary>
@@ -402,6 +402,7 @@
                 tasks.ForEach(x =>
                 {
                     x.TargetAddress = model.Line;
+                    x.OrderNo = mesOutboundOrder.TaskNo;
                 });
                 _unitOfWorkManage.BeginTran();
 
@@ -457,11 +458,12 @@
 
                 Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
                 {
+                    MaterielSpec = stockInfoDetail_Hty.MaterielSpec,
                     BatchNo = stockInfoDetail_Hty?.BatchNo ?? "",
                     EffectiveDate = model.ExpirationDate,
                     MaterielCode = model.MaterialCode,
                     InboundOrderRowNo = stockInfoDetail_Hty?.InboundOrderRowNo ?? 0,
-                    MaterielName = model.MaterialCode,
+                    MaterielName = stockInfoDetail_Hty.MaterielName,
                     ProductionDate = model.ProductionDate,
                     OrderNo = stockInfoDetail_Hty?.OrderNo ?? "",
                     OutboundQuantity = 0,
@@ -614,11 +616,14 @@
 
                 //}
                 #endregion
+                _unitOfWorkManage.BeginTran();
                 Db.InsertNav(mesOutboundOrder).Include(x => x.Details).ExecuteCommand();
+                _unitOfWorkManage.CommitTran();
                 return MesResponseContent.Instance.OK();
             }
             catch (Exception ex)
             {
+                _unitOfWorkManage.RollbackTran();
                 return MesResponseContent.Instance.Error(ex.Message);
             }
 
@@ -734,6 +739,7 @@
         {
             try
             {
+                //涓�娆″彧鍙戜竴鍗风墿鏂欏叆搴撴槑缁�
                 foreach (var item in model.MaterialLotInfo)
                 {
                     //鑾峰彇鐗╂枡淇℃伅
@@ -936,21 +942,165 @@
                 {
                     return content.Error("鏈壘鍒颁粨搴撲俊鎭�");
                 }
+                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == warehouse.WarehouseId);
+                if (locationInfo==null)
+                {
+                    return content.Error($"鏈壘鍒皗warehouse.WarehouseCode}璐т綅淇℃伅");
+                }
+                //鍐呭寘淇℃伅缁勭洏
                 List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>();
                 foreach (var item in bagInfoModel.BagDetails)
                 {
-                    mesProInOrderDetails.Add(_mapper.Map<Dt_MesProInOrderDetail>(item));
+                    foreach (var child in item.BagItems)
+                    {
+                        Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail()
+                        {
+                            BagNo = item.BagNo,
+                            ProductCode = item.ProductCode,
+                            ProductVersion = item.ProductVersion,
+                            SETQty = child.SETQty,
+                            OKPCSQTY = child.OKPCSQTY,
+                            DateCode = item.DateCode,
+                            XQty = child.XQty,
+                            XSite = child.XSite,
+                            Weight = item.Weight,
+                            PackingDate = item.PackingDate,
+                            LotNumber = child.LotNumber,
+                            ERPOrder = child.ERPOrder,
+                            SaleOrder = child.SaleOrder,
+                            MoNumber = child.MoNumber,
+                        };
+                        mesProInOrderDetails.Add(mesProInOrderDetail);
+                    }
+                }
+                List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+                foreach (var item in mesProInOrderDetails)
+                {
+                    proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item));
                 }
                 Dt_MesProInOrder mesProInOrder = new Dt_MesProInOrder()
                 {
                     WarehouseId = warehouse.WarehouseId,
                     BatchNo = bagInfoModel.BatchNo,
+                    WorkCenter = bagInfoModel.WorkCenter,
                     MesProStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(),
                     UnPackStock = bagInfoModel.UnPackStock,
                     Details = mesProInOrderDetails
                 };
+                Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo()
+                {
+                    PalletCode = bagInfoModel.BatchNo,
+                    PalletType = 1,
+                    WarehouseId = warehouse.WarehouseId,
+                    StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
+                    proStockInfoDetails = proStockInfoDetails
+                };
+                Dt_Task newTask = new Dt_Task()
+                {
+                    CurrentAddress = bagInfoModel.WorkCenter,
+                    Grade = 0,
+                    NextAddress = "",
+                    PalletCode = proStockInfo.PalletCode,
+                    Roadway = locationInfo.RoadwayNo,
+                    SourceAddress = bagInfoModel.WorkCenter,
+                    TargetAddress = "",
+                    TaskType = TaskTypeEnum.InProduct.ObjToInt(),
+                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
+                    WarehouseId = warehouse.WarehouseId,
+                    PalletType = proStockInfo.PalletType
+                };
+                _unitOfWorkManage.BeginTran();
+                int taskId = BaseDal.AddData(newTask);
+                newTask.TaskId = taskId;
                 Db.InsertNav(mesProInOrder).Include(x => x.Details).ExecuteCommand();
+                Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand();
+                _unitOfWorkManage.CommitTran();
+                //鎺ㄩ�佷换鍔�
+                PushTasksToWCS(new List<Dt_Task> { newTask });
                 return content.OK("鎺ユ敹鎴愬姛");
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        //澶栧寘淇℃伅鎺ユ敹
+        public MesResponseContent BoxStockin(MesBoxInfoModel boxInfoModel)
+        {
+            MesResponseContent content = new MesResponseContent();
+            try
+            {
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
+                //鍒ゆ柇MES浼犲叆鐨勫嚭搴撳崟鍙锋槸鍚﹀瓨鍦�
+                Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x=>x.ProOutOrderNo== boxInfoModel.ShipmentOrder).Includes(x=>x.Details).First();
+                if (proOutOrder==null)
+                {
+                    return content.Error($"鍗曞彿{boxInfoModel.ShipmentOrder}涓嶅瓨鍦�");
+                }
+                //鑾峰彇鎵�鏈夋垚鍝佸嚭搴撳唴鍖呬俊鎭�
+                List<Dt_ProStockInfoDetail> dt_ProStockInfos = _stockRepository.ProStockInfoDetailRepository.QueryData(x=>x.ProOutDetailStatus==StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt());
+                //鑾峰彇MES鍐呭寘淇℃伅
+                List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>();
+                foreach (var item in boxInfoModel.Bags)
+                {
+                    foreach (var child in item.BagItems)
+                    {
+                        Dt_ProStockInfoDetail? proStockInfoDetail = dt_ProStockInfos.Where(x=>x.BagNo==item.BagNo)?.FirstOrDefault();
+                        if (proStockInfoDetail==null)
+                        {
+                            return content.Error($"鍐呭寘{item.BagNo}璐х墿鐘舵�佸紓甯�");
+                        }
+                        Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail()
+                        {
+                            BagNo = item.BagNo,
+                            ProductCode = item.ProductCode,
+                            ProductVersion = item.ProductVersion,
+                            SETQty = child.SETQty,
+                            OKPCSQTY = child.OKPCSQTY,
+                            DateCode = item.DateCode,
+                            XQty = child.XQty,
+                            XSite = child.XSite,
+                            Weight = item.Weight,
+                            PackingDate = item.PackingDate,
+                            LotNumber = child.LotNumber,
+                            ERPOrder = child.ERPOrder,
+                            SaleOrder = child.SaleOrder,
+                            MoNumber = child.MoNumber,
+                        };
+                        mesProInOrderDetails.Add(mesProInOrderDetail);
+                    }
+                }
+                List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+                foreach (var item in mesProInOrderDetails)
+                {
+                    proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item));
+                }
+                proStockInfoDetails.ForEach(x =>
+                {
+                    x.ProOutDetailStatus = StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt();
+                });
+                
+                Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo()
+                {
+                    PalletCode = boxInfoModel.BoxNo,
+                    PalletType = 0,
+                    WarehouseId = warehouse.WarehouseId,
+                    ShipmentOrder = boxInfoModel.ShipmentOrder,
+                    StockStatus = StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt(),
+                    proStockInfoDetails = proStockInfoDetails
+                };
+                _unitOfWorkManage.BeginTran();
+                //鏍规嵁澶栧寘淇℃伅瑙g粦鍐呭寘涓庤兌妗嗗簱瀛樺叧绯�
+                WebResponseContent UnBindContent = _stockService.ProStockInfoService.UnBindStock(proStockInfoDetails);
+                if (!UnBindContent.Status)
+                {
+                    throw new Exception(UnBindContent.Message);
+                }
+                Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand();
+                _unitOfWorkManage.CommitTran();
+                return content.OK("澶栧寘鎺ユ敹鎴愬姛");
             }
             catch (Exception ex)
             {
@@ -958,40 +1108,7 @@
             }
             return content;
         }
-
-        /// <summary>
-        /// 鎴愬搧杩斿伐鎻愬簱
-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        public MesResponseContent RworkTask(RworkTaskModel model)
-        {
-            try
-            {
-                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA72.ToString());
-                //鑾峰彇搴撳瓨璁板綍
-                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
-                  x.WarehouseId == warehouse.WarehouseId &&
-                  x.StockStatus == (int)StockStatusEmun.鍏ュ簱瀹屾垚).Includes(x => x.Details).ToList();
-                Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.ProductVersion));
-                if (stockInfo == null)
-                {
-                    return MesResponseContent.Instance.Error($"灏炬暟浠�:{model.ProductVersion}鏃犲彲鐢ㄥ簱瀛�");
-                }
-                Dt_Task exsit2 = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
-
-
-            }
-            catch (Exception ex)
-            {
-
-                throw;
-            }
-            return MesResponseContent.Instance.OK();
-        }
-
-
-
+        
 
         /// <summary>
         /// 鐢熸垚PP澶у嵎鍑哄簱浠诲姟
@@ -1484,9 +1601,207 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+        /// <summary>
+        /// MES鎴愬搧鍑哄簱鍗曞悓姝ユ暟鎹鐞�
+        /// </summary>
+        public MesShipmentOrderSync MesOutSync(Dt_OutProStockInfo outProStockInfo, Dt_ProOutOrderDetail proOutOrderDetail)
+        {
+            List<MesShipOrderDetail> mesShipOrderDetails = new List<MesShipOrderDetail>();
+            //鑾峰彇鍑哄簱鍗�
+            Dt_ProOutOrder proOutOrder = _outboundService.ProOutOrderService.Repository.QueryFirst(x=>x.Id== proOutOrderDetail.ProOrderId);
+            //鑾峰彇瀹㈡埛
+            Dt_CustomerInfo customerInfo = _basicRepository.CustomerInfoRepository.QueryFirst(x=>x.Code==proOutOrderDetail.Customer);
+            
+            MesShipOrderDetail orderDetail = new MesShipOrderDetail()
+            {
+                ProductCode = proOutOrderDetail.PCode,
+                ProductVersion = proOutOrderDetail.PVer,
+                Qty = outProStockInfo.AssignQuantity,
+                SaleOrder = proOutOrderDetail.SaleOrder,
+                Sequence = outProStockInfo.Id,
+                WorkCenter = "SPCK_OUTER-001"
+            };
+            mesShipOrderDetails.Add(orderDetail);
+            MesShipmentOrderSync shipmentOrderSync = new MesShipmentOrderSync()
+            {
+                ShipmentOrder = proOutOrder.ProOutOrderNo,
+                PlantShipDate = proOutOrder.PlantShipDate.ToString("yyyy-MM-dd HH:mm:ss"),
+                Customer = proOutOrderDetail.Customer,
+                FactoryCode = proOutOrderDetail.FactoryCode,
+                ShipName = customerInfo.Name,
+                ShippingAddress = customerInfo.NickName,
+                OrderDetails = mesShipOrderDetails
+            };
+            return shipmentOrderSync;
+        }
+        /// <summary>
+        /// WMS鍚屾鎴愬搧鍑哄簱鑷矼ES
+        /// </summary>
+        public WebResponseContent ShipmentOrderSync(MesShipmentOrderSync model)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_ShipmentOrderSync.ToString());
+                MESRoot<MesShipmentOrderSync> root = new MESRoot<MesShipmentOrderSync>()
+                {
+                    From = "WMS",
+                    DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                    Content = model
+                };
+                JsonSerializerSettings settings = new JsonSerializerSettings
+                {
+                    ContractResolver = new CamelCasePropertyNamesContractResolver()
+                };
+                string request = JsonConvert.SerializeObject(root, settings);
+                string response = HttpMesHelper.Post(apiInfo.ApiAddress, request);
+                MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
+                //璋冪敤鎺ュ彛
+                if (mesResponseContent.BSucc == true)
+                {
+                    content.OK(mesResponseContent.StrMsg);
+                }
+                else
+                {
+                    content.Error(mesResponseContent.StrMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
 
+        /// <summary>
+        /// MES鎴愬搧杩斿伐鎻愬簱
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public MesResponseContent RworkTask(RworkTaskModel model)
+        {
+            MesResponseContent content = new MesResponseContent();
+            try
+            {
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA72.ToString());
+                if (warehouse == null)
+                {
+                    return content.Error($"灏炬暟浠撲俊鎭湭閰嶇疆");
+                }
+                Dt_MesRworkOutboundOrder rworkOutboundOrderOld = _outboundRepository.RworkOutboundOrderRepository.QueryFirst(x=>x.TaskNo== model.TaskNo);
+                if (rworkOutboundOrderOld==null)
+                {
+                    return content.Error($"鎻愬簱浠诲姟鍗晎model.TaskNo}宸插瓨鍦�");
+                }
+                Dt_MesRworkOutboundOrder mesRworkOutboundOrder = new Dt_MesRworkOutboundOrder()
+                {
+                    WarehouseId = warehouse.WarehouseId,
+                    TaskNo = model.TaskNo,
+                    OrderStatus = OutOrderStatusEnum.鏈紑濮�.ObjToInt(),
+                    CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
+                    ProductCode = model.ProductCode,
+                    ProductName = model.ProductName,
+                    ProductVersion = model.ProductVersion,
+                    DateCode = model.DateCode,
+                    RequiredQuantity = model.RequiredQuantity,
+                    FactoryCode = model.FactoryCode,
+                    SaleOrder = model.SaleOrder,
+                    OrderType = model.InventoryType,
+                };
+                List<Dt_Task> tasks = new List<Dt_Task>();
+                List<Dt_ProStockInfo>? proStockInfos = null;
+                List<Dt_OutProStockInfo>? outProStockInfos = null;
+                List<Dt_LocationInfo>? locationInfos = null;
+                //鍒嗛厤搴撳瓨鐢熸垚鎻愬簱浠诲姟
+                (List<Dt_ProStockInfo>?, Dt_MesRworkOutboundOrder?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>) result = _outboundService.RworkOutboundOrderService.AssignMesStocks(mesRworkOutboundOrder);
+                if (result.Item1!=null && result.Item1.Count>0)
+                {
+                    tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
+                    result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                    result.Item3.ForEach(x =>
+                    {
+                        x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt();
+                    });
 
+                    proStockInfos = result.Item1;
+                    mesRworkOutboundOrder = result.Item2;
+                    outProStockInfos = result.Item3;
+                    locationInfos = result.Item4;
+                }
+                else
+                {
+                    throw new Exception("鏃犲簱瀛樺垎閰�");
+                }
+                tasks.ForEach(x =>
+                {
+                    x.TargetAddress = "5236";
+                    x.OrderNo = mesRworkOutboundOrder.TaskNo;
+                });
+                _unitOfWorkManage.BeginTran();
 
+                int id = BaseDal.AddData(tasks);
+                outProStockInfos.ForEach(x =>
+                {
+                    x.OrderNo = mesRworkOutboundOrder.TaskNo;
+                    x.OrderDetailId = id;
+                });
+                if (proStockInfos != null && proStockInfos.Count > 0 && outProStockInfos != null && outProStockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
+                {
+                    WebResponseContent updateContent = _outboundService.RworkOutboundOrderService.LockOutboundStockDataUpdate(proStockInfos, outProStockInfos, locationInfos, tasks: tasks);
 
+                    if (!updateContent.Status)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return content.Error(updateContent.Message);
+                    }
+                }
+                _outboundService.RworkOutboundOrderService.Repository.AddData(mesRworkOutboundOrder);
+                return content.OK("鎻愪緵杩斿簱鍗曟帴鏀舵垚鍔�");
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 搴撳瓨鏉垮悓姝ユ帴鍙�
+        /// </summary>
+        public WebResponseContent ProductOutBoundSync(MesProductOutBound model)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_ProductOutBound.ToString());
+                MESRoot<MesProductOutBound> root = new MESRoot<MesProductOutBound>()
+                {
+                    From = "WMS",
+                    DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                    Content = model
+                };
+                JsonSerializerSettings settings = new JsonSerializerSettings
+                {
+                    ContractResolver = new CamelCasePropertyNamesContractResolver()
+                };
+                string request = JsonConvert.SerializeObject(root, settings);
+                string response = HttpMesHelper.Post(apiInfo.ApiAddress, request);
+                MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
+                //璋冪敤鎺ュ彛
+                if (mesResponseContent.BSucc == true)
+                {
+                    content.OK(mesResponseContent.StrMsg);
+                }
+                else
+                {
+                    content.Error(mesResponseContent.StrMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
     }
 }

--
Gitblit v1.9.3