diff --git a/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs b/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs index 82e07411..23779270 100644 --- a/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs +++ b/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs @@ -31,7 +31,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES _context = context; } - #region + #region 過站判斷 /// /// 過站判斷 /// @@ -109,13 +109,32 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES var insert_BarCodeItemChange = new List(); #endregion + // 抓流程ID var q_wipinfo = await wipInfosController.GetWipInfoByWipNo(barCodeCheckDto.wipNo); + flowRule = q_wipinfo.Value.Where(w => w.UnitNO == barCodeCheckDto.unitNo).FirstOrDefault().FlowRuleID; - if (!q_wipinfo.Value.Where(w => w.UnitNO == barCodeCheckDto.unitNo).Any()) - { - resultModel.Msg = "找不到工單號碼【" + barCodeCheckDto.wipNo + "】或所對應的生產單位"; + #region 判斷工單狀態 + resultModel = (ResultModel)await CheckWipNoSationAsync(wipNo: barCodeCheckDto.wipNo, unitNo: barCodeCheckDto.unitNo + , flowRuleID: flowRule, line: barCodeCheckDto.line, station: barCodeCheckDto.station); + + if (!resultModel.Success) return resultModel; - } + #endregion + + #region 判斷序號狀態 + resultModel = (ResultModel)await GetCheckBarCodeStation(wipno: barCodeCheckDto.wipNo, barcode: barCodeCheckDto.barcode); + if (!resultModel.Success) + return resultModel; + #endregion + + #region 判斷序號流程 + resultModel = (ResultModel)await CheckBarCodeFlowAsync(wipno: barCodeCheckDto.wipNo, barcode: barCodeCheckDto.barcode + , unitno: barCodeCheckDto.unitNo, station: barCodeCheckDto.station); + + if (!resultModel.Success) + return resultModel; + #endregion + wipID = q_wipinfo.Value.Where(w => w.UnitNO == barCodeCheckDto.unitNo).FirstOrDefault().WipID; flowRule = q_wipinfo.Value.Where(w => w.UnitNO == barCodeCheckDto.unitNo).FirstOrDefault().FlowRuleID; barCodeID = BarCodeToID(barCodeCheckDto.barcode).Result; @@ -123,16 +142,6 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES itemID = ItemNoToItemID(item).Result; var q_rulestation = await ruleStationsController.GetRuleStationByFlow(flowRule, 0, 0); - if (q_rulestation.Value.Count() == 0) - { - resultModel.Msg = "找不到工單號碼【" + barCodeCheckDto.wipNo + "】綁定的流程順序檔"; - return resultModel; - } - else if (!q_rulestation.Value.Where(w => w.StationID == barCodeCheckDto.station).Any()) - { - resultModel.Msg = "找不到工單號碼【" + barCodeCheckDto.wipNo + "】所對應的作業站別"; - return resultModel; - } // 抓作業站順序 ruleStation = q_rulestation.Value.Where(w => w.StationID == barCodeCheckDto.station).FirstOrDefault().RuleStationID; @@ -292,7 +301,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES var barcodeInfo = barcodeInfoesController.GetBarcodeInfoes(barCodeID).Result.Value.FirstOrDefault(); barcodeInfo.RuleStationID = ruleStation; barcodeInfo.RuleStatus = "P"; - + var resultBarCodeInfo = await barcodeInfoesController.PutBarcodeInfoes(barcodeInfo); if (resultBarCodeInfo.Success) @@ -343,36 +352,11 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES [HttpGet("CheckWipNoSation")] public IActionResult GetCheckWipNoSation(string wipno, string unitno, int line, int flowrule) { - var result = CheckWipNoSationAsync(WipNo: wipno, UnitNo: unitno, FlowRuleID: flowrule, Line: line); + var result = CheckWipNoSationAsync(wipNo: wipno, unitNo: unitno, flowRuleID: flowrule, line: line); return Ok(result.Result); } - /// - /// 判斷序號狀態 - /// - /// - /// - /// - /// - /// - [HttpGet("CheckBarCodeStation")] - public async Task GetCheckBarCodeStation(string wipno, string barcode, string unitno, int station) - { - //ResultModel resultModel = new ResultModel() - //ResultModel aa = await (ResultModel)CheckBarCodeLockAsync(barcode); - //return Ok(aa); - - //return Ok(); - //resultModel = (ResultModel)CheckBarCodeLockAsync(barcode).AsyncState; - //if (!resultModel.Success) - // return Ok(resultModel); - - //resultModel = (ResultModel)CheckBarCodeScrappedAsync(barcode).AsyncState; - //if (!resultModel.Success) - // return Ok(resultModel); - return Ok(); - } /// /// 內部序號查詢工單號碼 @@ -380,13 +364,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES /// 內部序號 /// Success:true or false [HttpGet("BarCodeFromWip")] - public ActionResult> CheckBarCodeFromWip(string barcode) + public IResultModel CheckBarCodeFromWip(string barcode) { ResultModel resultModel = new ResultModel { Success = false }; if (barcode.Length <= 4) { resultModel.Msg = "內部序號小於4個字數"; - return Ok(resultModel); + return resultModel; } WipInfosController wipInfosController = new WipInfosController(_context); @@ -395,7 +379,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (!q.Any()) { resultModel.Msg = "找不到內部序號【" + barcode + "】 對應相關工單號碼"; - return Ok(resultModel); + return resultModel; } else { @@ -410,7 +394,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES { resultModel.Success = true; resultModel.Msg = q.Select(s => s.WipNO).FirstOrDefault(); - return Ok(resultModel); + return resultModel; } } resultModel.Msg = "工單號碼【" + q.Select(s => s.WipNO).FirstOrDefault() + "】 找不到範圍內的內部序號"; @@ -421,7 +405,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } } - return Ok(resultModel); + return resultModel; } /// @@ -430,13 +414,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES /// 內部序號 /// Success:true or false [HttpGet("BarCodeToUnit")] - public async Task GetBarCodeToUnitAsync(string barcode) + public async Task GetBarCodeToUnitAsync(string barcode) { ResultModel resultModel = new ResultModel { Success = false }; if (barcode.Length <= 4) { resultModel.Msg = "內部序號小於4個字數"; - return Ok(resultModel); + return resultModel; } int BarCodeID = BarCodeToID(barcode).Result; @@ -444,7 +428,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (BarCodeID == 0) { resultModel.Msg = "找不到內部序號【" + barcode + "】 對應BarCodeID"; - return Ok(resultModel); + return resultModel; } BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context); @@ -453,7 +437,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES q.Value.Select(s => s.GetWipInfo.GetFactoryUnit.UnitName).FirstOrDefault(); resultModel.Success = true; - return Ok(resultModel); + return resultModel; } /// @@ -462,13 +446,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES /// 內部序號 /// Success:true or false [HttpGet("BarCodeToStation")] - public async Task GetBarCodeToStationAsync(string barcode) + public async Task GetBarCodeToStationAsync(string barcode) { ResultModel resultModel = new ResultModel { Success = false }; if (barcode.Length <= 4) { resultModel.Msg = "內部序號小於4個字數"; - return Ok(resultModel); + return resultModel; } int BarCodeID = BarCodeToID(barcode).Result; @@ -476,7 +460,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (BarCodeID == 0) { resultModel.Msg = "找不到內部序號【" + barcode + "】 對應BarCodeID"; - return Ok(resultModel); + return resultModel; } BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context); @@ -485,7 +469,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES q.Value.Select(s => s.GetRuleStation.Station.StationName).FirstOrDefault(); resultModel.Success = true; - return Ok(resultModel); + return resultModel; } /// @@ -494,13 +478,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES /// 內部序號 /// Success:true or false [HttpGet("BarCodeLock")] - public async Task>> CheckBarCodeLockAsync(string barcode) + public async Task CheckBarCodeLockAsync(string barcode) { ResultModel resultModel = new ResultModel { Success = false }; if (barcode.Length <= 4) { resultModel.Msg = "內部序號小於4個字數"; - return Ok(resultModel); + return resultModel; } int BarCodeID = BarCodeToID(barcode).Result; @@ -509,7 +493,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES { //resultModel.Msg = "找不到內部序號【" + barcode + "】 對應BarCodeID"; resultModel.Success = true; - return Ok(resultModel); + return resultModel; } BarcodeLockController barcodeLockController = new BarcodeLockController(_context); @@ -517,11 +501,11 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (q.Value.Where(w => w.LockStatus == 0).Any()) { resultModel.Msg = "內部序號【" + barcode + "】在當前站別被鎖定,不可過站"; - return Ok(resultModel); + return resultModel; } resultModel.Success = true; - return Ok(resultModel); + return resultModel; } /// @@ -530,13 +514,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES /// 內部序號 /// Success:true or false [HttpGet("BarCodeScrapped")] - public async Task CheckBarCodeScrappedAsync(string barcode) + public async Task CheckBarCodeScrappedAsync(string barcode) { ResultModel resultModel = new ResultModel { Success = false }; if (barcode.Length <= 4) { resultModel.Msg = "內部序號小於4個字數"; - return Ok(resultModel); + return resultModel; } BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context); @@ -545,17 +529,17 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES { resultModel.Success = true; resultModel.Msg = "找不到內部序號【" + barcode + "】 對應BarCodeID"; - return Ok(resultModel); + return resultModel; } else if (q.Value.Any(w => w.RuleStatus == "S")) { resultModel.Msg = "內部序號【" + barcode + "】已報廢或轉賣, 不可繼續過站!"; - return Ok(resultModel); + return resultModel; } resultModel.Success = true; - return Ok(resultModel); + return resultModel; } /// @@ -567,33 +551,15 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES /// 作業站編號 /// [HttpGet("BarCodeFlow")] - public async Task CheckBarCodeFlowAsync(string wipno, string barcode, string unitno, int station) + public async Task CheckBarCodeFlowAsync(string wipno, string barcode, string unitno, int station) { ResultModel resultModel = new ResultModel { Success = false }; WipInfosController wipInfosController = new WipInfosController(_context); var q = await wipInfosController.GetWipInfoByWipNo(wipno); - if (q.Value.Count() == 0) - { - resultModel.Msg = "找不到工單號碼【" + wipno + "】"; - return Ok(resultModel); - } // 找該筆工單號碼的生產單位代號 var q1 = q.Value.Where(w => w.UnitNO == unitno).FirstOrDefault(); - if (q1 == null) - { - resultModel.Msg = "該工單號碼【" + wipno + "】 找不到對應生產單位代號資料"; - return Ok(resultModel); - } - // 該筆工單號碼鎖定 - WipLockController wipLockController = new WipLockController(_context); - var q2 = await wipLockController.GetWipLockByWipNO(wipno); - if (q2.Data.Where(w => w.LockStatus == "0" && w.StationID == station).Any()) - { - resultModel.Msg = "工單號碼【" + wipno + "】,工單在當前站別被鎖定,不可過站"; - return Ok(resultModel); - } // 取工單號碼開立的 WipID、生產單位 var wipinfo = q.Value.Select(s => new { s.WipID, s.UnitNO }).ToList(); @@ -620,13 +586,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (WipID == null) { resultModel.Msg = "該工單號碼【" + wipno + "】的前製程生產單位尚未建立工單基本資料"; - return Ok(resultModel); + return resultModel; } if (!BarCodeStations.Value.Where(w => w.BarcodeID == BarCodeID && w.WipID == WipID && w.RuleStatus == "P").Any()) { resultModel.Msg = "該內部序號【" + barcode + "】前製程生產單位尚未有過站紀錄"; - return Ok(resultModel); + return resultModel; } } // 組裝(B)->系統測試(T)->成品包裝(P) @@ -636,13 +602,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (WipID == null) { resultModel.Msg = "該工單號碼【" + wipno + "】的前製程生產單位尚未建立工單基本資料"; - return Ok(resultModel); + return resultModel; } if (!BarCodeStations.Value.Where(w => w.BarcodeID == BarCodeID && w.WipID == WipID && w.RuleStatus == "P").Any()) { resultModel.Msg = "該內部序號【" + barcode + "】前製程生產單位尚未有過站紀錄"; - return Ok(resultModel); + return resultModel; } } else if (unitno == "P") @@ -651,13 +617,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (WipID == null) { resultModel.Msg = "該工單號碼【" + wipno + "】的前製程生產單位尚未建立工單基本資料"; - return Ok(resultModel); + return resultModel; } if (!BarCodeStations.Value.Where(w => w.BarcodeID == BarCodeID && w.WipID == WipID && w.RuleStatus == "P").Any()) { resultModel.Msg = "該內部序號【" + barcode + "】前製程生產單位尚未有過站紀錄"; - return Ok(resultModel); + return resultModel; } } } @@ -667,7 +633,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (unitno != "S" && unitno != "B") { resultModel.Msg = "該工單號碼【" + wipno + "】前製程式尚未投產"; - return Ok(resultModel); + return resultModel; } } } @@ -679,7 +645,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (ruleStations.Value.Count() == 0) { resultModel.Msg = "該工單號碼【" + wipno + "】的流程編號尚未設定流程"; - return Ok(resultModel); + return resultModel; } // 該作業站 RuleStationID @@ -687,7 +653,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (RuleStationID == null) { resultModel.Msg = "該工單號碼【" + wipno + "】的流程未設定此作業站"; - return Ok(resultModel); + return resultModel; } // 取目前工單ID @@ -695,36 +661,37 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES // 該筆工單ID過站紀錄 var BarCodeStationByWipID = BarCodeStations.Value.Where(w => w.WipID == wipID).ToList(); - if (BarCodeStationByWipID.Where(w => w.RuleStationID == RuleStationID && w.RuleStatus == "P").Any()) + if (BarCodeStationByWipID.Where(w => w.RuleStationID == RuleStationID).Any()) { resultModel.Msg = "內部序號【" + barcode + "】該作業站已有過站紀錄,請確認"; - return Ok(resultModel); + return resultModel; } int LastStopRuleStationID = await GetBarCodeLastStopRuleStationID(wipno, station); if (LastStopRuleStationID != 0 && LastStopRuleStationID != 1000) { - if (!BarCodeStationByWipID.Where(w => w.RuleStationID == LastStopRuleStationID && w.RuleStatus == "P").Any()) + if (!BarCodeStationByWipID.Where(w => w.RuleStationID == LastStopRuleStationID).Any()) { resultModel.Msg = "內部序號【" + barcode + "】找不到上一個作業站過站紀錄,請確認"; - return Ok(resultModel); + return resultModel; } } #endregion resultModel.Success = true; - return Ok(resultModel); + return resultModel; } /// /// 確認工單狀態 /// - /// 工單號碼 - /// 生產單位 - /// 流程 - /// 線別 + /// 工單號碼 + /// 生產單位 + /// 流程 + /// 線別 + /// 作業站 /// - private async Task CheckWipNoSationAsync(string WipNo, string UnitNo, int FlowRuleID, int Line) + private async Task CheckWipNoSationAsync(string wipNo, string unitNo, int flowRuleID, int line, int station = 0) { ResultModel resultModel = new ResultModel(); @@ -732,44 +699,53 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES WipInfosController wipInfosController = new WipInfosController(_context); - var q = await wipInfosController.GetWipInfoByWipNo(WipNo); + var q = await wipInfosController.GetWipInfoByWipNo(wipNo); if (q.Value.Count() == 0) { - resultModel.Msg = "找不到工單號碼【" + WipNo + "】"; + resultModel.Msg = "找不到工單號碼【" + wipNo + "】"; return resultModel; } - var WipNoItem = q.Value.Where(w => w.WipNO == WipNo && w.UnitNO == UnitNo).ToList(); + var WipNoItem = q.Value.Where(w => w.WipNO == wipNo && w.UnitNO == unitNo).ToList(); if (WipNoItem.Count == 0) { - resultModel.Msg = "工單號碼【" + WipNo + ",尚未設定此生產單位"; + resultModel.Msg = "工單號碼【" + wipNo + ",尚未設定此生產單位"; return resultModel; } - if (!WipNoItem.Where(w => w.FlowRuleID == FlowRuleID).Any()) + if (!WipNoItem.Where(w => w.FlowRuleID == flowRuleID).Any()) { - resultModel.Msg = "工單號碼【" + WipNo + "】,尚未設定此流程站"; + resultModel.Msg = "工單號碼【" + wipNo + "】,尚未設定此流程站"; return resultModel; } - if (!WipNoItem.Where(w => w.LineID == Line).Any()) + if (!WipNoItem.Where(w => w.LineID == line).Any()) { - resultModel.Msg = "工單號碼【" + WipNo + "】,尚未設定此線別"; + resultModel.Msg = "工單號碼【" + wipNo + "】,尚未設定此線別"; return resultModel; } if (WipNoItem.Where(w => w.StatusNO == "Y").Any()) { - resultModel.Msg = "工單號碼【" + WipNo + "】,該工單已經投入完工,請切換工單"; + resultModel.Msg = "工單號碼【" + wipNo + "】,該工單已經投入完工,請切換工單"; return resultModel; } int WipID = WipNoItem.FirstOrDefault().WipID; LineInfoesController lineInfoesController = new LineInfoesController(_context); var q2 = await lineInfoesController.GetLineInfoByWipID(WipID); - if (!q2.Value.Where(w => w.LineID == Line).Any()) + if (!q2.Value.Where(w => w.LineID == line).Any()) { - resultModel.Msg = "工單號碼【" + WipNo + "】,工單尚未開線,不可過站"; + resultModel.Msg = "工單號碼【" + wipNo + "】,工單尚未開線,不可過站"; + return resultModel; + } + + // 該筆工單號碼鎖定 + WipLockController wipLockController = new WipLockController(_context); + var q3 = await wipLockController.GetWipLockByWipNO(wipNo); + if (q3.Data.Where(w => w.LockStatus == "0" && w.StationID == station).Any()) + { + resultModel.Msg = "工單號碼【" + wipNo + "】,工單在當前站別被鎖定,不可過站"; return resultModel; } @@ -777,6 +753,44 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return resultModel; } + /// + /// 判斷序號狀態 + /// + /// 工單號碼 + /// 內部序號 + /// + [HttpGet("CheckBarCodeStation")] + public async Task GetCheckBarCodeStation(string wipno, string barcode) + { + ResultModel resultModel = new ResultModel(); + + #region 內部序號是否被鎖定 + resultModel = (ResultModel)await CheckBarCodeLockAsync(barcode); + if (!resultModel.Success) + return resultModel; + #endregion + + #region 內部序號是否被報廢 + resultModel = (ResultModel)await CheckBarCodeScrappedAsync(barcode); + if (!resultModel.Success) + return resultModel; + #endregion + + #region 找尋內部序號(工單號碼) 並與接收工單號碼是否一致 + resultModel = (ResultModel)CheckBarCodeFromWip(barcode); + if (!resultModel.Success) + return resultModel; + else if (resultModel.Msg != wipno.ToUpper()) + { + resultModel.Msg = "工單號碼【" + wipno + "】與內部序號所帶出工單號碼【" + resultModel.Msg + "】不一致"; + resultModel.Success = false; + return resultModel; + } + #endregion + + return resultModel; + } + /// /// 確認組件狀態 /// @@ -1121,13 +1135,15 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES var ruleStations = await ruleStationsController.GetRuleStationByFlow(i, 0); if (ruleStations.Value.Count() != 0) { - foreach (var item in ruleStations.Value.Where(w => w.StationType == "M").OrderBy(o => o.Sequence)) + foreach (var item in ruleStations.Value.OrderBy(o => o.Sequence)) { var x = new { index, item.StationID, - item.RuleStationID + item.RuleStationID, + item.Sequence, + item.StationType }; dy.Add(x); index++;