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.CommonTools.Result; using AMESCoreStudio.WebApi.DTO.AMES; namespace AMESCoreStudio.WebApi.Controllers.AMES { /// <summary> /// 檢驗單明細資料檔 /// </summary> [Route("api/[controller]")] [ApiController] public class FqcInhouseDetailController : ControllerBase { private readonly AMESContext _context; public FqcInhouseDetailController(AMESContext context) { _context = context; } // GET: api/FqcInhouseDetail [HttpGet] public async Task<ActionResult<IEnumerable<FqcInhouseDetail>>> GetFqcInhouseDetails() { return await _context.FqcInhouseDetails.ToListAsync(); } /// <summary> /// By 入庫單號 序號 /// </summary> /// <param name="inhouseNo">入庫單號</param> /// <param name="seq">序號</param> /// <returns></returns> [HttpGet("{inhouseNo}/{seq}")] public async Task<ActionResult<IEnumerable<FqcInhouseDetail>>> GetFqcInhouseDetail(string inhouseNo, int seq) { var fqcInhouseDetail = await _context.FqcInhouseDetails .Where(w => w.InhouseNo == inhouseNo && w.SeqID == seq) .ToListAsync(); return fqcInhouseDetail; } /// <summary> /// Query By 箱號 /// </summary> /// <param name="id">箱號</param> /// <returns></returns> [HttpGet("BySerialNo/{id}")] public async Task<ActionResult<IEnumerable<FqcInhouseDetail>>> GetFqcInhouseDetailBySerialNo(string id) { var fqcInhouseDetail = await _context.FqcInhouseDetails.Where(w => w.SerialNo == id).ToListAsync(); return fqcInhouseDetail; } /// <summary> /// FQC細項資料 /// </summary> /// <returns></returns> [HttpGet("FqcInhouseDetailByFQC007V")] public async Task<ResultModel<FqcResultDto>> GetFqcInhouseDetailByFQC007V(string inhouseNo, int seqID, string boxNo) { ResultModel<FqcResultDto> result = new ResultModel<FqcResultDto>(); var fqcResultDto = new List<FqcResultDto>(); var FqcInhouseDetails = await _context.FqcInhouseDetails.Where(w => w.SerialNo == boxNo && w.InhouseNo == inhouseNo && w.SeqID == seqID).FirstOrDefaultAsync(); // 取FQC_ID if (FqcInhouseDetails != null) { var BarcodeInfo = new List<BarcodeInfo>(); if (FqcInhouseDetails.SerialType == "B") BarcodeInfo = await _context.BarcodeInfoes.Where(w => w.BoxNo == FqcInhouseDetails.SerialNo).ToListAsync(); else BarcodeInfo = await _context.BarcodeInfoes.Where(w => w.BarcodeNo == FqcInhouseDetails.SerialNo).ToListAsync(); // 先塞入資料 foreach (var item in BarcodeInfo) { fqcResultDto.Add(new FqcResultDto { BarcodeNo = item.BarcodeNo, ExtraBarcodeNo = item.ExtraBarcodeNo, BoxNo = item.BoxNo, StatusNo = "" }); } var FqcResultMaster = await _context.FqcResultMasters.Where(w => w.InhouseNo == FqcInhouseDetails.InhouseNo && w.SeqID == FqcInhouseDetails.SeqID) .FirstOrDefaultAsync(); // 取抽驗結果 if (FqcResultMaster != null) { var FqcResultDetail = await _context.FqcResultDetails.Where(w => w.FqcID == FqcResultMaster.FqcID).ToListAsync(); var NgReasons = await _context.NGReasons.ToListAsync(); foreach (var item in FqcResultDetail) { foreach (var item2 in fqcResultDto) { if (item.BarcodeNo == item2.BarcodeNo) { item2.StatusNo = item.StatusNo; item2.NgReasonNo = item.NgReasonNo; item2.NgReasonDesc = NgReasons.Where(w => w.NGReasonNo == item.NgReasonNo).FirstOrDefault() == null ? "" : NgReasons.Where(w => w.NGReasonNo == item.NgReasonNo).FirstOrDefault().NGReasonDesc; item2.NgMemo = item.NgMemo; item2.CreateName = await new Helper(_context).GetUserName(item.CreateUserID); continue; } } } } } result.Data = fqcResultDto.ToList(); if (result == null) { result.Msg = "查無資料"; result.Success = false; return result; } result.Success = true; result.Msg = "OK"; return result; } /// <summary> /// FQC細項資料(全部) /// </summary> /// <returns></returns> [HttpGet("FqcInhouseDetailByFQC007All")] public async Task<ResultModel<FqcResultDto>> GetFqcInhouseDetailByFQC007All(string inhouseNo, int seqID) { ResultModel<FqcResultDto> result = new ResultModel<FqcResultDto>(); var fqcResultDto = new List<FqcResultDto>(); var FqcInhouseDetails = await _context.FqcInhouseDetails.Where(w => w.InhouseNo == inhouseNo && w.SeqID == seqID).ToListAsync(); // 取FQC_ID if (FqcInhouseDetails.Count != 0) { foreach (var item in FqcInhouseDetails) { var BarcodeInfo = new List<BarcodeInfo>(); if (item.SerialType == "B") BarcodeInfo = await _context.BarcodeInfoes.Where(w => w.BoxNo == item.SerialNo).ToListAsync(); else BarcodeInfo = await _context.BarcodeInfoes.Where(w => w.BarcodeNo == item.SerialNo).ToListAsync(); // 先塞入資料 foreach (var item1 in BarcodeInfo) { fqcResultDto.Add(new FqcResultDto { BarcodeNo = item1.BarcodeNo, ExtraBarcodeNo = item1.ExtraBarcodeNo, BoxNo = item1.BoxNo, StatusNo = "" }); } var FqcResultMaster = await _context.FqcResultMasters.Where(w => w.InhouseNo == item.InhouseNo && w.SeqID == item.SeqID) .FirstOrDefaultAsync(); var NgReasons = await _context.NGReasons.ToListAsync(); // 取抽驗結果 if (FqcResultMaster != null) { var FqcResultDetail = await _context.FqcResultDetails.Where(w => w.FqcID == FqcResultMaster.FqcID).ToListAsync(); foreach (var item1 in FqcResultDetail) { foreach (var item2 in fqcResultDto) { if (item1.BarcodeNo == item2.BarcodeNo) { item2.StatusNo = item1.StatusNo == "P" ? "PASS" : "NG"; item2.NgReasonNo = item1.NgReasonNo; item2.NgReasonDesc = NgReasons.Where(w => w.NGReasonNo == item1.NgReasonNo).FirstOrDefault() == null ? "" : NgReasons.Where(w => w.NGReasonNo == item1.NgReasonNo).FirstOrDefault().NGReasonDesc; item2.NgMemo = item1.NgMemo; item2.IsSample = "Y"; item2.CreateName = await new Helper(_context).GetUserName(item.CreateUserID); continue; } } } } } } result.Data = fqcResultDto.ToList(); if (result == null) { result.Msg = "查無資料"; result.Success = false; return result; } result.Success = true; result.Msg = "OK"; return result; } /// <summary> /// 新增檢驗單明細資料檔 /// </summary> /// <param name="fqcInhouseDetail"></param> /// <returns></returns> [HttpPut] public async Task<ResultModel<FqcInhouseDetail>> PutFqcInhouseDetail(FqcInhouseDetail fqcInhouseDetail) { ResultModel<FqcInhouseDetail> result = new ResultModel<FqcInhouseDetail>(); _context.Entry(fqcInhouseDetail).State = EntityState.Modified; //設置容器空間某一個模型的某一個欄位 不提交到資料庫 _context.Entry<FqcInhouseDetail>(fqcInhouseDetail).Property("CreateDate").IsModified = false; _context.Entry<FqcInhouseDetail>(fqcInhouseDetail).Property("CreateUserID").IsModified = false; fqcInhouseDetail.UpdateDate = DateTime.Now; fqcInhouseDetail.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="fqcInhouseDetail"></param> /// <returns></returns> [HttpPost] public async Task<ResultModel<FqcInhouseDetail>> PostFqcInhouseDetail(FqcInhouseDetail fqcInhouseDetail) { ResultModel<FqcInhouseDetail> result = new ResultModel<FqcInhouseDetail>(); try { _context.FqcInhouseDetails.Add(fqcInhouseDetail); 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="no">入庫單號</param> /// <param name="seq">順序</param> /// <returns></returns> [HttpDelete("{no}/{seq}")] public async Task<ActionResult<FqcInhouseDetail>> DeleteFqcInhouseDetail(string no, int seq) { ResultModel<FqcInhouseDetail> result = new ResultModel<FqcInhouseDetail>(); var fqcInhouseDetail = await _context.FqcInhouseDetails.Where(p => p.InhouseNo == no && p.SeqID == seq).FirstOrDefaultAsync(); if (fqcInhouseDetail == null) { return fqcInhouseDetail; } _context.FqcInhouseDetails.Remove(fqcInhouseDetail); await _context.SaveChangesAsync(); return fqcInhouseDetail; } private bool FqcInhouseDetailExists(string id) { return _context.FqcInhouseDetails.Any(e => e.InhouseNo == id); } } }