|
|
@@ -1221,7 +1221,7 @@ namespace Business.VSMManagement
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 从当前日期往前倒推进出存,最小默认取到2024-01-01
|
|
|
+ /// 从当前日期往前倒推进出存,最小默认取到2024-01-01,定时任务建议选择每天晚上9点-12点之间
|
|
|
/// </summary>
|
|
|
/// <param name="domain"></param>
|
|
|
/// <returns></returns>
|
|
|
@@ -1231,17 +1231,18 @@ namespace Business.VSMManagement
|
|
|
string sqlMaxHistDayTime = $"select t1.* from InvTransHistDay t1 inner join (SELECT max(HistDayTime) as HistDayTime, ItemNum FROM InvTransHistDay where Domain='{domain}' group by ItemNum) t2 on t1.HistDayTime=t2.HistDayTime and t1.ItemNum=t2.ItemNum and t1.Domain='{domain}'";
|
|
|
var HistMaxTimeDayDto = _businessDbContext.InvTransHistDay.FromSqlRaw(sqlMaxHistDayTime).ToList();
|
|
|
|
|
|
- string sqlHistDetail = $"select A.ItemNum,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,CONVERT(varchar,a.createTime, 23) AS createTime from InvTransHist A where Domain='{domain}' and CreateTime>='2024-01-01' group by ItemNum,CONVERT(varchar,a.createTime, 23)";
|
|
|
- string sqlLastBalanceNum = $"select a.ItemNum,Sum(BeginBalance)+Sum(QtyChange) AS BalanceNum from InvTransHist a inner join (select ItemNum,LotSerial,Max(CreateTime) AS CreateTime from InvTransHist where CreateTime>='2024-01-01' group by ItemNum,LotSerial ) b on a.ItemNum=b.ItemNum and a.LotSerial=b.LotSerial and a.CreateTime=b.CreateTime and Domain='{domain}' group by a.ItemNum";
|
|
|
+ string sqlHistDetail = $"select A.ItemNum,Loc,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,createTime from InvTransHist A where Domain='{domain}' and CreateTime>='2024-01-01'";
|
|
|
if (HistMaxTimeDayDto.Count>0)
|
|
|
{
|
|
|
- sqlHistDetail = $"select A.ItemNum,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,CONVERT(varchar,a.createTime, 23) AS createTime from InvTransHist A where Domain='{domain}' and CreateTime>='{HistMaxTimeDayDto[0].HistDayTime.Date}' group by ItemNum,CONVERT(varchar,a.createTime, 23)";
|
|
|
- sqlLastBalanceNum = $"select a.ItemNum,Sum(BeginBalance)+Sum(QtyChange) AS BalanceNum from InvTransHist a inner join (select ItemNum,LotSerial,Max(CreateTime) AS CreateTime from InvTransHist where CreateTime>='{HistMaxTimeDayDto[0].HistDayTime.Date}' group by ItemNum,LotSerial ) b on a.ItemNum=b.ItemNum and a.LotSerial=b.LotSerial and a.CreateTime=b.CreateTime and Domain='{domain}' group by a.ItemNum";
|
|
|
+ sqlHistDetail = $"select A.ItemNum,Loc,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,createTime from InvTransHist A where Domain='{domain}' and CreateTime>='{HistMaxTimeDayDto[0].HistDayTime}'";
|
|
|
}
|
|
|
//取物料进出存明细
|
|
|
var HistDetailDto = _businessDbContext.InvTransHistDetailDto.FromSqlRaw(sqlHistDetail).ToList();
|
|
|
- //取物料的最新期末库存数
|
|
|
- var LastBalanceNumDto = _businessDbContext.BalanceNumDto.FromSqlRaw(sqlLastBalanceNum).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 sqlItemList = $"select distinct ItemNum from InvTransHist where Domain='{domain}' and CreateTime>='2024-01-01' group by ItemNum";
|
|
|
var QtyChangeDto = _businessDbContext.QtyChangeDto.FromSqlRaw(sqlItemList).ToList();
|
|
|
@@ -1253,6 +1254,10 @@ namespace Business.VSMManagement
|
|
|
{
|
|
|
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 xMaxDay = DateTime.Now;
|
|
|
int day = 0;
|
|
|
while (true)
|
|
|
@@ -1264,27 +1269,24 @@ namespace Business.VSMManagement
|
|
|
invTransHistDay.Domain = domain;
|
|
|
invTransHistDay.ItemNum = x.ItemNum;
|
|
|
invTransHistDay.HistDayTime = xMaxDay.AddDays(day).Date;
|
|
|
- //如果当前计算日期大于最大进出明细
|
|
|
- var xBalanceNum = LastBalanceNumDto.Find(b => b.ItemNum == x.ItemNum);
|
|
|
- var daydetail = HistDetailDto.Find(a => a.ItemNum == x.ItemNum && a.CreateTime == xMaxDay.AddDays(day).Date.ToString("yyyy-MM-dd"));
|
|
|
- if (xBalanceNum != null)
|
|
|
+ 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);
|
|
|
+
|
|
|
+
|
|
|
+ invTransHistDay.QtyChangeAdvance = xQtyChangeAdvance;
|
|
|
+ invTransHistDay.QtyChangeOut = xQtyChangeOut;
|
|
|
+ if (day==0)
|
|
|
{
|
|
|
- invTransHistDay.QtyChangeAdvance = daydetail == null ? 0 : daydetail.QtyChangeAdvance;
|
|
|
- invTransHistDay.QtyChangeOut = daydetail == null ? 0 : daydetail.QtyChangeOut;
|
|
|
- if (day==0)
|
|
|
- {
|
|
|
- invTransHistDay.BeginBalance = daydetail == null ? xBalanceNum.BalanceNum : xBalanceNum.BalanceNum;
|
|
|
- invTransHistDay.BalanceNum = daydetail == null ? xBalanceNum.BalanceNum : xBalanceNum.BalanceNum;
|
|
|
- }else
|
|
|
- {
|
|
|
- var nextDayQty = daysHist.Find(a => a.HistDayTime == xMaxDay.AddDays(day + 1).Date && a.ItemNum == x.ItemNum);
|
|
|
- //倒推期初数
|
|
|
- invTransHistDay.BalanceNum = nextDayQty.BeginBalance;
|
|
|
- invTransHistDay.BeginBalance = daydetail == null ? nextDayQty.BeginBalance : nextDayQty.BeginBalance+daydetail.QtyChangeOut-daydetail.QtyChangeAdvance;
|
|
|
-
|
|
|
- }
|
|
|
- daysHist.Add(invTransHistDay);
|
|
|
+ invTransHistDay.BeginBalance = xBeginBalance;
|
|
|
+ invTransHistDay.BalanceNum =xBalanceNum;
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ var nextDayQty = daysHist.Find(a => a.HistDayTime == xMaxDay.AddDays(day + 1).Date && a.ItemNum == x.ItemNum);
|
|
|
+ //倒推期初数
|
|
|
+ invTransHistDay.BalanceNum = nextDayQty.BeginBalance;
|
|
|
+ invTransHistDay.BeginBalance =nextDayQty.BeginBalance+ xQtyChangeOut - xQtyChangeAdvance;
|
|
|
}
|
|
|
+ daysHist.Add(invTransHistDay);
|
|
|
day--;
|
|
|
}
|
|
|
});
|