From 695571c6009ecbc12e7d4a4fb147df7967a1260e Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 07 七月 2025 20:21:19 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn
---
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs | 312 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 306 insertions(+), 6 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
index fc4b072..3db069b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
@@ -3,8 +3,13 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using WIDESEA_Common.StockEnum;
+using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_IBasicRepository;
using WIDESEA_IStockRepository;
using WIDESEA_IStockService;
using WIDESEA_Model.Models;
@@ -14,22 +19,76 @@
public partial class ProStockInfoService : ServiceBase<Dt_ProStockInfo, IProStockInfoRepository>, IProStockInfoService
{
public IProStockInfoRepository Repository => BaseDal;
- public IStockRepository _stockRepository;
- public ProStockInfoService(IProStockInfoRepository BaseDal,IStockRepository stockRepository) : base(BaseDal)
+ private readonly IStockRepository _stockRepository;
+ private readonly IBasicRepository _basicRepository;
+ public ProStockInfoService(IProStockInfoRepository BaseDal,IStockRepository stockRepository, IBasicRepository basicRepository) : base(BaseDal)
{
_stockRepository = stockRepository;
+ _basicRepository = basicRepository;
}
+ /// <summary>
+ /// 鏍规嵁澶栧寘淇℃伅瑙g粦鍐呭寘淇℃伅
+ /// </summary>
public WebResponseContent UnBindStock(List<Dt_ProStockInfoDetail> proStockInfoDetails)
{
WebResponseContent content = new WebResponseContent();
//鏍规嵁鍐呭寘鍙疯繘琛屽簱瀛樻墸闄�
try
{
+ //鑾峰彇搴撳瓨
+ List<string> BagNos = proStockInfoDetails.Select(x => x.BagNo).Distinct().ToList();
+ List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
+ .Where(x => x.StockStatus == StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
+ .Includes(x => x.proStockInfoDetails)
+ .Where(x => x.proStockInfoDetails.Any(v => BagNos.Contains(v.BagNo))).Distinct().ToList();
List<Dt_ProStockInfoDetail> delProStockDetails=new List<Dt_ProStockInfoDetail>();
- //foreach (var item in collection)
- //{
- // Dt_ProStockInfoDetail delProStockDetal=
- //}
+ List<Dt_ProStockInfoDetail> upProStockDetails = new List<Dt_ProStockInfoDetail>();
+ List<Dt_ProStockInfo> delProStockInfos = new List<Dt_ProStockInfo>();
+ foreach (var item in proStockInfoDetails)
+ {
+ Dt_ProStockInfo? proStockInfo = proStockInfos.Where(x => x.proStockInfoDetails.Any(v => v.BagNo == item?.BagNo)).FirstOrDefault();
+ Dt_ProStockInfoDetail? proStockInfoDetail = proStockInfo?.proStockInfoDetails.Where(x => x.BagNo == item?.BagNo).FirstOrDefault();
+ if (proStockInfo==null || proStockInfoDetail == null)
+ {
+ return content.Error($"鏈壘鍒皗item?.BagNo}搴撳瓨");
+ }
+
+ //鍒ゆ柇鏄庣粏鏄惁鍏ㄩ儴鎵嚭
+ if (proStockInfoDetail.StockPcsQty==item.StockPcsQty)
+ {
+ delProStockDetails.Add(proStockInfoDetail);
+ proStockInfo.proStockInfoDetails.Remove(proStockInfoDetail);
+ item.OutDetailId = proStockInfoDetail.OutDetailId;
+ item.OutDetailSaleNo = proStockInfoDetail.OutDetailSaleNo;
+ }
+ else
+ {
+ proStockInfoDetail.StockPcsQty -= item.StockPcsQty;
+ proStockInfoDetail.SETQty -= item.SETQty;
+ proStockInfoDetail.OutboundQuantity = 0;
+ item.OutDetailId = 0;
+ item.OutDetailSaleNo = "";
+ upProStockDetails.Add(proStockInfoDetail);
+ }
+
+ if (proStockInfo.proStockInfoDetails.Count==0)
+ {
+ delProStockInfos.Add(proStockInfo);
+ }
+ }
+ if (delProStockInfos.Count>0)
+ {
+ BaseDal.DeleteAndMoveIntoHty(delProStockInfos, OperateTypeEnum.鑷姩鍒犻櫎);
+ }
+ if (delProStockDetails.Count > 0)
+ {
+ _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delProStockDetails, OperateTypeEnum.鑷姩鍒犻櫎);
+ }
+ if (upProStockDetails.Count > 0)
+ {
+ _stockRepository.ProStockInfoDetailRepository.UpdateData(upProStockDetails);
+ }
+ content.OK("鎴愬姛", proStockInfoDetails);
}
catch (Exception ex)
{
@@ -37,5 +96,246 @@
}
return content;
}
+ //鏌ユ壘鍙敤搴撳瓨
+ public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId,Dt_ProOutOrderDetail proOutOrderDetail)
+ {
+ List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId);
+ return BaseDal.GetProStocks(proOutOrderDetail,locationCodes);
+ }
+ /// <summary>
+ /// MES鎻愬簱鍙敤搴撳瓨
+ /// </summary>
+ /// <returns></returns>
+ public List<Dt_ProStockInfo> GetUseableStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder)
+ {
+ //杞崲鎴� 鎴愬搧浠撲粨搴撲俊鎭幏鍙栧熬鏁板睘鎬х殑璐т綅
+ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA71.ToString());
+ List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehouse.WarehouseId);
+ return BaseDal.GetProStocks(mesRworkOutboundOrder, locationCodes);
+ }
+ /// <summary>
+ /// 鑾峰彇鍑哄簱搴撳瓨
+ /// </summary>
+ public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ProOutOrderDetail outOrderDetail, float needQuantity, out float residueQuantity)
+ {
+ List<Dt_ProStockInfo> assignOutStocks =new List<Dt_ProStockInfo>();
+ float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x);
+ //stockInfos = stockInfos.OrderBy(x => x.Id).ToList();
+ bool isCanLot = string.IsNullOrEmpty(outOrderDetail.PLot);
+ bool isCanDate = string.IsNullOrEmpty(outOrderDetail.DateCode);
+ if (stockTotalQuantity >= needQuantity)//搴撳瓨澶�
+ {
+ int index = 0;
+ while (needQuantity > 0)
+ {
+ Dt_ProStockInfo stockInfo = stockInfos[index];
+ float useableStockQuantity = stockInfo.proStockInfoDetails
+ .Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0,1))
+ && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
+ && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
+ .Sum(x => x.StockPcsQty - x.OutboundQuantity);
+ if (useableStockQuantity < needQuantity && useableStockQuantity >0)
+ {
+ stockInfo.proStockInfoDetails.Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1))
+ && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
+ && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)).ToList().ForEach(x => x.OutboundQuantity = x.StockPcsQty);
+ needQuantity -= useableStockQuantity;
+ }
+ else
+ {
+ stockInfo.proStockInfoDetails.ForEach(x =>
+ {
+ //婊¤冻鏉′欢杩涜鍒嗛厤
+ if ((x.StockPcsQty > x.OutboundQuantity)
+ && x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1))
+ && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
+ && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
+ {
+ if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
+ {
+ x.OutboundQuantity += needQuantity;
+ needQuantity = 0;
+ x.OutDetailSaleNo = outOrderDetail.SaleOrder;
+ x.OutDetailId = outOrderDetail.Id;
+ }
+ else
+ {
+ needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
+ x.OutboundQuantity = x.StockPcsQty;
+ x.OutDetailSaleNo = outOrderDetail.SaleOrder;
+ x.OutDetailId = outOrderDetail.Id;
+ }
+ }
+ });
+ }
+ assignOutStocks.Add(stockInfo);
+ index++;
+ }
+ }
+ #region 鎴愬搧鍙敤搴撳瓨涓嶈冻涓嶈繘琛屽垎閰�
+ //else
+ //{
+ // for (int i = 0; i < stockInfos.Count; i++)
+ // {
+ // Dt_ProStockInfo stockInfo = stockInfos[i];
+ // float useableStockQuantity = stockInfo.proStockInfoDetails
+ // .Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer
+ // && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
+ // && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
+ // .Sum(x => x.StockPcsQty - x.OutboundQuantity);
+ // if (useableStockQuantity < needQuantity)
+ // {
+ // stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty);
+ // needQuantity -= useableStockQuantity;
+ // }
+ // else
+ // {
+ // stockInfo.proStockInfoDetails.ForEach(x =>
+ // {
+ // if (x.StockPcsQty > x.OutboundQuantity && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer
+ // && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
+ // && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
+ // {
+ // if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
+ // {
+ // x.OutboundQuantity += needQuantity;
+ // needQuantity = 0;
+ // }
+ // else
+ // {
+ // needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
+ // x.OutboundQuantity = x.StockPcsQty;
+ // }
+ // }
+ // });
+ // }
+ // stockInfo.proStockInfoDetails.ForEach(x =>
+ // {
+ // x.OutDetailSaleNo = outOrderDetail.SaleOrder;
+ // x.OutDetailId = outOrderDetail.Id;
+ // });
+ // assignOutStocks.Add(stockInfo);
+ // }
+ //}
+ #endregion
+ residueQuantity = needQuantity;
+ return assignOutStocks;
+ }
+ /// <summary>
+ /// 鑾峰彇MES鎻愬簱搴撳瓨
+ /// </summary>
+ public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_MesRworkOutboundOrder mesRworkOutboundOrder, float needQuantity, out float residueQuantity)
+ {
+ List<Dt_ProStockInfo> assignOutStocks = new List<Dt_ProStockInfo>();
+ float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x);
+ //stockInfos = stockInfos.OrderBy(x => x.Id).ToList();
+ bool isCanDate = string.IsNullOrEmpty(mesRworkOutboundOrder.DateCode);
+ if (stockTotalQuantity >= needQuantity)//搴撳瓨澶�
+ {
+ int index = 0;
+ while (needQuantity > 0)
+ {
+ Dt_ProStockInfo stockInfo = stockInfos[index];
+ float useableStockQuantity = stockInfo.proStockInfoDetails
+ .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder
+ && x.ProductCode == mesRworkOutboundOrder.ProductCode
+ && x.ProductVersion == mesRworkOutboundOrder.ProductVersion
+ && (isCanDate? isCanDate: x.DateCode == mesRworkOutboundOrder.DateCode))
+ .Sum(x => x.StockPcsQty - x.OutboundQuantity);
+ if (useableStockQuantity < needQuantity)
+ {
+ stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty);
+ needQuantity -= useableStockQuantity;
+ }
+ else
+ {
+ stockInfo.proStockInfoDetails.ForEach(x =>
+ {
+ if ((x.StockPcsQty > x.OutboundQuantity) && x.SaleOrder == mesRworkOutboundOrder.SaleOrder
+ && x.ProductCode == mesRworkOutboundOrder.ProductCode
+ && x.ProductVersion == mesRworkOutboundOrder.ProductVersion
+ && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode))
+ {
+ if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
+ {
+ x.OutboundQuantity += needQuantity;
+ needQuantity = 0;
+ }
+ else
+ {
+ needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
+ x.OutboundQuantity = x.StockPcsQty;
+ }
+ }
+ });
+ }
+ assignOutStocks.Add(stockInfo);
+ index++;
+ }
+ }
+ else
+ {
+ for (int i = 0; i < stockInfos.Count; i++)
+ {
+ Dt_ProStockInfo stockInfo = stockInfos[i];
+ float useableStockQuantity = stockInfo.proStockInfoDetails
+ .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder
+ && x.ProductCode == mesRworkOutboundOrder.ProductCode
+ && x.ProductVersion == mesRworkOutboundOrder.ProductVersion
+ && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode))
+ .Sum(x => x.StockPcsQty - x.OutboundQuantity);
+ if (useableStockQuantity < needQuantity)
+ {
+ stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty);
+ needQuantity -= useableStockQuantity;
+ }
+ else
+ {
+ stockInfo.proStockInfoDetails.ForEach(x =>
+ {
+ if (x.StockPcsQty > x.OutboundQuantity && x.SaleOrder == mesRworkOutboundOrder.SaleOrder
+ && x.ProductCode == mesRworkOutboundOrder.ProductCode
+ && x.ProductVersion == mesRworkOutboundOrder.ProductVersion
+ && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode))
+ {
+ if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
+ {
+ x.OutboundQuantity += needQuantity;
+ needQuantity = 0;
+ }
+ else
+ {
+ needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
+ x.OutboundQuantity = x.StockPcsQty;
+ }
+ }
+ });
+ }
+ assignOutStocks.Add(stockInfo);
+ }
+ }
+ residueQuantity = needQuantity;
+ return assignOutStocks;
+ }
+ ////澶勭悊鍑哄簱搴撳瓨
+ //public (List<Dt_ProStockInfoDetail>?, List<Dt_ProStockInfoDetail>?) HandleOutProStock(Dt_ProStockInfo proStockInfo)
+ //{
+ // List<Dt_ProStockInfoDetail>? deleteStockDetails = null;
+ // List<Dt_ProStockInfoDetail>? updateStockDetails = null;
+ // foreach (var item in proStockInfo.proStockInfoDetails)
+ // {
+ // if (item.StockPcsQty==item.OutboundQuantity)
+ // {
+ // item.ProOutDetailStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
+ // deleteStockDetails.Add(item);
+ // }
+ // else if(item.StockPcsQty> item.OutboundQuantity && item.OutboundQuantity>0)
+ // {
+ // item.StockPcsQty-=item.OutboundQuantity;
+ // updateStockDetails.Add(item);
+ // }
+ // }
+ // return (deleteStockDetails, updateStockDetails);
+ //}
}
}
--
Gitblit v1.9.3