From 5f9c60e9c1d323d9f8c1c1958257b5d5c2a33949 Mon Sep 17 00:00:00 2001 From: "BB.Wang" Date: Thu, 30 Mar 2023 08:34:26 +0800 Subject: [PATCH] =?UTF-8?q?Yiru=20=E4=B8=8A=E5=82=B3Serial=5Frule=E7=9A=84?= =?UTF-8?q?=E5=8F=96=E8=99=9F=E6=96=B9=E5=BC=8F=EF=BC=8C=E5=90=8C=E4=B8=80?= =?UTF-8?q?=E5=80=8B=E7=B7=A8=E7=A2=BC=E8=A6=8F=E5=89=87=EF=BC=8C=E7=B5=B1?= =?UTF-8?q?=E4=B8=80=E6=9B=B4=E6=96=B0=E5=8F=96=E8=99=9F=E6=9C=80=E5=A4=A7?= =?UTF-8?q?=E8=99=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AMES/SerialRulesController.cs | 155 +++++++++++++++++- 1 file changed, 153 insertions(+), 2 deletions(-) diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesController.cs index 70cdd94e..a8c500d9 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesController.cs @@ -522,6 +522,16 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES [HttpGet("ByQurey/{itemNo}/{lotNo}/{num}/{wipShcDate}")] public async Task> GetSerialRuleByQurey(string itemNo, string lotNo, int num, DateTime wipShcDate) { + /* 非標準品的取號規則(不同ITEM 相同規則時) + 1、使用item_no 找到規則 + 2、使用規則+Y+M+W+Lot 找Detail 相同之所有資料,取之中之SN_Num的最大值 + 3、以最大值 +1 去產生取號工單的區間值 + 4、更新Detail 相同規則+Y+M+W+Lot的所有資料最大值 + + */ + + + IQueryable q = _context.SerialRules; IQueryable q_Detail = _context.SerialRuleDetails; @@ -668,8 +678,20 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } q_Detail = _context.SerialRuleDetails; - var SerialRuleDetail = await q_Detail.Where(w => w.ItemNo == itemNo && w.YNum == serialRuleDetail_NEW.YNum && w.MNum == serialRuleDetail_NEW.MNum && w.WNum == serialRuleDetail_NEW.WNum && w.LotNum == serialRuleDetail_NEW.LotNum).FirstOrDefaultAsync(); + var SerialRuleDetail = q_Detail.Where(w => w.ItemNo == itemNo && w.YNum == serialRuleDetail_NEW.YNum && w.MNum == serialRuleDetail_NEW.MNum && w.WNum == serialRuleDetail_NEW.WNum && w.LotNum == serialRuleDetail_NEW.LotNum).FirstOrDefault(); + SerialRuleDetail.UpdateDate = System.DateTime.Now; + + + var SerialRuleDetail_All = q_Detail.Where(w => w.Rule == serialRuleDetail_NEW.Rule && w.YNum == serialRuleDetail_NEW.YNum && w.MNum == serialRuleDetail_NEW.MNum && w.WNum == serialRuleDetail_NEW.WNum && w.LotNum == serialRuleDetail_NEW.LotNum); + + if (! itemNo.StartsWith("OTHER")) + { + //抓取所有相同參數的值 + int Max_SnNum = SerialRuleDetail_All.Max(s => s.SnNum); //抓取相同參數的SN_Num 最大數值取值,避免有不一致一情況 + SerialRuleDetail.SnNum = Max_SnNum; + } + #endregion @@ -706,6 +728,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } if (strRule.Contains("[SN5]")) { + SerialRuleDetail.SnNum++; if (num > 1) { @@ -832,8 +855,30 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES #endregion + + #region 修改serial_rule_detail 的記錄 + + if (itemNo.StartsWith("OTHER")) + { + _context.Entry(SerialRuleDetail).State = EntityState.Modified; + } + else + { + #region 同步更改其他相同Rule、YY、MM、WW、Lot 的最大值流水號SN_Num (不同item會有相同rule,且流水號為累加) + foreach (var item in SerialRuleDetail_All) + { + item.SnNum = SerialRuleDetail.SnNum; + item.UpdateDate = SerialRuleDetail.UpdateDate; + _context.Entry(item).State = EntityState.Modified; + } + } + + #endregion + #endregion + + //修改Serial_Rule_Detail - _context.Entry(SerialRuleDetail).State = EntityState.Modified; + try { await _context.SaveChangesAsync(); @@ -1025,6 +1070,112 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } + /// + /// 取得樣本序號,寫入Serial_Rule_Detail(多個) + /// + /// 數量 + /// + [HttpGet("Sample/num_new/{num}")] + public async Task> GetSampleSerialRulesNEW(int num) + { + IQueryable q = _context.SerialRules; + IQueryable q_Detail = _context.SerialRuleDetails; + ResultModel result = new ResultModel(); + + var itemNo = "Sample"; + itemNo = itemNo.ToUpper(); + + var serialRule = await q.Where(p => p.ItemNo == itemNo).FirstOrDefaultAsync(); + + + SerialRuleDetail serialRuleDetail_NEW = new SerialRuleDetail + { + ItemNo = itemNo, + Rule = serialRule.Rule + }; + + var strRule = serialRule.Rule.ToUpper(); + var serial = serialRule.Rule; + var maxSerial = ""; + var minSerial = ""; + + if (strRule.Contains("[WW]")) + { + System.Globalization.GregorianCalendar gc = new System.Globalization.GregorianCalendar(); + DateTime datetime = System.DateTime.Now; + int week = gc.GetWeekOfYear(datetime, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Monday); + serial = serial.Replace("[WW]", week.ToString().Length == 1 ? week.ToString().PadLeft(2, '0') : week.ToString()); + + + serialRuleDetail_NEW.WNum = week; + + + } + if (strRule.Contains("[YY]"))//年份後兩碼 + { + var strYY = System.DateTime.Now.ToString("yy"); + + serialRuleDetail_NEW.YNum = int.Parse(System.DateTime.Now.ToString("yy")); + + + strYY = strYY.Replace("0", "Z"); + strYY = strYY.Replace("1", "A"); + strYY = strYY.Replace("2", "B"); + strYY = strYY.Replace("3", "C"); + strYY = strYY.Replace("4", "D"); + strYY = strYY.Replace("5", "E"); + strYY = strYY.Replace("6", "F"); + strYY = strYY.Replace("7", "G"); + strYY = strYY.Replace("8", "H"); + strYY = strYY.Replace("9", "J"); + + serial = serial.Replace("[YY]", strYY); + } + + + var q_detail_tmp = q_Detail.Where(w => w.ItemNo == itemNo && w.YNum == serialRuleDetail_NEW.YNum && w.MNum == serialRuleDetail_NEW.MNum && w.WNum == serialRuleDetail_NEW.WNum && w.LotNum == serialRuleDetail_NEW.LotNum).ToList(); + if (q_detail_tmp.Count == 0) + { + SerialRuleDetailsController serialRuleDetailsController = new SerialRuleDetailsController(_context); + await serialRuleDetailsController.PostSerialRuleDetail(serialRuleDetail_NEW); + + } + q_Detail = _context.SerialRuleDetails; + var SerialRuleDetail = await q_Detail.Where(w => w.ItemNo == itemNo && w.YNum == serialRuleDetail_NEW.YNum && w.MNum == serialRuleDetail_NEW.MNum && w.WNum == serialRuleDetail_NEW.WNum && w.LotNum == serialRuleDetail_NEW.LotNum).FirstOrDefaultAsync(); + SerialRuleDetail.UpdateDate = System.DateTime.Now; + + + + if (strRule.Contains("[SN5]")) + { + SerialRuleDetail.SnNum++; + maxSerial = serial; + minSerial = serial.Replace("[SN5]", SerialRuleDetail.SnNum.ToString("00000")); + SerialRuleDetail.SnNum = SerialRuleDetail.SnNum + num - 1; + maxSerial = serial.Replace("[SN5]", SerialRuleDetail.SnNum.ToString("00000")); + serial = minSerial + "-" + maxSerial; + } + + + _context.Entry(SerialRuleDetail).State = EntityState.Modified; + + try + { + await _context.SaveChangesAsync(); + result.Success = true; + result.Msg = serial; + } + catch (Exception ex) + { + result.Success = false; + result.Msg = ex.InnerException.Message; + } + return result; + + + } + + /// /// 新增料號基本資料檔 ///