From 41a5531dc31a642623f0a7a766fbe9c256ba9247 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期二, 11 二月 2025 13:53:29 +0800
Subject: [PATCH] 优化WMS前端
---
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs | 287 +++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 216 insertions(+), 71 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs"
index 7372c41..f842d0f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs"
@@ -10,7 +10,9 @@
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Stock;
+using WIDESEA_DTO.WCSInfo;
using WIDESEA_IBasicRepository;
using WIDESEA_IRecordRepository;
using WIDESEA_IRecordService;
@@ -30,6 +32,63 @@
stockInfo.Details = _stockRepository.StockInfoDetailRepository.QueryData(x => x.StockId == stockInfo.Id);
}
return stockInfo;
+ }
+ /// <summary>
+ /// 娣诲姞缁勭洏/搴撳瓨淇℃伅
+ /// </summary>
+ /// <returns></returns>
+ public WebResponseContent AddStockInfo(ref Dt_StockInfo stockInfo, ref Dt_InboundOrder inboundOrder, ProductionlineDTO productionlineDTO)
+ {
+ WebResponseContent content = new WebResponseContent().OK();
+ try
+ {
+ var materielCode = productionlineDTO.traytype.ToString();
+ if (inboundOrder != null)
+ {
+ var inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == productionlineDTO.batchNo);
+ materielCode = inboundOrderDetail.MaterielCode;
+ inboundOrderDetail.ReceiptQuantity++;
+ inboundOrderDetail.OrderDetailStatus = inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity ? OrderDetailStatusEnum.Over.ObjToInt() : OrderDetailStatusEnum.GroupAndInbound.ObjToInt();
+
+ if (inboundOrder.Details.FirstOrDefault(x => x.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()) == null)
+ {
+ inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt();
+ }
+ else if (inboundOrder.OrderStatus == InboundStatusEnum.鏈紑濮�.ObjToInt())
+ {
+ inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱涓�.ObjToInt();
+ }
+ }
+ var materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode);
+ if (materielInfo == null) throw new Exception($"鏈壘鍒扮墿鏂欎俊鎭�,鐗╂枡缂栫爜銆恵materielCode}銆�");
+ Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
+ {
+ Status = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
+ OrderNo = inboundOrder?.OrderNo,
+ StockId = stockInfo.Id != 0 ? stockInfo.Id : 0,
+ MaterielName = materielInfo.MaterielName,
+ MaterielCode = materielInfo.MaterielCode,
+ BatchNo = inboundOrder.Details.FirstOrDefault().BatchNo,
+ StockQuantity = productionlineDTO.QtySum,
+ SerialNumber = "",
+ //SerialNumber = $"{inboundOrder.OrderNo} | {materielInfo.MaterielCode} | {pdaMaterielGroupDTO.BatchNo} | {pdaMaterielGroupDTO.ReceiptQuantity}",
+ Creater = "System"
+ };
+ if (stockInfo.Id == 0)
+ {
+ stockInfo.PalletCode = productionlineDTO.Barcode;
+ stockInfo.StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt();
+ stockInfo.Creater = "System";
+ stockInfo.Remark = productionlineDTO.productQty;
+ }
+ stockInfo.Details.Add(stockInfoDetail);
+
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
}
public void AddMaterielGroup(Dt_StockInfo stockInfo)
@@ -75,8 +134,16 @@
//});
}
//_stockQuantityChangeRecordRepository.AddData(stockQuantityChangeRecords);
- stockInfo.Details = details;
- _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, beforeQuantity, stockInfo.Details.Sum(x => x.StockQuantity) + beforeQuantity, StockChangeType.MaterielGroup);
+ if (details.Count > 0)
+ {
+ stockInfo.Details = details;
+ _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, beforeQuantity, stockInfo.Details.Sum(x => x.StockQuantity) + beforeQuantity, StockChangeType.MaterielGroup);
+ }
+ else
+ {
+ details = stockInfo.Details;
+ _stockRepository.StockInfoDetailRepository.UpdateData(details);
+ }
}
public List<Dt_StockInfo> GetUseableStocks(string materielCode)
@@ -91,7 +158,11 @@
return BaseDal.GetStockInfos(materielCode, locationCodes);
}
-
+ /// <summary>
+ /// 鑾峰彇鎸囧畾鐗╂枡搴撳瓨淇℃伅
+ /// </summary>
+ /// <param name="materielCode"></param>
+ /// <returns></returns>
public List<StockSelectViewDTO> GetStockSelectViews(string materielCode)
{
List<string> roadways = _basicRepository.RoadwayInfoRepository.CanOutRoadwayNos;
@@ -102,97 +173,171 @@
List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(roadways, areaIds);
- return BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId, (a, b) => new StockSelectViewDTO
+ #region 鎸夌墿鏂欐暟閲忔煡璇�
+ //var StockSelectViewDTOs = BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId, (a, b) => new StockSelectViewDTO
+ //{
+ // LocationCode = a.LocationCode,
+ // MaterielCode = b.MaterielCode,
+ // MaterielName = b.MaterielName,
+ // PalletCode = a.PalletCode,
+ // UseableQuantity = b.StockQuantity - b.OutboundQuantity
+ //}, a => locationCodes.Contains(a.LocationCode), b => b.StockQuantity > b.OutboundQuantity && b.Status == StockStatusEmun.宸插叆搴�.ObjToInt() && b.MaterielCode == materielCode, x => true).GroupBy(x => x.PalletCode).Select(x => new StockSelectViewDTO
+ //{
+ // LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
+ // MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "",
+ // MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
+ // PalletCode = x.Key,
+ // UseableQuantity = x.Sum(x => x.UseableQuantity)
+ //}).ToList();
+ #endregion
+
+ #region 鎸夋壒鍙峰拰鎵樼洏鏁伴噺鏌ヨ
+ //StockSelectViewDTOs = BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId, (a, b) => new StockSelectViewDTO
+ //{
+ // LocationCode = a.LocationCode,
+ // MaterielCode = b.MaterielCode,
+ // MaterielName = b.MaterielName,
+ // PalletCode = a.PalletCode,
+ // BatchNo = b.BatchNo,
+ // UseableQuantity = 1
+ //}, a => locationCodes.Contains(a.LocationCode), b => b.StockQuantity > b.OutboundQuantity && b.Status == StockStatusEmun.宸插叆搴�.ObjToInt() && b.MaterielCode == materielCode, x => true).GroupBy(x => x.PalletCode).Select(x => new StockSelectViewDTO
+ //{
+ // LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
+ // MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "",
+ // MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
+ // BatchNo = x.FirstOrDefault()?.BatchNo ?? "",
+ // PalletCode = x.Key,
+ // UseableQuantity = x.Sum(x => x.UseableQuantity)
+ //}).ToList();
+ #endregion
+
+ #region 鏌ヨ鐗╂枡搴撳瓨鎸夋壒鍙峰垎缁�
+ var StockSelectViewDTOs = BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId, (a, b) => new StockSelectViewDTO
{
- LocationCode = a.LocationCode,
MaterielCode = b.MaterielCode,
MaterielName = b.MaterielName,
- PalletCode = a.PalletCode,
- UseableQuantity = b.StockQuantity - b.OutboundQuantity
- }, a => locationCodes.Contains(a.LocationCode), b => b.StockQuantity > b.OutboundQuantity && b.MaterielCode == materielCode, x => true).GroupBy(x => x.PalletCode).Select(x => new StockSelectViewDTO
+ BatchNo = b.BatchNo,
+ }, a => locationCodes.Contains(a.LocationCode), b => b.StockQuantity > b.OutboundQuantity && b.Status == StockStatusEmun.宸插叆搴�.ObjToInt() && b.MaterielCode == materielCode, x => true).GroupBy(x => x.BatchNo).Select(x => new StockSelectViewDTO
{
- LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "",
MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
- PalletCode = x.Key,
- UseableQuantity = x.Sum(x => x.UseableQuantity)
+ BatchNo = x.Key,
+ UseableQuantity = x.Count()
}).ToList();
+ #endregion
+ return StockSelectViewDTOs;
}
-
+ /// <summary>
+ /// 璁$畻搴撳瓨
+ /// </summary>
+ /// <param name="stockInfos"></param>
+ /// <param name="materielCode"></param>
+ /// <param name="needQuantity"></param>
+ /// <param name="residueQuantity"></param>
+ /// <returns></returns>
public List<Dt_StockInfo> GetOutboundStocks(List<Dt_StockInfo> stockInfos, string materielCode, decimal needQuantity, out decimal residueQuantity)
{
List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>();
- decimal stockTotalQuantity = stockInfos.Select(x => x.Details.Sum(v => v.StockQuantity - v.OutboundQuantity)).Sum(x => x);
- stockInfos = stockInfos.OrderBy(x => x.Id).ToList();
- if (stockTotalQuantity >= needQuantity)//搴撳瓨澶�
+ #region
+ if (stockInfos.Count >= needQuantity)//搴撳瓨澶�
{
- int index = 0;
- while (needQuantity > 0)
+ foreach (var item in stockInfos.OrderBy(x => x.InDate).ToList().GroupBy(x => x.LocationCode))
{
- Dt_StockInfo stockInfo = stockInfos[index];
- decimal useableStockQuantity = stockInfo.Details.Where(x => x.MaterielCode == materielCode).Sum(x => x.StockQuantity - x.OutboundQuantity);
- if (useableStockQuantity < needQuantity)
+ if (item.Count() <= needQuantity && needQuantity > 0)
{
- stockInfo.Details.ForEach(x => x.OutboundQuantity = x.StockQuantity);
- needQuantity -= useableStockQuantity;
+ outStocks.AddRange(item);
+ needQuantity -= item.Count();
}
- else
+ else if (needQuantity > 0)
{
- stockInfo.Details.ForEach(x =>
- {
- if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == materielCode)
- {
- if (x.StockQuantity - x.OutboundQuantity >= needQuantity)
- {
- x.OutboundQuantity += needQuantity;
- needQuantity = 0;
- }
- else
- {
- needQuantity -= (x.StockQuantity - x.OutboundQuantity);
- x.OutboundQuantity = x.StockQuantity;
- }
- }
- });
+ outStocks.Add(item.OrderByDescending(x => x.InDate).First());
+ needQuantity -= 1;
}
- outStocks.Add(stockInfo);
- index++;
}
+
}
else
{
- for (int i = 0; i < stockInfos.Count; i++)
- {
- Dt_StockInfo stockInfo = stockInfos[i];
- decimal useableStockQuantity = stockInfo.Details.Where(x => x.MaterielCode == materielCode).Sum(x => x.StockQuantity - x.OutboundQuantity);
- if (useableStockQuantity < needQuantity)
- {
- stockInfo.Details.ForEach(x => x.OutboundQuantity = x.StockQuantity);
- needQuantity -= useableStockQuantity;
- }
- else
- {
- stockInfo.Details.ForEach(x =>
- {
- if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == materielCode)
- {
- if (x.StockQuantity - x.OutboundQuantity >= needQuantity)
- {
- x.OutboundQuantity += needQuantity;
- needQuantity = 0;
- }
- else
- {
- needQuantity -= (x.StockQuantity - x.OutboundQuantity);
- x.OutboundQuantity = x.StockQuantity;
- }
- }
- });
- }
- outStocks.Add(stockInfo);
- }
+ outStocks = stockInfos;
+ needQuantity -= stockInfos.Count();
}
residueQuantity = needQuantity;
+ #endregion
+
+ #region 鎸夊簱瀛樹笂鎵樼洏鏁伴噺璁$畻
+ //decimal stockTotalQuantity = stockInfos.Select(x => x.Details.Sum(v => v.StockQuantity - v.OutboundQuantity)).Sum(x => x);
+ //stockInfos = stockInfos.OrderBy(x => x.Id).ToList();
+ //if (stockTotalQuantity >= needQuantity)//搴撳瓨澶�
+ //{
+ // int index = 0;
+ // while (needQuantity > 0)
+ // {
+ // Dt_StockInfo stockInfo = stockInfos[index];
+ // decimal useableStockQuantity = stockInfo.Details.Where(x => x.MaterielCode == materielCode).Sum(x => x.StockQuantity - x.OutboundQuantity);
+ // if (useableStockQuantity < needQuantity)
+ // {
+ // stockInfo.Details.ForEach(x => x.OutboundQuantity = x.StockQuantity);
+ // needQuantity -= useableStockQuantity;
+ // }
+ // else
+ // {
+ // stockInfo.Details.ForEach(x =>
+ // {
+ // if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == materielCode)
+ // {
+ // if (x.StockQuantity - x.OutboundQuantity >= needQuantity)
+ // {
+ // x.OutboundQuantity += needQuantity;
+ // needQuantity = 0;
+ // }
+ // else
+ // {
+ // needQuantity -= (x.StockQuantity - x.OutboundQuantity);
+ // x.OutboundQuantity = x.StockQuantity;
+ // }
+ // }
+ // });
+ // }
+ // outStocks.Add(stockInfo);
+ // index++;
+ // }
+ //}
+ //else
+ //{
+ // for (int i = 0; i < stockInfos.Count; i++)
+ // {
+ // Dt_StockInfo stockInfo = stockInfos[i];
+ // decimal useableStockQuantity = stockInfo.Details.Where(x => x.MaterielCode == materielCode).Sum(x => x.StockQuantity - x.OutboundQuantity);
+ // if (useableStockQuantity < needQuantity)
+ // {
+ // stockInfo.Details.ForEach(x => x.OutboundQuantity = x.StockQuantity);
+ // needQuantity -= useableStockQuantity;
+ // }
+ // else
+ // {
+ // stockInfo.Details.ForEach(x =>
+ // {
+ // if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == materielCode)
+ // {
+ // if (x.StockQuantity - x.OutboundQuantity >= needQuantity)
+ // {
+ // x.OutboundQuantity += needQuantity;
+ // needQuantity = 0;
+ // }
+ // else
+ // {
+ // needQuantity -= (x.StockQuantity - x.OutboundQuantity);
+ // x.OutboundQuantity = x.StockQuantity;
+ // }
+ // }
+ // });
+ // }
+ // outStocks.Add(stockInfo);
+ // }
+ //}
+ //residueQuantity = needQuantity;
+ #endregion
+
return outStocks;
}
}
--
Gitblit v1.9.3