diff --git a/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs b/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs index e5376b9e..0d17d75d 100644 --- a/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs +++ b/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs @@ -143,7 +143,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES #region 判斷工單狀態 resultModel = (ResultModel)await CheckWipNoSationAsync(wipNo: barCodeCheckDto.wipNo, unitNo: barCodeCheckDto.unitNo - , flowRuleID: barCodeCheckDto.flowRule, line: barCodeCheckDto.line, stationID: barCodeCheckDto.stationID); + , flowRuleID: barCodeCheckDto.flowRule, line: barCodeCheckDto.line, stationID: barCodeCheckDto.stationID, barCodeNo: barCodeCheckDto.barcode); if (!resultModel.Success) return resultModel; @@ -620,31 +620,31 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } // 條碼紀錄 - var result_BarcodeWip = Table_BarcodeWip(barCodeCheckDto).Result; + var result_BarcodeWip = await Table_BarcodeWip(barCodeCheckDto); if (!result_BarcodeWip.Success) { Msg += "BarcodeWip_Error:" + result_BarcodeWip.Msg + "
"; } // 工單各站數量資料檔 - var result_WipStation = Table_WipStation(barCodeCheckDto).Result; - if (!result_WipStation.Success) + var result_WipStation = await Table_WipStation(barCodeCheckDto); + if (!string.IsNullOrWhiteSpace(result_WipStation)) { - Msg += "WipStation_Error:" + result_WipStation.Msg + "
"; + Msg += "WipStation_Error:" + result_WipStation + "
"; } // 各班別數量資料檔 - var result_WipClass = Table_WipClass(barCodeCheckDto).Result; - if (!result_WipClass.Success) + var result_WipClass = await Table_WipClass(barCodeCheckDto); + if (!string.IsNullOrWhiteSpace(result_WipClass)) { - Msg += "WipClass_Error:" + result_WipClass.Msg + "
"; + Msg += "WipClass_Error:" + result_WipClass + "
"; } // 工單各站數量資料檔 – By TIME - var result_WipTime = Table_WipTime(barCodeCheckDto).Result; - if (!result_WipTime.Success) + var result_WipTime = await Table_WipTime(barCodeCheckDto); + if (!string.IsNullOrWhiteSpace(result_WipTime)) { - Msg += "WipTime_Error:" + result_WipTime.Msg + "
"; + Msg += "WipTime_Error:" + result_WipTime + "
"; } // 條碼過站資料檔 @@ -1140,170 +1140,215 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES /// WipStation /// /// - private async Task> Table_WipStation(BarCodeCheckDto barCodeCheckDto) + private async Task Table_WipStation(BarCodeCheckDto data) { - WipStationController wipStationController = new WipStationController(_context); - var wipStation = new WipStation(); - var resut = new ResultModel(); + var BarcodeStation = _context.BarcodeStation.Where(w => w.BarcodeID == data.barcodeID && + w.WipID == data.wipID && + w.StationID == data.stationID && + w.FlowRuleID == data.flowRule).Any(); + var today = DateTime.Now.ToString("yyyy/MM/dd"); // 判斷是否有資料 - var queryWipStation = await wipStationController.GetWipStation4QRS009(barCodeCheckDto.wipID, barCodeCheckDto.stationID); - wipStation = queryWipStation.Value.Where(w => w.RuleStatus == barCodeCheckDto.ruleStatus - && w.CreateDate.ToString("yyyy/MM/dd") == DateTime.Now.ToString("yyyy/MM/dd")) - .FirstOrDefault(); - // 有資料加1 後續判斷第一次過站 - if (wipStation != null) + var wipStations = _context.WipStations.Where(w => w.WipID == data.wipID && w.StationID == data.stationID && + w.RuleStatus == data.ruleStatus).ToList(); + wipStations = wipStations.Where(w => w.CreateDate.ToString("yyyy/MM/dd") == today).ToList(); + try { - BarcodeStationController barcodeStationController = new BarcodeStationController(_context); - var barcodeStation = await barcodeStationController.GetBarcodeStationByKey(barCodeCheckDto.barcodeID, - barCodeCheckDto.wipID, barCodeCheckDto.stationID, barCodeCheckDto.flowRule); - if (barcodeStation.Value == null) + // 新增 + if (wipStations.Count() == 0) + { + var firstCnt = 1; + // 有過站資料不能第一次 + if (BarcodeStation) + firstCnt = 0; + + _context.WipStations.Add(new WipStation + { + WipID = data.wipID, + RuleStatus = data.ruleStatus, + StationID = data.stationID, + FirstCnt = firstCnt, + PassCnt = 1, + CreateUserID = data.userID + }); + await _context.SaveChangesAsync(); + } + // 更新 + else { - wipStation.FirstCnt += 1; + + // 有資料加1 後續判斷第一次過站 + string updateSql = @" UPDATE JHAMES.WIP_STATION SET PASS_CNT = PASS_CNT + 1 , + UPDATE_DATE = SYSDATE"; + if (!BarcodeStation) + { + updateSql += " , FIRST_CNT = FIRST_CNT + 1 "; + } + updateSql += $@" WHERE WIP_ID = '{data.wipID}' + AND STATION_ID = '{data.stationID}' + AND RULE_STATUS = '{data.ruleStatus}' + AND TO_CHAR(CREATE_DATE , 'YYYY/MM/DD') = '{today}' "; + // 執行原生 SQL + _context.Database.ExecuteSqlRaw(updateSql); } - wipStation.PassCnt += 1; - resut = await wipStationController.PutWipStation(wipStation); } - else + catch (Exception ex) { - wipStation = new WipStation - { - WipID = barCodeCheckDto.wipID, - RuleStatus = barCodeCheckDto.ruleStatus, - StationID = barCodeCheckDto.stationID, - FirstCnt = 1, - PassCnt = 1, - CreateUserID = barCodeCheckDto.userID - }; - resut = await wipStationController.PostWipStation(wipStation); + return ex.InnerException.Message + "
"; } - return resut; + return ""; } /// /// WipClass-各班別數量資料檔 /// /// - private async Task> Table_WipClass(BarCodeCheckDto barCodeCheckDto) + private async Task Table_WipClass(BarCodeCheckDto data) { - WipClassController wipClassController = new WipClassController(_context); - var wipClass = new WipClass(); - var resut = new ResultModel(); - + var BarcodeStation = _context.BarcodeStation.Where(w => w.BarcodeID == data.barcodeID && + w.WipID == data.wipID && + w.StationID == data.stationID && + w.FlowRuleID == data.flowRule).Any(); + var today = DateTime.Now.ToString("yyyy/MM/dd"); // 取ClassID int ClassID = -1; - ClassInfoesController classInfoesController = new ClassInfoesController(_context); - var classInfo = await classInfoesController.GetClassInfoByUnit(barCodeCheckDto.unitNo); - if (classInfo.Value.Count() != 0) - { - var ID = classInfo.Value.Where(w => DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd") + " " + w.BeginTime) <= DateTime.Now - && DateTime.Now <= DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd") + " " + w.EndTime)) - .FirstOrDefault(); + var ClassInfo = _context.ClassInfoes.Where(w => w.UnitNo == data.unitNo).ToList(); - if (ID != null) - { - ClassID = ID.ClassID; - } + ClassInfo = ClassInfo.Where(w => DateTime.Parse(today + " " + w.BeginTime) <= DateTime.Now && + DateTime.Now <= DateTime.Parse(today + " " + w.EndTime)).ToList(); + if (ClassInfo.Count() != 0) + { + ClassID = ClassInfo.FirstOrDefault().ClassID; } - // 判斷是否有資料 - var queryWipClass = await wipClassController.GetWipClassByData(barCodeCheckDto.wipID, barCodeCheckDto.stationID, barCodeCheckDto.ruleStatus); - queryWipClass = queryWipClass.Value.Where(w => w.CreateDate.ToString("yyyy/MM/dd") == DateTime.Now.ToString("yyyy/MM/dd")).ToList(); + var wipClasses = _context.WipClass.Where(w => w.WipID == data.wipID && w.StationID == data.stationID && + w.RuleStatus == data.ruleStatus && w.ClassID == ClassID).ToList(); - // 有資料加1 後續判斷第一次過站 - if (queryWipClass.Value.Where(w => w.ClassID == ClassID).Any()) + wipClasses = wipClasses.Where(w => w.CreateDate.ToString("yyyy/MM/dd") == today).ToList(); + + try { - wipClass = queryWipClass.Value.FirstOrDefault(); - BarcodeStationController barcodeStationController = new BarcodeStationController(_context); - var barcodeStation = await barcodeStationController.GetBarcodeStationByKey(barCodeCheckDto.barcodeID, - barCodeCheckDto.wipID, barCodeCheckDto.stationID, barCodeCheckDto.flowRule); - if (barcodeStation.Value == null) + // 新增 + if (wipClasses.Count() == 0) { - wipClass.FirstCnt += 1; + var firstCnt = 1; + // 有過站資料不能第一次 + if (BarcodeStation) + firstCnt = 0; + _context.WipClass.Add(new WipClass + { + WipID = data.wipID, + RuleStatus = data.ruleStatus, + StationID = data.stationID, + ClassID = ClassID, + FirstCnt = firstCnt, + PassCnt = 1, + CreateUserID = data.userID + }); + await _context.SaveChangesAsync(); + } + // 更新 + else + { + // 有資料加1 後續判斷第一次過站 + string updateSql = @" UPDATE JHAMES.WIP_CLASS SET PASS_CNT = PASS_CNT + 1 , + UPDATE_DATE = SYSDATE"; + if (!BarcodeStation) + { + updateSql += " , FIRST_CNT = FIRST_CNT + 1 "; + } + updateSql += $@" WHERE WIP_ID = '{data.wipID}' + AND STATION_ID = '{data.stationID}' + AND RULE_STATUS = '{data.ruleStatus}' + AND CLASS_ID = {ClassID} + AND TO_CHAR(CREATE_DATE , 'YYYY/MM/DD') = '{today}' "; + // 執行原生 SQL + await _context.Database.ExecuteSqlRawAsync(updateSql); } - wipClass.PassCnt += 1; - resut = await wipClassController.PutWipClass(wipClass); } - else + catch (Exception ex) { - wipClass = new WipClass - { - WipID = barCodeCheckDto.wipID, - RuleStatus = barCodeCheckDto.ruleStatus, - StationID = barCodeCheckDto.stationID, - ClassID = ClassID, - FirstCnt = 1, - PassCnt = 1, - CreateUserID = barCodeCheckDto.userID - }; - resut = await wipClassController.PostWipClass(wipClass); + return ex.InnerException.Message + "
"; } - - - return resut; + return ""; } /// /// WipTime-工單各站數量資料檔 – By TIME /// /// - private async Task> Table_WipTime(BarCodeCheckDto barCodeCheckDto) + private async Task Table_WipTime(BarCodeCheckDto data) { - WipTimeController wipTimeController = new WipTimeController(_context); - var wipTime = new WipTime(); - var resut = new ResultModel(); + // 有資料加1 後續判斷第一次過站 + var BarcodeStation = _context.BarcodeStation.Where(w => w.BarcodeID == data.barcodeID && + w.WipID == data.wipID && w.StationID == data.stationID && + w.FlowRuleID == data.flowRule).Any(); + var today = DateTime.Now.ToString("yyyy/MM/dd"); // 取SegmentID int SegmentID = -1; - TimeSegmentsController timeSegmentsController = new TimeSegmentsController(_context); - var timeSegment = await timeSegmentsController.GetTimeSegment(); - if (timeSegment.Value.Count() != 0) - { - var ID = timeSegment.Value.Where(w => DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd") + " " + w.StartTime) <= DateTime.Now - && DateTime.Now <= DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd") + " " + w.EndTime)) - .FirstOrDefault(); + var timeSegment = _context.TimeSegments.ToList(); - if (ID != null) - { - SegmentID = ID.SegmentID; - } + timeSegment = timeSegment.Where(w => DateTime.Parse(today + " " + w.StartTime) <= DateTime.Now && + DateTime.Now <= DateTime.Parse(today + " " + w.EndTime)).ToList(); + if (timeSegment.Count() != 0) + { + SegmentID = timeSegment.FirstOrDefault().SegmentID; } + // 判斷是否有資料 + var wipTimes = _context.WipTimes.Where(w => w.WipID == data.wipID && w.StationID == data.stationID && + w.RuleStatus == data.ruleStatus && w.SegmentID == SegmentID).ToList(); - // 判斷是否有資料 - var queryWipTime = await wipTimeController.GetWipTimeByData(barCodeCheckDto.wipID, barCodeCheckDto.stationID, barCodeCheckDto.ruleStatus); - queryWipTime = queryWipTime.Value.Where(w => w.CreateDate.ToString("yyyy/MM/dd") == DateTime.Now.ToString("yyyy/MM/dd")).ToList(); - // 有資料加1 後續判斷第一次過站 - if (queryWipTime.Value.Where(w => w.SegmentID == SegmentID).Any()) + wipTimes = wipTimes.Where(w => w.CreateDate.ToString("yyyy/MM/dd") == today).ToList(); + try { - wipTime = queryWipTime.Value.FirstOrDefault(); - BarcodeStationController barcodeStationController = new BarcodeStationController(_context); - var barcodeStation = await barcodeStationController.GetBarcodeStationByKey(barCodeCheckDto.barcodeID, - barCodeCheckDto.wipID, barCodeCheckDto.stationID, barCodeCheckDto.flowRule); - if (barcodeStation.Value == null) + // 新增 + if (wipTimes.Count() == 0) { - wipTime.FirstCnt += 1; + var firstCnt = 1; + // 有過站資料不能第一次 + if (BarcodeStation) + firstCnt = 0; + + _context.WipTimes.Add(new WipTime + { + WipID = data.wipID, + RuleStatus = data.ruleStatus, + StationID = data.stationID, + SegmentID = SegmentID, + FirstCnt = firstCnt, + PassCnt = 1, + CreateUserID = data.userID + }); + await _context.SaveChangesAsync(); + } + // 更新 + else + { + // 有資料加1 後續判斷第一次過站 + string updateSql = @" UPDATE JHAMES.WIP_TIME SET PASS_CNT = PASS_CNT + 1 , + UPDATE_DATE = SYSDATE"; + if (!BarcodeStation) + { + updateSql += " , FIRST_CNT = FIRST_CNT + 1 "; + } + updateSql += $@" WHERE WIP_ID = '{data.wipID}' + AND STATION_ID = '{data.stationID}' + AND RULE_STATUS = '{data.ruleStatus}' + AND SEGMENT_ID = {SegmentID} + AND TO_CHAR(CREATE_DATE , 'YYYY/MM/DD') = '{today}' "; + // 執行原生 SQL + await _context.Database.ExecuteSqlRawAsync(updateSql); } - wipTime.PassCnt += 1; - resut = await wipTimeController.PutWipTime(wipTime); + } - else + catch (Exception ex) { - wipTime = new WipTime - { - WipID = barCodeCheckDto.wipID, - RuleStatus = barCodeCheckDto.ruleStatus, - StationID = barCodeCheckDto.stationID, - SegmentID = SegmentID, - FirstCnt = 1, - PassCnt = 1, - CreateUserID = barCodeCheckDto.userID - }; - resut = await wipTimeController.PostWipTime(wipTime); + return ex.InnerException.Message + "
"; } - - return resut; + return ""; } #endregion @@ -1710,7 +1755,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES /// 線別 /// 作業站 /// - private async Task CheckWipNoSationAsync(string wipNo, string unitNo, int flowRuleID, int line, int stationID = 0) + private async Task CheckWipNoSationAsync(string wipNo, string unitNo, int flowRuleID, int line, int stationID = 0, string barCodeNo = "") { ResultModel resultModel = new ResultModel(); @@ -1781,8 +1826,12 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES var FirstWipInfo = WipNoItem.FirstOrDefault(); if (FirstWipInfo.CompleteQTY >= FirstWipInfo.PlanQTY) { - resultModel.Msg = "工單號碼【" + wipNo + "】,已投入數量>=工單數量,請在確認"; - return resultModel; + //因維修後投入站 不須判斷投入數量 + if (!await _context.BarcodeInfoes.Where(w => w.WipID == WipNoItem.FirstOrDefault().WipID && w.BarcodeNo == barCodeNo).AnyAsync()) + { + resultModel.Msg = "工單號碼【" + wipNo + "】,已投入數量>=工單數量,請在確認"; + return resultModel; + } } } @@ -2309,6 +2358,12 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES // 如果BarCodeInfo 結案,判斷當下作業站是否第一站 if (barcodeInfo.StatusID == -1) { + if (barcodeInfo.WipID == wipID) + { + resultModel.Msg = "該內部序號在目前生產製程已完工,請確認"; + return resultModel; + } + if (!rules.Value.Where(w => w.StationID == stationID && w.RuleSeq == 1 && w.RuleStatus == "P").Any()) { resultModel.Msg = "目前作業站不是第一站,請確認";