using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using AMESCoreStudio.WebApi; using AMESCoreStudio.WebApi.Models.AMES; using AMESCoreStudio.WebApi.DTO.AMES; using AMESCoreStudio.CommonTools.Result; using AMESCoreStudio.WebApi.Enum; namespace AMESCoreStudio.WebApi.Controllers.AMES { /// <summary> /// 抽驗標準資料檔 /// </summary> [Route("api/[controller]")] [ApiController] public class QcCriterionController : ControllerBase { private readonly AMESContext _context; public QcCriterionController(AMESContext context) { _context = context; } // GET: api/QcCriterion [HttpGet] public async Task<ActionResult<IEnumerable<QcCriterion>>> GetQcCriteria() { return await _context.QcCriteria.ToListAsync(); } // GET: api/QcCriterion/5 [HttpGet("{id}")] public async Task<ActionResult<QcCriterion>> GetQcCriterion(int id) { var qcCriterion = await _context.QcCriteria.FindAsync(id); if (qcCriterion == null) { return NotFound(); } return qcCriterion; } /// <summary> /// ByQuotID /// </summary> /// <param name="id">QuotID</param> /// <returns></returns> [HttpGet("ByQuotID/{id}")] public async Task<ActionResult<IEnumerable<QcCriterion>>> GetQcCriterionByQuotID(int id) { var qcCriterion = await _context.QcCriteria.Where(w => w.QuotID == id).ToListAsync(); return qcCriterion; } /// <summary> /// 根據抽驗係數與數量 回傳CritID /// </summary> /// <param name="id">QuotID</param> /// <param name="Qty">抽驗數量</param> /// <returns></returns> [HttpGet("GetCritID/{id}/{Qty}")] public async Task<ActionResult<int>> GetQcCriterion_CritID(int id, int Qty) { var qcCriterion = await _context.QcCriteria.Where(w => w.QuotID == id).ToListAsync(); qcCriterion = qcCriterion.Where(w => w.QcStart <= Qty && Qty <= w.QcEnd).ToList(); if (qcCriterion.FirstOrDefault() != null) return qcCriterion.FirstOrDefault().CritID; return 0; } /// <summary> /// 查詢抽驗標準維護 /// </summary> /// <param name="quotID">抽驗係數ID</param> /// <param name="AQLType">AQL類型</param> /// <param name="QCQty">批量</param> /// <param name="page">頁數</param> /// <param name="limit"></param> /// <returns></returns> [HttpGet("QcCriterionQuery")] public async Task<ResultModel<QcCriterionDto>> GetQcCriterionQuery(int quotID = 0, string AQLType = "", int QCQty = 0, int page = 0, int limit = 10) { ResultModel<QcCriterionDto> result = new ResultModel<QcCriterionDto>(); IQueryable<QcCriterionDto> q = from q1 in _context.QcQuots join q2 in _context.QcCriteria on q1.QuotID equals q2.QuotID select new QcCriterionDto { QuotID = q1.QuotID, QuotDescription = q1.QuotDescription, AqlType = q1.AqlType, Aql = q1.Aql, CritID = q2.CritID, CritNo = q2.CritNo, AcQty = q2.AcQty, ReQty = q2.ReQty, QcQty = q2.QcQty, QcStart = q2.QcStart, QcEnd = q2.QcEnd, IntervalNumber = q2.QcStart + " ~ " + q2.QcEnd, QuotName = q2.GetQcQuot.QuotName, CreateDate = q2.CreateDate, UpdateUserID = q2.UpdateUserID, UpdateDate = q2.UpdateDate }; if (quotID != 0) q = q.Where(w => w.QuotID == quotID); if (!string.IsNullOrWhiteSpace(AQLType)) q = q.Where(w => w.AqlType == AQLType); if (QCQty != 0) q = q.Where(w => w.QcStart <= QCQty && w.QcEnd >= QCQty); // 紀錄筆數 result.DataTotal = q.Count(); // Table 頁數 if (page > 0) { q = q.Skip((page - 1) * limit).Take(limit); } result.Data = await q.ToListAsync(); result.Data.Select(s => s.AqlType = EnumFQC.GetDisplayName((EnumFQC.EnumAQL_Type)System.Enum.Parse(typeof(EnumFQC.EnumAQL_Type), s.AqlType))) .ToList(); return result; } /// <summary> /// 更新抽驗標準 /// </summary> /// <param name="qcCriterion"></param> /// <returns></returns> [HttpPut] public async Task<ResultModel<QcCriterion>> PutQcCriterion(QcCriterion qcCriterion) { ResultModel<QcCriterion> result = new ResultModel<QcCriterion>(); _context.Entry(qcCriterion).State = EntityState.Modified; qcCriterion.UpdateDate = DateTime.Now; qcCriterion.UpdateUserID = 0; try { await _context.SaveChangesAsync(); result.Success = true; result.Msg = "OK"; } catch (Exception ex) { result.Success = false; result.Msg = ex.InnerException.Message; } return result; } /// <summary> /// 新增抽驗標準 /// </summary> /// <param name="qcCriterion"></param> /// <returns></returns> [HttpPost] public async Task<ResultModel<QcCriterion>> PostQcCriterion(QcCriterion qcCriterion) { ResultModel<QcCriterion> result = new ResultModel<QcCriterion>(); Helper helper = new Helper(_context); qcCriterion.CritID = helper.GetIDKey("CRIT_ID").Result; _context.QcCriteria.Add(qcCriterion); try { await _context.SaveChangesAsync(); result.Success = true; result.Msg = "OK"; } catch (Exception ex) { result.Success = false; result.Msg = ex.InnerException.Message; } return result; } /// <summary> /// 刪除抽驗標準 /// </summary> /// <param name="id">CRIT_ID</param> /// <returns></returns> [HttpDelete("{id}")] public async Task<ResultModel<string>> DeleteQcCriterion(int id) { ResultModel<string> result = new ResultModel<string>(); var qcCriterion = await _context.QcCriteria.FindAsync(id); try { if (qcCriterion == null) { result.Success = false; result.Msg = "找不到要刪除資料"; } else { _context.QcCriteria.Remove(qcCriterion); await _context.SaveChangesAsync(); result.Success = true; result.Msg = "OK"; } } catch (Exception ex) { result.Success = false; result.Msg = ex.InnerException.Message; } return result; } private bool QcCriterionExists(int id) { return _context.QcCriteria.Any(e => e.CritID == id); } } }