Browse Source

1. 調整過站API相關邏輯

PTD
Sai 1 year ago
parent
commit
68fde453d9
  1. 313
      AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs

313
AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs

@ -143,7 +143,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#region 判斷工單狀態 #region 判斷工單狀態
resultModel = (ResultModel<string>)await CheckWipNoSationAsync(wipNo: barCodeCheckDto.wipNo, unitNo: barCodeCheckDto.unitNo resultModel = (ResultModel<string>)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) if (!resultModel.Success)
return resultModel; 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) if (!result_BarcodeWip.Success)
{ {
Msg += "BarcodeWip_Error:" + result_BarcodeWip.Msg + "<br/>"; Msg += "BarcodeWip_Error:" + result_BarcodeWip.Msg + "<br/>";
} }
// 工單各站數量資料檔 // 工單各站數量資料檔
var result_WipStation = Table_WipStation(barCodeCheckDto).Result; var result_WipStation = await Table_WipStation(barCodeCheckDto);
if (!result_WipStation.Success) if (!string.IsNullOrWhiteSpace(result_WipStation))
{ {
Msg += "WipStation_Error:" + result_WipStation.Msg + "<br/>"; Msg += "WipStation_Error:" + result_WipStation + "<br/>";
} }
// 各班別數量資料檔 // 各班別數量資料檔
var result_WipClass = Table_WipClass(barCodeCheckDto).Result; var result_WipClass = await Table_WipClass(barCodeCheckDto);
if (!result_WipClass.Success) if (!string.IsNullOrWhiteSpace(result_WipClass))
{ {
Msg += "WipClass_Error:" + result_WipClass.Msg + "<br/>"; Msg += "WipClass_Error:" + result_WipClass + "<br/>";
} }
// 工單各站數量資料檔 – By TIME // 工單各站數量資料檔 – By TIME
var result_WipTime = Table_WipTime(barCodeCheckDto).Result; var result_WipTime = await Table_WipTime(barCodeCheckDto);
if (!result_WipTime.Success) if (!string.IsNullOrWhiteSpace(result_WipTime))
{ {
Msg += "WipTime_Error:" + result_WipTime.Msg + "<br/>"; Msg += "WipTime_Error:" + result_WipTime + "<br/>";
} }
// 條碼過站資料檔 // 條碼過站資料檔
@ -1140,170 +1140,215 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// WipStation /// WipStation
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private async Task<ResultModel<WipStation>> Table_WipStation(BarCodeCheckDto barCodeCheckDto) private async Task<string> Table_WipStation(BarCodeCheckDto data)
{ {
WipStationController wipStationController = new WipStationController(_context); var BarcodeStation = _context.BarcodeStation.Where(w => w.BarcodeID == data.barcodeID &&
var wipStation = new WipStation(); w.WipID == data.wipID &&
var resut = new ResultModel<WipStation>(); 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); var wipStations = _context.WipStations.Where(w => w.WipID == data.wipID && w.StationID == data.stationID &&
wipStation = queryWipStation.Value.Where(w => w.RuleStatus == barCodeCheckDto.ruleStatus w.RuleStatus == data.ruleStatus).ToList();
&& w.CreateDate.ToString("yyyy/MM/dd") == DateTime.Now.ToString("yyyy/MM/dd")) wipStations = wipStations.Where(w => w.CreateDate.ToString("yyyy/MM/dd") == today).ToList();
.FirstOrDefault(); try
// 有資料加1 後續判斷第一次過站
if (wipStation != null)
{ {
BarcodeStationController barcodeStationController = new BarcodeStationController(_context); // 新增
var barcodeStation = await barcodeStationController.GetBarcodeStationByKey(barCodeCheckDto.barcodeID, if (wipStations.Count() == 0)
barCodeCheckDto.wipID, barCodeCheckDto.stationID, barCodeCheckDto.flowRule); {
if (barcodeStation.Value == null) 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 return ex.InnerException.Message + "<br/>";
{
WipID = barCodeCheckDto.wipID,
RuleStatus = barCodeCheckDto.ruleStatus,
StationID = barCodeCheckDto.stationID,
FirstCnt = 1,
PassCnt = 1,
CreateUserID = barCodeCheckDto.userID
};
resut = await wipStationController.PostWipStation(wipStation);
} }
return resut; return "";
} }
/// <summary> /// <summary>
/// WipClass-各班別數量資料檔 /// WipClass-各班別數量資料檔
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private async Task<ResultModel<WipClass>> Table_WipClass(BarCodeCheckDto barCodeCheckDto) private async Task<string> Table_WipClass(BarCodeCheckDto data)
{ {
WipClassController wipClassController = new WipClassController(_context); var BarcodeStation = _context.BarcodeStation.Where(w => w.BarcodeID == data.barcodeID &&
var wipClass = new WipClass(); w.WipID == data.wipID &&
var resut = new ResultModel<WipClass>(); w.StationID == data.stationID &&
w.FlowRuleID == data.flowRule).Any();
var today = DateTime.Now.ToString("yyyy/MM/dd");
// 取ClassID // 取ClassID
int ClassID = -1; int ClassID = -1;
ClassInfoesController classInfoesController = new ClassInfoesController(_context); var ClassInfo = _context.ClassInfoes.Where(w => w.UnitNo == data.unitNo).ToList();
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();
if (ID != null) ClassInfo = ClassInfo.Where(w => DateTime.Parse(today + " " + w.BeginTime) <= DateTime.Now &&
{ DateTime.Now <= DateTime.Parse(today + " " + w.EndTime)).ToList();
ClassID = ID.ClassID; if (ClassInfo.Count() != 0)
} {
ClassID = ClassInfo.FirstOrDefault().ClassID;
} }
// 判斷是否有資料 // 判斷是否有資料
var queryWipClass = await wipClassController.GetWipClassByData(barCodeCheckDto.wipID, barCodeCheckDto.stationID, barCodeCheckDto.ruleStatus); var wipClasses = _context.WipClass.Where(w => w.WipID == data.wipID && w.StationID == data.stationID &&
queryWipClass = queryWipClass.Value.Where(w => w.CreateDate.ToString("yyyy/MM/dd") == DateTime.Now.ToString("yyyy/MM/dd")).ToList(); w.RuleStatus == data.ruleStatus && w.ClassID == ClassID).ToList();
// 有資料加1 後續判斷第一次過站 wipClasses = wipClasses.Where(w => w.CreateDate.ToString("yyyy/MM/dd") == today).ToList();
if (queryWipClass.Value.Where(w => w.ClassID == ClassID).Any())
try
{ {
wipClass = queryWipClass.Value.FirstOrDefault(); // 新增
BarcodeStationController barcodeStationController = new BarcodeStationController(_context); if (wipClasses.Count() == 0)
var barcodeStation = await barcodeStationController.GetBarcodeStationByKey(barCodeCheckDto.barcodeID,
barCodeCheckDto.wipID, barCodeCheckDto.stationID, barCodeCheckDto.flowRule);
if (barcodeStation.Value == null)
{ {
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 return ex.InnerException.Message + "<br/>";
{
WipID = barCodeCheckDto.wipID,
RuleStatus = barCodeCheckDto.ruleStatus,
StationID = barCodeCheckDto.stationID,
ClassID = ClassID,
FirstCnt = 1,
PassCnt = 1,
CreateUserID = barCodeCheckDto.userID
};
resut = await wipClassController.PostWipClass(wipClass);
} }
return "";
return resut;
} }
/// <summary> /// <summary>
/// WipTime-工單各站數量資料檔 – By TIME /// WipTime-工單各站數量資料檔 – By TIME
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private async Task<ResultModel<WipTime>> Table_WipTime(BarCodeCheckDto barCodeCheckDto) private async Task<string> Table_WipTime(BarCodeCheckDto data)
{ {
WipTimeController wipTimeController = new WipTimeController(_context); // 有資料加1 後續判斷第一次過站
var wipTime = new WipTime(); var BarcodeStation = _context.BarcodeStation.Where(w => w.BarcodeID == data.barcodeID &&
var resut = new ResultModel<WipTime>(); w.WipID == data.wipID && w.StationID == data.stationID &&
w.FlowRuleID == data.flowRule).Any();
var today = DateTime.Now.ToString("yyyy/MM/dd");
// 取SegmentID // 取SegmentID
int SegmentID = -1; int SegmentID = -1;
TimeSegmentsController timeSegmentsController = new TimeSegmentsController(_context); var timeSegment = _context.TimeSegments.ToList();
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();
if (ID != null) timeSegment = timeSegment.Where(w => DateTime.Parse(today + " " + w.StartTime) <= DateTime.Now &&
{ DateTime.Now <= DateTime.Parse(today + " " + w.EndTime)).ToList();
SegmentID = ID.SegmentID; 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();
// 判斷是否有資料 wipTimes = wipTimes.Where(w => w.CreateDate.ToString("yyyy/MM/dd") == today).ToList();
var queryWipTime = await wipTimeController.GetWipTimeByData(barCodeCheckDto.wipID, barCodeCheckDto.stationID, barCodeCheckDto.ruleStatus); try
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())
{ {
wipTime = queryWipTime.Value.FirstOrDefault(); // 新增
BarcodeStationController barcodeStationController = new BarcodeStationController(_context); if (wipTimes.Count() == 0)
var barcodeStation = await barcodeStationController.GetBarcodeStationByKey(barCodeCheckDto.barcodeID,
barCodeCheckDto.wipID, barCodeCheckDto.stationID, barCodeCheckDto.flowRule);
if (barcodeStation.Value == null)
{ {
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 return ex.InnerException.Message + "<br/>";
{
WipID = barCodeCheckDto.wipID,
RuleStatus = barCodeCheckDto.ruleStatus,
StationID = barCodeCheckDto.stationID,
SegmentID = SegmentID,
FirstCnt = 1,
PassCnt = 1,
CreateUserID = barCodeCheckDto.userID
};
resut = await wipTimeController.PostWipTime(wipTime);
} }
return "";
return resut;
} }
#endregion #endregion
@ -1710,7 +1755,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <param name="line">線別</param> /// <param name="line">線別</param>
/// <param name="stationID">作業站</param> /// <param name="stationID">作業站</param>
/// <returns></returns> /// <returns></returns>
private async Task<IResultModel> CheckWipNoSationAsync(string wipNo, string unitNo, int flowRuleID, int line, int stationID = 0) private async Task<IResultModel> CheckWipNoSationAsync(string wipNo, string unitNo, int flowRuleID, int line, int stationID = 0, string barCodeNo = "")
{ {
ResultModel<string> resultModel = new ResultModel<string>(); ResultModel<string> resultModel = new ResultModel<string>();
@ -1781,8 +1826,12 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
var FirstWipInfo = WipNoItem.FirstOrDefault(); var FirstWipInfo = WipNoItem.FirstOrDefault();
if (FirstWipInfo.CompleteQTY >= FirstWipInfo.PlanQTY) 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 結案,判斷當下作業站是否第一站 // 如果BarCodeInfo 結案,判斷當下作業站是否第一站
if (barcodeInfo.StatusID == -1) 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()) if (!rules.Value.Where(w => w.StationID == stationID && w.RuleSeq == 1 && w.RuleStatus == "P").Any())
{ {
resultModel.Msg = "目前作業站不是第一站,請確認"; resultModel.Msg = "目前作業站不是第一站,請確認";

Loading…
Cancel
Save