diff --git a/AMESCoreStudio.Web/Controllers/QRSController.cs b/AMESCoreStudio.Web/Controllers/QRSController.cs index 66ab600d..f11c11f2 100644 --- a/AMESCoreStudio.Web/Controllers/QRSController.cs +++ b/AMESCoreStudio.Web/Controllers/QRSController.cs @@ -753,7 +753,7 @@ namespace AMESCoreStudio.Web.Controllers WipID = int.Parse(jo["wipID"].ToString()), WipNO = jo["wipNO"].ToString(), PlanQTY = int.Parse(jo["planQTY"].ToString()), - RuleStationID = int.Parse(jo["ruleStationID"].ToString()), + //RuleStationID = int.Parse(jo["ruleStationID"].ToString()), StationID = int.Parse(jo["stationID"].ToString()), StationDesc = jo["stationName"].ToString(), ItemNO = jo["itemNO"].ToString(), @@ -804,7 +804,7 @@ namespace AMESCoreStudio.Web.Controllers WipID = int.Parse(jo["wipID"].ToString()), WipNO = jo["wipNO"].ToString(), PlanQTY = int.Parse(jo["planQTY"].ToString()), - RuleStationID = int.Parse(jo["ruleStationID"].ToString()), + //RuleStationID = int.Parse(jo["ruleStationID"].ToString()), StationID = int.Parse(jo["stationID"].ToString()), StationDesc = jo["stationName"].ToString(), ItemNO = jo["itemNO"].ToString(), @@ -874,5 +874,164 @@ namespace AMESCoreStudio.Web.Controllers } return Json(new Table() { count = 0, data = null }); } + + public async Task QRS014() + { + await GetUnitList(); + + return View(); + } + + [HttpPost] + public async Task GetYieldData4QRS014Async(string id) + { + string[] param = id.Split('_'); + + var ft_stations = await _basApi.GetStations4FT(param[0]); + + IResultModel result = await _pcsApi.GetWipInfo4QRS014(param[0], param[1], param[2], param[3], param[4]); + + var query = new QRS014ViewModel(); + + foreach (var item in result.Data) + { + JObject jo = JObject.Parse(item.ToString()); + int wip_id = int.Parse(jo["wipID"].ToString()); + + double sum_rate = 100.0; + for (int i = 0; i < ft_stations.Count; i++) + { + int station_id = ft_stations[i].StationID; + var wip_station = await _pcsApi.GetWipStation4QRS009Group(wip_id, station_id); + + int okQty = 0, ngQty = 0, inputQty = 0; + + if (wip_station.DataTotal > 0) + { + foreach (var data in wip_station.Data) + { + JObject j0 = JObject.Parse(data.ToString()); + if (j0["ruleStatus"].ToString() == "P") + { + okQty = int.Parse(j0["firstCnt"].ToString()); + } + else + { + ngQty = int.Parse(j0["firstCnt"].ToString()); + } + } + } + inputQty = okQty + ngQty; + double rate = 0; + if (okQty > 0) + { + rate = (okQty * 1.0 / inputQty) * 100; + } + + if (rate > 0) + { + sum_rate = sum_rate * rate; + } + } + + query.SumYieldDatas.Add(new SumYieldData + { + WipID = int.Parse(jo["wipID"].ToString()), + WipNO = jo["wipNO"].ToString(), + Yield = sum_rate + }); + } + + return Json(query.SumYieldDatas); + } + + public async Task QRS014AAsync(string unitNo, string itemNO, string wipNO, string dateStart, string dateEnd) + { + ViewData["ParamList"] = unitNo + "_" + itemNO + "_" + wipNO + "_" + dateStart + "_" + dateEnd; + + ViewData["Title"] = "查詢條件 - 製程代碼 : " + unitNo + "; 工單號碼 : " + wipNO + "; 料號 : " + itemNO + "; 生產日期 : " + dateStart + " ~ " + dateEnd; + + var ft_stations = await _basApi.GetStations4FT(unitNo); + + IResultModel result = await _pcsApi.GetWipInfo4QRS014(unitNo, itemNO, wipNO, dateStart, dateEnd); + + string rateDataList = ""; + + if (ft_stations.Count > 0) + { + int tdQty = ft_stations.Count * 4 + 3; + rateDataList = rateDataList + ""; + for (int i = 0; i < ft_stations.Count; i++) + { + rateDataList = rateDataList + ""; + } + rateDataList = rateDataList + ""; + + rateDataList = rateDataList + ""; + for (int i = 0; i < ft_stations.Count; i++) + { + rateDataList = rateDataList + ""; + } + rateDataList = rateDataList + ""; + + if (result.DataTotal > 0) + { + foreach (var item in result.Data) + { + JObject jo = JObject.Parse(item.ToString()); + int wip_id = int.Parse(jo["wipID"].ToString()); + string wip_no = jo["wipNO"].ToString(); + string item_no = jo["itemNO"].ToString(); + + rateDataList = rateDataList + ""; + double sum_rate = 100.0; + + for (int i = 0; i < ft_stations.Count; i++) + { + int station_id = ft_stations[i].StationID; + var wip_station = await _pcsApi.GetWipStation4QRS009Group(wip_id, station_id); + + int okQty = 0, ngQty = 0, inputQty = 0; + + if (wip_station.DataTotal > 0) + { + foreach (var data in wip_station.Data) + { + JObject j0 = JObject.Parse(data.ToString()); + if (j0["ruleStatus"].ToString() == "P") + { + okQty = int.Parse(j0["firstCnt"].ToString()); + } + else + { + ngQty = int.Parse(j0["firstCnt"].ToString()); + } + } + } + inputQty = okQty + ngQty; + double rate = 0; + if (okQty > 0) + { + rate = (okQty * 1.0 / inputQty) * 100; + } + + if (rate > 0) + { + sum_rate = sum_rate * rate; + } + rateDataList = rateDataList + ""; + } + rateDataList = rateDataList + ""; + } + } + + + rateDataList = rateDataList + "
" + ft_stations[i].StationName + "
工單號碼料號InputPassFailYield
" + wip_no + "" + item_no + "" + inputQty + "" + okQty + "" + ngQty + "" + rate.ToString("0.00") + "%" + sum_rate.ToString("0.00") + "%
"; + } + + rateDataList = rateDataList + "
"; + ViewData["RateDataList"] = rateDataList; + return View(); + } } } diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs b/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs index 44303ac8..f951351c 100644 --- a/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs +++ b/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs @@ -1056,6 +1056,17 @@ namespace AMESCoreStudio.Web #endregion + #region QRS014 直通率 + + /// + /// 查詢工單基本資料QRS014 + /// + /// + [WebApiClient.Attributes.HttpGet("api/WipInfos/GetWipInfo4QRS014")] + ITask> GetWipInfo4QRS014(string unitNo, string itemNO, string wipNO, string dateStart, string dateEnd); + + #endregion + #region PDS003 查詢工單基本資料 /// diff --git a/AMESCoreStudio.Web/HttpApis/IBAS.cs b/AMESCoreStudio.Web/HttpApis/IBAS.cs index d1debc33..be41f6da 100644 --- a/AMESCoreStudio.Web/HttpApis/IBAS.cs +++ b/AMESCoreStudio.Web/HttpApis/IBAS.cs @@ -314,6 +314,13 @@ namespace AMESCoreStudio.Web [WebApiClient.Attributes.HttpGet("api/Stationses")] ITask> GetStationses(); + /// + /// 獲取F/T站別 + /// + /// + [WebApiClient.Attributes.HttpGet("api/Stationses/FT/{id}")] + ITask> GetStations4FT(string id); + #endregion #region BAS009流程資料維護相關 diff --git a/AMESCoreStudio.Web/ViewModels/QRS/QRS014ViewModel.cs b/AMESCoreStudio.Web/ViewModels/QRS/QRS014ViewModel.cs new file mode 100644 index 00000000..f51b9569 --- /dev/null +++ b/AMESCoreStudio.Web/ViewModels/QRS/QRS014ViewModel.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace AMESCoreStudio.Web.ViewModels.QRS +{ + public class QRS014ViewModel + { + public QRS014ViewModel() + { + SumYieldDatas = new List(); + } + + public List SumYieldDatas { get; set; } + } + + public class SumYieldData + { + /// + /// 工單ID + /// + public int WipID { get; set; } + + /// + /// 工單號碼 + /// + public string WipNO { get; set; } + + /// + /// 良率 + /// + public double Yield { get; set; } + } +} diff --git a/AMESCoreStudio.Web/Views/QRS/QRS014.cshtml b/AMESCoreStudio.Web/Views/QRS/QRS014.cshtml new file mode 100644 index 00000000..9bbcebb8 --- /dev/null +++ b/AMESCoreStudio.Web/Views/QRS/QRS014.cshtml @@ -0,0 +1,102 @@ +@{ + ViewData["Title"] = "直通率"; + Layout = "~/Views/Shared/_AMESLayout.cshtml"; +} + +
+
+
+
+
@ViewBag.Title
+
+ +
+
+
+
+
+
+
+ +
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+@section Scripts{ + @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); + await Html.RenderPartialAsync("_FileinputScriptsPartial"); } + +} \ No newline at end of file diff --git a/AMESCoreStudio.Web/Views/QRS/QRS014A.cshtml b/AMESCoreStudio.Web/Views/QRS/QRS014A.cshtml new file mode 100644 index 00000000..878fb2f1 --- /dev/null +++ b/AMESCoreStudio.Web/Views/QRS/QRS014A.cshtml @@ -0,0 +1,94 @@ +@{ + Layout = "~/Views/Shared/_AMESLayout.cshtml"; +} + + + + + +
+
+
+
+
@ViewBag.Title
+
+ +
+
+
+
+ + @Html.Raw(ViewData["RateDataList"]) +
+
+ +@section Scripts { + @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); + await Html.RenderPartialAsync("_FileinputScriptsPartial"); } + + + + +} \ No newline at end of file diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs index 6df21d7c..d4e44576 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs @@ -280,6 +280,69 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return result; } + /// + /// 查詢工單資料QRS014 + /// + /// + [Route("[action]")] + [HttpGet] + public async Task> GetWipInfo4QRS014(string unitNo, string itemNO, string wipNO, string dateStart, string dateEnd) + { + ResultModel result = new ResultModel(); + var q = from q1 in _context.WipInfos + join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO + join q3 in _context.LineInfoes on q1.LineID equals q3.LineID + join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo + select new + { + q1.WipID, + q1.WipNO, + q1.PlanQTY, + q1.CompleteQTY, + q1.UnitNO, + q1.LineID, + q1.FlowRuleID, + q1.StatusNO, + q1.CreateDate, + q2.ItemNO, + q3.LineDesc, + q4.UnitName + }; + + if (unitNo != "*") + { + q = q.Where(w => w.UnitNO == unitNo); + } + if (itemNO != null && itemNO != "") + { + q = q.Where(w => w.ItemNO == itemNO); + } + if (wipNO != null && wipNO != "") + { + q = q.Where(w => w.WipNO == wipNO); + } + if (dateStart != null && dateStart != "" && dateEnd != null && dateEnd != "") + { + q = q.Where(w => w.CreateDate >= DateTime.Parse(dateStart) && w.CreateDate <= DateTime.Parse(dateEnd)); + } + + //紀錄筆數 + result.DataTotal = q.Count(); + + result.Data = await q.ToListAsync(); + + if (result == null) + { + result.Msg = "查無資料"; + result.Success = false; + return result; + } + + result.Success = true; + result.Msg = "OK"; + return result; + } + /// /// 查詢工單資料 by SelectParameter /// diff --git a/AMESCoreStudio.WebApi/Controllers/BAS/StationsesController.cs b/AMESCoreStudio.WebApi/Controllers/BAS/StationsesController.cs index de0b7a0d..fe1d27a1 100644 --- a/AMESCoreStudio.WebApi/Controllers/BAS/StationsesController.cs +++ b/AMESCoreStudio.WebApi/Controllers/BAS/StationsesController.cs @@ -79,6 +79,36 @@ namespace AMESCoreStudio.WebApi.Controllers.BAS return stations; } + /// + /// 获取全部F/T站別资料 + /// + /// + // GET: api/Stationses + [HttpGet("FT/{id}")] + public async Task>> GetStations4FT(string id) + { + IQueryable q = _context.Stationses; + if (id != "0") + { + q = q.Where(p => p.UnitNo.Equals(id)); + } + q = q.Where(p => p.TestType == "F/T" && p.TypeNo == "T" && p.StatusNo == "A"); + q = q.OrderBy(p => p.StationName); + + var Stations = await q.ToListAsync(); + + foreach (var data in Stations) + { + if (data.UnitNo != "0") + data.Unit = _context.FactoryUnits.Find(data.UnitNo); + else + data.Unit.UnitName = "N/A"; + } + + + return Stations; + } + /// /// 根据單位ID获取该站別资料 ///