Browse Source

1. 修正PCS021判斷

PTD
ray 3 years ago
parent
commit
b43f0a7025
  1. 39
      AMESCoreStudio.Web/Controllers/PCSController.cs
  2. 32
      AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs
  3. 2
      AMESCoreStudio.Web/Views/PCS/PCS021.cshtml
  4. 6
      AMESCoreStudio.WebApi/Controllers/AMES/BarcodeStationController.cs
  5. 54
      AMESCoreStudio.WebApi/Controllers/AMES/WipBarcodeOthersController.cs
  6. 86
      AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs
  7. 308
      AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs
  8. 2
      AMESCoreStudio.WebApi/Models/AMES/BarcodeLock.cs

39
AMESCoreStudio.Web/Controllers/PCSController.cs

@ -394,7 +394,7 @@ namespace AMESCoreStudio.Web.Controllers
/// 流程ID By站別 /// 流程ID By站別
/// </summary> /// </summary>
/// <returns>RuleStationID</returns> /// <returns>RuleStationID</returns>
private async Task GetRuleStationByFlowRuleID(int flowruleID) private async Task<List<RuleStation>> GetRuleStationByFlowRuleID(int flowruleID)
{ {
var result = await _basApi.GetRuleStationsByFlow(flowruleID, 0); var result = await _basApi.GetRuleStationsByFlow(flowruleID, 0);
result = result.Where(w => w.StationType == "M").OrderBy(o => o.Sequence).ToList(); result = result.Where(w => w.StationType == "M").OrderBy(o => o.Sequence).ToList();
@ -410,6 +410,7 @@ namespace AMESCoreStudio.Web.Controllers
} }
ViewBag.GetRuleStationByFlowRuleIDList = RuleStations; ViewBag.GetRuleStationByFlowRuleIDList = RuleStations;
return result;
} }
/// <summary> /// <summary>
@ -2017,8 +2018,6 @@ namespace AMESCoreStudio.Web.Controllers
await GetFactoryUnit(); await GetFactoryUnit();
await GetLineInfo(); await GetLineInfo();
if (string.IsNullOrWhiteSpace(model.WipNO)) if (string.IsNullOrWhiteSpace(model.WipNO))
{ {
ModelState.AddModelError("error", "請輸入工單號碼"); ModelState.AddModelError("error", "請輸入工單號碼");
@ -2039,8 +2038,6 @@ namespace AMESCoreStudio.Web.Controllers
// ModelState.AddModelError("error", "請選擇作業站"); // ModelState.AddModelError("error", "請選擇作業站");
//} //}
//model.WipNO = "WO0001A1";
var q = await _pcsApi.GetWipInfoByWipNO(model.WipNO); var q = await _pcsApi.GetWipInfoByWipNO(model.WipNO);
q = q.Where(w => w.UnitNO == model.UnitNO).ToList(); q = q.Where(w => w.UnitNO == model.UnitNO).ToList();
@ -2054,7 +2051,6 @@ namespace AMESCoreStudio.Web.Controllers
model.WipID = q.FirstOrDefault().WipID; model.WipID = q.FirstOrDefault().WipID;
model.PlanQTY = q.FirstOrDefault().PlanQTY; model.PlanQTY = q.FirstOrDefault().PlanQTY;
model.UnitNO = q.FirstOrDefault().UnitNO; model.UnitNO = q.FirstOrDefault().UnitNO;
model.LineID = q.FirstOrDefault().LineID;
model.FlowRuleID = q.FirstOrDefault().FlowRuleID; model.FlowRuleID = q.FirstOrDefault().FlowRuleID;
model.ItemNO = (await _pcsApi.GetWipAtt(model.WipNO)).ItemNO; model.ItemNO = (await _pcsApi.GetWipAtt(model.WipNO)).ItemNO;
// 判斷工單狀態 // 判斷工單狀態
@ -2066,15 +2062,14 @@ namespace AMESCoreStudio.Web.Controllers
} }
// 工單流程ID 取站別 // 工單流程ID 取站別
await GetRuleStationByFlowRuleID(model.FlowRuleID); var ruleStations = await GetRuleStationByFlowRuleID(model.FlowRuleID);
// 料號檔案 // 料號檔案
model.MaterialItem = await _pcsApi.GetMaterialItemByItemNO(model.ItemNO); model.MaterialItem = await _pcsApi.GetMaterialItemByItemNO(model.ItemNO);
if (model.MaterialItem != null) if (model.MaterialItem != null)
{ {
model.MaterialKps = await _pcsApi.GetMaterialKpByItemID(model.MaterialItem.ItemID); model.MaterialKps = await _pcsApi.GetMaterialKpByItemID(model.MaterialItem.ItemID);
//Key Parts 不綁製程 model.MaterialKps = model.MaterialKps.Where(w => w.StationType == model.UnitNO).ToList();
//model.MaterialKps = model.MaterialKps.Where(w => w.StationType == model.UnitNO).ToList();
model.MaterialStationsItems = await _pcsApi.GetMaterialStationsItemByItemID(model.MaterialItem.ItemID); model.MaterialStationsItems = await _pcsApi.GetMaterialStationsItemByItemID(model.MaterialItem.ItemID);
if (model.MaterialStationsItems.Count() == 0) if (model.MaterialStationsItems.Count() == 0)
@ -2084,7 +2079,7 @@ namespace AMESCoreStudio.Web.Controllers
var q1 = await _pcsApi.GetMaterialOutfitByItemID(model.MaterialItem.ItemID); var q1 = await _pcsApi.GetMaterialOutfitByItemID(model.MaterialItem.ItemID);
model.MaterialOutfits.Clear(); model.MaterialOutfits.Clear();
foreach (var item in q1) foreach (var item in q1.Where(w => w.RuleStationID == ruleStations.FirstOrDefault().RuleStationID))
{ {
model.MaterialOutfits.Add(new MaterialOutfits model.MaterialOutfits.Add(new MaterialOutfits
{ {
@ -2182,13 +2177,13 @@ namespace AMESCoreStudio.Web.Controllers
} }
} }
// 判斷作業站與製程順序是否正確 // 判斷作業站與製程順序是否正確
var BarCodeFlow = await _pcsApi.CheckBarCodeFlow(model.WipNO, model.Input, model.UnitNO, model.Station); var BarCodeFlow = await _pcsApi.CheckBarCodeFlow(model.WipNO, model.Input, model.UnitNO, model.Station);
if (!BarCodeFlow.Success) if (!BarCodeFlow.Success)
return Json(new Result() { success = BarCodeFlow.Success, msg = BarCodeFlow.Msg, data = Data }); return Json(new Result() { success = BarCodeFlow.Success, msg = BarCodeFlow.Msg, data = Data });
var CheckBarCodeKP = await _pcsApi.CheckBarCodeKP(model.WipNO, model.Input, model.UnitNO, model.Inputs);
// 下一個作業站是完工站時再判斷是否都有刷組件 // 下一個作業站是完工站時再判斷是否都有刷組件
// 判斷組件是否都有輸入 // 判斷組件是否都有輸入
//if (Kp.Count() != model.MaterialKps.Count()) //if (Kp.Count() != model.MaterialKps.Count())
@ -2223,13 +2218,19 @@ namespace AMESCoreStudio.Web.Controllers
} }
if (!string.IsNullOrWhiteSpace(Msg)) if (!string.IsNullOrWhiteSpace(Msg))
{ {
Success = false; Success = false;
return Json(new Result() { success = Success, msg = Msg, data = Data }); return Json(new Result() { success = Success, msg = Msg, data = Data });
} }
#region 判斷下一站為完工站
var NextStopCloseStation = await _pcsApi.CheckNextStopCloseStation(model.WipNO, model.UnitNO, model.Station);
#endregion
#region 過站判斷正常 往下處理Table
if (model.Barcode) if (model.Barcode)
{ {
@ -2246,7 +2247,7 @@ namespace AMESCoreStudio.Web.Controllers
barcodeInfos[0].RuleStationID = model.RuleStation; barcodeInfos[0].RuleStationID = model.RuleStation;
barcodeInfos[0].RuleStatus = !model.BarcodeNG ? "P" : "F"; //F 不良 barcodeInfos[0].RuleStatus = !model.BarcodeNG ? "P" : "F"; //F 不良
barcodeInfos[0].WipID = model.WipID; barcodeInfos[0].WipID = model.WipID;
barcodeInfos[0].StatusID = 1; barcodeInfos[0].StatusID = NextStopCloseStation.Success ? -1 : 1;
barcodeInfos[0].UpdateDate = DateTime.Now; barcodeInfos[0].UpdateDate = DateTime.Now;
await _pcsApi.PutBarcodeInfoes(JsonConvert.SerializeObject(barcodeInfos[0])); await _pcsApi.PutBarcodeInfoes(JsonConvert.SerializeObject(barcodeInfos[0]));
} }
@ -2259,7 +2260,7 @@ namespace AMESCoreStudio.Web.Controllers
RuleStationID = model.RuleStation, RuleStationID = model.RuleStation,
RuleStatus = !model.BarcodeNG ? "P" : "F",//F 不良 RuleStatus = !model.BarcodeNG ? "P" : "F",//F 不良
WipID = model.WipID, WipID = model.WipID,
StatusID = 1, StatusID = NextStopCloseStation.Success ? -1 : 1,
CreateUserID = 1 CreateUserID = 1
}; };
var resutPost = await _pcsApi.PostBarcodeInfoes(JsonConvert.SerializeObject(barcodeInfo)); var resutPost = await _pcsApi.PostBarcodeInfoes(JsonConvert.SerializeObject(barcodeInfo));
@ -2339,6 +2340,14 @@ namespace AMESCoreStudio.Web.Controllers
Data = string.Empty; Data = string.Empty;
} }
#endregion
if (NextStopCloseStation.Success)
{
// 確認完工數是否等於工單數
await _pcsApi.CheckWipNoBarCodeAllClost(model.WipNO, model.UnitNO, model.RuleStation);
}
return Json(new Result() { success = Success, msg = Msg, data = Data }); return Json(new Result() { success = Success, msg = Msg, data = Data });
} }

32
AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs

@ -599,7 +599,7 @@ namespace AMESCoreStudio.Web
/// <param name="flowrule">流程</param> /// <param name="flowrule">流程</param>
/// <returns></returns> /// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/BarCodeCheck/CheckWipNoSation")] [WebApiClient.Attributes.HttpGet("api/BarCodeCheck/CheckWipNoSation")]
ITask<ResultModel<string>> CheckBarCodeWip(string wipno, string unitno, int? line , int flowrule); ITask<ResultModel<string>> CheckBarCodeWip(string wipno, string unitno, int? line, int flowrule);
/// <summary> /// <summary>
/// 內部序號查詢工單號碼 /// 內部序號查詢工單號碼
@ -637,6 +637,36 @@ namespace AMESCoreStudio.Web
/// <returns>Success:true or false</returns> /// <returns>Success:true or false</returns>
[WebApiClient.Attributes.HttpGet("api/BarCodeCheck/BarCodeFlow")] [WebApiClient.Attributes.HttpGet("api/BarCodeCheck/BarCodeFlow")]
ITask<ResultModel<string>> CheckBarCodeFlow(string wipno, string barcode, string unitno, int station); ITask<ResultModel<string>> CheckBarCodeFlow(string wipno, string barcode, string unitno, int station);
/// <summary>
/// 確認下一站為完工
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <param name="unitno">生產單位ID</param>
/// <param name="station">作業站ID</param>
/// <returns>Success:true or false</returns>
[WebApiClient.Attributes.HttpGet("api/BarCodeCheck/CheckNextStopCloseStation")]
ITask<ResultModel<string>> CheckNextStopCloseStation(string wipno, string unitno, int stationID);
/// <summary>
/// 判斷生產中工單是否已經全部完工
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <param name="unitno">生產單位ID</param>
/// <param name="ruleStationID">ruleStationID</param>
/// <returns>Success:true or false</returns>
[WebApiClient.Attributes.HttpGet("api/BarCodeCheck/CheckWipNoBarCodeAllClost")]
ITask<ResultModel<string>> CheckWipNoBarCodeAllClost(string wipno, string unitno, int ruleStationID);
/// <summary>
/// 確認組件狀態
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <param name="barcode">內部條碼</param>
/// <param name="unitNo">生產單位ID</param>
/// <param name="inputKP">過站刷入組件序號</param>
[WebApiClient.Attributes.HttpGet("api/BarCodeCheck/BarCodeKP")]
ITask<ResultModel<string>> CheckBarCodeKP(string wipno, string barcode, string unitNo, List<string> inputKP );
#endregion #endregion

2
AMESCoreStudio.Web/Views/PCS/PCS021.cshtml

@ -375,7 +375,7 @@
parent.hg.msg(result.msg); parent.hg.msg(result.msg);
} }
else { else {
parent.hg.msg(result.msg); if (result.msg.length != 0) { parent.hg.msg(result.msg);}
if (result.data.length != 0) { if (result.data.length != 0) {
TableAddRow(result.data); TableAddRow(result.data);
} }

6
AMESCoreStudio.WebApi/Controllers/AMES/BarcodeStationController.cs

@ -98,12 +98,12 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// </summary> /// </summary>
/// <param name="wipID">工單ID</param> /// <param name="wipID">工單ID</param>
/// <returns></returns> /// <returns></returns>
[HttpGet("WipIDList")] [HttpGet("WipID")]
public async Task<ActionResult<BarcodeStation>> GetBarcodeStationByWipIDList(List<decimal> wipID) public async Task<ActionResult<IEnumerable<BarcodeStation>>> GetBarcodeStationByWipID(int wipID)
{ {
var barcodeStation = await _context.BarcodeStation var barcodeStation = await _context.BarcodeStation
.Where(w => wipID.Contains(w.WipID)).FirstOrDefaultAsync(); .Where(w => wipID == w.WipID).ToListAsync();
if (barcodeStation == null) if (barcodeStation == null)
{ {

54
AMESCoreStudio.WebApi/Controllers/AMES/WipBarcodeOthersController.cs

@ -65,37 +65,29 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return wipBarcodeOther; return wipBarcodeOther;
} }
///// <summary> /// <summary>
///// /// 查詢客戶區間
///// </summary> /// </summary>
///// <param name="UnitNO">生產單位</param> /// <param name="wipNO">工單號碼</param>
///// <param name="WipNO">工單號碼</param> /// <param name="No">序號</param>
///// <returns></returns> /// <returns></returns>
// // GET: api/FlowRules/Unit/S [HttpGet("ByNo")]
// [HttpGet("Unit/{UnitNO}/{WipNO}")] public async Task<ActionResult<IEnumerable<WipBarcodeOther>>> CheckWipBarcodeOtherByNo(string wipNO , string No)
// public async Task<ActionResult<IEnumerable<WipBarcodeOther>>> GetWipBarcodeOtherByUnit(string UnitNO , string WipNO) {
// { var wipBarcodeOther = _context.WipBarcodeOthers
// IQueryable<WipInfo> q1 = _context.WipInfos.Where(w => w.UnitNO.Contains(UnitNO) && w.WipNO.Contains(WipNO)); .FromSqlInterpolated($" SELECT * FROM WIP_BARCODE_OTHER WHERE {No} BETWEEN START_NO AND END_NO ")
// IQueryable<WipBarcodeOther> q2 = _context.WipBarcodeOther; .AsNoTracking().ToList();
// //if (no != null) wipBarcodeOther = wipBarcodeOther.Where(W => W.WipNO == wipNO).ToList();
// //{
// // if (no != "") //if (wipBarcodeOther == null)
// // { //{
// // q = q.Where(p => p.UnitNo.Equals(no)); // return NotFound();
// // } //}
// //}
// //q.OrderBy(p => p.FlowRuleName); return wipBarcodeOther;
}
// var flowRule = await q2.ToListAsync();
// //if (flowRule == null)
// //{
// // return NotFound();
// //}
// return flowRule;
// }
[HttpPost] [HttpPost]
public async Task<ResultModel<WipBarcodeOther>> PostWipBarcodeOther([FromBody] WipBarcodeOther wipBarcodeOther) public async Task<ResultModel<WipBarcodeOther>> PostWipBarcodeOther([FromBody] WipBarcodeOther wipBarcodeOther)

86
AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs

@ -139,43 +139,43 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
//public async Task<ResultModel<dynamic>> GetWipInfoSelectParameterInBarCodeStation([FromQuery] WipInfoDto value, int page = 1, int limit = 10) //public async Task<ResultModel<dynamic>> GetWipInfoSelectParameterInBarCodeStation([FromQuery] WipInfoDto value, int page = 1, int limit = 10)
//{ //{
//ResultModel<dynamic> result = new ResultModel<dynamic>(); //ResultModel<dynamic> result = new ResultModel<dynamic>();
//var result = GetWipInfoSelectParameter(value, page, limit); //var result = GetWipInfoSelectParameter(value, page, limit);
//// 判斷是否已經有過站紀錄 //// 判斷是否已經有過站紀錄
//BarcodeStationController barcodeStation = new BarcodeStationController(_context); //BarcodeStationController barcodeStation = new BarcodeStationController(_context);
//var WipArray = result.Result.Data.GroupBy(o => o.WipNO) //var WipArray = result.Result.Data.GroupBy(o => o.WipNO)
// .Select(s => new // .Select(s => new
// { // {
// s.Key, // s.Key,
// WipID = result.Result.Data.Where(w => w.WipNO == s.Key) // WipID = result.Result.Data.Where(w => w.WipNO == s.Key)
// .Select(s1 => (decimal)s1.WipID).ToList() // .Select(s1 => (decimal)s1.WipID).ToList()
// }).ToList(); // }).ToList();
//foreach (var item in WipArray) //foreach (var item in WipArray)
//{ //{
// var q1 = barcodeStation.GetBarcodeStationByWipIDList(item.WipID); // var q1 = barcodeStation.GetBarcodeStationByWipIDList(item.WipID);
// if (q1 == null) // if (q1 == null)
// { // {
// result.Result.Data = result.Result.Data.Where(w => w.WipNO == item.Key) // result.Result.Data = result.Result.Data.Where(w => w.WipNO == item.Key)
// .Select(s => new { s , BarcodeStation = "N"}).ToList(); // .Select(s => new { s , BarcodeStation = "N"}).ToList();
// } // }
// else // else
// { // {
// result.Result.Data = result.Result.Data.Where(w => w.WipNO == item.Key) // result.Result.Data = result.Result.Data.Where(w => w.WipNO == item.Key)
// .Select(s => { s.BarcodeStation = "Y"; return s; }).ToList(); // .Select(s => { s.BarcodeStation = "Y"; return s; }).ToList();
// } // }
//} //}
//if (result.Result.Data == null) //if (result.Result.Data == null)
//{ //{
// result.Result.Msg = "查無資料"; // result.Result.Msg = "查無資料";
// result.Result.Success = false; // result.Result.Success = false;
// return await result; // return await result;
//} //}
//result.Result.Success = true; //result.Result.Success = true;
//result.Result.Msg = "OK"; //result.Result.Msg = "OK";
//return; //return;
//} //}
/// <summary> /// <summary>
@ -270,12 +270,16 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return BadRequest(); return BadRequest();
} }
WipInfo wipinfo = new WipInfo(); WipInfo wipinfo = new WipInfo
wipinfo.WipID = id; {
wipinfo.StatusNO = statusno; WipID = id,
wipinfo.UpdateDate = DateTime.Now; StatusNO = statusno,
UpdateDate = DateTime.Now
};
_context.WipInfos.Attach(wipinfo);
// 指定更新某個欄位 // 指定更新某個欄位
_context.Entry(wipinfo).Property(p => p.StatusNO).IsModified = true; _context.Entry(wipinfo).Property(p => p.StatusNO).IsModified = true;
_context.Entry(wipinfo).Property(p => p.UpdateDate).IsModified = true;
try try
{ {
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();

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

@ -450,6 +450,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
resultModel.Msg = "工單號碼【" + WipNo + "】,尚未設定此流程站"; resultModel.Msg = "工單號碼【" + WipNo + "】,尚未設定此流程站";
return resultModel; return resultModel;
} }
if (!WipNoItem.Where(w => w.LineID == Line).Any())
{
resultModel.Msg = "工單號碼【" + WipNo + "】,尚未設定此線別";
return resultModel;
}
if (WipNoItem.Where(w => w.StatusNO == "Y").Any()) if (WipNoItem.Where(w => w.StatusNO == "Y").Any())
{ {
resultModel.Msg = "工單號碼【" + WipNo + "】,該工單已經投入完工,請切換工單"; resultModel.Msg = "工單號碼【" + WipNo + "】,該工單已經投入完工,請切換工單";
@ -474,15 +481,19 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// </summary> /// </summary>
/// <param name="wipno">工單號碼</param> /// <param name="wipno">工單號碼</param>
/// <param name="barcode">內部條碼</param> /// <param name="barcode">內部條碼</param>
/// <param name="unitNo">生產單位ID</param>
/// <param name="inputKP">過站刷入組件序號</param>
/// <param name="inputNo">過站刷入組件數量</param>
/// <returns></returns> /// <returns></returns>
[HttpGet("BarCodeKP")] [HttpGet("BarCodeKP")]
public async Task<IResultModel> CheckBarCodeKPAsync(string wipno, string barcode) public async Task<IResultModel> CheckBarCodeKPAsync(string wipno, string barcode, string unitNo, List<string> inputKP)
{ {
ResultModel<string> resultModel = new ResultModel<string> { Success = false }; ResultModel<string> resultModel = new ResultModel<string> { Success = false };
#region 判斷是否有工單 #region 判斷是否有工單
WipInfosController wipInfosController = new WipInfosController(_context); WipInfosController wipInfosController = new WipInfosController(_context);
var q = await wipInfosController.GetWipInfoByWipNo(wipno); var q = await wipInfosController.GetWipInfoByWipNo(wipno);
q = q.Value.Where(w => w.UnitNO == unitNo).ToList();
if (q.Value.Count() == 0) if (q.Value.Count() == 0)
{ {
resultModel.Msg = "找不到工單號碼【" + wipno + "】"; resultModel.Msg = "找不到工單號碼【" + wipno + "】";
@ -513,70 +524,71 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#region 確認是否有設定key Parts資料 #region 確認是否有設定key Parts資料
MaterialKpController materialKpController = new MaterialKpController(_context); MaterialKpController materialKpController = new MaterialKpController(_context);
var MaterialKps = (await materialKpController.GetMaterialKpByItemID(MaterialItem.ItemID)).ToList(); var MaterialKps = (await materialKpController.GetMaterialKpByItemID(MaterialItem.ItemID)).ToList();
MaterialKps = MaterialKps.Where(w => w.StationType == unitNo).ToList();
if (MaterialKps.Count != 0) if (MaterialKps.Count != 0)
{ {
#region 判斷內部序號是否有過站紀錄 #region 判斷內部序號是否有過站紀錄
var BarCodeID = await BarCodeToID(barcode); var BarCodeID = await BarCodeToID(barcode);
if (BarCodeID == 0) //if (BarCodeID == 0)
{ //{
resultModel.Msg = "內部序號【" + barcode + "】,在條碼資料檔找不到"; // resultModel.Msg = "內部序號【" + barcode + "】,在條碼資料檔找不到";
return resultModel; // return resultModel;
} //}
#endregion #endregion
#region 判斷組件序號是否有紀錄 #region 判斷組件序號是否有紀錄
BarcodeItemsController barcodeItemsController = new BarcodeItemsController(_context); BarcodeItemsController barcodeItemsController = new BarcodeItemsController(_context);
var BarCodeItems = (await barcodeItemsController.GetBarcodeItems(BarCodeID)).Value.ToList(); var BarCodeItems = (await barcodeItemsController.GetBarcodeItems(BarCodeID)).Value.ToList();
if (BarCodeItems.Count == 0) BarCodeItems = BarCodeItems.Where(w => w.WipID == q.Value.FirstOrDefault().WipID).ToList();
{
resultModel.Msg = "內部序號【" + barcode + "】,在條碼組件件資料檔找不到";
return resultModel;
}
#endregion #endregion
#region 判斷組件數量是否正確 // 計算過站時刷的組件數量與已經存BarCodeItems
if (MaterialKps.Count != BarCodeItems.Count) var KPQty = inputKP.Count + BarCodeItems.Count;
#region 刷入組件數量超過
if (KPQty > MaterialKps.Count)
{ {
resultModel.Msg = "組件對應數量【" + MaterialKps.Count + "】不等於條碼組件數量【" + BarCodeItems.Count + "】"; resultModel.Msg = "組件數量已刷超過設定數量,請確認";
return resultModel; return resultModel;
} }
#endregion #endregion
#region 比對組件資料 #region 比對組件資料
var CheckMsg = string.Empty; var CheckMsg = string.Empty;
for (int i = 0; i < MaterialKps.Count; i++) int x= BarCodeItems.Count;
#endregion
for (int i = 0; i < inputKP.Count; i++)
{ {
#region 比對序號長度是否正確 #region 比對序號長度是否正確
if (string.IsNullOrWhiteSpace(MaterialKps[i].Length.ToString())) if (string.IsNullOrWhiteSpace(MaterialKps[x+i].Length.ToString()))
{ {
if (MaterialKps[i].Length != BarCodeItems[i].PartNo.Length) if (MaterialKps[x + i].Length != inputKP[i].Length)
CheckMsg += "組件序號【" + BarCodeItems[i].PartNo + "】 與組件名稱【" + MaterialKps[i].KpName + "】長度不符合</br>"; CheckMsg += "組件序號【" + inputKP + "】 與組件名稱【" + MaterialKps[x + i].KpName + "】長度不符合</br>";
} }
#endregion #endregion
#region 前置碼正確 #region 前置碼正確
if (!string.IsNullOrWhiteSpace(MaterialKps[i].Title)) if (!string.IsNullOrWhiteSpace(MaterialKps[x + i].Title))
{ {
if (!BarCodeItems[i].KpItemNo.ToUpper().StartsWith(MaterialKps[i].Title.ToUpper())) if (!inputKP[i].ToUpper().StartsWith(MaterialKps[x + i].Title.ToUpper()))
CheckMsg += "組件序號【" + BarCodeItems[i].PartNo + "】 與組件名稱【" + MaterialKps[i].Title + "】前置碼不符合</br>"; CheckMsg += "組件序號【" + inputKP + "】 與組件名稱【" + MaterialKps[x + i].Title + "】前置碼不符合</br>";
} }
#endregion #endregion
#region 判斷組件序號是否在製狀態 #region 判斷組件序號是否在製狀態
if (MaterialKps[i].KpName.ToUpper() == "BOARD") if (MaterialKps[x + i].KpName.ToUpper() == "BOARD")
{ {
BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context); BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context);
var BarCodeInfo = await barcodeInfoesController.GetBarcodeInfoesByNo(BarCodeItems[i].PartNo); var BarCodeInfo = await barcodeInfoesController.GetBarcodeInfoesByNo(inputKP[i]);
if (BarCodeInfo.Value.Where(w => w.StatusID != -1).Any()) if (BarCodeInfo.Value.Where(w => w.StatusID != -1).Any())
{ {
CheckMsg += "組件序號【" + BarCodeItems[i].PartNo + "】 目前是在製狀態</br>"; CheckMsg += "組件序號【" + inputKP + "】 目前是在製狀態</br>";
} }
} }
#endregion #endregion
#region 判斷MAC區間 #region 判斷MAC區間
if (MaterialKps[i].KpName.ToUpper() == "MAC") if (MaterialKps[x + i].KpName.ToUpper() == "MAC")
{ {
WipMACController wipMACController = new WipMACController(_context); WipMACController wipMACController = new WipMACController(_context);
var wipMAC = await wipMACController.GetWipMAC(wipno); var wipMAC = await wipMACController.GetWipMAC(wipno);
@ -587,19 +599,19 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
else else
{ {
// 判斷MAC前置碼是否一樣 // 判斷MAC前置碼是否一樣
if (!BarCodeItems[i].PartNo.StartsWith(wipMAC.Value.Title)) if (!inputKP[i].StartsWith(wipMAC.Value.Title))
{ {
CheckMsg += "組件序號【" + BarCodeItems[i].PartNo + "】 與MAC【" + wipMAC.Value.Title + "】前置碼不符合 </br>"; CheckMsg += "組件序號【" + inputKP + "】 與MAC【" + wipMAC.Value.Title + "】前置碼不符合 </br>";
} }
else else
{ {
// 判斷是否符合區間 // 判斷是否符合區間
if (BarCodeItems[i].PartNo.Length == 12) if (inputKP[i].Length == 12)
{ {
if (!(Convert.ToInt32(wipMAC.Value.StartNO, 16) <= Convert.ToInt32(BarCodeItems[i].PartNo.Substring(7, 6), 16) if (!(Convert.ToInt32(wipMAC.Value.StartNO, 16) <= Convert.ToInt32(inputKP[i].Substring(7, 6), 16)
&& Convert.ToInt32(BarCodeItems[i].PartNo.Substring(7, 6), 16) <= Convert.ToInt32(wipMAC.Value.EndNO, 16))) && Convert.ToInt32(inputKP[i].Substring(7, 6), 16) <= Convert.ToInt32(wipMAC.Value.EndNO, 16)))
{ {
CheckMsg += "組件序號【" + BarCodeItems[i].PartNo + "】 與工單設定MAC區間不符合 </br>"; CheckMsg += "組件序號【" + inputKP + "】 與工單設定MAC區間不符合 </br>";
} }
} }
} }
@ -609,18 +621,21 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#region 判斷出貨序號 #region 判斷出貨序號
// 當KP_NAME是 EXT_NO 判斷組件-出貨序號 是否有在區間 // 當KP_NAME是 EXT_NO 判斷組件-出貨序號 是否有在區間
if (MaterialKps[i].KpName.ToUpper() == "EXT_NO") if (MaterialKps[x + i].KpName.ToUpper() == "EXT_NO")
{ {
WipBarcodeOtherController wipBarcodeOtherController = new WipBarcodeOtherController(_context); WipBarcodeOtherController wipBarcodeOtherController = new WipBarcodeOtherController(_context);
var WipBarCodeOther = await wipBarcodeOtherController.GetWipBarcodeOtherByWipNo(wipno); var WipBarCodeOther = await wipBarcodeOtherController.CheckWipBarcodeOtherByNo(wipno, inputKP[i]);
if (WipBarCodeOther.Value != null) if (WipBarCodeOther.Value.Count() == 0)
{ {
CheckMsg += "組件序號【" + inputKP + "】 與工單設定出貨序號區間不符合 </br>";
}
else
{
resultModel.Msg = "EXT_NO";
} }
} }
#endregion #endregion
} }
#endregion
if (!string.IsNullOrWhiteSpace(CheckMsg)) if (!string.IsNullOrWhiteSpace(CheckMsg))
{ {
@ -633,6 +648,92 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
resultModel.Success = true; resultModel.Success = true;
return resultModel; return resultModel;
} }
/// <summary>
/// 確認組件數量正確
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <param name="barcode">內部條碼</param>
/// <param name="unitno">生產單位</param>
/// <returns></returns>
[HttpGet("CheckBarCodeKPQty")]
public async Task<IResultModel> CheckBarCodeKPQtyAsync(string wipno, string barcode, string unitno)
{
ResultModel<string> resultModel = new ResultModel<string> { Success = false };
#region 判斷是否有工單
WipInfosController wipInfosController = new WipInfosController(_context);
var q = await wipInfosController.GetWipInfoByWipNo(wipno);
q = q.Value.Where(w => w.UnitNO == unitno).ToList();
if (q.Value.Count() == 0)
{
resultModel.Msg = "找不到工單號碼【" + wipno + "】";
return resultModel;
}
#endregion
#region 判斷是否有輸入工單料號
WipAttsController wipAttsController = new WipAttsController(_context);
string ItemNo = (await wipAttsController.GetWipAtt(q.Value.FirstOrDefault().WipNO)).Value.ItemNO;
if (string.IsNullOrWhiteSpace(ItemNo))
{
resultModel.Msg = "工單號碼【" + wipno + "】,找不到料號名稱";
return resultModel;
}
#endregion
#region 判斷工單料號是否有在料號基本檔
MaterialItemController materialItemController = new MaterialItemController(_context);
var MaterialItem = await materialItemController.GetMaterialItemByItemNO(ItemNo);
if (MaterialItem == null)
{
resultModel.Msg = "料號【" + ItemNo + "】,在料號基本資料檔找不到";
return resultModel;
}
#endregion
#region 確認是否有設定key Parts資料
MaterialKpController materialKpController = new MaterialKpController(_context);
var MaterialKps = (await materialKpController.GetMaterialKpByItemID(MaterialItem.ItemID)).ToList();
MaterialKps = MaterialKps.Where(w => w.StationType == unitno).ToList();
if (MaterialKps.Count != 0)
{
#region 判斷內部序號是否有過站紀錄
var BarCodeID = await BarCodeToID(barcode);
if (BarCodeID == 0)
{
resultModel.Msg = "內部序號【" + barcode + "】,在條碼資料檔找不到";
return resultModel;
}
#endregion
#region 判斷組件序號是否有紀錄
BarcodeItemsController barcodeItemsController = new BarcodeItemsController(_context);
var BarCodeItems = (await barcodeItemsController.GetBarcodeItems(BarCodeID)).Value.ToList();
BarCodeItems = BarCodeItems.Where(w => w.WipID == q.Value.FirstOrDefault().WipID).ToList();
if (BarCodeItems.Count == 0)
{
resultModel.Msg = "內部序號【" + barcode + "】,在條碼組件件資料檔找不到";
return resultModel;
}
#endregion
#region 判斷組件數量是否正確
// 先把出貨序號拿掉
MaterialKps = MaterialKps.Where(w => w.KpName.ToUpper() != "EXT_NO").ToList();
if (MaterialKps.Count != BarCodeItems.Count)
{
resultModel.Msg = "組件對應數量【" + MaterialKps.Count + "】不等於條碼組件數量【" + BarCodeItems.Count + "】";
return resultModel;
}
#endregion
}
#endregion
resultModel.Success = true;
return resultModel;
}
/// <summary> /// <summary>
/// 內部序號找BarCodeID /// 內部序號找BarCodeID
/// </summary> /// </summary>
@ -706,7 +807,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
var x = new var x = new
{ {
index, index,
item.RuleStationID item.StationID
}; };
dy.Add(x); dy.Add(x);
index++; index++;
@ -714,91 +815,116 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
} }
if (dy.Where(w => w.RuleStationID == stationID).Select(s => s.index).FirstOrDefault() == null) if (dy.Where(w => w.StationID == stationID).Select(s => s.index).FirstOrDefault() == null)
return 0; return 0;
int NowIndex = dy.Where(w => w.RuleStationID == stationID).Select(s => s.index).FirstOrDefault(); int NowIndex = dy.Where(w => w.StationID == stationID).Select(s => s.index).FirstOrDefault();
if (dy.Where(w => w.index == (NowIndex - 1)).Select(s => s.RuleStationID).FirstOrDefault() == null) if (dy.Where(w => w.index == (NowIndex - 1)).Select(s => s.StationID).FirstOrDefault() == null)
return 0; return 0;
return dy.Where(w => w.index == (NowIndex - 1)).Select(s => s.RuleStationID).FirstOrDefault(); return dy.Where(w => w.index == (NowIndex - 1)).Select(s => s.StationID).FirstOrDefault();
int NextStopStationID = dy.Where(w => w.index == (NowIndex + 1)).Select(s => s.RuleStationID).FirstOrDefault();
} }
/// <summary> /// <summary>
/// 取得下一個作業站RuleStationID /// 確認下一站為完工
/// </summary> /// </summary>
/// <param name="wipno">工單號碼</param> /// <param name="wipno">工單號碼</param>
/// <param name="unitNo">生產單位ID</param>
/// <param name="stationID">作業站ID</param> /// <param name="stationID">作業站ID</param>
/// <returns>0:沒有下一站</returns> /// <returns>0:完工 -1:不是</returns>
private async Task<int> GetBarCodeNextStopRuleStationID(string wipno, int stationID) [HttpGet("CheckNextStopCloseStation")]
public async Task<IResultModel> CheckNextStopCloseStation(string wipno, string unitNo, int stationID)
{ {
ResultModel<string> resultModel = new ResultModel<string> { Success = false };
WipInfosController wipInfosController = new WipInfosController(_context); WipInfosController wipInfosController = new WipInfosController(_context);
var q = wipInfosController.GetWipInfoByWipNo(wipno); var q = wipInfosController.GetWipInfoByWipNo(wipno);
if (q.Result.Value.Count() == 0) if (!q.Result.Value.Where(w => w.UnitNO == unitNo).Any())
return 0;
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 return resultModel;
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 var q1 = q.Result.Value.Where(w => w.UnitNO == unitNo).FirstOrDefault();
foreach (string str in Unit) int FlowRuleID = q1.FlowRuleID;
{
int WipFlowRule = q1.Where(w => w.UnitNO == str).Select(s => s.FlowRuleID).FirstOrDefault();
FlowRuleID.Add(WipFlowRule);
}
// 將工單-生產單位 流程ID取rulestation的作業站排順序 // 將工單-生產單位 流程ID取rulestation的作業站排順序
RuleStationsController ruleStationsController = new RuleStationsController(_context); RuleStationsController ruleStationsController = new RuleStationsController(_context);
List<dynamic> dy = new List<dynamic>(); List<dynamic> dy = new List<dynamic>();
int index = 1; int index = 1;
foreach (int i in FlowRuleID) var ruleStations = await ruleStationsController.GetRuleStationByFlow(q1.FlowRuleID, 0);
if (ruleStations.Value.Count() != 0)
{ {
if (i == 0) // 按照順序塞入判斷資料
continue; foreach (var item in ruleStations.Value.Where(w => w.StationType == "M").OrderBy(o => o.Sequence))
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)) var x = new
{ {
var x = new index,
{ item.StationID
index, };
item.RuleStationID dy.Add(x);
}; index++;
dy.Add(x);
index++;
}
} }
} }
if (dy.Where(w => w.RuleStationID == stationID).Select(s => s.index).FirstOrDefault() == null) // 在RuleStation 找不到該作業站
return 0; if (dy.Where(w => w.StationID == stationID).Select(s => s.index).FirstOrDefault() == null)
return resultModel;
int NowIndex = dy.Where(w => w.RuleStationID == stationID).Select(s => s.index).FirstOrDefault(); // 取得目前該站順序
int NowIndex = dy.Where(w => w.StationID == stationID).Select(s => s.index).FirstOrDefault();
if (dy.Where(w => w.index == (NowIndex + 1)).Select(s => s.RuleStationID).FirstOrDefault() == null) // 判斷下一站沒有資料Error
return 0; if (dy.Where(w => w.index == (NowIndex + 1)).Select(s => s.StationID).FirstOrDefault() == null)
return resultModel;
return dy.Where(w => w.index == (NowIndex + 1)).Select(s => s.RuleStationID).FirstOrDefault(); // 當下一站SatationID= 1000 代表完工站
if (dy.Where(w => w.index == (NowIndex + 1)).Select(s => s.StationID).FirstOrDefault() == 1000)
{
resultModel.Success = true;
return resultModel;
}
else
{
return resultModel;
}
}
/// <summary>
/// 判斷生產中工單是否已經全部完工 自動更新
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <param name="unitNo">生產單位ID</param>
/// <param name="ruleStationID">ruleStationID</param>
/// <returns></returns>
[HttpGet("CheckWipNoBarCodeAllClost")]
public async Task<IResultModel> CheckWipNoBarCodeAllClost(string wipno, string unitNo, int ruleStationID)
{
ResultModel<string> resultModel = new ResultModel<string> { Success = false };
WipInfosController wipInfosController = new WipInfosController(_context);
var q = wipInfosController.GetWipInfoByWipNo(wipno);
if (!q.Result.Value.Where(w => w.UnitNO == unitNo).Any())
{
return resultModel;
}
var q1 = q.Result.Value.Where(w => w.UnitNO == unitNo).FirstOrDefault();
BarcodeStationController barcodeStationController = new BarcodeStationController(_context);
var barCodeStations = await barcodeStationController.GetBarcodeStationByWipID(q1.WipID);
// 比對過站Station完工跟工單數一樣 = 完工
if (q1.PlanQTY ==
barCodeStations.Value.Where(w => w.RuleStatus == "P" && w.RuleStationID == ruleStationID).Count())
{
await wipInfosController.PutWipinfoToStatusNO(q1.WipID, "E");
resultModel.Success = true;
resultModel.Msg = "完工";
}
return resultModel;
} }
} }
} }

2
AMESCoreStudio.WebApi/Models/AMES/BarcodeLock.cs

@ -86,7 +86,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// </summary> /// </summary>
[Column("LOCK_DATE")] [Column("LOCK_DATE")]
[DataMember] [DataMember]
public DateTime LockDate { get; set; } public DateTime LockDate { get; set; } = DateTime.Now;
/// <summary> /// <summary>
/// 解鎖者 /// 解鎖者

Loading…
Cancel
Save