From f9d341542aaacdd8595154c2d0bcae89f4865fa7 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 06 二月 2026 14:33:17 +0800
Subject: [PATCH] 添加HTTP助手、系统配置模型及机器人任务层

---
 Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs |  266 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 259 insertions(+), 7 deletions(-)

diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
index 5747dac..db183dd 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
@@ -1,13 +1,14 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+锘縰sing WIDESEA_Common.StockEnum;
+using WIDESEA_DTO.Stock;
 using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
 
 namespace WIDESEA_StockService
 {
-    public class StockSerivce:IStockService
+    /// <summary>
+    /// 搴撳瓨鏈嶅姟
+    /// </summary>
+    public class StockSerivce : IStockService
     {
         public IStockInfoDetailService StockInfoDetailService { get; }
 
@@ -16,6 +17,13 @@
 
         public IStockInfo_HtyService StockInfo_HtyService { get; }
 
+        /// <summary>
+        /// 鏋勯�犲嚱鏁�
+        /// </summary>
+        /// <param name="stockInfoDetailService">搴撳瓨鏄庣粏鏈嶅姟</param>
+        /// <param name="stockInfoService">搴撳瓨鏈嶅姟</param>
+        /// <param name="stockInfoDetail_HtyService">搴撳瓨鏄庣粏鍘嗗彶鏈嶅姟</param>
+        /// <param name="stockInfo_HtyService">搴撳瓨鍘嗗彶鏈嶅姟</param>
         public StockSerivce(IStockInfoDetailService stockInfoDetailService, IStockInfoService stockInfoService, IStockInfoDetail_HtyService stockInfoDetail_HtyService, IStockInfo_HtyService stockInfo_HtyService)
         {
             StockInfoDetailService = stockInfoDetailService;
@@ -23,5 +31,249 @@
             StockInfoDetail_HtyService = stockInfoDetail_HtyService;
             StockInfo_HtyService = stockInfo_HtyService;
         }
+
+        /// <summary>
+        /// 缁勭洏
+        /// </summary>
+        /// <param name="stock">缁勭洏鏁版嵁</param>
+        /// <returns>鏄惁鎴愬姛</returns>
+        public async Task<bool> GroupPallet(StockDTO stock)
+        {
+            // 缁勮鏄庣粏鏁版嵁
+            var now = DateTime.Now;
+            var details = stock.Details.Select(item => new Dt_StockInfoDetail()
+            {
+                MaterielCode = "鐢佃姱",
+                StockQuantity = item.Quantity,
+                Unit = "PCS",
+                Creater = "system",
+                OrderNo = "111",
+                ProductionDate = now.ToString(),
+                EffectiveDate = now.AddYears(1).ToString(),
+                SerialNumber = item.CellBarcode,
+                InboundOrderRowNo = item.Channel,
+                MaterielName = "鐢佃姱",
+                Status = StockStatusEmun.缁勭洏鏆傚瓨.GetHashCode(),
+            }).ToList();
+
+            // 濡傛灉鎵樼洏宸插瓨鍦紝鐩存帴鏂板鏄庣粏
+            var existingStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.TargetPalletNo);
+            if (existingStock != null)
+            {
+                details.ForEach(detail => detail.StockId = existingStock.Id);
+                return await StockInfoDetailService.Repository.AddDataAsync(details) > 0;
+            }
+
+            // 鎵樼洏涓嶅瓨鍦ㄥ垯鍒涘缓骞跺啓鍏ユ槑缁�
+            var entity = new Dt_StockInfo()
+            {
+                PalletCode = stock.TargetPalletNo,
+                WarehouseId = 1,
+                StockStatus = 1,
+                Creater = "system",
+                Details = details
+            };
+
+            //Dt_Task dt_Task = new Dt_Task()
+            //{
+            //    TaskNum = 0,
+            //    PalletCode = stock.PalletNo,
+            //    PalletType = 1,
+            //    Roadway = "1",
+            //    TaskType = TaskTypeEnum.Inbound.GetHashCode(),
+            //    TaskStatus = TaskStatusEnum.New.GetHashCode(),
+            //    SourceAddress = stock.LineNo,
+            //    TargetAddress = "缁勭洏鍖�",
+            //    CurrentAddress = stock.LineNo,
+            //    NextAddress = "缁勭洏鍖�",
+            //    WarehouseId = 1,
+            //    Grade = 1,
+            //    Creater = "system",
+            //};
+
+            return StockInfoService.Repository.AddData(entity, x => x.Details);
+        }
+
+        /// <summary>
+        /// 鎹㈢洏
+        /// </summary>
+        /// <param name="stock">闇�瑕佹崲鐩樼殑鏄庣粏鏁版嵁</param>
+        /// <returns>鏄惁鎴愬姛</returns>
+        public async Task<bool> ChangePallet(StockDTO stock)
+        {
+            // 鍙傛暟鏍¢獙
+            if (stock == null || string.IsNullOrWhiteSpace(stock.TargetPalletNo) || string.IsNullOrWhiteSpace(stock.SourcePalletNo))
+            {
+                return false;
+            }
+
+            // 鏂版棫鎵樼洏涓�鑷翠笉澶勭悊
+            if (string.Equals(stock.SourcePalletNo, stock.TargetPalletNo, StringComparison.OrdinalIgnoreCase))
+            {
+                return false;
+            }
+
+            // 鏌ヨ婧愭墭鐩�
+            var sourceStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.SourcePalletNo);
+            if (sourceStock == null)
+            {
+                return false;
+            }
+
+            // 鏌ヨ鎴栧垱寤虹洰鏍囨墭鐩�
+            var targetStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.TargetPalletNo);
+            if (targetStock == null)
+            {
+                var newStock = new Dt_StockInfo()
+                {
+                    PalletCode = stock.TargetPalletNo,
+                    WarehouseId = sourceStock.WarehouseId,
+                    StockStatus = sourceStock.StockStatus,
+                    Creater = "system"
+                };
+
+                var newId = StockInfoService.Repository.AddData(newStock);
+                if (newId <= 0)
+                {
+                    return false;
+                }
+
+                targetStock = newStock;
+                targetStock.Id = newId;
+            }
+
+            // 鑾峰彇闇�瑕佽浆绉荤殑鏉$爜
+            var serialNumbers = stock.Details.Select(d => d.CellBarcode).Distinct().ToList();
+            if (!serialNumbers.Any())
+            {
+                return false;
+            }
+
+            // 鏌ヨ婧愭墭鐩樺搴旂殑鏄庣粏
+            var detailEntities = StockInfoDetailService.Repository.QueryData(d => d.StockId == sourceStock.Id && serialNumbers.Contains(d.SerialNumber));
+
+            if (!detailEntities.Any())
+            {
+                return false;
+            }
+
+            // 鍐欏叆鍘嗗彶璁板綍
+            var detailHistory = CreateDetailHistory(detailEntities, "鎹㈢洏");
+            if (await StockInfoDetail_HtyService.Repository.AddDataAsync(detailHistory) <= 0)
+            {
+                return false;
+            }
+
+            var stockHistory = CreateStockHistory(new List<Dt_StockInfo> { sourceStock, targetStock }, "鎹㈢洏");
+            if (await StockInfo_HtyService.Repository.AddDataAsync(stockHistory) <= 0)
+            {
+                return false;
+            }
+
+            // 鏇存柊鏄庣粏鐨勬墭鐩樹富閿�
+            detailEntities.ForEach(detail => detail.StockId = targetStock.Id);
+            return await StockInfoDetailService.Repository.UpdateDataAsync(detailEntities);
+        }
+
+        /// <summary>
+        /// 鎷嗙洏
+        /// </summary>
+        /// <param name="stock">闇�瑕佹媶鐩樼殑鏄庣粏鏁版嵁</param>
+        /// <returns>鏄惁鎴愬姛</returns>
+        public async Task<bool> SplitPallet(StockDTO stock)
+        {
+            // 鍙傛暟鏍¢獙
+            if (stock == null || string.IsNullOrWhiteSpace(stock.SourcePalletNo))
+            {
+                return false;
+            }
+
+            // 鏌ヨ婧愭墭鐩�
+            var sourceStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.SourcePalletNo);
+            if (sourceStock == null)
+            {
+                return false;
+            }
+
+            // 鑾峰彇闇�瑕佹媶闄ょ殑鏉$爜
+            var serialNumbers = stock.Details.Select(d => d.CellBarcode).Distinct().ToList();
+            if (!serialNumbers.Any())
+            {
+                return false;
+            }
+
+            // 鏌ヨ婧愭墭鐩樺搴旂殑鏄庣粏
+            var detailEntities = StockInfoDetailService.Repository.QueryData(d => d.StockId == sourceStock.Id && serialNumbers.Contains(d.SerialNumber));
+            if (!detailEntities.Any())
+            {
+                return false;
+            }
+
+            // 鍐欏叆鍘嗗彶璁板綍
+            var detailHistory = CreateDetailHistory(detailEntities, "鎷嗙洏");
+            if (await StockInfoDetail_HtyService.Repository.AddDataAsync(detailHistory) <= 0)
+            {
+                return false;
+            }
+
+            var stockHistory = CreateStockHistory(new List<Dt_StockInfo> { sourceStock }, "鎷嗙洏");
+            if (await StockInfo_HtyService.Repository.AddDataAsync(stockHistory) <= 0)
+            {
+                return false;
+            }
+
+            // 鍒犻櫎鏄庣粏
+            return await StockInfoDetailService.Repository.DeleteDataAsync(detailEntities);
+        }
+
+        private List<Dt_StockInfoDetail_Hty> CreateDetailHistory(IEnumerable<Dt_StockInfoDetail> details, string operateType)
+        {
+            var now = DateTime.Now;
+            return details.Select(detail => new Dt_StockInfoDetail_Hty
+            {
+                SourceId = detail.Id,
+                OperateType = operateType,
+                InsertTime = now,
+                StockId = detail.StockId,
+                MaterielCode = detail.MaterielCode,
+                MaterielName = detail.MaterielName,
+                OrderNo = detail.OrderNo,
+                BatchNo = detail.BatchNo,
+                ProductionDate = detail.ProductionDate,
+                EffectiveDate = detail.EffectiveDate,
+                SerialNumber = detail.SerialNumber,
+                StockQuantity = detail.StockQuantity,
+                OutboundQuantity = detail.OutboundQuantity,
+                Status = detail.Status,
+                Unit = detail.Unit,
+                InboundOrderRowNo = detail.InboundOrderRowNo,
+                Remark = detail.Remark,
+                Creater = detail.Creater,
+                CreateDate = detail.CreateDate,
+                Modifier = detail.Modifier,
+                ModifyDate = detail.ModifyDate
+            }).ToList();
+        }
+
+        private List<Dt_StockInfo_Hty> CreateStockHistory(IEnumerable<Dt_StockInfo> stocks, string operateType)
+        {
+            var now = DateTime.Now;
+            return stocks.Select(stock => new Dt_StockInfo_Hty
+            {
+                SourceId = stock.Id,
+                OperateType = operateType,
+                InsertTime = now,
+                PalletCode = stock.PalletCode,
+                PalletType = stock.PalletType,
+                LocationCode = stock.LocationCode,
+                WarehouseId = stock.WarehouseId,
+                StockStatus = stock.StockStatus,
+                Remark = stock.Remark,
+                Creater = stock.Creater,
+                CreateDate = stock.CreateDate,
+                Modifier = stock.Modifier,
+                ModifyDate = stock.ModifyDate
+            }).ToList();
+        }
     }
-}
+}
\ No newline at end of file

--
Gitblit v1.9.3