Browse Source

1. 修正過站判斷

PTD
Ray 3 years ago
parent
commit
29ffbb2f76
  1. 23
      AMESCoreStudio.WebApi/Controllers/BAS/RulesController.cs
  2. 119
      AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs

23
AMESCoreStudio.WebApi/Controllers/BAS/RulesController.cs

@ -139,6 +139,29 @@ namespace AMESCoreStudio.WebApi.Controllers.BAS
return rules;
}
/// <summary>
/// 根據下一站別IDD查詢
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
// GET: api/Rules/5
[HttpGet("ByNextStation/{id}")]
public async Task<ActionResult<IEnumerable<Rules>>> GetRulesByNextStation(int id)
{
IQueryable<Rules> q = _context.Ruleses;
q = q.Where(p => p.NextStationID.Equals(id));
var rules = await q.ToListAsync();
if (rules == null)
{
return NotFound();
}
return rules;
}
/// <summary>
/// 更新流程規則資料
/// </summary>

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

@ -560,7 +560,6 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
// 找該筆工單號碼的生產單位代號
var q1 = q.Value.Where(w => w.UnitNO == unitno).FirstOrDefault();
// 取工單號碼開立的 WipID、生產單位
var wipinfo = q.Value.Select(s => new { s.WipID, s.UnitNO }).ToList();
@ -650,7 +649,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
// 該作業站 RuleStationID
int? RuleStationID = ruleStations.Value.Where(w => w.StationID == station).Select(s => s.RuleStationID).FirstOrDefault();
if (RuleStationID == null)
if (RuleStationID == null || RuleStationID == 0)
{
resultModel.Msg = "該工單號碼【" + wipno + "】的流程未設定此作業站";
return resultModel;
@ -667,15 +666,9 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return resultModel;
}
int LastStopRuleStationID = await GetBarCodeLastStopRuleStationID(wipno, station);
if (LastStopRuleStationID != 0 && LastStopRuleStationID != 1000)
{
if (!BarCodeStationByWipID.Where(w => w.RuleStationID == LastStopRuleStationID).Any())
{
resultModel.Msg = "內部序號【" + barcode + "】找不到上一個作業站過站紀錄,請確認";
return resultModel;
}
}
resultModel = (ResultModel<string>)await GetBarCodeLastStopRuleStationID(wipID, station, BarCodeStationByWipID);
if (!resultModel.Success)
return resultModel;
#endregion
resultModel.Success = true;
@ -1087,79 +1080,55 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <summary>
/// 取得上一個作業站RuleStationID
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <param name="stationID">作業站ID</param>
/// <returns>0:沒有上一站</returns>
private async Task<int> GetBarCodeLastStopRuleStationID(string wipno, int stationID)
/// <param name="wipID">工單ID</param>
/// <param name="stationID">目前作業站ID</param>
/// <param name="barCodeStations">該工單號碼過站資料</param>
/// <returns>true:false</returns>
private async Task<IResultModel> GetBarCodeLastStopRuleStationID(int wipID, int stationID, List<BarcodeStation> barCodeStations)
{
ResultModel<string> resultModel = new ResultModel<string> { Success = false };
WipInfosController wipInfosController = new WipInfosController(_context);
var q = wipInfosController.GetWipInfoByWipNo(wipno);
if (q.Result.Value.Count() == 0)
return 0;
var q = wipInfosController.GetWipInfo(wipID);
var q1 = q.Result.Value.ToList();
List<int> FlowRuleID = new List<int>();
List<string> Unit = new List<string>();
// 取生產單位順序
if (q1.Where(w => w.UnitNO == "S" || w.UnitNO == "D").Any())
{
// SMT DIP
Unit.Add("S");
Unit.Add("D");
}
else if (q1.Where(w => w.UnitNO == "B" || w.UnitNO == "T").Any())
{
// 組裝 測試 包裝
Unit.Add("B");
Unit.Add("T");
Unit.Add("P");
}
// 抓各生產單位的流程ID
foreach (string str in Unit)
{
int WipFlowRule = q1.Where(w => w.UnitNO == str).Select(s => s.FlowRuleID).FirstOrDefault();
FlowRuleID.Add(WipFlowRule);
}
// 將工單-生產單位 流程ID取rulestation的作業站排順序
RuleStationsController ruleStationsController = new RuleStationsController(_context);
List<dynamic> dy = new List<dynamic>();
int index = 1;
foreach (int i in FlowRuleID)
//List<int> FlowRuleID = new List<int>();
//List<string> Unit = new List<string>();
//// 取生產單位順序
//if (q1.Where(w => w.UnitNO == "S" || w.UnitNO == "D").Any())
//{
// // SMT DIP
// Unit.Add("S");
// Unit.Add("D");
//}
//else if (q1.Where(w => w.UnitNO == "B" || w.UnitNO == "T").Any())
//{
// // 組裝 測試 包裝
// Unit.Add("B");
// Unit.Add("T");
// Unit.Add("P");
//}
// 抓工單ID的流程ID
int WipFlowRule = q1.FirstOrDefault().FlowRuleID;
// 用作業站抓 有設定下一站為該站的資料
RulesController rulesController = new RulesController(_context);
var rules = await rulesController.GetRulesByNextStation(stationID);
//排除第一站
if (rules.Value.Count() != 0)
{
if (i == 0)
continue;
var ruleStations = await ruleStationsController.GetRuleStationByFlow(i, 0);
if (ruleStations.Value.Count() != 0)
// 反查上一站是否有資料
var ruleSationID = rules.Value.Select(s => s.RuleStationID).ToList();
if (!barCodeStations.Where(w => ruleSationID.Contains(w.RuleStationID)).Any())
{
foreach (var item in ruleStations.Value.OrderBy(o => o.Sequence))
{
var x = new
{
index,
item.StationID,
item.RuleStationID,
item.Sequence,
item.StationType
};
dy.Add(x);
index++;
}
resultModel.Msg = "找不到上一個作業站過站紀錄,請確認";
return resultModel;
}
}
if (dy.Where(w => w.StationID == stationID).Select(s => s.index).FirstOrDefault() == null)
return 0;
int NowIndex = dy.Where(w => w.StationID == stationID).Select(s => s.index).FirstOrDefault();
if (dy.Where(w => w.index == (NowIndex - 1)).Select(s => s.StationID).FirstOrDefault() == null)
return 0;
return dy.Where(w => w.index == (NowIndex - 1)).Select(s => s.RuleStationID).FirstOrDefault();
resultModel.Success = true;
return resultModel;
}
/// <summary>

Loading…
Cancel
Save