diff --git a/AMESCoreStudio.Web/Controllers/PPSController.cs b/AMESCoreStudio.Web/Controllers/PPSController.cs index 45eb641f..e9e85eed 100644 --- a/AMESCoreStudio.Web/Controllers/PPSController.cs +++ b/AMESCoreStudio.Web/Controllers/PPSController.cs @@ -1162,6 +1162,24 @@ namespace AMESCoreStudio.Web.Controllers return View(); } + [HttpPost] + public async Task PPS010ActiveStopAsync(string ngReasonNo, string statusNo) + { + await _ppsApi.PutNGReasonStatus(ngReasonNo, statusNo); + + string _msg; + + if (statusNo == "A") + { + _msg = "啟用成功!"; + } + else + { + _msg = "停用成功!"; + } + return Json(_msg); + } + //新增頁面 public async Task PPS010C(string id) { @@ -1273,12 +1291,11 @@ namespace AMESCoreStudio.Web.Controllers ngClassNo = "*"; } - var result_total = await _ppsApi.GetNGReasonsByClass(ngClassNo, 0, limit); var result = await _ppsApi.GetNGReasonsByClass(ngClassNo, page,limit); - if (result.Count > 0) + if (result.DataTotal > 0) { - return Json(new Table() { code = 0, msg = "", data = result, count = result_total.Count }); + return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal }); } return Json(new Table() { count = 0, data = null }); diff --git a/AMESCoreStudio.Web/Controllers/QRSController.cs b/AMESCoreStudio.Web/Controllers/QRSController.cs index e63be453..d31293cb 100644 --- a/AMESCoreStudio.Web/Controllers/QRSController.cs +++ b/AMESCoreStudio.Web/Controllers/QRSController.cs @@ -7,6 +7,7 @@ using Newtonsoft.Json.Linq; using AMESCoreStudio.Web.Models; using System.Collections.Generic; using Microsoft.AspNetCore.Mvc.Rendering; +using AMESCoreStudio.Web.ViewModels.QRS; namespace AMESCoreStudio.Web.Controllers { @@ -467,13 +468,59 @@ namespace AMESCoreStudio.Web.Controllers public async Task QRS010QueryAsync(string unitNo, string lineID, string stationID, string mfgTypeNo, string wipNO, string itemNO, string dateStart, string dateEnd, int page = 0, int limit = 10) { - var result = await _pcsApi.GetYieldData4QRS010(unitNo, lineID, stationID, mfgTypeNo, wipNO, itemNO, dateStart, dateEnd, page, limit); + var query = new QRS010ViewModel(); + + int failQty = 0; + foreach (var data in result.Data) + { + JObject jo = JObject.Parse(data.ToString()); + + if (jo["ruleStatus"].ToString() == "P") + { + int pass_cnt = 0; + foreach (var item in result.Data) + { + JObject joItem = JObject.Parse(item.ToString()); + + if (jo["ruleStationID"].ToString() == joItem["ruleStationID"].ToString() && joItem["ruleStatus"].ToString() == "F") + { + pass_cnt = int.Parse(jo["firstCnt"].ToString()) + int.Parse(joItem["firstCnt"].ToString()); + failQty = failQty + 1; + break; + } + + } + + if (pass_cnt == 0) + { + pass_cnt = int.Parse(jo["passCnt"].ToString()); + } + + query.YieldDatas.Add(new YieldData + { + WipID = int.Parse(jo["wipID"].ToString()), + WipNO = jo["wipNO"].ToString(), + PlanQTY = int.Parse(jo["planQTY"].ToString()), + RuleStationID = int.Parse(jo["ruleStationID"].ToString()), + StationID = int.Parse(jo["stationID"].ToString()), + StationDesc = jo["stationDesc"].ToString(), + ItemNO = jo["itemNO"].ToString(), + LineDesc = jo["lineDesc"].ToString(), + ModelNO = jo["modelNO"].ToString(), + FirstCnt = int.Parse(jo["firstCnt"].ToString()), + PassCnt = pass_cnt, + Yield = int.Parse(jo["firstCnt"].ToString()) * 1.0 / pass_cnt * 100.0 + }); + } + } + if (result.DataTotal > 0) { - return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal }); + return Json(new Table() { code = 0, msg = "", data = query.YieldDatas, count = result.DataTotal - failQty }); } + return Json(new Table() { count = 0, data = null }); } @@ -490,7 +537,53 @@ namespace AMESCoreStudio.Web.Controllers var result = await _pcsApi.GetYieldData4QRS010(param[0], param[1], param[2], param[3], param[4], param[5], param[6], param[7], 0, 10); - return Json(result.Data); + var query = new QRS010ViewModel(); + + int failQty = 0; + foreach (var data in result.Data) + { + JObject jo = JObject.Parse(data.ToString()); + + if (jo["ruleStatus"].ToString() == "P") + { + int pass_cnt = 0; + foreach (var item in result.Data) + { + JObject joItem = JObject.Parse(item.ToString()); + + if (jo["ruleStationID"].ToString() == joItem["ruleStationID"].ToString() && joItem["ruleStatus"].ToString() == "F") + { + pass_cnt = int.Parse(jo["firstCnt"].ToString()) + int.Parse(joItem["firstCnt"].ToString()); + failQty = failQty + 1; + break; + } + + } + + if (pass_cnt == 0) + { + pass_cnt = int.Parse(jo["passCnt"].ToString()); + } + + query.YieldDatas.Add(new YieldData + { + WipID = int.Parse(jo["wipID"].ToString()), + WipNO = jo["wipNO"].ToString(), + PlanQTY = int.Parse(jo["planQTY"].ToString()), + RuleStationID = int.Parse(jo["ruleStationID"].ToString()), + StationID = int.Parse(jo["stationID"].ToString()), + StationDesc = jo["stationDesc"].ToString(), + ItemNO = jo["itemNO"].ToString(), + LineDesc = jo["lineDesc"].ToString(), + ModelNO = jo["modelNO"].ToString(), + FirstCnt = int.Parse(jo["firstCnt"].ToString()), + PassCnt = pass_cnt, + Yield = int.Parse(jo["firstCnt"].ToString()) * 1.0 / pass_cnt * 100.0 + }); + } + } + + return Json(query.YieldDatas); } public async Task GetYieldData4QRS010ListAsync(string id) diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IPPS.cs b/AMESCoreStudio.Web/HttpApis/AMES/IPPS.cs index c960e17e..f9b606a3 100644 --- a/AMESCoreStudio.Web/HttpApis/AMES/IPPS.cs +++ b/AMESCoreStudio.Web/HttpApis/AMES/IPPS.cs @@ -361,6 +361,13 @@ namespace AMESCoreStudio.Web [WebApiClient.Attributes.HttpPut("api/NGReasons/{id}")] ITask> PutNGReason(string id, [FromBody, RawJsonContent] string model); + /// + /// 更新不良現象原因 + /// + /// + [WebApiClient.Attributes.HttpPut("api/NGReasons/{id}/{statusno}")] + ITask> PutNGReasonStatus(string id, string statusno); + /// /// 刪除不良現象原因 /// @@ -387,7 +394,7 @@ namespace AMESCoreStudio.Web /// /// [WebApiClient.Attributes.HttpGet("api/NGReasons/Class/{no}")] - ITask> GetNGReasonsByClass(string no, int page = 0, int limit = 10); + ITask> GetNGReasonsByClass(string no, int page = 0, int limit = 10); #endregion diff --git a/AMESCoreStudio.Web/Views/PPS/PPS010.cshtml b/AMESCoreStudio.Web/Views/PPS/PPS010.cshtml index c83835ff..ad2e8287 100644 --- a/AMESCoreStudio.Web/Views/PPS/PPS010.cshtml +++ b/AMESCoreStudio.Web/Views/PPS/PPS010.cshtml @@ -40,6 +40,11 @@ @section Scripts{ + + + } + \ No newline at end of file diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/NGReasonsController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/NGReasonsController.cs index 01e73733..14b0b1f3 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/NGReasonsController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/NGReasonsController.cs @@ -54,8 +54,10 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES /// // GET: api/NGReasons/Class/S [HttpGet("Class/{no}")] - public async Task>> GetNGReasonByClass(string no, int page = 0, int limit = 10) + public async Task> GetNGReasonByClass(string no, int page = 0, int limit = 10) { + ResultModel result = new ResultModel(); + IQueryable q = _context.NGReasons; if (no != null) @@ -66,6 +68,8 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } } + result.DataTotal = q.ToList().Count; + if (page > 0) { q = q.OrderBy(p => p.NGClassNo + p.NGReasonNo).Skip((page - 1) * limit).Take(limit); @@ -77,12 +81,18 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES var ngReason = await q.ToListAsync(); + result.Data = ngReason; + if (ngReason == null) { - return NotFound(); + result.Msg = "查無資料"; + result.Success = false; + return result; } - return ngReason; + result.Success = true; + result.Msg = "OK"; + return result; } /// @@ -153,6 +163,58 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return result; } + /// + /// 更新不良現象原因狀態 + /// + /// + /// + /// + // PUT: api/RuleStations/5 + // 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}/{statusno}")] + public async Task> PutNGReasonStatus(string id, string statusno = null) + { + ResultModel result = new ResultModel(); + + var ngReason = await _context.NGReasons.FindAsync(id); + if (ngReason == null) + { + result.Success = false; + result.Msg = "原因代碼不存在"; + return result; + } + + ngReason.Status = statusno; + + _context.NGReasons.Attach(ngReason); + + // 指定更新某個欄位 + _context.Entry(ngReason).Property(p => p.Status).IsModified = true; + + try + { + await _context.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!NGReasonExists(id)) + { + result.Success = false; + result.Msg = "原因代碼不存在"; + return result; + } + else + { + throw; + } + } + + result.Success = true; + result.Msg = "OK"; + return result; + } + /// /// /// diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/WipClassController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/WipClassController.cs index 987cf7e9..bce5e22c 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/WipClassController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/WipClassController.cs @@ -250,7 +250,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES PassCnt = y.Sum(x => x.PassCnt), Yield = (y.Sum(x => x.FirstCnt) / y.Sum(x => x.PassCnt) * 100) }); - + //紀錄筆數 result.DataTotal = g.Count(); diff --git a/AMESCoreStudio.WebApi/Models/AMES/NGReason.cs b/AMESCoreStudio.WebApi/Models/AMES/NGReason.cs index 79697987..bb1728bb 100644 --- a/AMESCoreStudio.WebApi/Models/AMES/NGReason.cs +++ b/AMESCoreStudio.WebApi/Models/AMES/NGReason.cs @@ -62,5 +62,14 @@ namespace AMESCoreStudio.WebApi.Models.AMES [Display(Name = "責任單位")] public int ResponseDept { get; set; } + /// + /// 状态 + /// + [Column("STATUS")] + [Required(ErrorMessage = "{0},不能空白")] + [Display(Name = "状态")] + [StringLength(100, ErrorMessage = "{0},不能大于{1}")] + [DataMember] + public string Status { get; set; } = "A"; } }