Browse Source

1. 撰寫

PTD
Ray 3 years ago
parent
commit
c7e130222f
  1. 107
      AMESCoreStudio.WebApi/Code/BarcodeContext.cs
  2. 193
      AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs

107
AMESCoreStudio.WebApi/Code/BarcodeContext.cs

@ -1,107 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.WebApi.Controllers.AMES;
using AMESCoreStudio.WebApi.Controllers.BAS;
namespace AMESCoreStudio.WebApi
{
/// <summary>
///
/// </summary>
public class BarcodeContext
{
private readonly AMESContext _context;
public BarcodeContext(AMESContext context)
{
_context = context;
}
/// <summary>
/// 確認工單狀態
/// </summary>
/// <param name="WipNo">工單號碼</param>
/// <param name="UnitNo">生產單位</param>
/// <param name="FlowRuleID">流程</param>
/// <param name="Station">站別</param>
/// <param name="Line">線別</param>
/// <returns></returns>
public async Task<string> CheckWipNoSationAsync(string WipNo, string UnitNo, int FlowRuleID, int Station, int Line)
{
WipInfosController wipInfosController = new WipInfosController(_context);
var q = await wipInfosController.GetWipInfoByWipNo(WipNo);
if (q.Value.Count() == 0)
return "找不到工單號碼:" + WipNo;
var WipNoItem = q.Value.Where(w => w.WipNO == WipNo && w.UnitNO == UnitNo).ToList();
if (WipNoItem.Count == 0)
return "工單號碼:" + WipNo + ",尚未設定此生產單位";
if (!WipNoItem.Where(w => w.FlowRuleID == FlowRuleID).Any())
return "工單號碼:" + WipNo + ",尚未設定此流程站";
if (WipNoItem.Where(w => w.StatusNO == "Y").Any())
return "工單號碼:" + WipNo + ",該工單已經投入完工,請切換工單";
WipLockController wipLockController = new WipLockController(_context);
var q1 = await wipLockController.GetWipLockByWipNO(WipNo);
if (q1.Data.Where(w => w.LockStatus == "0" && w.StationID == Station).Any())
return "工單號碼:" + WipNo + ",工單在當前站別被鎖定,不可過站";
int WipID = WipNoItem.FirstOrDefault().WipID;
LineInfoesController lineInfoesController = new LineInfoesController(_context);
var q2 = await lineInfoesController.GetLineInfoByWipID(WipID);
if (!q2.Value.Where(w => w.LineID == Line).Any())
return "工單號碼:" + WipNo + ",工單尚未開線,不可過站";
return "";
}
/// <summary>
/// 內部序號是否被鎖定
/// </summary>
/// <param name="WipNo"></param>
/// <param name="BarCode"></param>
/// <returns></returns>
public async Task<string> CheckBarCodeStationAsync(string WipNo, string BarCode)
{
BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context);
// 序號與工單相同視為序號
if (BarCode.IndexOf(WipNo) != -1)
{
// 判斷BarCodeInfo 是否有條碼序號資料
var q = await barcodeInfoesController.GetBarcodeInfoesByNo(BarCode);
if (q.Value.Count() != 0)
{
// 判斷條碼序號是否有被鎖定
BarcodeLockController barcodeLockController = new BarcodeLockController(_context);
var q1 = await barcodeLockController.GetBarcodeLockByBarCodeID(q.Value.FirstOrDefault().BarcodeID);
if (q1.Value.Where(w => w.LockStatus == 0).Any())
{
return "條碼編號:" + BarCode + ",已被鎖定,無法過站";
}
}
}
return "";
}
/// <summary>
/// 判斷內部序號對應工單號買
/// </summary>
/// <param name="BarCode">內部序號</param>
/// <returns></returns>
public async Task<string> CheckBarCodeFromWip(string BarCode)
{
//if (BarCode.Length <= 4)
return "NG, 找不到相關工單號碼";
}
}
}

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

@ -8,6 +8,7 @@ using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi; using AMESCoreStudio.WebApi;
using AMESCoreStudio.WebApi.Models.AMES; using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.CommonTools.Result; using AMESCoreStudio.CommonTools.Result;
using AMESCoreStudio.WebApi.Controllers.BAS;
namespace AMESCoreStudio.WebApi.Controllers.AMES namespace AMESCoreStudio.WebApi.Controllers.AMES
{ {
@ -29,25 +30,6 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
_context = context; _context = context;
} }
/// <summary>
///
/// </summary>
/// <returns></returns>
// GET: api/NGReasons
[HttpGet]
public string GetBarCodeCheck(string wipno = null, string unitno = null, string stations = null, string inputbarcode = null)
{
IQueryable<NGReason> q = _context.NGReasons;
q = q.OrderBy(p => p.NGClassNo + p.NGReasonNo);
return "";
}
/// <summary> /// <summary>
/// 判斷工單狀態 /// 判斷工單狀態
/// </summary> /// </summary>
@ -60,146 +42,141 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
[HttpGet("BarCodeDataCheck")] [HttpGet("BarCodeDataCheck")]
public IActionResult GetBarCodeDataCheck(string wipno, string unitno, int station, int line, int flowrule) public IActionResult GetBarCodeDataCheck(string wipno, string unitno, int station, int line, int flowrule)
{ {
BarcodeContext barcodeContext = new BarcodeContext(_context); var result = CheckWipNoSationAsync(WipNo: wipno, UnitNo: unitno, FlowRuleID: flowrule, Station: station, Line: line);
var result = barcodeContext.CheckWipNoSationAsync(WipNo: wipno, UnitNo: unitno, FlowRuleID: flowrule, Station: station, Line: line);
return Ok(result.Result); return Ok(result.Result);
} }
/// <summary> /// <summary>
/// /// 判斷內部序號
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="barcode"></param>
/// <param name="wipno"></param>
/// <returns></returns> /// <returns></returns>
// GET: api/NGReasons/5 [HttpGet("BarCodeFromWip")]
[HttpGet("{id}")] public IActionResult CheckBarCodeFromWip(string barcode, string wipno)
public async Task<ActionResult<IEnumerable<NGReason>>> GetNGReason(string id)
{ {
IQueryable<NGReason> q = _context.NGReasons; ResultModel<string> resultModel = new ResultModel<string> { Success = false };
q = q.Where(p => p.NGReasonNo.Equals(id)); if (barcode.Length <= 4)
{
var ngReason = await q.ToListAsync(); resultModel.Msg = "內部序號小於4個字數";
return Ok(resultModel);
}
if (ngReason == null) WipInfosController wipInfosController = new WipInfosController(_context);
IQueryable<WipBarcode> q = _context.WipBarcodes.Where(w => w.StartNO.Contains(barcode.Substring(0, (barcode.Length - 4))));
if (!q.Any())
{ {
return NotFound(); resultModel.Msg = "找不到內部序號:" + barcode + " 對應相關工單號碼";
return Ok(resultModel);
} }
return ngReason;
return Ok(resultModel);
} }
/// <summary> /// <summary>
/// /// 確認工單狀態
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="WipNo">工單號碼</param>
/// <param name="nGReason"></param> /// <param name="UnitNo">生產單位</param>
/// <param name="FlowRuleID">流程</param>
/// <param name="Station">站別</param>
/// <param name="Line">線別</param>
/// <returns></returns> /// <returns></returns>
// PUT: api/NGReasons/5 private async Task<IResultModel> CheckWipNoSationAsync(string WipNo, string UnitNo, int FlowRuleID, int Station, int Line)
// To protect from overposting attacks, enable the specific properties you want to bind to, for
// more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
[HttpPut("{id}")]
public async Task<ResultModel<NGReason>> PutNGReason(string id, [FromBody] NGReason nGReason)
{ {
ResultModel<NGReason> result = new ResultModel<NGReason>(); ResultModel<string> resultModel = new ResultModel<string>();
if (id != nGReason.NGReasonNo) resultModel.Success = false;
WipInfosController wipInfosController = new WipInfosController(_context);
var q = await wipInfosController.GetWipInfoByWipNo(WipNo);
if (q.Value.Count() == 0)
{ {
result.Success = false; resultModel.Msg = "找不到工單號碼:" + WipNo;
result.Msg = "原因代碼錯誤"; return resultModel;
return result;
} }
_context.Entry(nGReason).State = EntityState.Modified; var WipNoItem = q.Value.Where(w => w.WipNO == WipNo && w.UnitNO == UnitNo).ToList();
if (WipNoItem.Count == 0)
try
{ {
await _context.SaveChangesAsync(); resultModel.Msg = "工單號碼:" + WipNo + ",尚未設定此生產單位";
return resultModel;
} }
catch (DbUpdateConcurrencyException)
if (!WipNoItem.Where(w => w.FlowRuleID == FlowRuleID).Any())
{ {
if (!NGReasonExists(id)) resultModel.Msg = "工單號碼:" + WipNo + ",尚未設定此流程站";
return resultModel;
}
if (WipNoItem.Where(w => w.StatusNO == "Y").Any())
{ {
result.Success = false; resultModel.Msg = "工單號碼:" + WipNo + ",該工單已經投入完工,請切換工單";
result.Msg = "原因代碼不存在"; return resultModel;
return result;
} }
else
WipLockController wipLockController = new WipLockController(_context);
var q1 = await wipLockController.GetWipLockByWipNO(WipNo);
if (q1.Data.Where(w => w.LockStatus == "0" && w.StationID == Station).Any())
{ {
throw; resultModel.Msg = "工單號碼:" + WipNo + ",工單在當前站別被鎖定,不可過站";
return resultModel;
} }
int WipID = WipNoItem.FirstOrDefault().WipID;
LineInfoesController lineInfoesController = new LineInfoesController(_context);
var q2 = await lineInfoesController.GetLineInfoByWipID(WipID);
if (!q2.Value.Where(w => w.LineID == Line).Any())
{
resultModel.Msg = "工單號碼:" + WipNo + ",工單尚未開線,不可過站";
return resultModel;
} }
result.Success = true; resultModel.Success = true;
result.Msg = "OK"; return resultModel;
return result;
} }
/// <summary> /// <summary>
/// /// 內部序號是否被鎖定
/// </summary> /// </summary>
/// <param name="nGReason"></param> /// <param name="WipNo">工單號碼</param>
/// <param name="BarCode">內部序號</param>
/// <returns></returns> /// <returns></returns>
// POST: api/NGReasons private async Task<string> CheckBarCodeStationAsync(string WipNo, string BarCode)
// To protect from overposting attacks, enable the specific properties you want to bind to, for
// more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
[HttpPost]
public async Task<ResultModel<NGReason>> PostNGReason([FromBody] NGReason nGReason)
{ {
ResultModel<NGReason> result = new ResultModel<NGReason>(); BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context);
_context.NGReasons.Add(nGReason); // 序號與工單相同視為序號
try if (BarCode.IndexOf(WipNo) != -1)
{ {
await _context.SaveChangesAsync(); // 判斷BarCodeInfo 是否有條碼序號資料
} var q = await barcodeInfoesController.GetBarcodeInfoesByNo(BarCode);
catch (DbUpdateException) if (q.Value.Count() != 0)
{ {
if (NGReasonExists(nGReason.NGReasonNo)) // 判斷條碼序號是否有被鎖定
BarcodeLockController barcodeLockController = new BarcodeLockController(_context);
var q1 = await barcodeLockController.GetBarcodeLockByBarCodeID(q.Value.FirstOrDefault().BarcodeID);
if (q1.Value.Where(w => w.LockStatus == 0).Any())
{ {
result.Success = false; return "條碼編號:" + BarCode + ",已被鎖定,無法過站";
result.Msg = "原因代碼重複";
return result;
} }
else
{
throw;
} }
} }
return "";
result.Success = true;
result.Msg = "OK";
return result;
} }
/// <summary> /// <summary>
/// /// 判斷內部序號對應工單號買
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="BarCode">內部序號</param>
/// <returns></returns> /// <returns></returns>
// DELETE: api/NGReasons/5 private async Task<string> CheckBarCodeFromWip(string BarCode)
[HttpDelete("{id}")]
public async Task<ResultModel<NGReason>> DeleteNGReason(string id)
{
ResultModel<NGReason> result = new ResultModel<NGReason>();
var nGReason = await _context.NGReasons.FindAsync(id);
if (nGReason == null)
{ {
result.Success = false; //if (BarCode.Length <= 4)
result.Msg = "原因代碼不存在"; return "NG, 找不到相關工單號碼";
return result;
}
_context.NGReasons.Remove(nGReason);
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
return result;
}
private bool NGReasonExists(string id)
{
return _context.NGReasons.Any(e => e.NGReasonNo == id);
} }
} }
} }

Loading…
Cancel
Save