Przeglądaj źródła

日进出存算法调整

Murphy 2 lat temu
rodzic
commit
99422a136e

+ 17 - 0
MicroServices/Business/Business.Application.Contracts/Dto/VSMDto.cs

@@ -1,5 +1,6 @@
 using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore.Metadata.Internal;
 using Microsoft.EntityFrameworkCore.Metadata.Internal;
+using Org.BouncyCastle.Utilities.Collections;
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
@@ -271,5 +272,21 @@ namespace Business.Dto
         public string UPN { get; set; }
         public string UPN { get; set; }
         public decimal Qty { get; set; }
         public decimal Qty { get; set; }
     }
     }
+    [Keyless]
+    public partial class LocationQtyDto
+    {
+        public int RowNum { get; set; }
+        public string Location { get; set; }
+        public string Shelf { get; set; }
+        public string ItemNum { get; set; }
+        public string LotSerial { get; set; }
+        public decimal QtyOnHand { get; set; }
+        public string LevelChar { get; set; }
+        public decimal AvailStatusQty { get; set; }
+        public decimal Assay { get; set; }
+        public decimal FreezeQty { get; set; }
+        public string LocType { get; set; }
+        public string Supply { get; set; }
+    }
 }
 }
 
 

+ 18 - 15
MicroServices/Business/Business.Application/VSM/VSMAppService.cs

@@ -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--;

+ 2 - 0
MicroServices/Business/Business.EntityFrameworkCore/EntityFrameworkCore/DOP/BusinessDbContext.cs

@@ -38,6 +38,8 @@ namespace Business.EntityFrameworkCore
 
 
         public DbSet<InvTransHistDetailDto> InvTransHistDetailDto { get; set; }
         public DbSet<InvTransHistDetailDto> InvTransHistDetailDto { get; set; }
 
 
+        public DbSet<LocationQtyDto> LocationQtyDto { get; set; }
+
         public DbSet<ValueFrequencyChartDto> ValueFrequencyChartDto { get; set; }
         public DbSet<ValueFrequencyChartDto> ValueFrequencyChartDto { get; set; }
 
 
         /// <summary>
         /// <summary>