From 779cfb5fe3dfa91dcf85c7fba7d4e68917fe0d24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Wed, 1 Nov 2023 09:15:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entities/BQ/VmiAppService.cs | 99 ++++++++++++++++++- 1 file changed, 95 insertions(+), 4 deletions(-) diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs index 79fc3bb0..ab0706d8 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs @@ -410,7 +410,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ RequestDto inputTemp = new RequestDto(); //inputTemp.Filters.Add(new FilterCondition("BillTime", input.startBillTime, EnumFilterAction.BiggerThanOrEqual, EnumFilterLogic.And)); //inputTemp.Filters.Add(new FilterCondition("BillTime", input.endBillTime, EnumFilterAction.SmallThanOrEqual, EnumFilterLogic.And)); - //var entities = await _logRepository.GetListByFilterAsync(inputTemp.Filters,null,3,0).ConfigureAwait(false); var beginDate= DateTime.Parse(input.startBillTime).ToString("yyyy/MM/dd") + " 00:00:00 "; var endDate = DateTime.Parse(input.endBillTime).ToString("yyyy/MM/dd") + " 23:59:59 "; @@ -418,10 +417,102 @@ namespace Win.Sfs.SettleAccount.Entities.BQ dtFormat.ShortDatePattern = "yyyy/MM/dd HH:mm:ss"; //DateTime aa= DateTime.ParseExact(DateTime.Parse(input.startBillTime).ToString("yyyy/MM/dd"), "yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture); - var entities = await _logRepository.Where(p=>p.BillTime>= DateTime.Parse(beginDate) && p.BillTime<= DateTime.Parse(endDate)).ToListAsync(); - //IQueryable query = _logRepository.WhereIf(input.Filters?.Count != 0, input.Filters.ToLambda()); + + var result = (from temp1 in _logRepository + join temp2 in + ( + from a in + ( + from log in _logRepository + where (int)log.LogType == 200 + group log by new { log.VinCode, log.RealPartCode } into groupLog + select new + { + VinCode = groupLog.Key.VinCode, + RealPartCode = groupLog.Key.RealPartCode, + ChangedQty = groupLog.Sum(x => x.ChangedQty), + ChangedTime = groupLog.Min(x => x.ChangedTime) + } + ) + join b in + ( + from log in _logRepository + where (int)log.LogType == 100 + group log by new { log.VinCode, log.RealPartCode } into groupLog + select new + { + VinCode = groupLog.Key.VinCode, + RealPartCode = groupLog.Key.RealPartCode, + ChangedQty = groupLog.Sum(x => x.ChangedQty), + ChangedTime = groupLog.Min(x => x.ChangedTime) + } + ) on new { a.RealPartCode, a.VinCode } equals new { b.RealPartCode, b.VinCode } + where a.ChangedTime < b.ChangedTime && a.ChangedQty <= b.ChangedQty + select b + ) on new { temp1.VinCode, temp1.RealPartCode } equals new { temp2.VinCode, temp2.RealPartCode } + where temp1.ChangedQty > 0 + select temp1).ToList(); + + + + + + + + + + + + + //var temp2 = (from a in _logRepository + // where (int)a.LogType == 200 + // group a by new { a.VinCode, a.RealPartCode } into g + // let SumChangedQty = g.Sum(log => log.ChangedQty) + // let MinChangedTime = g.Min(log => log.ChangedTime) + // select new + // { + // VinCode = g.Key.VinCode, + // RealPartCode = g.Key.RealPartCode, + // SumChangedQty, + // MinChangedTime + // } into a + // join b in (from log in _logRepository + // where (int)log.LogType == 100 + // group log by new { log.VinCode, log.RealPartCode } into g + // let SumChangedQty = g.Sum(log => log.ChangedQty) + // let MinChangedTime = g.Min(log => log.ChangedTime) + // select new + // { + // VinCode = g.Key.VinCode, + // RealPartCode = g.Key.RealPartCode, + // SumChangedQty, + // MinChangedTime + // }) on new { a.VinCode, a.RealPartCode } equals new { b.VinCode, b.RealPartCode } + // where a.MinChangedTime < b.MinChangedTime && a.SumChangedQty <= b.SumChangedQty + // select b); + + + + + + + + + + + + + + + + + + + + // var entities = await _logRepository.Where(p => p.BillTime >= DateTime.Parse(beginDate) && p.BillTime <= DateTime.Parse(endDate)).ToListAsync(); + // IQueryable query = _logRepository.WhereIf(input.Filters?.Count != 0, input.Filters.ToLambda()); var fileName = $"补货数据_{DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")}.xlsx"; - var content = this.GetContent(entities, "补货数据_"); + var content = this.GetContent(result, "补货数据_"); await _fileContainer.SaveAsync(fileName, content, true).ConfigureAwait(false); return fileName; }