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站別
/// </summary>
/// <returns>RuleStationID</returns>
private async Task GetRuleStationByFlowRuleID(int flowruleID)
private async Task<List<RuleStation>> GetRuleStationByFlowRuleID(int flowruleID)
{
var result = await _basApi.GetRuleStationsByFlow(flowruleID, 0);
result = result.Where(w => w.StationType == "M").OrderBy(o => o.Sequence).ToList();
@ -410,6 +410,7 @@ namespace AMESCoreStudio.Web.Controllers
}
ViewBag.GetRuleStationByFlowRuleIDList = RuleStations;
return result;
}
/// <summary>
@ -2017,8 +2018,6 @@ namespace AMESCoreStudio.Web.Controllers
await GetFactoryUnit();
await GetLineInfo();
if (string.IsNullOrWhiteSpace(model.WipNO))
{
ModelState.AddModelError("error", "請輸入工單號碼");
@ -2039,8 +2038,6 @@ namespace AMESCoreStudio.Web.Controllers
// ModelState.AddModelError("error", "請選擇作業站");
//}
//model.WipNO = "WO0001A1";
var q = await _pcsApi.GetWipInfoByWipNO(model.WipNO);
q = q.Where(w => w.UnitNO == model.UnitNO).ToList();
@ -2054,7 +2051,6 @@ namespace AMESCoreStudio.Web.Controllers
model.WipID = q.FirstOrDefault().WipID;
model.PlanQTY = q.FirstOrDefault().PlanQTY;
model.UnitNO = q.FirstOrDefault().UnitNO;
model.LineID = q.FirstOrDefault().LineID;
model.FlowRuleID = q.FirstOrDefault().FlowRuleID;
model.ItemNO = (await _pcsApi.GetWipAtt(model.WipNO)).ItemNO;
// 判斷工單狀態
@ -2066,15 +2062,14 @@ namespace AMESCoreStudio.Web.Controllers
}
// 工單流程ID 取站別
await GetRuleStationByFlowRuleID(model.FlowRuleID);
var ruleStations = await GetRuleStationByFlowRuleID(model.FlowRuleID);
// 料號檔案
model.MaterialItem = await _pcsApi.GetMaterialItemByItemNO(model.ItemNO);
if (model.MaterialItem != null)
{
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);
if (model.MaterialStationsItems.Count() == 0)
@ -2084,7 +2079,7 @@ namespace AMESCoreStudio.Web.Controllers
var q1 = await _pcsApi.GetMaterialOutfitByItemID(model.MaterialItem.ItemID);
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
{
@ -2182,13 +2177,13 @@ namespace AMESCoreStudio.Web.Controllers
}
}
// 判斷作業站與製程順序是否正確
var BarCodeFlow = await _pcsApi.CheckBarCodeFlow(model.WipNO, model.Input, model.UnitNO, model.Station);
if (!BarCodeFlow.Success)
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())
@ -2223,13 +2218,19 @@ namespace AMESCoreStudio.Web.Controllers
}
if (!string.IsNullOrWhiteSpace(Msg))
{
Success = false;
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)
{
@ -2246,7 +2247,7 @@ namespace AMESCoreStudio.Web.Controllers
barcodeInfos[0].RuleStationID = model.RuleStation;
barcodeInfos[0].RuleStatus = !model.BarcodeNG ? "P" : "F"; //F 不良
barcodeInfos[0].WipID = model.WipID;
barcodeInfos[0].StatusID = 1;
barcodeInfos[0].StatusID = NextStopCloseStation.Success ? -1 : 1;
barcodeInfos[0].UpdateDate = DateTime.Now;
await _pcsApi.PutBarcodeInfoes(JsonConvert.SerializeObject(barcodeInfos[0]));
}
@ -2259,7 +2260,7 @@ namespace AMESCoreStudio.Web.Controllers
RuleStationID = model.RuleStation,
RuleStatus = !model.BarcodeNG ? "P" : "F",//F 不良
WipID = model.WipID,
StatusID = 1,
StatusID = NextStopCloseStation.Success ? -1 : 1,
CreateUserID = 1
};
var resutPost = await _pcsApi.PostBarcodeInfoes(JsonConvert.SerializeObject(barcodeInfo));
@ -2339,6 +2340,14 @@ namespace AMESCoreStudio.Web.Controllers
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 });
}

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

@ -599,7 +599,7 @@ namespace AMESCoreStudio.Web
/// <param name="flowrule">流程</param>
/// <returns></returns>
[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>
/// 內部序號查詢工單號碼
@ -637,6 +637,36 @@ namespace AMESCoreStudio.Web
/// <returns>Success:true or false</returns>
[WebApiClient.Attributes.HttpGet("api/BarCodeCheck/BarCodeFlow")]
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

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

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

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

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

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

@ -65,37 +65,29 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return wipBarcodeOther;
}
///// <summary>
/////
///// </summary>
///// <param name="UnitNO">生產單位</param>
///// <param name="WipNO">工單號碼</param>
///// <returns></returns>
// // GET: api/FlowRules/Unit/S
// [HttpGet("Unit/{UnitNO}/{WipNO}")]
// public async Task<ActionResult<IEnumerable<WipBarcodeOther>>> GetWipBarcodeOtherByUnit(string UnitNO , string WipNO)
// {
// IQueryable<WipInfo> q1 = _context.WipInfos.Where(w => w.UnitNO.Contains(UnitNO) && w.WipNO.Contains(WipNO));
// IQueryable<WipBarcodeOther> q2 = _context.WipBarcodeOther;
// //if (no != null)
// //{
// // if (no != "")
// // {
// // q = q.Where(p => p.UnitNo.Equals(no));
// // }
// //}
// //q.OrderBy(p => p.FlowRuleName);
// var flowRule = await q2.ToListAsync();
// //if (flowRule == null)
// //{
// // return NotFound();
// //}
// return flowRule;
// }
/// <summary>
/// 查詢客戶區間
/// </summary>
/// <param name="wipNO">工單號碼</param>
/// <param name="No">序號</param>
/// <returns></returns>
[HttpGet("ByNo")]
public async Task<ActionResult<IEnumerable<WipBarcodeOther>>> CheckWipBarcodeOtherByNo(string wipNO , string No)
{
var wipBarcodeOther = _context.WipBarcodeOthers
.FromSqlInterpolated($" SELECT * FROM WIP_BARCODE_OTHER WHERE {No} BETWEEN START_NO AND END_NO ")
.AsNoTracking().ToList();
wipBarcodeOther = wipBarcodeOther.Where(W => W.WipNO == wipNO).ToList();
//if (wipBarcodeOther == null)
//{
// return NotFound();
//}
return wipBarcodeOther;
}
[HttpPost]
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)
//{
//ResultModel<dynamic> result = new ResultModel<dynamic>();
//var result = GetWipInfoSelectParameter(value, page, limit);
//// 判斷是否已經有過站紀錄
//BarcodeStationController barcodeStation = new BarcodeStationController(_context);
//var WipArray = result.Result.Data.GroupBy(o => o.WipNO)
// .Select(s => new
// {
// s.Key,
// WipID = result.Result.Data.Where(w => w.WipNO == s.Key)
// .Select(s1 => (decimal)s1.WipID).ToList()
// }).ToList();
//foreach (var item in WipArray)
//{
// var q1 = barcodeStation.GetBarcodeStationByWipIDList(item.WipID);
// if (q1 == null)
// {
// result.Result.Data = result.Result.Data.Where(w => w.WipNO == item.Key)
// .Select(s => new { s , BarcodeStation = "N"}).ToList();
// }
// else
// {
// result.Result.Data = result.Result.Data.Where(w => w.WipNO == item.Key)
// .Select(s => { s.BarcodeStation = "Y"; return s; }).ToList();
// }
//}
//if (result.Result.Data == null)
//{
// result.Result.Msg = "查無資料";
// result.Result.Success = false;
// return await result;
//}
//result.Result.Success = true;
//result.Result.Msg = "OK";
//return;
//ResultModel<dynamic> result = new ResultModel<dynamic>();
//var result = GetWipInfoSelectParameter(value, page, limit);
//// 判斷是否已經有過站紀錄
//BarcodeStationController barcodeStation = new BarcodeStationController(_context);
//var WipArray = result.Result.Data.GroupBy(o => o.WipNO)
// .Select(s => new
// {
// s.Key,
// WipID = result.Result.Data.Where(w => w.WipNO == s.Key)
// .Select(s1 => (decimal)s1.WipID).ToList()
// }).ToList();
//foreach (var item in WipArray)
//{
// var q1 = barcodeStation.GetBarcodeStationByWipIDList(item.WipID);
// if (q1 == null)
// {
// result.Result.Data = result.Result.Data.Where(w => w.WipNO == item.Key)
// .Select(s => new { s , BarcodeStation = "N"}).ToList();
// }
// else
// {
// result.Result.Data = result.Result.Data.Where(w => w.WipNO == item.Key)
// .Select(s => { s.BarcodeStation = "Y"; return s; }).ToList();
// }
//}
//if (result.Result.Data == null)
//{
// result.Result.Msg = "查無資料";
// result.Result.Success = false;
// return await result;
//}
//result.Result.Success = true;
//result.Result.Msg = "OK";
//return;
//}
/// <summary>
@ -270,12 +270,16 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return BadRequest();
}
WipInfo wipinfo = new WipInfo();
wipinfo.WipID = id;
wipinfo.StatusNO = statusno;
wipinfo.UpdateDate = DateTime.Now;
WipInfo wipinfo = new WipInfo
{
WipID = id,
StatusNO = statusno,
UpdateDate = DateTime.Now
};
_context.WipInfos.Attach(wipinfo);
// 指定更新某個欄位
_context.Entry(wipinfo).Property(p => p.StatusNO).IsModified = true;
_context.Entry(wipinfo).Property(p => p.UpdateDate).IsModified = true;
try
{
await _context.SaveChangesAsync();

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

@ -450,6 +450,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
resultModel.Msg = "工單號碼【" + WipNo + "】,尚未設定此流程站";
return resultModel;
}
if (!WipNoItem.Where(w => w.LineID == Line).Any())
{
resultModel.Msg = "工單號碼【" + WipNo + "】,尚未設定此線別";
return resultModel;
}
if (WipNoItem.Where(w => w.StatusNO == "Y").Any())
{
resultModel.Msg = "工單號碼【" + WipNo + "】,該工單已經投入完工,請切換工單";
@ -474,15 +481,19 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <param name="barcode">內部條碼</param>
/// <param name="unitNo">生產單位ID</param>
/// <param name="inputKP">過站刷入組件序號</param>
/// <param name="inputNo">過站刷入組件數量</param>
/// <returns></returns>
[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 };
#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 + "】";
@ -513,70 +524,71 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#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;
}
//if (BarCodeID == 0)
//{
// resultModel.Msg = "內部序號【" + barcode + "】,在條碼資料檔找不到";
// return resultModel;
//}
#endregion
#region 判斷組件序號是否有紀錄
BarcodeItemsController barcodeItemsController = new BarcodeItemsController(_context);
var BarCodeItems = (await barcodeItemsController.GetBarcodeItems(BarCodeID)).Value.ToList();
if (BarCodeItems.Count == 0)
{
resultModel.Msg = "內部序號【" + barcode + "】,在條碼組件件資料檔找不到";
return resultModel;
}
BarCodeItems = BarCodeItems.Where(w => w.WipID == q.Value.FirstOrDefault().WipID).ToList();
#endregion
#region 判斷組件數量是否正確
if (MaterialKps.Count != BarCodeItems.Count)
// 計算過站時刷的組件數量與已經存BarCodeItems
var KPQty = inputKP.Count + BarCodeItems.Count;
#region 刷入組件數量超過
if (KPQty > MaterialKps.Count)
{
resultModel.Msg = "組件對應數量【" + MaterialKps.Count + "】不等於條碼組件數量【" + BarCodeItems.Count + "】";
resultModel.Msg = "組件數量已刷超過設定數量,請確認";
return resultModel;
}
#endregion
#region 比對組件資料
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 比對序號長度是否正確
if (string.IsNullOrWhiteSpace(MaterialKps[i].Length.ToString()))
if (string.IsNullOrWhiteSpace(MaterialKps[x+i].Length.ToString()))
{
if (MaterialKps[i].Length != BarCodeItems[i].PartNo.Length)
CheckMsg += "組件序號【" + BarCodeItems[i].PartNo + "】 與組件名稱【" + MaterialKps[i].KpName + "】長度不符合</br>";
if (MaterialKps[x + i].Length != inputKP[i].Length)
CheckMsg += "組件序號【" + inputKP + "】 與組件名稱【" + MaterialKps[x + i].KpName + "】長度不符合</br>";
}
#endregion
#region 前置碼正確
if (!string.IsNullOrWhiteSpace(MaterialKps[i].Title))
if (!string.IsNullOrWhiteSpace(MaterialKps[x + i].Title))
{
if (!BarCodeItems[i].KpItemNo.ToUpper().StartsWith(MaterialKps[i].Title.ToUpper()))
CheckMsg += "組件序號【" + BarCodeItems[i].PartNo + "】 與組件名稱【" + MaterialKps[i].Title + "】前置碼不符合</br>";
if (!inputKP[i].ToUpper().StartsWith(MaterialKps[x + i].Title.ToUpper()))
CheckMsg += "組件序號【" + inputKP + "】 與組件名稱【" + MaterialKps[x + i].Title + "】前置碼不符合</br>";
}
#endregion
#region 判斷組件序號是否在製狀態
if (MaterialKps[i].KpName.ToUpper() == "BOARD")
if (MaterialKps[x + i].KpName.ToUpper() == "BOARD")
{
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())
{
CheckMsg += "組件序號【" + BarCodeItems[i].PartNo + "】 目前是在製狀態</br>";
CheckMsg += "組件序號【" + inputKP + "】 目前是在製狀態</br>";
}
}
#endregion
#region 判斷MAC區間
if (MaterialKps[i].KpName.ToUpper() == "MAC")
if (MaterialKps[x + i].KpName.ToUpper() == "MAC")
{
WipMACController wipMACController = new WipMACController(_context);
var wipMAC = await wipMACController.GetWipMAC(wipno);
@ -587,19 +599,19 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
else
{
// 判斷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
{
// 判斷是否符合區間
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)
&& Convert.ToInt32(BarCodeItems[i].PartNo.Substring(7, 6), 16) <= Convert.ToInt32(wipMAC.Value.EndNO, 16)))
if (!(Convert.ToInt32(wipMAC.Value.StartNO, 16) <= Convert.ToInt32(inputKP[i].Substring(7, 6), 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 判斷出貨序號
// 當KP_NAME是 EXT_NO 判斷組件-出貨序號 是否有在區間
if (MaterialKps[i].KpName.ToUpper() == "EXT_NO")
if (MaterialKps[x + i].KpName.ToUpper() == "EXT_NO")
{
WipBarcodeOtherController wipBarcodeOtherController = new WipBarcodeOtherController(_context);
var WipBarCodeOther = await wipBarcodeOtherController.GetWipBarcodeOtherByWipNo(wipno);
if (WipBarCodeOther.Value != null)
var WipBarCodeOther = await wipBarcodeOtherController.CheckWipBarcodeOtherByNo(wipno, inputKP[i]);
if (WipBarCodeOther.Value.Count() == 0)
{
CheckMsg += "組件序號【" + inputKP + "】 與工單設定出貨序號區間不符合 </br>";
}
else
{
resultModel.Msg = "EXT_NO";
}
}
#endregion
}
#endregion
if (!string.IsNullOrWhiteSpace(CheckMsg))
{
@ -633,6 +648,92 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
resultModel.Success = true;
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>
/// 內部序號找BarCodeID
/// </summary>
@ -706,7 +807,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
var x = new
{
index,
item.RuleStationID
item.StationID
};
dy.Add(x);
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;
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 dy.Where(w => w.index == (NowIndex - 1)).Select(s => s.RuleStationID).FirstOrDefault();
int NextStopStationID = 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();
}
/// <summary>
/// 取得下一個作業站RuleStationID
/// 確認下一站為完工
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <param name="unitNo">生產單位ID</param>
/// <param name="stationID">作業站ID</param>
/// <returns>0:沒有下一站</returns>
private async Task<int> GetBarCodeNextStopRuleStationID(string wipno, int stationID)
/// <returns>0:完工 -1:不是</returns>
[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);
var q = wipInfosController.GetWipInfoByWipNo(wipno);
if (q.Result.Value.Count() == 0)
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())
if (!q.Result.Value.Where(w => w.UnitNO == unitNo).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");
return resultModel;
}
// 抓各生產單位的流程ID
foreach (string str in Unit)
{
int WipFlowRule = q1.Where(w => w.UnitNO == str).Select(s => s.FlowRuleID).FirstOrDefault();
FlowRuleID.Add(WipFlowRule);
}
var q1 = q.Result.Value.Where(w => w.UnitNO == unitNo).FirstOrDefault();
int FlowRuleID = q1.FlowRuleID;
// 將工單-生產單位 流程ID取rulestation的作業站排順序
RuleStationsController ruleStationsController = new RuleStationsController(_context);
List<dynamic> dy = new List<dynamic>();
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;
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.Where(w => w.StationType == "M").OrderBy(o => o.Sequence))
var x = new
{
var x = new
{
index,
item.RuleStationID
};
dy.Add(x);
index++;
}
index,
item.StationID
};
dy.Add(x);
index++;
}
}
if (dy.Where(w => w.RuleStationID == stationID).Select(s => s.index).FirstOrDefault() == null)
return 0;
// 在RuleStation 找不到該作業站
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)
return 0;
// 判斷下一站沒有資料Error
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>
[Column("LOCK_DATE")]
[DataMember]
public DateTime LockDate { get; set; }
public DateTime LockDate { get; set; } = DateTime.Now;
/// <summary>
/// 解鎖者

Loading…
Cancel
Save