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; }
}
}