diff --git a/AMESCoreStudio.Web/Controllers/PCSController.cs b/AMESCoreStudio.Web/Controllers/PCSController.cs index f7cc9e90..5e5ff4b4 100644 --- a/AMESCoreStudio.Web/Controllers/PCSController.cs +++ b/AMESCoreStudio.Web/Controllers/PCSController.cs @@ -1434,16 +1434,7 @@ namespace AMESCoreStudio.Web.Controllers if (type_no != null) { var wipBarcodeOther = await _pcsApi.GetWipBarcodeOther(wipNo); - if (wipBarcodeOther != null) - { - wipBarcodeOther.StartNO = StartNO; - wipBarcodeOther.EndNO = EndNO; - wipBarcodeOther.UpdateDate = DateTime.Now; - wipBarcodeOther.UpdateUserID = GetLogInUserID(); - wipBarcodeOther.SerialRuleDetailID = serialruledetailid; - await _pcsApi.PutWipBarcodeOther(JsonConvert.SerializeObject(wipBarcodeOther)); - } - else + if (wipBarcodeOther == null) { wipBarcodeOther = new WipBarcodeOther(); wipBarcodeOther.WipNO = wipNo; @@ -1455,6 +1446,33 @@ namespace AMESCoreStudio.Web.Controllers wipBarcodeOther.SerialRuleDetailID = serialruledetailid; await _pcsApi.PostWipBarcodeOther(JsonConvert.SerializeObject(wipBarcodeOther)); } + else + { + //OTHER 允許多個區間(不連續) + var RuleItem = await _pcsApi.GetSerialRuleDetail(wipBarcodeOther.SerialRuleDetailID); + if (RuleItem.Where(s => s.ItemNo.StartsWith("OTHER")).Count() > 0 && wipBarcodeOther.StartNO.Trim().Length >0) + { + + wipBarcodeOther = new WipBarcodeOther(); + wipBarcodeOther.WipNO = wipNo; + wipBarcodeOther.TypeNO = type_no.TypeNo; + wipBarcodeOther.StartNO = StartNO; + wipBarcodeOther.EndNO = EndNO; + wipBarcodeOther.CreateUserID = GetLogInUserID(); + wipBarcodeOther.UpdateUserID = GetLogInUserID(); + wipBarcodeOther.SerialRuleDetailID = serialruledetailid; + await _pcsApi.PostWipBarcodeOther(JsonConvert.SerializeObject(wipBarcodeOther)); + } + else + { + wipBarcodeOther.StartNO = StartNO; + wipBarcodeOther.EndNO = EndNO; + wipBarcodeOther.UpdateDate = DateTime.Now; + wipBarcodeOther.UpdateUserID = GetLogInUserID(); + wipBarcodeOther.SerialRuleDetailID = serialruledetailid; + await _pcsApi.PutWipBarcodeOther(JsonConvert.SerializeObject(wipBarcodeOther)); + } + } } } @@ -9058,6 +9076,7 @@ namespace AMESCoreStudio.Web.Controllers { var SerialRule = await _pcsApi.GetSerialRuleDetail(SerialRuleDetailID); var result = await _pcsApi.GetWipBarcodeOtherByItemNo(WipNo: wipNo, ItemNo: SerialRule.Select(s=>s.ItemNo).FirstOrDefault()); + result.Data = result.Data.Where(w => w.PlanQTY != w.CompleteQTY); //判斷工單已開線 foreach (var item in result.Data) { @@ -9067,6 +9086,25 @@ namespace AMESCoreStudio.Web.Controllers item.Status = "已開線"; else item.Status = "未投產"; + #region 加入取號數 + string GetCoderesult = await GetSerialCode_SerialLen(SerialRule.Select(s => s.Rule).FirstOrDefault()); + int SNStart = int.Parse(GetCoderesult.Split('-')[0]); //流水號開始 + int SNLen = int.Parse(GetCoderesult.Split('-')[1]); //流水號長度 + + + var WipBarcodeOhter = await _pcsApi.GetWipBarcodeOthers(item.WipNo); + int TotalQTY = 0; + foreach (var item1 in WipBarcodeOhter) + { + int StrNoQty = int.Parse(item1.StartNO.Substring(SNStart, SNLen)); + // 結束流水碼 + int EndNoQty = int.Parse(item1.EndNO.Substring(SNStart, SNLen)); + TotalQTY += EndNoQty - StrNoQty + 1; + } + + item.WipBarcodeOhterQTY = TotalQTY; + + #endregion } result.Data = result.Data.OrderBy(o => o.StartNo); return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal }); @@ -9078,7 +9116,7 @@ namespace AMESCoreStudio.Web.Controllers /// /// 工單號碼 /// - public async Task PCS040DAsync(string id) + public async Task PCS040DAsync(string wipNo,int otherID) { //// 判斷工單號碼是否已經投入 //if (await _pcsApi.GetWipInfoCheckStart(id) == "Y") @@ -9093,7 +9131,9 @@ namespace AMESCoreStudio.Web.Controllers // var _msg = "工單號碼【" + id + "】,工單已開線,不可刪除!"; // return Json(new Result() { success = false, msg = _msg }); //} - var result = await _pcsApi.GetWipBarcodeOther(id); + // var result = await _pcsApi.GetWipBarcodeOther(id); + var result_Barcode = await _pcsApi.GetWipBarcodeOthers(wipNo); + var result = result_Barcode.Where(w => w.OtherID == otherID).FirstOrDefault(); var result1 = await _pcsApi.GetSerialRuleDetail(result.SerialRuleDetailID); //判斷工單結束序號流水號號碼 string GetCoderesult = await GetSerialCode_SerialLen(result1.Select(s => s.Rule).FirstOrDefault()); @@ -9103,37 +9143,44 @@ namespace AMESCoreStudio.Web.Controllers int StartNO = int.Parse(result.StartNO.Substring(SNStart, SNLen)); //判斷是否有比此工單流水號更大的號碼 - if (result1.Select(s => s.SnNum).FirstOrDefault() > EndNO) + if (result1.Select(s => s.SnNum).FirstOrDefault() > EndNO && result1.Where(w=>w.ItemNo.StartsWith("OTHER")).Count() == 0) //標準品以外要判斷最大號 { - return Json(new Result() { success = false, msg = "工單號碼【" + id + "】出貨序號不為目前最大號,請先刪除最大號工單 !" }); + return Json(new Result() { success = false, msg = "工單號碼【" + wipNo + "】出貨序號不為目前最大號,請先刪除最大號工單 !" }); } else { - - - SerialRuleDetail model = new SerialRuleDetail + if (result1.Select(s => s.SnNum).FirstOrDefault() <= EndNO) { - SerialRuleDetailID = result1.Select(s => s.SerialRuleDetailID).FirstOrDefault(), - ItemNo = result1.Select(s => s.ItemNo).FirstOrDefault(), - Rule = result1.Select(s => s.Rule).FirstOrDefault(), - YNum = result1.Select(s => s.YNum).FirstOrDefault(), - MNum = result1.Select(s => s.MNum).FirstOrDefault(), - WNum = result1.Select(s => s.WNum).FirstOrDefault(), - LotNum = result1.Select(s => s.LotNum).FirstOrDefault(), - SnNum = StartNO - 1 - }; - var resultPut = await _pcsApi.PutSerialRuleDetail(result1.Select(s => s.SerialRuleDetailID).FirstOrDefault(), JsonConvert.SerializeObject(model)); - + SerialRuleDetail model = new SerialRuleDetail + { + SerialRuleDetailID = result1.Select(s => s.SerialRuleDetailID).FirstOrDefault(), + ItemNo = result1.Select(s => s.ItemNo).FirstOrDefault(), + Rule = result1.Select(s => s.Rule).FirstOrDefault(), + YNum = result1.Select(s => s.YNum).FirstOrDefault(), + MNum = result1.Select(s => s.MNum).FirstOrDefault(), + WNum = result1.Select(s => s.WNum).FirstOrDefault(), + LotNum = result1.Select(s => s.LotNum).FirstOrDefault(), + SnNum = StartNO - 1 + }; + var resultPut = await _pcsApi.PutSerialRuleDetail(result1.Select(s => s.SerialRuleDetailID).FirstOrDefault(), JsonConvert.SerializeObject(model)); + } // var resultDelete = await _pcsApi.DeleteWipBarcodeOther(id); - + if (result != null) { - result.StartNO = " "; - result.EndNO = " "; - result.UpdateDate = DateTime.Now; - result.UpdateUserID = GetLogInUserID(); - - await _pcsApi.PutWipBarcodeOther(JsonConvert.SerializeObject(result)); + if (result_Barcode.Count > 1) + { + var resultDelete = await _pcsApi.DeleteWipBarcodeOtherByOtherID(otherID); + + } + else + { + result.StartNO = " "; + result.EndNO = " "; + result.UpdateDate = DateTime.Now; + result.UpdateUserID = GetLogInUserID(); + await _pcsApi.PutWipBarcodeOther(JsonConvert.SerializeObject(result)); + } } return Json(new Result() { success = true, msg = "刪除成功" }); } @@ -9218,6 +9265,7 @@ namespace AMESCoreStudio.Web.Controllers string InputStartNo = model.WipBarcodeOther.StartNO.Trim(); string InputEndNo = model.WipBarcodeOther.EndNO.Trim(); + #region 流水碼起迄基本判斷 if (InputStartNo.Length <= NoLength || InputEndNo.Length <= NoLength) { @@ -9241,6 +9289,8 @@ namespace AMESCoreStudio.Web.Controllers return View(model); } + #endregion + //if (InputStartNo.Substring(0, InputStartNo.Length - NoLength) != // InputEndNo.Substring(0, InputEndNo.Length - NoLength)) //{ @@ -9257,8 +9307,36 @@ namespace AMESCoreStudio.Web.Controllers ModelState.AddModelError("error", _msg); return View(model); } + #region 計算設定條碼區間是否有大於工單數 會有多個區間 + var WipBarcodeOhter = await _pcsApi.GetWipBarcodeOthers(model.WipBarcodeOther.WipNO); + int TotalQTY = 0; + foreach (var item in WipBarcodeOhter) + { + int StrNoQty = int.Parse(item.StartNO.Substring(SNStart, SNLen)); + // 結束流水碼 + int EndNoQty = int.Parse(item.EndNO.Substring(SNStart, SNLen)); + TotalQTY += EndNoQty - StrNoQty +1; + } + if (model.Type == "del") + { + TotalQTY -= QTY; + } + else if (model.Type == "add") + { + TotalQTY += QTY; + } + if (TotalQTY != model.WipInfo.PlanQTY) + { + + _msg += "總取號序號數量: "+ TotalQTY + " 與工單數量 : "+model.WipInfo.PlanQTY+" 不符"; + ModelState.AddModelError("error", _msg); + return View(model); + + } - // 計算設定條碼區間是否有大於工單數 + #endregion + + #region 判斷加或減後迄小於起 int sum = 0; // 起始流水碼 int InputStrNoQty = int.Parse(InputStartNo.Substring(SNStart, SNLen)); @@ -9274,7 +9352,7 @@ namespace AMESCoreStudio.Web.Controllers InputEndNoQty += QTY; } - // InputEndNo + #endregion if (InputEndNoQty < InputStrNoQty) @@ -9283,6 +9361,8 @@ namespace AMESCoreStudio.Web.Controllers ModelState.AddModelError("error", _msg); return View(model); } + + string EndNO = model.WipBarcodeOther.EndNO.Substring(0, SNStart) + InputEndNoQty.ToString().PadLeft(SNLen, '0') + model.WipBarcodeOther.EndNO.Substring(SNStart + SNLen); //判斷結束序號是否有重覆在其他區間 //var CheckRepeat = await CheckWipBarcodeOtherRepeat(model.WipInfo.WipNO,model.SerialRuleItem,model.WipBarcodeOther.StartNO,EndNO, SNStart , SNLen); @@ -9315,60 +9395,77 @@ namespace AMESCoreStudio.Web.Controllers //判斷工單結束序號流水號號碼 int modelEndNO = int.Parse(model.WipBarcodeOther.EndNO.Substring(SNStart, SNLen)); - //判斷是否有比此工單流水號更大的號碼 + //判斷是否有比此工單流水號更大的號碼 - if (Max_SnNum <= modelEndNO) - { - #region OTHER 不需改其他相同規則 + if (Max_SnNum <= modelEndNO) + { + #region OTHER 不需改其他相同規則 - if (model.SerialRuleItem.StartsWith("OTHER")) + if (model.SerialRuleItem.StartsWith("OTHER")) + { + //需更新其他相同Rule 的最大號mark + SerialRuleDetail model1 = new SerialRuleDetail + { + SerialRuleDetailID = result1.Select(s => s.SerialRuleDetailID).FirstOrDefault(), + ItemNo = result1.Select(s => s.ItemNo).FirstOrDefault(), + Rule = result1.Select(s => s.Rule).FirstOrDefault(), + YNum = result1.Select(s => s.YNum).FirstOrDefault(), + MNum = result1.Select(s => s.MNum).FirstOrDefault(), + WNum = result1.Select(s => s.WNum).FirstOrDefault(), + LotNum = result1.Select(s => s.LotNum).FirstOrDefault(), + SnNum = InputEndNoQty, + }; + var resultPut = await _pcsApi.PutSerialRuleDetail(result1.Select(s => s.SerialRuleDetailID).FirstOrDefault(), JsonConvert.SerializeObject(model1)); + #endregion + } + else + { + #region 同步更改其他相同Rule、YY、MM、WW、Lot 的最大值流水號SN_Num (不同item會有相同rule,且流水號為累加) + foreach (var item in SerialRuleDetail_All) { - //需更新其他相同Rule 的最大號mark SerialRuleDetail model1 = new SerialRuleDetail { - SerialRuleDetailID = result1.Select(s => s.SerialRuleDetailID).FirstOrDefault(), - ItemNo = result1.Select(s => s.ItemNo).FirstOrDefault(), - Rule = result1.Select(s => s.Rule).FirstOrDefault(), - YNum = result1.Select(s => s.YNum).FirstOrDefault(), - MNum = result1.Select(s => s.MNum).FirstOrDefault(), - WNum = result1.Select(s => s.WNum).FirstOrDefault(), - LotNum = result1.Select(s => s.LotNum).FirstOrDefault(), + SerialRuleDetailID = item.SerialRuleDetailID, + ItemNo = item.ItemNo, + Rule = item.Rule, + YNum = item.YNum, + MNum = item.MNum, + WNum = item.WNum, + LotNum = item.LotNum, SnNum = InputEndNoQty, }; - var resultPut = await _pcsApi.PutSerialRuleDetail(result1.Select(s => s.SerialRuleDetailID).FirstOrDefault(), JsonConvert.SerializeObject(model1)); - #endregion - } - else - { - #region 同步更改其他相同Rule、YY、MM、WW、Lot 的最大值流水號SN_Num (不同item會有相同rule,且流水號為累加) - foreach (var item in SerialRuleDetail_All) - { - SerialRuleDetail model1 = new SerialRuleDetail - { - SerialRuleDetailID = item.SerialRuleDetailID, - ItemNo = item.ItemNo, - Rule = item.Rule, - YNum = item.YNum, - MNum = item.MNum, - WNum = item.WNum, - LotNum = item.LotNum, - SnNum = InputEndNoQty, - }; - var resultPut = await _pcsApi.PutSerialRuleDetail(item.SerialRuleDetailID, JsonConvert.SerializeObject(model1)); + var resultPut = await _pcsApi.PutSerialRuleDetail(item.SerialRuleDetailID, JsonConvert.SerializeObject(model1)); - } - #endregion } - + #endregion } - else + + } + else if (model.SerialRuleItem.StartsWith("OTHER") && model.Type == "add") //OTHER可不連號,直接以最大號取新號(多個區間) + { + if (string.IsNullOrWhiteSpace(model.LotNo)) { - - _msg += "工單號碼【" + model.WipInfo.WipNO + "】出貨序號不為目前最大號,請先刪除最大號工單 !"; - ModelState.AddModelError("error", _msg); - return View(model); + model.LotNo = model.WipInfo.WerksNO.Substring(2, 2).ToUpper(); } + await GetBarcodeOther(model.WipAtt.ItemNO, model.LotNo, QTY, model.WipInfo.WipNO, model.WipInfo.WipScheduleDate.ToString("yyyy-MM-dd")); + + _msg = "產生成功!"; + return RedirectToAction("Refresh", "Home", new { id = model.WipInfo.WipNO, msg = _msg }); + + } + else if (model.SerialRuleItem.StartsWith("OTHER") && model.Type == "del") //OTHER可不連號,直接減少 + { + + } + else + { + + _msg += "工單號碼【" + model.WipInfo.WipNO + "】出貨序號不為目前最大號,請先刪除最大號工單 !"; + ModelState.AddModelError("error", _msg); + return View(model); + } + //if (WipQty < (InputEndNoQty - InputStrNoQty + 1)) //// if (WipQty < sum + (InputEndNoQty - InputStrNoQty + 1)) //{ diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs b/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs index 1e398233..79aca967 100644 --- a/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs +++ b/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs @@ -1786,6 +1786,18 @@ namespace AMESCoreStudio.Web /// [WebApiClient.Attributes.HttpPut("api/SerialRuleDetails/{id}")] ITask> PutSerialRuleDetail(int id, [FromBody, RawJsonContent] string model); + + [WebApiClient.Attributes.HttpGet("api/WipBarcodeOther/WipNos/{id}")] + ITask> GetWipBarcodeOthers(string id); + + + /// + /// 刪除工單出貨條碼區間 by OTHERID + /// + /// + [WebApiClient.Attributes.HttpDelete("api/WipBarcodeOther/byOhterID/{id}")] + ITask> DeleteWipBarcodeOtherByOtherID(int id); + #endregion #region OutfitInfoes 設備資料檔 diff --git a/AMESCoreStudio.Web/ViewModels/PCS/PCS040RViewModel.cs b/AMESCoreStudio.Web/ViewModels/PCS/PCS040RViewModel.cs index 9b99f841..b8008cf9 100644 --- a/AMESCoreStudio.Web/ViewModels/PCS/PCS040RViewModel.cs +++ b/AMESCoreStudio.Web/ViewModels/PCS/PCS040RViewModel.cs @@ -38,5 +38,7 @@ namespace AMESCoreStudio.Web.ViewModels.PCS public string SerialRuleItem { get; set; } public string LotNo { get; set; } + + public int WipBarcodeOhterQTY { get; set; } } } diff --git a/AMESCoreStudio.Web/Views/PCS/PCS040.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS040.cshtml index 88b4e357..e66b0a34 100644 --- a/AMESCoreStudio.Web/Views/PCS/PCS040.cshtml +++ b/AMESCoreStudio.Web/Views/PCS/PCS040.cshtml @@ -90,6 +90,11 @@ title: '數量', width: 80, }, + { + field: 'wipBarcodeOhterQTY', + title: '取號數', + width: 80, + }, { field: 'status', title: '狀態', @@ -160,7 +165,7 @@ hg.confirm("工單號碼【" + obj.data.wipNo + "】" + obj.data.status + "確定要刪除嗎?", function () { $.ajax({ url: '/PCS/PCS040D', - data: { id: obj.data.wipNo }, + data: { wipNo: obj.data.wipNo, otherID: obj.data.otherID }, type: 'POST', success: function (data) { if (data.success) { diff --git a/AMESCoreStudio.Web/Views/PCS/PCS040R.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS040R.cshtml index b25e21d2..a956f29b 100644 --- a/AMESCoreStudio.Web/Views/PCS/PCS040R.cshtml +++ b/AMESCoreStudio.Web/Views/PCS/PCS040R.cshtml @@ -16,7 +16,11 @@
+ + + + @@ -47,7 +51,7 @@ - +
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/WipBarcodeOthersController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/WipBarcodeOthersController.cs index a49accfe..0676b24f 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/WipBarcodeOthersController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/WipBarcodeOthersController.cs @@ -65,6 +65,26 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return wipBarcodeOther; } + /// + /// 抓工單出貨序號區間(多筆) + /// + /// + /// + [HttpGet("WipNos/{id}")] + public async Task>> GetWipBarcodeOtherByWipNos(string id) + { + IQueryable q = _context.WipBarcodeOthers; + + var wipBarcodeOther = await q.Where(p => p.WipNO == id).ToListAsync(); + + //if (wipBarcodeOther == null) + //{ + // return NotFound(); + //} + + return wipBarcodeOther; + } + /// /// 查詢客戶區間 /// @@ -112,9 +132,11 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES select new WipBarcodeOtherDto { + OtherID = O.OtherID, WipNo = O.WipNO, ItemNo = A.ItemNO, PlanQTY = W.PlanQTY, + CompleteQTY = W.CompleteQTY, StartNo = O.StartNO, EndNo = O.EndNO, CreateDate = O.CreateDate, @@ -244,5 +266,39 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } return result; } + + + /// + /// 刪除工單出貨條碼區間 + /// + /// 工單號碼 + /// + [HttpDelete("byOhterID/{id}")] + public async Task> DeleteWipBarcodeOtherByOhterID(int id) + { + ResultModel result = new ResultModel(); + var wipBarcodeOther = await _context.WipBarcodeOthers.Where(w => w.OtherID == id).FirstOrDefaultAsync(); + try + { + if (wipBarcodeOther != null) + { + _context.WipBarcodeOthers.Remove(wipBarcodeOther); + await _context.SaveChangesAsync(); + result.Success = true; + result.Msg = "OK"; + } + else + { + result.Success = true; + result.Msg = "找不到資料刪除"; + } + } + catch (Exception ex) + { + result.Success = false; + result.Msg = ex.InnerException.Message; + } + return result; + } } } diff --git a/AMESCoreStudio.WebApi/DTO/AMES/WipBarcodeOtherDto.cs b/AMESCoreStudio.WebApi/DTO/AMES/WipBarcodeOtherDto.cs index fbfff30d..536a025f 100644 --- a/AMESCoreStudio.WebApi/DTO/AMES/WipBarcodeOtherDto.cs +++ b/AMESCoreStudio.WebApi/DTO/AMES/WipBarcodeOtherDto.cs @@ -12,7 +12,10 @@ namespace AMESCoreStudio.WebApi.Models.AMES public class WipBarcodeOtherDto { - + /// + /// ID + /// + public int OtherID { get; set; } /// /// 工單 /// @@ -29,6 +32,15 @@ namespace AMESCoreStudio.WebApi.Models.AMES /// 計畫產量 已投產/未投產 /// public int PlanQTY { get; set; } + + /// + /// 出貨序號取號數量 + /// + public int WipBarcodeOhterQTY { get; set; } + /// + /// 完成數 + /// + public int CompleteQTY { get; set; } /// /// 預計開工日 ///