From 1fe2c573d49a5479fa6da2245d26edd9dd07e122 Mon Sep 17 00:00:00 2001
From: 快乐的昕的电脑 <快乐的昕的电脑@DESKTOP-C2BQPQU>
Date: 星期五, 17 十月 2025 14:54:23 +0800
Subject: [PATCH] 逻辑优化
---
Services/WomdaaManager.cs | 166 +++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 135 insertions(+), 31 deletions(-)
diff --git a/Services/WomdaaManager.cs b/Services/WomdaaManager.cs
index 783968e..b3eb25c 100644
--- a/Services/WomdaaManager.cs
+++ b/Services/WomdaaManager.cs
@@ -25,6 +25,13 @@
list = list.Where(p => p.Daa018 != null && query.OrderStatus.Contains(p.Daa018)).ToList();
}
+ // 鎸夊伐鍗旾D鍒嗙粍锛屽彧淇濈暀姣忕粍涓渶鏃╂姤宸ョ殑涓�鏉�
+ list = list
+ .GroupBy(p => p.ID)
+ .Select(g => g.OrderBy(x => x.BgDate).First())
+ .OrderBy(x => x.BgDate)
+ .ToList();
+
return list;
}
@@ -91,8 +98,7 @@
{
// 鏌ヨ闇�瑕佹樉绀虹殑宸ュ崟ID
var ids = Db.Queryable<MesOrderSelect>()
- .Where(b => b.MachineNo == query.machineNo
- && b.IsShow == 0)
+ .Where(b => b.MachineNo == query.machineNo && b.IsShow == 0)
.Select(s => s.OrderId)
.ToList();
@@ -104,12 +110,87 @@
if (decimals.Count == 0)
return new List<VOrderBycl>();
- // 鏌ヨ宸ュ崟瑙嗗浘锛岀瓫閫夊嚭闇�瑕佹樉绀虹殑宸ュ崟
- return Db.Queryable<VOrderBycl>()
+ // 鏌ヨ榻胯疆鏁伴噰琛�
+ var numericalList = Db.Queryable<MesNumericalBycl>()
+ .Where(x => ids.Contains(x.OrderId ?? 0))
+ .OrderBy(x => x.CjTiem)
+ .ToList();
+
+ var vOrderBycl = new VOrderBycl();
+ if (numericalList.Count > 0)
+ {
+ // 寮�宸ユ暟閲囷細鏈�鏃╀竴鏉�
+ vOrderBycl.StartCjNum = numericalList.First().CjNum ?? 0;
+ // 褰撳墠鏁伴噰锛氭渶鏂颁竴鏉�
+ vOrderBycl.CurrentCjNum = numericalList.Last().CjNum ?? 0;
+ }
+ else
+ {
+ vOrderBycl.StartCjNum = 0;
+ vOrderBycl.CurrentCjNum = 0;
+ }
+
+ // 鏌ヨ鎶ュ伐璁板綍锛岃幏鍙栨渶鍚庝竴鏉℃姤宸ヨ褰�
+ var lastReport = Db.Queryable<MesReporting>()
+ .Where(r => r.BillNo != null && r.BillNo.Contains(query.orderNo))
+ .OrderBy(r => r.Id, OrderByType.Desc)
+ .First();
+
+ if (lastReport == null || !lastReport.BgDate.HasValue)
+ {
+ // 娌℃湁鎶ュ伐璁板綍鎴栨姤宸ユ椂闂存棤鏁堬紝鍒濆閲囬泦鏁颁负寮�宸ラ噰鏁�
+ vOrderBycl.InitCjNum = vOrderBycl.StartCjNum;
+ }
+ else
+ {
+ // 鏈夋姤宸ヨ褰曪紝鍒濆閲囬泦鏁颁负涓婁竴娆℃姤宸ユ椂闂村悗鏈�杩戜竴鏉¢娇杞暟閲囪〃鐨勯噰闆嗘暟閲�
+ // 1. 绮剧‘鍖归厤鎶ュ伐鏃堕棿
+ var exactMatch = numericalList
+ .Select(x => new { Item = x, ParsedTime = DateTime.TryParse(x.CjTiem, out var dt) ? dt : (DateTime?)null })
+ .Where(x => x.ParsedTime.HasValue && x.ParsedTime.Value == lastReport.BgDate.Value)
+ .OrderBy(x => x.ParsedTime)
+ .Select(x => x.Item)
+ .FirstOrDefault();
+
+ if (exactMatch != null)
+ {
+ vOrderBycl.InitCjNum = exactMatch.CjNum ?? vOrderBycl.StartCjNum;
+ }
+ else
+ {
+ // 2. 鎵炬姤宸ユ椂闂翠箣鍚庣殑绗竴鏉�
+ var afterReportNum = numericalList
+ .Select(x => new { Item = x, ParsedTime = DateTime.TryParse(x.CjTiem, out var dt) ? dt : (DateTime?)null })
+ .Where(x => x.ParsedTime.HasValue && x.ParsedTime.Value > lastReport.BgDate.Value)
+ .OrderBy(x => x.ParsedTime)
+ .Select(x => x.Item)
+ .FirstOrDefault();
+
+ vOrderBycl.InitCjNum = afterReportNum?.CjNum ?? vOrderBycl.StartCjNum;
+ }
+ }
+
+ var startCjNum = vOrderBycl.StartCjNum;
+ var currentCjNum = vOrderBycl.CurrentCjNum;
+ var initCjNum = vOrderBycl.InitCjNum;
+
+ // 鏌ヨ宸ュ崟瑙嗗浘锛岀瓫閫夊嚭闇�瑕佹樉绀虹殑宸ュ崟锛屽彧鍙栨渶鏂颁竴鏉�
+ var orders = Db.Queryable<VOrderBycl>()
.Where(c =>
decimals.Contains(c.ID) &&
(c.EditDate == date || c.EditDate == null))
+ .OrderBy(c => c.BgDate, OrderByType.Desc)
+ .Take(1)
.ToList();
+
+ foreach (var order in orders)
+ {
+ order.StartCjNum = startCjNum;
+ order.CurrentCjNum = currentCjNum;
+ order.InitCjNum = initCjNum;
+ }
+
+ return orders;
}
/// <summary>
@@ -171,38 +252,51 @@
var sqlQuerySingle = Db.Ado.SqlQuerySingle<string>(sql);
VOrdrerBycl.finalResult = sqlQuerySingle;
- // 淇鍚庯紙纭繚绫诲瀷涓�鑷达紝閬垮厤鍙傛暟缁戝畾閿欒锛屽苟闃叉ID涓簄ull鏃跺紓甯革級
- var numericalQuery = Db.Queryable<MesNumericalBycl>()
- .Where(n => n.MachineNo == VOrdrerBycl.MachineNo
- && n.OrderId == (VOrdrerBycl.ID == null ? 0 : VOrdrerBycl.ID)
- && n.CjNum != null);
+ // 鏌ヨMES_NUMERICAL_BYCL琛紝鑾峰彇寮�宸ユ暟閲囧拰褰撳墠鏁伴噰
+ var numericalList = Db.Queryable<MesNumericalBycl>()
+ .Where(x => x.OrderId == VOrdrerBycl.ID)
+ .OrderBy(x => x.CjTiem)
+ .ToList();
- // 寮�宸ラ噰闆嗗��=绗竴鏉¤褰�(鎸塈D鏈�灏�)
- var startCjNum = numericalQuery
- .OrderBy(n => n.Id)
- .Select(n => n.CjNum)
+ if (numericalList.Count > 0)
+ {
+ // 寮�宸ユ暟閲囷細鏈�鏃╀竴鏉�
+ VOrdrerBycl.StartCjNum = numericalList.First().CjNum ?? 0;
+ // 褰撳墠鏁伴噰锛氭渶鏂颁竴鏉�
+ VOrdrerBycl.CurrentCjNum = numericalList.Last().CjNum ?? 0;
+ }
+ else
+ {
+ VOrdrerBycl.StartCjNum = 0;
+ VOrdrerBycl.CurrentCjNum = 0;
+ }
+
+ // 鏌ヨ鏈�鍚庝竴鏉℃姤宸ヨ褰�
+ var lastReport = Db.Queryable<MesReporting>()
+ .Where(r => r.BillNo != null && r.BillNo.Contains(query.orderNo))
+ .OrderBy(r => r.Id, OrderByType.Desc)
.First();
- // 鏈�澶ч噰闆嗘暟锛堢疮璁″綋鍓嶅�硷級
- var maxCjNum = numericalQuery.Max(n => n.CjNum);
+ if (lastReport == null || !lastReport.BgDate.HasValue)
+ {
+ // 娌℃湁鎶ュ伐璁板綍锛屽垵濮嬮噰闆嗘暟涓哄紑宸ラ噰鏁�
+ VOrdrerBycl.InitCjNum = VOrdrerBycl.StartCjNum;
+ }
+ else
+ {
+ // 鏈夋姤宸ヨ褰曪紝鍒濆閲囬泦鏁颁负涓婁竴娆℃姤宸ユ椂闂村悗鏈�杩戜竴鏉¢娇杞暟閲囪〃鐨勯噰闆嗘暟閲�
+ var afterReportNum = numericalList
+ .Select(x => new { Item = x, ParsedTime = DateTime.TryParse(x.CjTiem, out var dt) ? dt : (DateTime?)null })
+ .Where(x => x.ParsedTime.HasValue && x.ParsedTime.Value > lastReport.BgDate.Value)
+ .OrderBy(x => x.ParsedTime)
+ .Select(x => x.Item)
+ .FirstOrDefault();
- // 杈惧埌鏈�澶у�肩殑绗竴娆℃椂闂达紙濡傞渶灞曠ず鍙悗缁柊澧炲瓧娈碉級
- var firstReachMaxTime = numericalQuery
- .Where(n => n.CjNum == maxCjNum)
- .OrderBy(n => n.Id)
- .Select(n => n.CjTiem)
- .First();
+ VOrdrerBycl.InitCjNum = afterReportNum?.CjNum ?? VOrdrerBycl.StartCjNum;
+ }
- // 杈惧埌鏈�澶у�肩殑鏈�鍚庝竴娆℃椂闂达紙鑻ラ渶瑕佸垽鏂槸鍚︿粛鍦ㄥ闀匡紝鍙姣� first 涓� last锛�
- var lastReachMaxTime = numericalQuery
- .Where(n => n.CjNum == maxCjNum)
- .OrderBy(n => n.Id, OrderByType.Desc)
- .Select(n => n.CjTiem)
- .First();
-
- // 璧嬪�硷紙CurrentCjNum 閲囩敤绱鏈�澶у�硷紝閬垮厤 plateau 閲嶅璁板綍瀵艰嚧璇В锛�
- VOrdrerBycl.StartCjNum = startCjNum ?? 0;
- VOrdrerBycl.CurrentCjNum = maxCjNum ?? 0;
+ // 鎶ュ伐鏃堕噰闆嗘暟灏辨槸涓荤晫闈㈢殑褰撳墠閲囨暟
+ // VOrdrerBycl.CurrentCjNum 宸茶祴鍊硷紝鏃犻渶棰濆澶勭悊
return VOrdrerBycl;
}
@@ -240,6 +334,16 @@
return vPrint;
}
+ /// <summary>
+ /// 鎶ュ伐璁板綍琛�
+ /// </summary>
+ /// <param name="billNo"></param>
+ /// <param name="machineNo"></param>
+ /// <param name="from"></param>
+ /// <param name="to"></param>
+ /// <param name="pageIndex"></param>
+ /// <param name="pageSize"></param>
+ /// <returns></returns>
public (List<MesReportingBgDto> tbBillList, int totalCount) GetByBillNoBG(
string billNo, string machineNo, DateTime? from, DateTime? to, int pageIndex, int pageSize)
{
--
Gitblit v1.9.3