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 QcItemController : ControllerBase { private readonly AMESContext _context; public QcItemController(AMESContext context) { _context = context; } // GET: api/QcItem [HttpGet] public async Task<ActionResult<IEnumerable<QcItem>>> GetQcItems() { return await _context.QcItems.ToListAsync(); } // GET: api/QcItem/5 [HttpGet("{id}")] public async Task<ActionResult<QcItem>> GetQcItem(int id) { var qcItem = await _context.QcItems.FindAsync(id); if (qcItem == null) { return NotFound(); } return qcItem; } /// <summary> /// 查詢檢驗項目維護 by Table /// </summary> /// <param name="groupID">檢驗類別ID</param> /// <param name="page">頁數</param> /// <param name="limit">筆數</param> /// <param name="itemNo">料號</param> /// <param name="wipNo">工單號碼</param> /// <returns></returns> [HttpGet("QcItemQuery")] public async Task<ResultModel<QcItemDto>> GetQcItemQuery(int groupID = 0, int page = 0, int limit = 10, string itemNo = null, string wipNo = null) { IQueryable<QcItem> q = _context.QcItems; ResultModel<QcItemDto> result = new ResultModel<QcItemDto>(); if (groupID != 0) q = q.Where(w => w.GroupID == groupID); // 紀錄筆數 result.DataTotal = q.Count(); // Table 頁數 if (page > 0) { q = q.Skip((page - 1) * limit).Take(limit); } //var aa = System.Enum.IsDefined(typeof(EnumFQC.EnumQCItem_Type), "A") ? EnumFQC.GetDisplayName((EnumFQC.EnumQCItem_Type)System.Enum.Parse(typeof(EnumFQC.EnumQCItem_Type), "A")) : ""; result.Data = await q.Select(s => new QcItemDto { ItemID = s.ItemID, GroupID = s.GroupID, ItemNameCN = s.ItemNameCN, ItemNameEN = s.ItemNameEN, CreateUserID = s.CreateUserID, CreateDate = s.CreateDate, UpdateUserID = s.UpdateUserID, UpdateDate = s.UpdateDate, GroupNameCN = s.GetQcGroup.GroupNameCN ?? "", GroupNameEN = s.GetQcGroup.GroupNameCN ?? "", ItemType = s.Type }).ToListAsync(); // 先判斷工單是否有資料 var wipFqcItem = await _context.WipFqcItems.Where(w => w.WipNo == wipNo).ToListAsync(); if (wipFqcItem.Count != 0) { foreach (var item in result.Data) { if (wipFqcItem.Where(w => w.QcItemID == item.ItemID).Any()) item.check = true; } } else { // 有輸入料號跟QCITEM 比對有資料打勾 var itemID = _context.MaterialItems.Where(w => w.ItemNo == itemNo).FirstOrDefault(); if (itemID != null) { var marterialFQCItems = _context.MaterialFqcItems.Where(w => w.ItemID == itemID.ItemID); foreach (var item in result.Data) { if (marterialFQCItems.Where(w => w.QcItemID == item.ItemID).Any()) item.check = true; } } } result.Data.Select(s => s.ItemTypeName = System.Enum.IsDefined(typeof(EnumFQC.EnumQCItem_Type), s.ItemType ?? "") ? EnumFQC.GetDisplayName((EnumFQC.EnumQCItem_Type)System.Enum.Parse(typeof(EnumFQC.EnumQCItem_Type), s.ItemType)) : "") .ToList(); return result; } /// <summary> /// 更新檢驗項目維護 /// </summary> /// <param name="qcItem"></param> /// <returns></returns> [HttpPut] public async Task<ResultModel<QcItem>> PutQcItem(QcItem qcItem) { ResultModel<QcItem> result = new ResultModel<QcItem>(); _context.Entry(qcItem).State = EntityState.Modified; qcItem.UpdateDate = DateTime.Now; qcItem.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="qcItem"></param> /// <returns></returns> [HttpPost] public async Task<ResultModel<QcItem>> PostQcItem(QcItem qcItem) { ResultModel<QcItem> result = new ResultModel<QcItem>(); Helper helper = new Helper(_context); qcItem.ItemID = helper.GetIDKey("ITEM_ID").Result; _context.QcItems.Add(qcItem); 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">ITEM_ID</param> /// <returns></returns> [HttpDelete("{id}")] public async Task<ResultModel<string>> DeleteQcItem(int id) { ResultModel<string> result = new ResultModel<string>(); var qcItem = await _context.QcItems.FindAsync(id); try { if (qcItem == null) { result.Success = false; result.Msg = "找不到要刪除資料"; } else { _context.QcItems.Remove(qcItem); await _context.SaveChangesAsync(); result.Success = true; result.Msg = "OK"; } } catch (Exception ex) { result.Success = false; result.Msg = ex.InnerException.Message; } return result; } private bool QcItemExists(int id) { return _context.QcItems.Any(e => e.ItemID == id); } } }