From 5e01ac69c7fa9a55e691c455986ad20c4f447299 Mon Sep 17 00:00:00 2001
From: 快乐的昕的电脑 <快乐的昕的电脑@DESKTOP-C2BQPQU>
Date: 星期三, 22 十月 2025 15:45:27 +0800
Subject: [PATCH] 逻辑优化
---
Services/MesOrderStaManager.cs | 231 ++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 145 insertions(+), 86 deletions(-)
diff --git a/Services/MesOrderStaManager.cs b/Services/MesOrderStaManager.cs
index e42f4cd..8f5f712 100644
--- a/Services/MesOrderStaManager.cs
+++ b/Services/MesOrderStaManager.cs
@@ -43,9 +43,7 @@
{
// 鏌ヨMesOrderSta琛ㄨ幏鍙栧伐鍗曠姸鎬佽褰�
var mesOrderSta = Db.Queryable<MesOrderSta>()
- // 鏍规嵁宸ュ崟ID鍖归厤璁板綍
.Where(s => s.OrderId == query.OrderId)
- // 鑾峰彇绗竴鏉¤褰�
.First();
// 濡傛灉鏈壘鍒拌褰�,杩斿洖绌哄璞�
@@ -54,8 +52,9 @@
// 鏌ヨWomdaa琛ㄨ幏鍙栧伐鍗曚富琛ㄤ俊鎭�
var womdaa = Db.Queryable<Womdaa>()
.Where(a => a.Id == query.OrderId).First();
- // 璁剧疆宸ュ崟鐘舵��
- mesOrderSta.OrderStatus = womdaa.Daa018;
+
+ // 鍒ょ┖澶勭悊锛岄伩鍏嶇┖寮曠敤寮傚父
+ mesOrderSta.OrderStatus = womdaa != null ? womdaa.Daa018 : null;
return mesOrderSta;
}
@@ -93,122 +92,182 @@
/// <summary>
/// 鏇存柊鏈哄櫒鏃堕棿骞跺鐞嗛妫�
+ /// 鍙樻洿璇存槑锛�
+ /// 1) 鏈�鏂伴妫�缁撴灉涓衡�滀笉鍚堟牸鈥濇椂锛氭竻绌� MA_SHOUT_TIME锛堥�佹鍛煎彨鏃堕棿锛�
+ /// 2) 鑻ヤ笉瀛樺湪棣栨鍗曟椂鎴栬�呴妫�鍗曠粨鏋滀负鈥滀笉鍚堟牸鈥濇椂锛氬垱寤洪妫�鍗�
+ /// 3) 棣栨鍚堟牸涓旈�佹鏃堕棿 >= 璋冩満寮�濮嬫椂闂存椂锛氬啓鍏ヨ皟鏈哄畬鎴愭椂闂翠笌寮�宸ユ椂闂�
/// </summary>
- /// <param name="entity">宸ュ崟鐘舵�佸疄浣�,鍖呭惈鏈哄櫒鏃堕棿淇℃伅</param>
- /// <returns>鏇存柊鏄惁鎴愬姛</returns>
public bool ChangeMachineTime(MesOrderSta entity)
{
- // 鏌ヨ宸ュ崟涓昏〃淇℃伅
+ const string FirstCheckType = "棣栨";
+ const string FirstCheckResultOK = "鍚堟牸";
+ const string FirstCheckResultNG = "涓嶅悎鏍�";
+
var womdaa = Db.Queryable<Womdaa>()
.Where(s => s.Id == entity.OrderId).First();
+ if (womdaa == null) throw new Exception("宸ュ崟涓嶅瓨鍦�");
- // 濡傛灉鏍囪涓�1,闇�瑕佸鐞嗛妫�鐩稿叧閫昏緫
- if (entity.Flag == 1)
+ // 璇诲彇褰撳墠鐘舵�佽
+ var currentSta = Db.Queryable<MesOrderSta>()
+ .Where(s => s.Id == entity.Id).First();
+
+ // 琛岀骇閿侊細涓茶鍖栭妫�閲嶅缓
+ Db.Ado.ExecuteCommand("SELECT ID FROM WOMDAA WHERE DAA001 = :BILL_NO FOR UPDATE",
+ new SugarParameter("BILL_NO", womdaa.Daa001));
+
+ // 鏈�鏂伴妫�
+ var latestFirst = Db.Queryable<MesQaItemsDetect02>()
+ .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == FirstCheckType && (s.Fcancel == null || s.Fcancel != "Y"))
+ .OrderBy(s => s.CreateDate, OrderByType.Desc)
+ .First();
+
+ var latestResult = latestFirst?.FcheckResu?.Trim();
+ var needRebuild = latestFirst == null || string.Equals(latestResult, FirstCheckResultNG, StringComparison.OrdinalIgnoreCase);
+ var clearMaShout = false;
+
+ if (needRebuild)
{
- // 璋冪敤瀛樺偍杩囩▼鎵ц鑷姩棣栨
- // Db.Ado.ExecuteCommand(
- // "BEGIN AUTOMATIC_IPQC_FIRST_CHECK(:BILL_NO); END;",
- // new SugarParameter("BILL_NO", womdaa.Daa001,
- // DbType.String));
- var automaticIpqcFirstCheck =
- mesQaItemsDetect02Manager
- .AutomaticIpqcFirstCheck(womdaa.Daa001);
- if (!automaticIpqcFirstCheck) throw new Exception("棣栨鐢熸垚澶辫触");
+ // 鑻ュ凡鏈夐妫�涓旂粨鏋滀笉鍚堟牸 => 鍏堟竻绌洪�佹鏃堕棿
+ if (latestFirst != null && string.Equals(latestResult, FirstCheckResultNG, StringComparison.OrdinalIgnoreCase))
+ {
+ clearMaShout = true;
+ entity.MaShoutTime = null;
+ entity.remark = $"鏈�鏂伴妫�缁撴灉鈥渰FirstCheckResultNG}鈥濓紝宸叉竻绌洪�佹鏃堕棿骞堕噸寤洪妫�鍗�";
+ }
- // 鑾峰彇褰撳墠鏃堕棿
- var s1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
- // 鐢熸垚棣栨澶囨敞淇℃伅
- var remeke = "宸ユ帶鏈轰簬" + s1 + "鑷姩鍒涘缓鐨勯妫�鍗�";
+ // 璋冪敤瀛樺偍杩囩▼閲嶅缓 / 棣栨鍒涘缓
+ Db.Ado.ExecuteCommand(
+ "BEGIN AUTOMATIC_IPQC_FIRST_CHECK(:BILL_NO); END;",
+ new SugarParameter("BILL_NO", womdaa.Daa001, System.Data.DbType.String));
- // 鏇存柊棣栨鍗曞娉ㄤ俊鎭�
- Db.Updateable<MesQaItemsDetect02>()
- .SetColumns(s => s.Remeke == remeke)
- .Where(s => s.Ftype == "棣栨" && s.Aufnr == womdaa.Daa001)
- .ExecuteCommand();
+ // 閲嶅彇鏈�鏂伴妫�
+ latestFirst = Db.Queryable<MesQaItemsDetect02>()
+ .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == FirstCheckType && (s.Fcancel == null || s.Fcancel != "Y"))
+ .OrderBy(s => s.CreateDate, OrderByType.Desc)
+ .First();
+
+ if (latestFirst != null)
+ {
+ var ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+ var remarkTag = latestResult == null ? "棣栨鍒涘缓" : (latestResult == FirstCheckResultNG ? "涓嶅悎鏍奸噸寤�" : "閲嶅缓");
+ Db.Updateable<MesQaItemsDetect02>()
+ .SetColumns(s => s.Remeke == $"宸ユ帶鏈轰簬{ts}鑷姩鍒涘缓鐨勯妫�鍗�({remarkTag})")
+ .Where(s => s.Id == latestFirst.Id)
+ .ExecuteCommand();
+ }
+ }
+ else
+ {
+ // 涓嶉渶瑕侀噸寤猴細濡傛灉鍓嶇涓诲姩娓呯┖(浼犵┖涓斿師鍊兼湁鍐呭)涔熷厑璁告竻绌�
+ var requestWantClear = string.IsNullOrEmpty(entity.MaShoutTime) && !string.IsNullOrEmpty(currentSta?.MaShoutTime);
+ if (requestWantClear)
+ {
+ clearMaShout = true;
+ entity.MaShoutTime = null;
+ entity.remark = "鍓嶇璇锋眰鎵嬪姩娓呯┖閫佹鏃堕棿";
+ }
+ else
+ {
+ // 姝e父澶囨敞锛堜繚鎸佹渶鏂扮粨鏋滆鏄庯級
+ if (latestFirst != null)
+ {
+ var ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+ Db.Updateable<MesQaItemsDetect02>()
+ .SetColumns(s => s.Remeke == $"宸ユ帶鏈轰簬{ts}棣栨缁撴灉锛歿latestFirst.FcheckResu}")
+ .Where(s => s.Id == latestFirst.Id)
+ .ExecuteCommand();
+ }
+ }
}
+ // 鍚庣画鎶ュ伐閿氱偣閫昏緫淇濇寔
var mesReporting = Db.Queryable<MesReporting>()
.Where(s => s.BillNo == womdaa.Daa001)
.OrderByDescending(s => s.Id)
.First();
-
var editDate = DateTime.Now.ToString("yyyy-MM-dd");
-
- // 鍙戦�丠TTP璇锋眰鍒版暟鎹埛鏂版帴鍙�
- MesNumerical mesNumerical = null;
+ MesNumericalBycl mesNumerical = null;
try
{
- using (var httpClient = new HttpClient())
+ using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
+ var content = new StringContent(
+ JsonConvert.SerializeObject(new { machineNo = entity.MachineNo }),
+ Encoding.UTF8, "application/json");
+
+ var response = httpClient.PostAsync("http://192.168.0.94:9095/Numerical/RefreshDevBycl", content)
+ .GetAwaiter().GetResult();
+
+ if (response.IsSuccessStatusCode)
{
- httpClient.Timeout = TimeSpan.FromSeconds(30);
-
- var content = new StringContent(
- JsonConvert.SerializeObject(new
- { machineNo = entity.MachineNo }),
- Encoding.UTF8,
- "application/json");
-
- var response = httpClient
- .PostAsync("http://192.168.0.94:9095/Numerical/RefreshDev",
- content).GetAwaiter().GetResult();
-
- if (response.IsSuccessStatusCode)
+ var responseString = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
+ var responseObj = JsonConvert.DeserializeObject<dynamic>(responseString);
+ if (responseObj != null && responseObj.code == 200)
{
- var responseString = response.Content.ReadAsStringAsync()
- .GetAwaiter().GetResult();
- var responseObj =
- JsonConvert.DeserializeObject<dynamic>(responseString);
-
- if (responseObj != null && responseObj.code == 200)
- {
- // 璇锋眰鎴愬姛锛岃幏鍙朚esNumerical鏁版嵁
- mesNumerical = Db.Queryable<MesNumerical>()
- .Where(s => s.EditDate == editDate
- && s.MachineNo == entity.MachineNo)
- .OrderByDescending(s => s.Id)
- .First();
- }
+ mesNumerical = Db.Queryable<MesNumericalBycl>()
+ .Where(s => s.EditDate == editDate && s.MachineNo == entity.MachineNo)
+ .OrderByDescending(s => s.Id)
+ .First();
}
}
}
catch (Exception ex)
{
- // 璁板綍寮傚父浣嗕笉闃绘娴佺▼
Console.WriteLine($"鍙戦�佹暟鎹埛鏂拌姹傛椂鍑洪敊: {ex.Message}");
}
- // 濡傛灉璇锋眰澶辫触鎴栬幏鍙栨暟鎹け璐ワ紝mesNumerical灏嗕繚鎸佷负null
-
Db.Deleteable<MesAnchors>()
- .Where(a => a.EditDate == editDate
- && a.OrderId == womdaa.Id)
+ .Where(a => a.EditDate == editDate && a.OrderId == womdaa.Id)
.ExecuteCommand();
- MesAnchors eAnchors = new MesAnchors
+ var eAnchors = new MesAnchors
{
OrderId = womdaa.Id,
OrderNo = womdaa.Daa001,
EditDate = editDate,
- Qty = mesReporting == null ? 0 : Int64.Parse(mesReporting.DyQty),
+ Qty = mesReporting == null ? 0 : (long?)(mesReporting.DyQty ?? 0),
InitialValue = mesNumerical == null ? 0 : mesNumerical.CjNum
};
- Db.Insertable<MesAnchors>(eAnchors)
- .ExecuteCommand();
+ Db.Insertable<MesAnchors>(eAnchors).ExecuteCommand();
+ // 鍚堟牸 & 璋冩満閫昏緫
+ if (!clearMaShout && !string.IsNullOrEmpty(entity.MaShoutTime))
+ {
+ if (DateTime.TryParse(entity.MaShoutTime, out var sjTime) &&
+ DateTime.TryParse(entity.MaStartTime, out var startTime) &&
+ sjTime >= startTime)
+ {
+ var sjRecord = latestFirst ??
+ Db.Queryable<MesQaItemsDetect02>()
+ .Where(x => x.Aufnr == womdaa.Daa001 && x.Ftype == FirstCheckType && (x.Fcancel == null || x.Fcancel != "Y"))
+ .OrderBy(x => x.CreateDate, OrderByType.Desc)
+ .First();
- // 鏇存柊宸ュ崟鐘舵�佽〃
- return Db.Updateable<MesOrderSta>()
- // 濡傛灉鏈夐�佹鏃堕棿鍒欐洿鏂�
- .SetColumnsIF(entity.MaShoutTime != null,
- s => s.MaShoutTime == entity.MaShoutTime)
- // 濡傛灉鏍囪涓�1鍒欐洿鏂板娉ㄤ俊鎭�
- .SetColumnsIF(entity.Flag == 1,
- s => s.remark == "浜�" + entity.MaShoutTime + "鏃堕棿鏈変竴娆¢�佹")
- // 鏍规嵁ID鍖归厤璁板綍
- .Where(s => s.Id == entity.Id)
- // 鎵ц鏇存柊骞跺垽鏂奖鍝嶈鏁版槸鍚﹀ぇ浜�0
- .ExecuteCommand() > 0;
+ if (sjRecord != null && string.Equals(sjRecord.FcheckResu?.Trim(), FirstCheckResultOK, StringComparison.OrdinalIgnoreCase))
+ {
+ QualifiedInspection(new OrderMachineDto
+ {
+ OrderId = entity.OrderId,
+ orderNo = entity.OrderNo,
+ machineNo = entity.MachineNo
+ });
+ entity.StartTime = entity.MaShoutTime;
+ entity.MaEndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+ }
+ }
+ }
+
+ // 鏈�缁堟洿鏂帮紙浼樺厛娓呯┖锛�
+ var upd = Db.Updateable<MesOrderSta>()
+ .SetColumnsIF(clearMaShout, s => s.MaShoutTime == null)
+ .SetColumnsIF(!clearMaShout && entity.MaShoutTime != null, s => s.MaShoutTime == entity.MaShoutTime)
+ .SetColumnsIF(entity.MaStartTime != null, s => s.MaStartTime == entity.MaStartTime)
+ .SetColumnsIF(entity.MaEndTime != null, s => s.MaEndTime == entity.MaEndTime)
+ .SetColumnsIF(entity.StartTime != null, s => s.StartTime == entity.StartTime)
+ .SetColumnsIF(entity.Flag == 1 && entity.remark != null, s => s.remark == entity.remark)
+ .Where(s => s.Id == entity.Id);
+
+ return upd.ExecuteCommand() > 0;
}
/// <summary>
@@ -447,7 +506,7 @@
// var reportingOkQty =
// Convert.ToDecimal(vOrder.todayOutput) -
// reporting.OkQty;
- var CjQty = Db.Queryable<MesNumerical>()
+ var CjQty = Db.Queryable<MesNumericalBycl>()
.Where(s => s.MachineNo == entity.MachineNo && s.EditDate == date)
.OrderByDescending(s=>s.CjTiem)
.Select<long?>(s=>s.CjNum).First();
@@ -465,12 +524,12 @@
MachineNo = womdaa.MachineNo,
// BfQty = reportingOkQty,
BfQty = 0,
- BlQty = reportingOkQty.ToString(),
+ BlQty = reportingOkQty,
OkQty = 0,
ItemNo = womdaa.Daa002,
BillNo = womdaa.Daa001,
- CjQty = CjQty.ToString(),
- DyQty = reporting.OkQty.ToString()
+ CjQty = CjQty,
+ DyQty = reporting.OkQty
};
// 鎻掑叆鎶ュ伐璁板綍
@@ -500,7 +559,7 @@
public bool StateCheck(OrderMachineDto query)
{
// 鏌ヨ宸ュ崟瑙嗗浘淇℃伅
- var vOrder = Db.Queryable<VOrder>()
+ var vOrder = Db.Queryable<VOrderBycl>()
.Where(s => s.ID == query.OrderId).First();
// 鏍规嵁涓嶅悓鎿嶄綔鏍囪瘑杩涜妫�鏌�
@@ -579,7 +638,7 @@
if (binding)
return Db.Updateable<MesOrderSta>()
- .SetColumns(s => s.MaEndTime == endDate)
+ .SetColumns(s => s.MaEndTime == endDate) // 鑷姩鍐欏叆璋冩満瀹屾垚鏃堕棿
.SetColumns(s => s.StartTime == entity.MaShoutTime)
.Where(s => s.OrderId == query.OrderId).ExecuteCommand() > 0;
--
Gitblit v1.9.3