From ded9c653b4bd5f45cb23124068687135c29e6915 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 12 一月 2026 15:06:11 +0800
Subject: [PATCH] 多个功能优化,逻辑修改等

---
 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs |  179 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 146 insertions(+), 33 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
index 0dd2c7b..ff193fb 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
@@ -41,29 +41,24 @@
         /// <param name="stationCode"></param>
         /// <param name="palletCode"></param>
         /// <returns></returns>
-        public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode, string palletCode)
+        public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode)
         {
             try
             {
-                Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
+                Dt_Task task = Repository.QueryFirst(x => x.PalletCode == stationCode);
                 if (task != null)
                 {
                     PushTasksToWCS(new List<Dt_Task> { task });
                     return WebResponseContent.Instance.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task));
                 }
-
-                Dt_ProStockInfo stockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
+                Dt_ProStockInfo stockInfo = BaseDal.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == stationCode).Includes(x => x.proStockInfoDetails).First(); ;
                 if (stockInfo == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�");
                 }
-                if (stockInfo.StockStatus != StockStatusEmun.MES浣欐枡閫�搴�.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES绌烘墭閫�搴�.ObjToInt())
+                if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())
                 {
                     return WebResponseContent.Instance.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱");
-                }
-                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
-                {
-                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅");
                 }
 
                 Dt_Task newTask = new Dt_Task()
@@ -71,35 +66,28 @@
                     CurrentAddress = stationCode,
                     Grade = 0,
                     NextAddress = "",
-                    PalletCode = palletCode,
+                    PalletCode = stationCode,
                     Roadway = "",
                     SourceAddress = stationCode,
                     TargetAddress = "",
-                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
+                    TaskType = TaskTypeEnum.InProduct.ObjToInt(),
                     TaskStatus = TaskStatusEnum.New.ObjToInt(),
                     WarehouseId = stockInfo.WarehouseId,
                     PalletType = stockInfo.PalletType,
                 };
-
-
-                if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
+                stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+                stockInfo.proStockInfoDetails.ForEach(x =>
                 {
-                    stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
-                }
-                else
-                {
-                    stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
-                }
-
+                    x.ProStockDetailStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+                });
                 _unitOfWorkManage.BeginTran();
                 int taskId = BaseDal.AddData(newTask);
                 newTask.TaskId = taskId;
                 _stockRepository.ProStockInfoRepository.UpdateData(stockInfo);
+                _stockRepository.ProStockInfoDetailRepository.UpdateData(stockInfo.proStockInfoDetails);
                 _unitOfWorkManage.CommitTran();
                 WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
 
-                PushTasksToWCS(new List<Dt_Task> { newTask });
-                if (newTask.WarehouseId == 5) PutFinish(stationCode, newTask.PalletCode, newTask.TaskNum.ToString());
                 return WebResponseContent.Instance.OK(data: wMSTaskDTO);
             }
             catch (Exception ex)
@@ -372,7 +360,7 @@
                     stockInfoOld.IsPick = WhetherEnum.False.ObjToInt();
                 }
                 decimal stockLength = bSTStockInfoDTO.StockMeter;
-                if (weight != bSTStockInfoDTO.Qty)
+                if (weight != bSTStockInfoDTO.Qty && weight < stockInfoOld.InitialWeight)
                 {
                     Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterialSourceId == stockInfoOld.MaterielId);
                     int gramWeight = (int)(materielInfo.MaterielWeight * 1000);
@@ -393,13 +381,13 @@
                         throw new Exception($"涓婃姤绉伴噸澶辫触");
                     }
                     stockLength = weight / bSTStockInfoDTO.W / gramWeight * 1000000;
+                    stockInfoOld.IsFull = WhetherEnum.True.ObjToInt();
+                    stockInfoOld.MaterielWeight = weight;
                 }
                 stockInfoOld.StockStatus = StockStatusEmun.鑰佸巶閫�搴�.ObjToInt();
                 stockInfoOld.MaterielThickness = bSTStockInfoDTO.Thick;
-                stockInfoOld.MaterielWeight = weight;
                 stockInfoOld.MaterielWide = bSTStockInfoDTO.W;
                 stockInfoOld.StockLength = stockLength;
-                stockInfoOld.IsFull = WhetherEnum.True.ObjToInt();
                 stockInfoOld.StockOutLength = 0;
                 stockInfoOld.WarehouseId = WarehouseEnum.LLDYL.ObjToInt();
                 if (thickness < 400)
@@ -672,6 +660,7 @@
                             MaterielThickness = bSTStockInfoDTO.Thick,
                             MaterielWide = bSTStockInfoDTO.W,
                             MaterielWeight = bSTStockInfoDTO.Qty,
+                            InitialWeight = bSTStockInfoDTO.Qty,
                             MaterielCode = materielInfo.MaterielCode,
                             MaterielName = materielInfo.MaterielName,
                             StockLength = bSTStockInfoDTO.StockMeter,
@@ -757,6 +746,7 @@
                                 MaterielThickness = purchaseBSTOrderDetail.MaterialThick,
                                 MaterielWide = purchaseBSTOrderDetail.MaterialWide,
                                 MaterielWeight = purchaseBSTOrderDetail.DeliveryQty,
+                                InitialWeight=purchaseBSTOrderDetail.DeliveryQty,
                                 MaterielCode = materielInfo.MaterielCode,
                                 MaterielName = materielInfo.MaterielName,
                                 StockLength = purchaseBSTOrderDetail.ProcurementLength,
@@ -1004,6 +994,28 @@
                         _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails);
                         _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId);
                         BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.浜哄伐瀹屾垚 : WIDESEA_Core.Enums.OperateTypeEnum.鑷姩瀹屾垚);
+                        if (task.TaskType==TaskTypeEnum.InProduct.ObjToInt())
+                        {
+                            ERPProInUpModel proInUpModel = new ERPProInUpModel();
+                            List<PB_INV_PRODUCT_INItem> pRODUCT_INItems = new List<PB_INV_PRODUCT_INItem>();
+                            foreach (var item in proStockInfo.proStockInfoDetails)
+                            {
+                                PB_INV_PRODUCT_INItem pB_INV_PRODUCT_INItem = new PB_INV_PRODUCT_INItem()
+                                {
+                                    WP_ID=item.LotNumber.ObjToInt(),
+                                    INV_BARCODE=item.ProductNo,
+                                    QTY=(int)item.StockQty,
+                                    REMARK="鎴愬搧鍏ュ簱"
+                                };
+                                pRODUCT_INItems.Add(pB_INV_PRODUCT_INItem);
+                            }
+                            proInUpModel.PB_INV_PRODUCT_IN= pRODUCT_INItems;
+                            string request = _invokeERPService.ERPProInUp(proInUpModel) ?? throw new Exception("鎴愬搧鍏ュ簱鎺ュ彛璇锋眰澶辫触");
+                            if (!request.Contains("Success"))
+                            {
+                                throw new Exception($"鎴愬搧鍏ュ簱澶辫触");
+                            }
+                        }
                         _unitOfWorkManage.CommitTran();
                         _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(proStockInfo, 0, proStockInfo.proStockInfoDetails.Sum(x => x.StockQty), StockChangeTypeEnum.Inbound);
                     }
@@ -1022,7 +1034,7 @@
                     }
                     //鑾峰彇璐т綅淇℃伅
                     Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
-                    if (locationInfoEnd == null && task.TaskType!=TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
+                    if (locationInfoEnd == null && task.TaskType!=TaskTypeEnum.WFBBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
                     {
                         return content.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
                     }
@@ -1034,7 +1046,7 @@
                         Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                         _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                     }
-                    if (task.TaskType != TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
+                    if (task.TaskType != TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
                     {
                         stockInfo.LocationCode = locationInfoEnd.LocationCode;
                     }
@@ -1838,16 +1850,24 @@
                 if (AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鍗婃垚鍝�.ObjToInt()).Count() > 0)
                 {
                     //鐢熸垚鍗婃垚鍝佸叆搴�
-                    WebResponseContent webResponse = PrintInbound(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鍗婃垚鍝�.ObjToInt()).ToList());
+                    WebResponseContent webResponse = SemiProInbound(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鍗婃垚鍝�.ObjToInt()).ToList());
                     if (!webResponse.Status)
                     {
                         throw new Exception(webResponse.Message);
                     }
                     tasks = webResponse.Data as List<Dt_Task>;
                     WebResponseContent taskResponse = PushTasksToWCS(tasks);
-                    if (taskResponse.Status)
+                    if (!taskResponse.Status)
                     {
                         throw new Exception(taskResponse.Message);
+                    }
+                }
+                if (AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鎴愬搧.ObjToInt()).Count() > 0)
+                {
+                    WebResponseContent webResponse = PushPackaxisTaskToWCS(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鎴愬搧.ObjToInt()).ToList());
+                    if (!webResponse.Status)
+                    {
+                        throw new Exception(webResponse.Message);
                     }
                 }
                 _unitOfWorkManage.CommitTran();
@@ -1862,9 +1882,9 @@
             return content;
         }
         /// <summary>
-        /// 鍗板埛涓嬫枡MES浠诲姟
+        /// 鍗婃垚鍝佷笅鏂橫ES浠诲姟
         /// </summary>
-        public WebResponseContent PrintInbound(List<Dt_MESProInOrderInfo> mESProInOrderInfos)
+        public WebResponseContent SemiProInbound(List<Dt_MESProInOrderInfo> mESProInOrderInfos)
         {
             WebResponseContent content = new WebResponseContent();
             try
@@ -1879,11 +1899,16 @@
                 List<Dt_Task> tasks = new List<Dt_Task>();
                 //鑾峰彇鎵�鏈堿GV鐐逛綅
                 List<Dt_AGVStationInfo> aGVStationInfos = _basicRepository.AGVStationInfoRepository.QueryData(x => !string.IsNullOrEmpty(x.MESPointCode));
+                List<Dt_AGVStationInfo> _AGVStationInfos = new List<Dt_AGVStationInfo>();
                 //鏍规嵁鍗婃垚鍝佷俊鎭懠鍙搴斾换鍔�
                 foreach (var item in mESProInOrderInfos)
                 {
                     Dt_AGVStationInfo? CheckPointCode = aGVStationInfos.FirstOrDefault(x => x.MESPointCode == item?.PointCode);
                     Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterialCode);
+                    if (CheckPointCode==null)
+                    {
+                        return content.Error($"鏈壘鍒皗item?.PointCode}鐐逛綅");
+                    }
                     if (materielInfo == null)
                     {
                         return content.Error("鏈壘鍒扮墿鏂欎俊鎭�");
@@ -1924,7 +1949,7 @@
                     //鍗婃垚鍝佸叆搴撲换鍔�
                     Dt_Task newTask = new Dt_Task()
                     {
-                        CurrentAddress = CheckPointCode.AGVStationCode,
+                        CurrentAddress = item.PointCode.StartsWith("YS") ? CheckPointCode.AGVStationCode : CheckPointCode.MESPointCode,
                         Grade = 0,
                         NextAddress = "",
                         PalletCode = item.BarCode,
@@ -1940,17 +1965,54 @@
                     TaskTypeEnum taskTypeEnum = CheckPointCode.StationArea switch
                     {
                         nameof(StationAreaEnum.涓�妤煎嵃鍒�) => TaskTypeEnum.PrintYLInbound,
+                        nameof(StationAreaEnum.涓�妤煎垎鍒�) => TaskTypeEnum.PartOffInbound,
+                        nameof(StationAreaEnum.涓�妤肩焊寮犳穻鑶�) => TaskTypeEnum.PaperFilmInbound,
+                        nameof(StationAreaEnum.涓�妤兼棤绾烘穻鑶�) => TaskTypeEnum.WFBYLInbound,
                         _ => throw new Exception("鏈壘鍒板搴斾换鍔�")
                     };
+                    if (taskTypeEnum == TaskTypeEnum.WFBYLInbound)
+                    {
+                        Dt_AGVStationInfo? stationInfo = AssignWFBStation(_AGVStationInfos?.Select(x => x.AGVStationCode).ToList()) ?? throw new Exception("鏈壘鍒板彲鐢ㄦ棤绾哄竷鏆傚瓨鏋�");
+                        newTask.NextAddress = stationInfo.AGVStationCode;
+                        newTask.TargetAddress = stationInfo.AGVStationCode;
+                        newTask.Roadway = "AGV";
+                        stationInfo.IsOccupied = 1;
+                        _AGVStationInfos.Add(stationInfo);
+                    }
                     newTask.TaskType = taskTypeEnum.ObjToInt();
                     stockInfos.Add(stockInfo);
                     tasks.Add(newTask);
                 }
                 //鎿嶄綔鍏ュ簱鏁版嵁
                 BaseDal.AddData(tasks);
+                _basicRepository.AGVStationInfoRepository.UpdateData(_AGVStationInfos);
                 _stockRepository.StockInfoRepository.AddData(stockInfos);
                 //鎺ㄩ�佷换鍔�
                 content.OK("鍙戦�佹垚鍔�",data:tasks);
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 鎺ㄩ�佺爜鍨涙暟鎹嚦WCS
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent PushPackaxisTaskToWCS(List<Dt_MESProInOrderInfo> mESProInOrderInfos)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string url = AppSettings.Get("WCS");
+                if (string.IsNullOrEmpty(url))
+                {
+                    throw new Exception($"鏈壘鍒癢CSAApi鍦板潃,璇锋鏌ラ厤缃枃浠�");
+                }
+                string response = HttpHelper.Post($"{url}/api/Packinfo/ReceivePackaxisTask", mESProInOrderInfos.Serialize());
+
+                return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("杩斿洖閿欒");
             }
             catch (Exception ex)
             {
@@ -1974,5 +2036,56 @@
                 throw new Exception(ex.Message);
             }
         }
+        public WebResponseContent BoxingInBound(string stationCode,List<string> barCodes)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                //鑾峰彇鎴愬搧搴撳瓨
+                Dt_ProStockInfo proStockInfoOld = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == stationCode);
+                if (proStockInfoOld != null)
+                {
+                    return content.Error($"鎵樼洏{stationCode}宸插瓨鍦�");
+                }
+                //鑾峰彇鏉$爜淇℃伅
+                List<Dt_MESProInOrderInfo> proInOrderInfos = _inboundRepository.MESProInOrderInfoRepository.QueryData(x=> barCodes.Contains(x.BarCode));
+                Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode== proInOrderInfos.FirstOrDefault().MaterialCode);
+                List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+                foreach (var item in proInOrderInfos)
+                {
+                    Dt_ProStockInfoDetail proStockInfoDetail = new Dt_ProStockInfoDetail()
+                    {
+                        ProductCode = materielInfo.MaterielCode,
+                        ProductNo = item.BarCode,
+                        ProductName = materielInfo.MaterielName,
+                        ProductSpec = materielInfo.MaterielSpec,
+                        LotNumber = item.ProcessNum.ToString(),
+                        ProductUnit = materielInfo.MaterielUnit,
+                        StockQty = item.ProQuantity,
+                        ProStockDetailStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt()
+                    };
+                    proStockInfoDetails.Add(proStockInfoDetail);
+                }
+                
+                Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo()
+                {
+                    PalletCode = stationCode,
+                    ProInOrderNo = proInOrderInfos.FirstOrDefault().ProductOrderNo,
+                    ProStockAttribute = materielInfo.MaterielSourceType,
+                    PalletType = 1,
+                    LocationCode = "",
+                    WarehouseId = materielInfo.WarehouseId,
+                    StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
+                    proStockInfoDetails = proStockInfoDetails
+                };
+                BaseDal.Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand();
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
     }
 }

--
Gitblit v1.9.3