using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseServices;
|
using WIDESEA_IBasicRepository;
|
using WIDESEA_IStockRepository;
|
using WIDESEA_IStockService;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_StockService
|
{
|
public partial class ProStockInfoService : ServiceBase<Dt_ProStockInfo, IProStockInfoRepository>, IProStockInfoService
|
{
|
public IProStockInfoRepository Repository => BaseDal;
|
private readonly IStockRepository _stockRepository;
|
private readonly IBasicRepository _basicRepository;
|
public ProStockInfoService(IProStockInfoRepository BaseDal,IStockRepository stockRepository, IBasicRepository basicRepository) : base(BaseDal)
|
{
|
_stockRepository = stockRepository;
|
_basicRepository = basicRepository;
|
}
|
/// <summary>
|
/// 根据外包信息解绑内包信息
|
/// </summary>
|
public WebResponseContent UnBindStock(List<Dt_ProStockInfoDetail> proStockInfoDetails)
|
{
|
WebResponseContent content = new WebResponseContent();
|
//根据内包号进行库存扣除
|
try
|
{
|
List<Dt_ProStockInfoDetail> delProStockDetails=new List<Dt_ProStockInfoDetail>();
|
//foreach (var item in collection)
|
//{
|
// Dt_ProStockInfoDetail delProStockDetal=
|
//}
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
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>
|
/// 获取出库库存
|
/// </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();
|
if (stockTotalQuantity >= needQuantity)//库存够
|
{
|
int index = 0;
|
while (needQuantity > 0)
|
{
|
Dt_ProStockInfo stockInfo = stockInfos[index];
|
float useableStockQuantity = stockInfo.proStockInfoDetails
|
.Where(x => x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode==outOrderDetail.PCode && x.ProductVersion==outOrderDetail.PVer)
|
.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 == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer)
|
{
|
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 == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer)
|
.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 == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer)
|
{
|
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;
|
}
|
}
|
}
|