From fd38e10c2e982540a3aaf5804ecbc925991b06dd Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期二, 11 十一月 2025 11:41:15 +0800
Subject: [PATCH] 提交
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs | 168 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 167 insertions(+), 1 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
index 96bdd97..ca2bf8b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
@@ -4,6 +4,7 @@
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.StockEnum;
+using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
@@ -12,6 +13,7 @@
using WIDESEA_IRecordService;
using WIDESEA_IStockService;
using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.Basic;
namespace WIDESEA_IOutboundService
{
@@ -20,10 +22,174 @@
public IRepository<Dt_OutStockLockInfo> Repository => BaseDal;
public IUnitOfWorkManage _unitOfWorkManage;
- public OutStockLockInfoService(IRepository<Dt_OutStockLockInfo> BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+ private readonly IStockService _stockService;
+ private readonly IRecordService _recordService;
+
+ public OutStockLockInfoService(IRepository<Dt_OutStockLockInfo> BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockService, IRecordService recordService) : base(BaseDal)
{
_unitOfWorkManage = unitOfWorkManage;
+ _stockService = stockService;
+ _recordService = recordService;
}
+ public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, int? taskNum = null)
+ {
+
+ Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo()
+ {
+ PalletCode = outStock.PalletCode,
+ AssignQuantity = assignQuantity,
+ MaterielCode = outboundOrderDetail.MaterielCode,
+ BatchNo = outboundOrderDetail.BatchNo ?? outStock.Details.FirstOrDefault()?.BatchNo,
+ LocationCode = outStock.LocationCode,
+ MaterielName = outboundOrderDetail.MaterielName,
+ OrderDetailId = outboundOrderDetail.Id,
+ OrderNo = outboundOrder.OrderNo,
+ OrderType = outboundOrder.OrderType,
+
+ OriginalQuantity = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.StockQuantity),
+ Status = taskNum == null ? OutLockStockStatusEnum.宸插垎閰�.ObjToInt() : OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(),
+ StockId = outStock.Id,
+ TaskNum = taskNum,
+ OrderQuantity = outboundOrderDetail.OrderQuantity,
+ Unit = outboundOrderDetail.Unit,
+ //ProductionDate = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.ProductionDate,
+ //EffectiveDate = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.EffectiveDate
+ };
+
+ return outStockLockInfo;
+ }
+
+ /// <summary>
+ /// 鍒涘缓鍑哄簱閿佸畾淇℃伅
+ /// </summary>
+ public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, string barcode = null, int? taskNum = null)
+ {
+ // 鑾峰彇搴撳瓨鏄庣粏涓殑鏉$爜淇℃伅锛堝鏋滄湭鎸囧畾鏉$爜锛屼娇鐢ㄧ涓�涓彲鐢ㄦ潯鐮侊級
+ var stockDetails = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode && x.StockQuantity > x.OutboundQuantity)
+ .OrderBy(x => x.ProductionDate).ToList();
+
+ if (!stockDetails.Any())
+ {
+ throw new Exception($"鏈壘鍒扮墿鏂橻{outboundOrderDetail.MaterielCode}]鐨勫彲鐢ㄥ簱瀛樻槑缁�");
+ }
+
+ // 纭畾鏉$爜锛堝鏋滄湭鎸囧畾锛屼娇鐢ㄦ渶鏃╁叆搴撶殑鏉$爜锛�
+ var targetBarcode = barcode;
+ if (string.IsNullOrEmpty(targetBarcode))
+ {
+ targetBarcode = stockDetails.First().Barcode;
+ }
+ // 鑾峰彇璇ユ潯鐮佺殑鍙敤鏁伴噺
+ var barcodeDetail = stockDetails.FirstOrDefault(x => x.Barcode == targetBarcode);
+ if (barcodeDetail == null)
+ {
+ throw new Exception($"鏉$爜[{targetBarcode}]鍦ㄥ簱瀛樹腑涓嶅瓨鍦�");
+ }
+
+ return new Dt_OutStockLockInfo()
+ {
+ PalletCode = outStock.PalletCode,
+ AssignQuantity = assignQuantity,
+ MaterielCode = outboundOrderDetail.MaterielCode,
+ BatchNo = outboundOrderDetail.BatchNo ?? outStock.Details.FirstOrDefault()?.BatchNo,
+ LocationCode = outStock.LocationCode,
+ MaterielName = outboundOrderDetail.MaterielName,
+ OrderDetailId = outboundOrderDetail.Id,
+ OrderNo = outboundOrder.OrderNo,
+ OrderQuantity = outboundOrderDetail.OrderQuantity,
+ OriginalQuantity = outStock.Details
+ .Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode)
+ .Sum(x => x.StockQuantity),
+ Status = taskNum == null ? (int)OutLockStockStatusEnum.宸插垎閰� : (int)OutLockStockStatusEnum.鍑哄簱涓�,
+ StockId = outStock.Id,
+ TaskNum = taskNum,
+ Unit = outboundOrderDetail.Unit,
+
+
+ // 鏂板瀛楁璧嬪��
+ CurrentBarcode = targetBarcode, // 褰撳墠鍒嗛厤鐨勬潯鐮�
+ OriginalLockQuantity = assignQuantity, // 鍘熷閿佸畾鏁伴噺
+ IsSplitted = 0 // 鍒濆鏈媶鍖�
+ };
+ }
+
+ /// <summary>
+ /// 鏍规嵁璁㈠崟鏄庣粏ID鑾峰彇鍑哄簱閿佸畾淇℃伅
+ /// </summary>
+ public async Task<List<Dt_OutStockLockInfo>> GetByOrderDetailId(int orderDetailId)
+ {
+ return await Db.Queryable<Dt_OutStockLockInfo>()
+ .Where(x => x.OrderDetailId == orderDetailId)
+ .OrderBy(x => x.Id)
+ .ToListAsync();
+ }
+
+ /// <summary>
+ /// 鏍规嵁鎵樼洏缂栧彿鑾峰彇鍑哄簱閿佸畾淇℃伅
+ /// </summary>
+ public async Task<List<Dt_OutStockLockInfo>> GetByPalletCode(string palletCode, int? status = null)
+ {
+ var query = Db.Queryable<Dt_OutStockLockInfo>()
+ .Where(x => x.PalletCode == palletCode);
+
+ if (status.HasValue)
+ {
+ query = query.Where(x => x.Status == status.Value);
+ }
+
+ return await query.OrderBy(x => x.Id).ToListAsync();
+ }
+
+ /// <summary>
+ /// 鑾峰彇鎵樼洏鐨勯攣瀹氫俊鎭�
+ /// </summary>
+ public async Task<List<Dt_OutStockLockInfo>> GetPalletLockInfos(string palletCode)
+ {
+ return await Db.Queryable<Dt_OutStockLockInfo>()
+ .Where(x => x.PalletCode == palletCode && x.Status == (int)OutLockStockStatusEnum.鍑哄簱涓�)
+ .ToListAsync();
+ }
+
+ /// <summary>
+ /// 鏇存柊鍑哄簱閿佸畾淇℃伅鐨勬潯鐮侊紙鐢ㄤ簬鎷嗗寘鎿嶄綔锛�
+ /// </summary>
+ public async Task<WebResponseContent> UpdateLockInfoBarcode(int lockInfoId, string newBarcode)
+ {
+ try
+ {
+ var lockInfo = await Db.Queryable<Dt_OutStockLockInfo>()
+ .Where(x => x.Id == lockInfoId)
+ .FirstAsync();
+
+ if (lockInfo == null)
+ return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撻攣瀹氫俊鎭�");
+
+ // 楠岃瘉鏂版潯鐮佹槸鍚﹀瓨鍦�
+ var stockDetail = await Db.Queryable<Dt_StockInfoDetail>()
+ .Where(x => x.Barcode == newBarcode &&
+ x.StockId == lockInfo.StockId &&
+ x.MaterielCode == lockInfo.MaterielCode)
+ .FirstAsync();
+
+ if (stockDetail == null)
+ return WebResponseContent.Instance.Error("鏂版潯鐮佸湪搴撳瓨涓笉瀛樺湪");
+
+ // 鏇存柊鏉$爜鍜屾媶鍖呯姸鎬�
+ lockInfo.CurrentBarcode = newBarcode;
+ lockInfo.IsSplitted = 1;
+
+ await Db.Updateable(lockInfo).ExecuteCommandAsync();
+
+ return WebResponseContent.Instance.OK("鏇存柊鏉$爜鎴愬姛");
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error($"鏇存柊鏉$爜澶辫触: {ex.Message}");
+ }
+ }
+
+
+
}
}
--
Gitblit v1.9.3