Browse Source

Yiru調整出貨序號取號方式(增加Detail table紀錄出貨序號使用到哪)

PTD
BB.Wang 2 years ago
parent
commit
73619ed7fa
  1. 343
      AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesController.cs
  2. 126
      AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesDetailController.cs
  3. 118
      AMESCoreStudio.WebApi/Models/AMES/SerialRuleDetail.cs
  4. 6
      AMESCoreStudio.WebApi/Models/AMESContext.cs

343
AMESCoreStudio.WebApi/Controllers/AMES/SerialRulesController.cs

@ -511,6 +511,347 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
}
/// <summary>
/// 取得出貨序號(多個)
/// </summary>
/// <param name="itemNo">料號</param>
/// <param name="lotNo">生產批 或 生產廠別(當批號為空白時,傳入廠別後2碼)</param>
/// <param name="num">生產數量</param>
/// <param name="wipShcDate">工單預計開工日</param>
/// <returns></returns>
[HttpGet("ByQurey/{itemNo}/{lotNo}/{num}/{wipShcDate}")]
public async Task<ResultModel<string>> GetSerialRuleByQurey(string itemNo, string lotNo, int num, DateTime wipShcDate)
{
IQueryable<SerialRule> q = _context.SerialRules;
IQueryable<SerialRuleDetail> q_Detail = _context.SerialRuleDetails;
ResultModel<string> result = new ResultModel<string>();
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;
}
/// <summary>
/// 取得樣本序號(單個)
/// </summary>
@ -772,5 +1113,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return result;
}
}
}

126
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
{
/// <summary>
/// 出貨序號編碼規則基本資料檔Controller
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class SerialRuleDetailsController : ControllerBase
{
private readonly AMESContext _context;
/// <summary>
/// 建構式
/// </summary>
/// <param name="context"></param>
public SerialRuleDetailsController(AMESContext context)
{
_context = context;
}
/// <summary>
///
/// </summary>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult<IEnumerable<SerialRuleDetail>>> GetSerialRuleDetail(int page = 0, int limit = 10)
{
IQueryable<SerialRuleDetail> 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;
}
/// <summary>
/// 出貨序號編碼規則基本資料檔 to SerialRuleDetailID
/// </summary>
/// <param name="id">SerialRuleDetailID</param>
/// <returns></returns>
[HttpGet("{id}")]
public async Task<ActionResult<IEnumerable<SerialRuleDetail>>> GetSerialRuleDetail(int id)
{
IQueryable<SerialRuleDetail> q = _context.SerialRuleDetails;
var SerialRuleDetail = await q.Where(p => p.SerialRuleDetailID == id).ToListAsync();
return SerialRuleDetail;
}
/// <summary>
/// 新增料號基本資料檔
/// </summary>
/// <param name="SerialRuleDetail"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultModel<SerialRuleDetail>> PostSerialRuleDetail([FromBody] SerialRuleDetail SerialRuleDetail)
{
ResultModel<SerialRuleDetail> result = new ResultModel<SerialRuleDetail>();
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;
}
/// <summary>
/// 修改料號基本資料檔
/// </summary>
/// <returns></returns>
[HttpPut("{id}")]
public async Task<ResultModel<SerialRuleDetail>> PutSerialRuleDetail(int id, [FromBody] SerialRuleDetail SerialRuleDetail)
{
ResultModel<SerialRuleDetail> result = new ResultModel<SerialRuleDetail>();
//_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;
}
}
}

118
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
{
/// <summary>
/// 料號出貨序號規則資料檔
/// </summary>
[Table("SERIAL_RULE_DETAIL", Schema = "JHAMES")]
public partial class SerialRuleDetail
{
/// <summary>
/// 序號規則ID
/// </summary>
[Key]
[Column("SERIAL_RULE_DETAIL_ID")]
[DataMember]
public int SerialRuleDetailID { get; set; }
/// <summary>
/// 料號
/// </summary>
[Required]
[Column("ITEM_NO")]
[StringLength(20)]
[Display(Name = "料號")]
[DataMember]
public string ItemNo { get; set; }
/// <summary>
/// 規則
/// </summary>
[Required]
[Column("RULE")]
[StringLength(50)]
[DataMember]
[Display(Name = "序號規則")]
public string Rule { get; set; }
/// <summary>
/// 年
/// </summary>
[Column("Y_NUM")]
[DataMember]
public int YNum { get; set; }
/// <summary>
/// 月
/// </summary>
[Column("M_NUM")]
[DataMember]
public int MNum { get; set; }
/// <summary>
/// 周
/// </summary>
[Column("W_NUM")]
[DataMember]
public int WNum { get; set; }
/// <summary>
/// 生產序號
/// </summary>
[Column("LOT_NUM")]
[DataMember]
public int LotNum { get; set; }
/// <summary>
/// 流水序號
/// </summary>
[Column("SN_NUM")]
[DataMember]
public int SnNum { get; set; }
/// <summary>
/// 建立UserID
/// </summary>
[Column("CREATE_USERID")]
[Required]
[DataMember]
public int CreateUserID { get; set; } = 0;
/// <summary>
/// 建立日期
/// </summary>
[Required]
[Column("CREATE_DATE")]
[DataMember]
public DateTime CreateDate { get; set; } = DateTime.Now;
/// <summary>
/// 更新UserID
/// </summary>
[Column("UPDATE_USERID")]
[DataMember]
public int UpdateUserID { get; set; } = 0;
/// <summary>
/// 更新日期
/// </summary>
[Column("UPDATE_DATE")]
[DataMember]
public DateTime? UpdateDate { get; set; } = DateTime.Now;
}
}

6
AMESCoreStudio.WebApi/Models/AMESContext.cs

@ -134,6 +134,7 @@ namespace AMESCoreStudio.WebApi
modelBuilder.Entity<OutfitInfoBlob>().HasKey(c => new { c.OutfitID });
modelBuilder.Entity<RLabelReprint>().HasKey(c => new { c.SerialNumber,c.ReprintTime});
modelBuilder.Entity<CZmomaterialList>().HasNoKey();
modelBuilder.Entity<SerialRuleDetail>().HasKey(c => new { c.SerialRuleDetailID });
//Yiru End ---------------------------------------------------------------------------------------------------------------------------
@ -918,6 +919,11 @@ namespace AMESCoreStudio.WebApi
/// 工單發料資料
/// </summary>
public DbSet<CZmomaterialList> CZmomaterialLists { get; set; }
/// <summary> yiru add
/// 出貨序號規則-明細
/// </summary>
public DbSet<SerialRuleDetail> SerialRuleDetails { get; set; }
}
}

Loading…
Cancel
Save