|
@@ -1239,30 +1239,32 @@ namespace Business.VSMManagement
|
|
|
//取物料进出存明细
|
|
//取物料进出存明细
|
|
|
var HistDetailDto = _businessDbContext.InvTransHistDetailDto.FromSqlRaw(sqlHistDetail).ToList();
|
|
var HistDetailDto = _businessDbContext.InvTransHistDetailDto.FromSqlRaw(sqlHistDetail).ToList();
|
|
|
|
|
|
|
|
- //取出物料库位批次的最新一条记录用于计算期末库存
|
|
|
|
|
- string lastDetail = "select a.ItemNum,a.Loc,a.LotSerial,BeginBalance,case when a.QtyChange>0 then a.QtyChange else 0 end as QtyChangeAdvance,case when a.QtyChange<0 then abs(a.QtyChange) else 0 end as QtyChangeOut,BeginBalance+QtyChange as BalanceNum,a.CreateTime from InvTransHist a inner join(select ItemNum,Loc,LotSerial,MAX(CreateTime) AS CreateTime from InvTransHist group by ItemNum,Loc,LotSerial) b on a.ItemNum=b.ItemNum and a.Loc=b.Loc and a.LotSerial=b.LotSerial and a.CreateTime=b.CreateTime order by a.ItemNum,a.Loc,a.LotSerial";
|
|
|
|
|
- var lastDetailDto = _businessDbContext.InvTransHistDetailDto.FromSqlRaw(lastDetail).ToList();
|
|
|
|
|
|
|
+ //取物料实时库存
|
|
|
|
|
+ string sql = $"exec [dbo].[pr_WMS_GetMissedLocationQty]";
|
|
|
|
|
+ var LocationQtyDto = _businessDbContext.LocationQtyDto.FromSqlRaw(sql).ToList();
|
|
|
|
|
+
|
|
|
|
|
+ ////取出物料库位批次的最新一条记录用于计算期末库存(由于可能出现最大进出存时间一模一样的两笔业务,需要汇总)
|
|
|
|
|
+ //string lastDetail = $"select a.ItemNum,a.Loc,a.LotSerial,0.00000 AS BeginBalance,Sum(case when a.QtyChange>0 then a.QtyChange else 0 end) as QtyChangeAdvance,Sum(case when a.QtyChange<0 then abs(a.QtyChange) else 0 end) as QtyChangeOut,Sum(BeginBalance+QtyChange) as BalanceNum,GETDATE() AS CreateTime from InvTransHist a inner join(select ItemNum,Loc,LotSerial,MAX(CreateTime) AS CreateTime from InvTransHist group by ItemNum,Loc,LotSerial) b on a.ItemNum=b.ItemNum and a.Loc=b.Loc and a.LotSerial=b.LotSerial and a.CreateTime=b.CreateTime and a.Domain='{domain}' group by a.ItemNum,a.Loc,a.LotSerial order by a.ItemNum,a.Loc,a.LotSerial";
|
|
|
|
|
+ //var lastDetailDto = _businessDbContext.InvTransHistDetailDto.FromSqlRaw(lastDetail).ToList();
|
|
|
|
|
|
|
|
//取出所有有进出存记录的物料
|
|
//取出所有有进出存记录的物料
|
|
|
string sqlItemList = $"select distinct ItemNum from InvTransHist where Domain='{domain}' and CreateTime>='2024-01-01' group by ItemNum";
|
|
string sqlItemList = $"select distinct ItemNum from InvTransHist where Domain='{domain}' and CreateTime>='2024-01-01' group by ItemNum";
|
|
|
var QtyChangeDto = _businessDbContext.QtyChangeDto.FromSqlRaw(sqlItemList).ToList();
|
|
var QtyChangeDto = _businessDbContext.QtyChangeDto.FromSqlRaw(sqlItemList).ToList();
|
|
|
List<InvTransHistDay> daysHist = new List<InvTransHistDay>();
|
|
List<InvTransHistDay> daysHist = new List<InvTransHistDay>();
|
|
|
- QtyChangeDto?.ForEach(x =>
|
|
|
|
|
|
|
+ QtyChangeDto?.ForEach(x =>
|
|
|
{
|
|
{
|
|
|
DateTime dtMin = new DateTime(2024, 1, 1);
|
|
DateTime dtMin = new DateTime(2024, 1, 1);
|
|
|
- if (HistMaxTimeDayDto.Any(a=>a.ItemNum==x.ItemNum))
|
|
|
|
|
|
|
+ if (HistMaxTimeDayDto.Any(a => a.ItemNum == x.ItemNum))
|
|
|
{
|
|
{
|
|
|
dtMin = HistMaxTimeDayDto.Find(a => a.ItemNum == x.ItemNum).HistDayTime;
|
|
dtMin = HistMaxTimeDayDto.Find(a => a.ItemNum == x.ItemNum).HistDayTime;
|
|
|
}
|
|
}
|
|
|
- //物料期初总库存
|
|
|
|
|
- var xBeginBalance = lastDetailDto.Where(a => a.ItemNum == x.ItemNum).Sum(a => a.BeginBalance);
|
|
|
|
|
//物料期末总库存
|
|
//物料期末总库存
|
|
|
- var xBalanceNum = lastDetailDto.Where(a => a.ItemNum == x.ItemNum).Sum(a => a.BalanceNum);
|
|
|
|
|
|
|
+ var xBalanceNum = LocationQtyDto.Where(a => a.ItemNum == x.ItemNum).Sum(a => a.AvailStatusQty);
|
|
|
var xMaxDay = DateTime.Now;
|
|
var xMaxDay = DateTime.Now;
|
|
|
int day = 0;
|
|
int day = 0;
|
|
|
while (true)
|
|
while (true)
|
|
|
{
|
|
{
|
|
|
- if (xMaxDay.AddDays(day).Date<dtMin)
|
|
|
|
|
|
|
+ if (xMaxDay.AddDays(day).Date < dtMin)
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
InvTransHistDay invTransHistDay = new InvTransHistDay();
|
|
InvTransHistDay invTransHistDay = new InvTransHistDay();
|
|
@@ -1270,21 +1272,22 @@ namespace Business.VSMManagement
|
|
|
invTransHistDay.ItemNum = x.ItemNum;
|
|
invTransHistDay.ItemNum = x.ItemNum;
|
|
|
invTransHistDay.HistDayTime = xMaxDay.AddDays(day).Date;
|
|
invTransHistDay.HistDayTime = xMaxDay.AddDays(day).Date;
|
|
|
var xQtyChangeAdvance = HistDetailDto.Where(a => a.ItemNum == x.ItemNum && a.CreateTime.Date == xMaxDay.AddDays(day).Date).Sum(a => a.QtyChangeAdvance);
|
|
var xQtyChangeAdvance = HistDetailDto.Where(a => a.ItemNum == x.ItemNum && a.CreateTime.Date == xMaxDay.AddDays(day).Date).Sum(a => a.QtyChangeAdvance);
|
|
|
- var xQtyChangeOut=HistDetailDto.Where(a => a.ItemNum == x.ItemNum && a.CreateTime.Date == xMaxDay.AddDays(day).Date).Sum(a => a.QtyChangeOut);
|
|
|
|
|
|
|
+ var xQtyChangeOut = HistDetailDto.Where(a => a.ItemNum == x.ItemNum && a.CreateTime.Date == xMaxDay.AddDays(day).Date).Sum(a => a.QtyChangeOut);
|
|
|
|
|
|
|
|
|
|
|
|
|
invTransHistDay.QtyChangeAdvance = xQtyChangeAdvance;
|
|
invTransHistDay.QtyChangeAdvance = xQtyChangeAdvance;
|
|
|
invTransHistDay.QtyChangeOut = xQtyChangeOut;
|
|
invTransHistDay.QtyChangeOut = xQtyChangeOut;
|
|
|
- if (day==0)
|
|
|
|
|
|
|
+ if (day == 0)
|
|
|
{
|
|
{
|
|
|
- invTransHistDay.BeginBalance = xBeginBalance;
|
|
|
|
|
- invTransHistDay.BalanceNum =xBalanceNum;
|
|
|
|
|
- }else
|
|
|
|
|
|
|
+ invTransHistDay.BalanceNum = xBalanceNum;
|
|
|
|
|
+ invTransHistDay.BeginBalance = xBalanceNum + xQtyChangeOut - xQtyChangeAdvance;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
{
|
|
{
|
|
|
var nextDayQty = daysHist.Find(a => a.HistDayTime == xMaxDay.AddDays(day + 1).Date && a.ItemNum == x.ItemNum);
|
|
var nextDayQty = daysHist.Find(a => a.HistDayTime == xMaxDay.AddDays(day + 1).Date && a.ItemNum == x.ItemNum);
|
|
|
//倒推期初数
|
|
//倒推期初数
|
|
|
invTransHistDay.BalanceNum = nextDayQty.BeginBalance;
|
|
invTransHistDay.BalanceNum = nextDayQty.BeginBalance;
|
|
|
- invTransHistDay.BeginBalance =nextDayQty.BeginBalance+ xQtyChangeOut - xQtyChangeAdvance;
|
|
|
|
|
|
|
+ invTransHistDay.BeginBalance = nextDayQty.BeginBalance + xQtyChangeOut - xQtyChangeAdvance;
|
|
|
}
|
|
}
|
|
|
daysHist.Add(invTransHistDay);
|
|
daysHist.Add(invTransHistDay);
|
|
|
day--;
|
|
day--;
|