From 73619ed7faff7cd21be86f62842fd5e965772b87 Mon Sep 17 00:00:00 2001 From: "BB.Wang" Date: Tue, 7 Feb 2023 17:47:43 +0800 Subject: [PATCH] =?UTF-8?q?Yiru=E8=AA=BF=E6=95=B4=E5=87=BA=E8=B2=A8?= =?UTF-8?q?=E5=BA=8F=E8=99=9F=E5=8F=96=E8=99=9F=E6=96=B9=E5=BC=8F(?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0Detail=20table=E7=B4=80=E9=8C=84=E5=87=BA?= =?UTF-8?q?=E8=B2=A8=E5=BA=8F=E8=99=9F=E4=BD=BF=E7=94=A8=E5=88=B0=E5=93=AA?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AMES/SerialRulesController.cs | 343 ++++++++++++++++++ .../AMES/SerialRulesDetailController.cs | 126 +++++++ .../Models/AMES/SerialRuleDetail.cs | 118 ++++++ AMESCoreStudio.WebApi/Models/AMESContext.cs | 8 +- 4 files changed, 594 insertions(+), 1 deletion(-) create mode 100644 AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesDetailController.cs create mode 100644 AMESCoreStudio.WebApi/Models/AMES/SerialRuleDetail.cs diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesController.cs index 59fdd10b..70cdd94e 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesController.cs @@ -511,6 +511,347 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } + /// + /// 取得出貨序號(多個) + /// + /// 料號 + /// 生產批 或 生產廠別(當批號為空白時,傳入廠別後2碼) + /// 生產數量 + /// 工單預計開工日 + /// + [HttpGet("ByQurey/{itemNo}/{lotNo}/{num}/{wipShcDate}")] + public async Task> GetSerialRuleByQurey(string itemNo, string lotNo, int num, DateTime wipShcDate) + { + IQueryable q = _context.SerialRules; + IQueryable q_Detail = _context.SerialRuleDetails; + + ResultModel result = new ResultModel(); + var serialRule = await q.Where(p => p.ItemNo == itemNo).FirstOrDefaultAsync(); + // var serialRuleNew = serialRule; + var strRule = ""; + var serial = ""; + var minSerial = ""; + var maxSerial = ""; + #region 1.判斷OTHER + 廠別的序號規則 + + if (num <= 0) + { + result.Success = false; + result.Msg = "請輸入出貨數量!!"; + return result; + } + if (serialRule == null || itemNo.ToUpper() == "OTHER") + { + itemNo = "OTHER"; + if (lotNo.Length != 2) + { + result.Success = false; + result.Msg = "前置碼長度為2"; + //result.Msg = "無料號對應出貨序號規則"; + return result; + } + else + { + //若為OTHER 且查無廠別,則自動新增 + itemNo = itemNo + "-" + lotNo; + serialRule = await q.Where(p => p.ItemNo == itemNo).FirstOrDefaultAsync(); + if (serialRule == null) + { + var serialRule_Sample = await q.Where(p => p.ItemNo == "OTHER").FirstOrDefaultAsync(); + SerialRule serialRule_OTHER = new SerialRule + { + + ItemNo = itemNo, + // CreateDate = System.DateTime.Now, + CreateUserID = 0, + // UpdateDate = System.DateTime.Now, + UpdateUserID = 0, + Rule = serialRule_Sample.Rule, + YNum = serialRule_Sample.YNum, + YLen = serialRule_Sample.YLen, + MNum = serialRule_Sample.MNum, + MLen = serialRule_Sample.MNum, + WNum = serialRule_Sample.WNum, + WLen = serialRule_Sample.WLen, + LotNum = serialRule_Sample.LotNum, + LotLen = serialRule_Sample.LotLen, + SnNum = 0, + SnLen = serialRule_Sample.SnLen + }; + + + await PostSerialRule(serialRule_OTHER); + + q = _context.SerialRules; + serialRule = await q.Where(p => p.ItemNo == itemNo).FirstOrDefaultAsync(); + } + + } + } + else + { + + if (serialRule.LotLen != 0) + { + if (lotNo == null) + { + result.Success = false; + result.Msg = "所輸入LOT字數與規則不符合"; + return result; + } + if (serialRule.LotLen != lotNo.Length) + { + result.Success = false; + result.Msg = "所輸入LOT字數與規則不符合"; + return result; + } + + if (!int.TryParse(lotNo, out int n)) + { + result.Success = false; + result.Msg = "所輸入LOT需為數字"; + return result; + } + + } + + } + + #endregion + + #region 2.針對各年月周判斷新增Detail表 + serialRule = await q.Where(p => p.ItemNo == itemNo).FirstOrDefaultAsync(); + strRule = serialRule.Rule.ToUpper(); + + SerialRuleDetail serialRuleDetail_NEW = new SerialRuleDetail + { + ItemNo = itemNo, + Rule = serialRule.Rule + }; + + if (strRule.Contains("[YYYY]")) //年份 + { + serialRuleDetail_NEW.YNum = wipShcDate.Year; + serialRuleDetail_NEW.SnNum = 0; + } + if (strRule.Contains("[YY]"))//年份後兩碼 + { + serialRuleDetail_NEW.YNum = int.Parse(wipShcDate.ToString("yy")); + serialRuleDetail_NEW.SnNum = 0; + + } + if (strRule.Contains("[MM]"))//月份 + { + serialRuleDetail_NEW.MNum = wipShcDate.Month; + serialRuleDetail_NEW.SnNum = 0; + + } + if (strRule.Contains("[WW]")) + { + //當年第一天為第1周,且每周的開始為星期一 + System.Globalization.GregorianCalendar gc = new System.Globalization.GregorianCalendar(); + int week = gc.GetWeekOfYear(wipShcDate, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Monday); + serialRuleDetail_NEW.WNum = week; + + } + + if (strRule.Contains("[LOT3]") || strRule.Contains("[LOT4]")) + { + serialRuleDetail_NEW.LotNum = int.Parse(lotNo); + } + + 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; + #endregion + + + #region 3.產生序號 + strRule = serialRule.Rule.ToUpper(); + serial = serialRule.Rule; + + if (itemNo.StartsWith("OTHER")) + { + + if (strRule.Contains("[SS]")) + { + serial = serial.Replace("[SS]", lotNo); + } + if (strRule.Contains("[WW]")) + { + // serial = serial.Replace("[WW]", SerialRuleDetail.WNum.ToString().Length == 1 ? SerialRuleDetail.WNum.ToString().PadLeft(2, '0') : SerialRuleDetail.WNum.ToString()); + serial = serial.Replace("[WW]", SerialRuleDetail.WNum.ToString("00")); + } + if (strRule.Contains("[YY]"))//年份後兩碼 + { + var strYY = SerialRuleDetail.YNum.ToString(); + 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); + } + if (strRule.Contains("[SN5]")) + { + SerialRuleDetail.SnNum++; + if (num > 1) + { + minSerial = serial; + maxSerial = serial; + minSerial = minSerial.Replace("[SN5]", SerialRuleDetail.SnNum.ToString("00000")); + SerialRuleDetail.SnNum = SerialRuleDetail.SnNum + num - 1; + maxSerial = maxSerial.Replace("[SN5]", SerialRuleDetail.SnNum.ToString("00000")); + serial = minSerial + "~" + maxSerial; + } + else + { + serial = serial.Replace("[SN5]", SerialRuleDetail.SnNum.ToString("00000")); + } + } + + } + else + { + + if (strRule.Contains("[YYYY]")) //年份 + { + serial = serial.Replace("[YYYY]", SerialRuleDetail.YNum.ToString("0000")); + } + if (strRule.Contains("[YY]"))//年份後兩碼 + { + serial = serial.Replace("[YY]", SerialRuleDetail.YNum.ToString("00")); + } + if (strRule.Contains("[MM]"))//月份 + { + serial = serial.Replace("[MM]", SerialRuleDetail.MNum.ToString("00")); + + } + if (strRule.Contains("[WW]")) + { + // serial = serial.Replace("[WW]", SerialRuleDetail.WNum.ToString().Length == 1 ? SerialRuleDetail.WNum.ToString().PadLeft(2, '0') : SerialRuleDetail.WNum.ToString()); + serial = serial.Replace("[WW]", SerialRuleDetail.WNum.ToString("00")); + } + if (strRule.Contains("[LOT3]")) + { + serial = serial.Replace("[LOT3]", lotNo); + + } + if (strRule.Contains("[LOT4]")) + { + serial = serial.Replace("[LOT4]", lotNo); + } + if (strRule.Contains("[SN3]")) + { + SerialRuleDetail.SnNum++; + if (num > 1) + { + minSerial = serial; + maxSerial = serial; + minSerial = minSerial.Replace("[SN3]", SerialRuleDetail.SnNum.ToString("000")); + SerialRuleDetail.SnNum = SerialRuleDetail.SnNum + num - 1; + maxSerial = maxSerial.Replace("[SN3]", SerialRuleDetail.SnNum.ToString("000")); + serial = minSerial + "~" + maxSerial; + } + else + { + serial = serial.Replace("[SN3]", SerialRuleDetail.SnNum.ToString("000")); + } + } + if (strRule.Contains("[SN4]")) + { + SerialRuleDetail.SnNum++; + if (num > 1) + { + minSerial = serial; + maxSerial = serial; + minSerial = minSerial.Replace("[SN4]", SerialRuleDetail.SnNum.ToString("0000")); + SerialRuleDetail.SnNum = SerialRuleDetail.SnNum + num - 1; + maxSerial = maxSerial.Replace("[SN4]", SerialRuleDetail.SnNum.ToString("0000")); + serial = minSerial + "~" + maxSerial; + } + else + { + serial = serial.Replace("[SN4]", SerialRuleDetail.SnNum.ToString("0000")); + } + } + if (strRule.Contains("[SN5]")) + { + SerialRuleDetail.SnNum++; + if (num > 1) + { + minSerial = serial; + maxSerial = serial; + minSerial = minSerial.Replace("[SN5]", SerialRuleDetail.SnNum.ToString("00000")); + SerialRuleDetail.SnNum = SerialRuleDetail.SnNum + num - 1; + maxSerial = maxSerial.Replace("[SN5]", SerialRuleDetail.SnNum.ToString("00000")); + serial = minSerial + "~" + maxSerial; + } + else + { + serial = serial.Replace("[SN5]", SerialRuleDetail.SnNum.ToString("00000")); + } + } + if (strRule.Contains("[SN6]")) + { + SerialRuleDetail.SnNum++; + if (num > 1) + { + minSerial = serial; + maxSerial = serial; + minSerial = minSerial.Replace("[SN6]", SerialRuleDetail.SnNum.ToString("000000")); + SerialRuleDetail.SnNum = SerialRuleDetail.SnNum + num - 1; + maxSerial = maxSerial.Replace("[SN6]", SerialRuleDetail.SnNum.ToString("000000")); + serial = minSerial + "~" + maxSerial; + } + else + { + serial = serial.Replace("[SN6]", SerialRuleDetail.SnNum.ToString("000000")); + } + } + + if (string.IsNullOrWhiteSpace(serial)) + { + result.Success = false; + result.Msg = "該筆料號設定出貨序號規則有錯誤,請在確認!"; + return result; + } + } + + + #endregion + //修改Serial_Rule_Detail + _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; + + + } + + /// /// 取得樣本序號(單個) /// @@ -772,5 +1113,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return result; } + + } } diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesDetailController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesDetailController.cs new file mode 100644 index 00000000..d354b169 --- /dev/null +++ b/AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesDetailController.cs @@ -0,0 +1,126 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using AMESCoreStudio.WebApi.Models.AMES; +using AMESCoreStudio.CommonTools.Result; +using AMESCoreStudio.WebApi.DTO.AMES; + +namespace AMESCoreStudio.WebApi.Controllers.AMES +{ + /// + /// 出貨序號編碼規則基本資料檔Controller + /// + [Route("api/[controller]")] + [ApiController] + public class SerialRuleDetailsController : ControllerBase + { + private readonly AMESContext _context; + + /// + /// 建構式 + /// + /// + public SerialRuleDetailsController(AMESContext context) + { + _context = context; + } + + /// + /// + /// + /// + /// + /// + [HttpGet] + public async Task>> GetSerialRuleDetail(int page = 0, int limit = 10) + { + IQueryable q = _context.SerialRuleDetails; + if (page > 0) + { + q = q.OrderBy(p => p.SerialRuleDetailID).Skip((page - 1) * limit).Take(limit); + } + else + { + q = q.OrderBy(p => p.SerialRuleDetailID); + } + //q = q.OrderBy(p => p.SerialRuleDetailID); + var SerialRuleDetail = await q.ToListAsync(); + return SerialRuleDetail; + } + + /// + /// 出貨序號編碼規則基本資料檔 to SerialRuleDetailID + /// + /// SerialRuleDetailID + /// + [HttpGet("{id}")] + public async Task>> GetSerialRuleDetail(int id) + { + IQueryable q = _context.SerialRuleDetails; + + var SerialRuleDetail = await q.Where(p => p.SerialRuleDetailID == id).ToListAsync(); + return SerialRuleDetail; + } + + + /// + /// 新增料號基本資料檔 + /// + /// + /// + [HttpPost] + public async Task> PostSerialRuleDetail([FromBody] SerialRuleDetail SerialRuleDetail) + { + ResultModel result = new ResultModel(); + Helper helper = new Helper(_context); + SerialRuleDetail.SerialRuleDetailID = helper.GetIDKey("SerialRuleDetail_ID").Result; + _context.SerialRuleDetails.Add(SerialRuleDetail); + try + { + await _context.SaveChangesAsync(); + result.Success = true; + result.Msg = "OK"; + } + catch (Exception ex) + { + result.Success = false; + result.Msg = ex.InnerException.Message; + } + return result; + } + + /// + /// 修改料號基本資料檔 + /// + /// + [HttpPut("{id}")] + public async Task> PutSerialRuleDetail(int id, [FromBody] SerialRuleDetail SerialRuleDetail) + { + ResultModel result = new ResultModel(); + //_context.Attach(SerialRuleDetail); + // 指定更新某個欄位 + //_context.Entry(SerialRuleDetail).Property(p => p.SerialRuleDetailID).IsModified = true; + _context.Entry(SerialRuleDetail).State = EntityState.Modified; + + try + { + await _context.SaveChangesAsync(); + result.Success = true; + result.Msg = "OK"; + } + catch (Exception ex) + { + result.Success = false; + result.Msg = ex.InnerException.Message; + } + return result; + } + + + + } +} diff --git a/AMESCoreStudio.WebApi/Models/AMES/SerialRuleDetail.cs b/AMESCoreStudio.WebApi/Models/AMES/SerialRuleDetail.cs new file mode 100644 index 00000000..1a5cd383 --- /dev/null +++ b/AMESCoreStudio.WebApi/Models/AMES/SerialRuleDetail.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.EntityFrameworkCore; +using System.Runtime.Serialization; +#nullable disable + +namespace AMESCoreStudio.WebApi.Models.AMES +{ + /// + /// 料號出貨序號規則資料檔 + /// + [Table("SERIAL_RULE_DETAIL", Schema = "JHAMES")] + public partial class SerialRuleDetail + { + /// + /// 序號規則ID + /// + [Key] + [Column("SERIAL_RULE_DETAIL_ID")] + [DataMember] + public int SerialRuleDetailID { get; set; } + + /// + /// 料號 + /// + [Required] + [Column("ITEM_NO")] + [StringLength(20)] + [Display(Name = "料號")] + [DataMember] + public string ItemNo { get; set; } + + /// + /// 規則 + /// + [Required] + [Column("RULE")] + [StringLength(50)] + [DataMember] + [Display(Name = "序號規則")] + public string Rule { get; set; } + + /// + /// 年 + /// + [Column("Y_NUM")] + [DataMember] + public int YNum { get; set; } + + + + /// + /// 月 + /// + [Column("M_NUM")] + [DataMember] + public int MNum { get; set; } + + + + /// + /// 周 + /// + [Column("W_NUM")] + [DataMember] + public int WNum { get; set; } + + + /// + /// 生產序號 + /// + [Column("LOT_NUM")] + [DataMember] + public int LotNum { get; set; } + + + /// + /// 流水序號 + /// + [Column("SN_NUM")] + [DataMember] + public int SnNum { get; set; } + + + /// + /// 建立UserID + /// + [Column("CREATE_USERID")] + [Required] + [DataMember] + public int CreateUserID { get; set; } = 0; + + /// + /// 建立日期 + /// + [Required] + [Column("CREATE_DATE")] + [DataMember] + public DateTime CreateDate { get; set; } = DateTime.Now; + + /// + /// 更新UserID + /// + [Column("UPDATE_USERID")] + [DataMember] + public int UpdateUserID { get; set; } = 0; + + /// + /// 更新日期 + /// + [Column("UPDATE_DATE")] + [DataMember] + public DateTime? UpdateDate { get; set; } = DateTime.Now; + + } +} diff --git a/AMESCoreStudio.WebApi/Models/AMESContext.cs b/AMESCoreStudio.WebApi/Models/AMESContext.cs index f28e4435..fc52a4f3 100644 --- a/AMESCoreStudio.WebApi/Models/AMESContext.cs +++ b/AMESCoreStudio.WebApi/Models/AMESContext.cs @@ -132,8 +132,9 @@ namespace AMESCoreStudio.WebApi modelBuilder.Entity().HasKey(c => new { c.InhouseNo, c.SeqID, c.SerialNo }); modelBuilder.Entity().HasKey(c => new { c.OutfitFactoryID }); modelBuilder.Entity().HasKey(c => new { c.OutfitID }); - modelBuilder.Entity().HasKey(c => new { c.SerialNumber,c.ReprintTime}); + modelBuilder.Entity().HasKey(c => new { c.SerialNumber,c.ReprintTime}); modelBuilder.Entity().HasNoKey(); + modelBuilder.Entity().HasKey(c => new { c.SerialRuleDetailID }); //Yiru End --------------------------------------------------------------------------------------------------------------------------- @@ -918,6 +919,11 @@ namespace AMESCoreStudio.WebApi /// 工單發料資料 /// public DbSet CZmomaterialLists { get; set; } + + /// yiru add + /// 出貨序號規則-明細 + /// + public DbSet SerialRuleDetails { get; set; } } }