From 2950220f98f891a64cc452478e2a2ae61b82a8cd Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期日, 13 四月 2025 16:21:52 +0800
Subject: [PATCH] 优化代码、添加大屏
---
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs | 315 ++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 231 insertions(+), 84 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..9bc3cd4 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,98 @@
stockInfo.Details = _stockRepository.StockInfoDetailRepository.QueryData(x => x.StockId == stockInfo.Id);
}
return stockInfo;
+ }
+ /// <summary>
+ /// 娣诲姞绌烘墭鐩樼粍鐩樹俊鎭�
+ /// </summary>
+ /// <returns></returns>
+ public WebResponseContent AddStockEmpty(string palletCode)
+ {
+ try
+ {
+ Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == "Empty000");
+ if (materielInfo == null) throw new Exception($"鏈壘鍒扮┖鎵樼洏淇℃伅,鐗╂枡缂栧彿銆怑mpty000銆�");
+ Dt_StockInfo stockInfo = new Dt_StockInfo()
+ {
+ PalletCode = palletCode,
+ StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
+ Creater = "System",
+ Details = new List<Dt_StockInfoDetail>()
+ };
+ Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
+ {
+ Status = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
+ OrderNo = DateTime.Now.ToString("yyMMdd"),
+ StockId = stockInfo.Id != 0 ? stockInfo.Id : 0,
+ MaterielName = materielInfo.MaterielName,
+ MaterielCode = materielInfo.MaterielCode,
+ BatchNo = DateTime.Now.ToString("yyMMdd") + "E",
+ StockQuantity = 1,
+ SerialNumber = "",
+ Creater = "System"
+ };
+ stockInfo.Details.Add(stockInfoDetail);
+ AddMaterielGroup(stockInfo);
+ return WebResponseContent.Instance.OK();
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+ /// <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();
+ 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 = inboundOrderDetail.BatchNo,
+ StockQuantity = 1,// 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 +169,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,108 +193,153 @@
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;
-
- List<int> warehouseIds = _basicRepository.WarehouseRepository.EnableWarehouseIds;
-
- List<int> areaIds = _basicRepository.AreaInfoRepository.GetEnableAreaIds(warehouseIds);
-
- 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
+ try
{
- 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
+ //Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode);
+ //if (materielInfo == null) throw new Exception($"鏈壘鍒扮墿鏂欎俊鎭�");
+ return 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
+ UseableQuantity = b.StockQuantity,
+ BatchNo = b.BatchNo,
+ }, a => a.StockStatus == StockStatusEmun.宸插叆搴�.ObjToInt(), b => b.Status == StockStatusEmun.宸插叆搴�.ObjToInt() && b.MaterielCode == materielCode, x => true).GroupBy(x => x.LocationCode).Select(x => new StockSelectViewDTO
+ {
+ LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
+ MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "",
+ MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
+ PalletCode = string.Join(",", x.Select(x => x.PalletCode).ToList()),
+ //UseableQuantity = x.Sum(x => x.UseableQuantity)
+ UseableQuantity = x.Sum(x => x.UseableQuantity),
+ BatchNo = x.FirstOrDefault()?.BatchNo ?? ""
+ }).ToList();
+ }
+ catch (Exception ex)
{
- LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
- MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "",
- MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
- PalletCode = x.Key,
- UseableQuantity = x.Sum(x => x.UseableQuantity)
- }).ToList();
+ return null;
+ }
}
-
+ /// <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