From dd9f53c299ac837c60c973b44f1a91872922e803 Mon Sep 17 00:00:00 2001 From: Marvin Date: Tue, 20 Jun 2023 14:01:15 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E7=94=9F=E7=94=A2=E7=9C=8B?= =?UTF-8?q?=E6=9D=BF,=E5=A2=9E=E5=8A=A0=E6=8C=89=E6=9C=88=E4=BB=BD?= =?UTF-8?q?=E8=B3=87=E6=96=99=E7=B5=B1=E8=A8=88&=E6=8C=89=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E8=B3=87=E6=96=99=E7=B5=B1=E8=A8=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/RPTController.cs | 312 ++++++++++++++++-- AMESCoreStudio.Web/HttpApis/AMES/IRPT.cs | 7 + .../ViewModels/RPT/RPT001AViewModel.cs | 31 ++ .../ViewModels/RPT/RPT001BViewModel.cs | 31 ++ AMESCoreStudio.Web/Views/RPT/RPT001.cshtml | 3 +- AMESCoreStudio.Web/Views/RPT/RPT001A.cshtml | 94 +++++- AMESCoreStudio.Web/Views/RPT/RPT001B.cshtml | 93 +++++- .../AMES/ProductionIndexesController.cs | 2 + 8 files changed, 521 insertions(+), 52 deletions(-) create mode 100644 AMESCoreStudio.Web/ViewModels/RPT/RPT001AViewModel.cs create mode 100644 AMESCoreStudio.Web/ViewModels/RPT/RPT001BViewModel.cs diff --git a/AMESCoreStudio.Web/Controllers/RPTController.cs b/AMESCoreStudio.Web/Controllers/RPTController.cs index e0fad665..e8d5ee81 100644 --- a/AMESCoreStudio.Web/Controllers/RPTController.cs +++ b/AMESCoreStudio.Web/Controllers/RPTController.cs @@ -14,6 +14,9 @@ using AMESCoreStudio.WebApi.DTO.AMES; using DocumentFormat.OpenXml.Math; using AMESCoreStudio.Web.ViewModels.PCS; using Microsoft.AspNetCore.Http; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using AMESCoreStudio.Web.ViewModels.RPT; // For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860 @@ -37,29 +40,10 @@ namespace AMESCoreStudio.Web.Controllers var edate = ""; ViewBag.QueryDate = DateTime.Now.ToString("yyyy/MM"); + ViewBag.QueryDate2 = DateTime.Now.ToString("yyyyMM"); var model = await _rptApi.GetRPT001View(sdate, edate); - // 異常工時 - //var a = await _whsApi.GetExceptionWorktimeByQueryWHS009("", "", "", "", sdate: sdate, edate: edate); - // 未結工單數 - //var b = await _pcsApi.GetWipInfoPCS008(date_str: sdate, date_end: edate); - // 完工入庫數 - //var c = await _pcsApi.GetFqcInhouseMasterMultiQuery(date_str: sdate, date_end: edate); - - //string mimeType = ""; - //int extension = 1; - //var path = $"{this.environment.WebRootPath}\\Reports\\TEST02.rdlc"; - //LocalReport localReport = new LocalReport(path); - //Dictionary param = new Dictionary(); - ////param.Add("rp1", "Hello RDLC Report!"); - //var wip_station = await _pcsApi.GetWipStation(); - - //localReport.AddDataSource("WIP_STATION", wip_station); - - - //var result = localReport.Execute(RenderType.Pdf, extension, param, mimeType); - //return File(result.MainStream, "application/pdf"); - //var model = new WebApi.DTO.AMES.RPT001VIiewDto(); + return View(model); } @@ -69,6 +53,7 @@ namespace AMESCoreStudio.Web.Controllers var Data = DateTime.Parse(SerachData); ViewBag.QueryDate = new DateTime(Data.Year, Data.Month, 1).ToString("yyyy/MM"); + ViewBag.QueryDate2 = new DateTime(Data.Year, Data.Month, 1).ToString("yyyyMM"); var sDate = new DateTime(Data.Year, Data.Month, 1).ToString("yyyy/MM/dd"); var eDate = new DateTime(Data.Year, Data.Month, DateTime.DaysInMonth(Data.Year, Data.Month)).ToString("yyyy/MM/dd"); @@ -96,5 +81,290 @@ namespace AMESCoreStudio.Web.Controllers model.SerachData = SerachData; return View(model); } + + public async Task RPT001A(string id) + { + ViewData["ParamList"] = id; + string[] param = id.Split("_"); + string type = param[0]; + string data = param[1]; + string title = ""; + switch (type) + { + case "01": + title = data.Substring(0, 4) + "生產力"; + break; + } + ViewBag.Title = title; + + string MonthDataList = ""; + for (int m = 1; m <= 12; m++) + { + var Data = DateTime.Parse(data.Substring(0, 4) + "/" + m.ToString().PadLeft(2, '0')); + var sDate = new DateTime(Data.Year, Data.Month, 1).ToString("yyyy/MM/dd"); + var eDate = new DateTime(Data.Year, Data.Month, DateTime.DaysInMonth(Data.Year, Data.Month)).ToString("yyyy/MM/dd"); + var pi = await _rptApi.GetProductionIndex4RPT001(sDate, eDate); + if (pi.DataTotal > 0) + { + double sum_productivity = 0.00; + foreach (var item in pi.Data) + { + JObject jo = JObject.Parse(item.ToString()); + + double productivity = double.Parse(jo["productivity"].ToString()); + sum_productivity = sum_productivity + productivity; + } + double avg_productivity = sum_productivity / pi.DataTotal; + MonthDataList = MonthDataList + ""; + } + else + { + MonthDataList = MonthDataList + ""; + } + + } + + MonthDataList = MonthDataList + "
月份010203040506070809101112
數值" + "" + avg_productivity.ToString("0.00") + "0.00
"; + + ViewData["MonthDataList"] = MonthDataList; + + return View(); + } + + [HttpPost] + public async Task GetMonthData4RPT001AAsync(string id) + { + string[] param = id.Split("_"); + string type = param[0]; + string data = param[1]; + string title = ""; + switch (type) + { + case "01": + title = data.Substring(0, 4) + "生產力"; + break; + } + ViewBag.Title = title; + ViewBag.Title2 = data.Substring(0, 4); + + var query = new RPT001AViewModel(); + + for (int m = 1; m <= 12; m++) + { + var Data = DateTime.Parse(data.Substring(0, 4) + "/" + m.ToString().PadLeft(2, '0')); + var sDate = new DateTime(Data.Year, Data.Month, 1).ToString("yyyy/MM/dd"); + var eDate = new DateTime(Data.Year, Data.Month, DateTime.DaysInMonth(Data.Year, Data.Month)).ToString("yyyy/MM/dd"); + var pi = await _rptApi.GetProductionIndex4RPT001(sDate, eDate); + if (pi.DataTotal > 0) + { + double sum_productivity = 0.00; + foreach (var item in pi.Data) + { + JObject jo = JObject.Parse(item.ToString()); + + double productivity = double.Parse(jo["productivity"].ToString()); + sum_productivity = sum_productivity + productivity; + } + double avg_productivity = sum_productivity / pi.DataTotal; + query.Datas.Add(new MonthGroup + { + Month = Data.ToString("yyyyMM"), + Yield = double.Parse(avg_productivity.ToString("0.00")) + }); + } + else + { + query.Datas.Add(new MonthGroup + { + Month = Data.ToString("yyyyMM"), + Yield = 0.00 + }); + } + + } + + return Json(query.Datas); + } + + [HttpPost] + public async Task GetDayData4RPT001BAsync(string id) + { + string[] param = id.Split("_"); + string type = param[0]; + string data = param[1]; + string title = ""; + switch (type) + { + case "01": + title = data + "生產力"; + break; + } + ViewBag.Title = title; + ViewBag.Title2 = data; + + var query = new RPT001BViewModel(); + + var Data = DateTime.Parse(data.Substring(0, 4) + "/" + data.Substring(4)); + var sDate = new DateTime(Data.Year, Data.Month, 1).ToString("yyyy/MM/dd"); + var eDate = new DateTime(Data.Year, Data.Month, DateTime.DaysInMonth(Data.Year, Data.Month)).ToString("yyyy/MM/dd"); + var pi = await _rptApi.GetProductionIndex4RPT001(sDate, eDate); + + foreach (var item in pi.Data) + { + JObject jo = JObject.Parse(item.ToString()); + DateTime date = DateTime.Parse(jo["productionDate"].ToString()); + + query.Datas.Add(new DayGroup + { + Day = date.ToString("yyyyMMdd"), + Yield = double.Parse(jo["productivity"].ToString()) + }); + } + + return Json(query.Datas); + } + + public async Task RPT001B(string id) + { + ViewData["ParamList"] = id; + string[] param = id.Split("_"); + string type = param[0]; + string data = param[1]; + string title = ""; + switch (type) + { + case "01": + title = data + "生產力"; + break; + } + ViewBag.Title = title; + + var Data = DateTime.Parse(data.Substring(0, 4) + "/" + data.Substring(4)); + var sDate = new DateTime(Data.Year, Data.Month, 1).ToString("yyyy/MM/dd"); + var eDate = new DateTime(Data.Year, Data.Month, DateTime.DaysInMonth(Data.Year, Data.Month)).ToString("yyyy/MM/dd"); + var pi = await _rptApi.GetProductionIndex4RPT001(sDate, eDate); + + double day01 = 0.00, day02 = 0.00, day03 = 0.00, day04 = 0.00, day05 = 0.00, day06 = 0.00, day07 = 0.00, day08 = 0.00, day09 = 0.00, day10 = 0.00; + double day11 = 0.00, day12 = 0.00, day13 = 0.00, day14 = 0.00, day15 = 0.00, day16 = 0.00, day17 = 0.00, day18 = 0.00, day19 = 0.00, day20 = 0.00; + double day21 = 0.00, day22 = 0.00, day23 = 0.00, day24 = 0.00, day25 = 0.00, day26 = 0.00, day27 = 0.00, day28 = 0.00, day29 = 0.00, day30 = 0.00; + double day31 = 0.00; + foreach (var item in pi.Data) + { + JObject jo = JObject.Parse(item.ToString()); + DateTime date = DateTime.Parse(jo["productionDate"].ToString()); + switch (date.Day) + { + case 1: + day01 = double.Parse(jo["productivity"].ToString()); + break; + case 2: + day02 = double.Parse(jo["productivity"].ToString()); + break; + case 3: + day03 = double.Parse(jo["productivity"].ToString()); + break; + case 4: + day04 = double.Parse(jo["productivity"].ToString()); + break; + case 5: + day05 = double.Parse(jo["productivity"].ToString()); + break; + case 6: + day06 = double.Parse(jo["productivity"].ToString()); + break; + case 7: + day07 = double.Parse(jo["productivity"].ToString()); + break; + case 8: + day08 = double.Parse(jo["productivity"].ToString()); + break; + case 9: + day09 = double.Parse(jo["productivity"].ToString()); + break; + case 10: + day10 = double.Parse(jo["productivity"].ToString()); + break; + case 11: + day11 = double.Parse(jo["productivity"].ToString()); + break; + case 12: + day12 = double.Parse(jo["productivity"].ToString()); + break; + case 13: + day13 = double.Parse(jo["productivity"].ToString()); + break; + case 14: + day14 = double.Parse(jo["productivity"].ToString()); + break; + case 15: + day15 = double.Parse(jo["productivity"].ToString()); + break; + case 16: + day16 = double.Parse(jo["productivity"].ToString()); + break; + case 17: + day17 = double.Parse(jo["productivity"].ToString()); + break; + case 18: + day18 = double.Parse(jo["productivity"].ToString()); + break; + case 19: + day19 = double.Parse(jo["productivity"].ToString()); + break; + case 20: + day20 = double.Parse(jo["productivity"].ToString()); + break; + case 21: + day21 = double.Parse(jo["productivity"].ToString()); + break; + case 22: + day22 = double.Parse(jo["productivity"].ToString()); + break; + case 23: + day23 = double.Parse(jo["productivity"].ToString()); + break; + case 24: + day24 = double.Parse(jo["productivity"].ToString()); + break; + case 25: + day25 = double.Parse(jo["productivity"].ToString()); + break; + case 26: + day26 = double.Parse(jo["productivity"].ToString()); + break; + case 27: + day27 = double.Parse(jo["productivity"].ToString()); + break; + case 28: + day28 = double.Parse(jo["productivity"].ToString()); + break; + case 29: + day29 = double.Parse(jo["productivity"].ToString()); + break; + case 30: + day30 = double.Parse(jo["productivity"].ToString()); + break; + case 31: + day31 = double.Parse(jo["productivity"].ToString()); + break; + } + } + + string DayDataList = ""; + DayDataList = DayDataList + ""; + DayDataList = DayDataList + ""; + DayDataList = DayDataList + ""; + DayDataList = DayDataList + ""; + DayDataList = DayDataList + ""; + DayDataList = DayDataList + ""; + DayDataList = DayDataList + ""; + DayDataList = DayDataList + ""; + + DayDataList = DayDataList + "
日期01020304050607080910
數值" + day01 + "" + day02 + "" + day03 + "" + day04 + "" + day05 + "" + day06 + "" + day07 + "" + day08 + "" + day09 + "" + day10 + "
日期11121314151617181920
數值" + day11 + "" + day12 + "" + day13 + "" + day14 + "" + day15 + "" + day16 + "" + day17 + "" + day18 + "" + day19 + "" + day20 + "
日期21222324252627282930
數值" + day21 + "" + day22 + "" + day23 + "" + day24 + "" + day25 + "" + day26 + "" + day27 + "" + day28 + "" + day29 + "" + day30 + "
日期31
數值" + day31 + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "
"; + + ViewData["DayDataList"] = DayDataList; + + return View(); + } } } diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IRPT.cs b/AMESCoreStudio.Web/HttpApis/AMES/IRPT.cs index aacaa4ff..955cdf13 100644 --- a/AMESCoreStudio.Web/HttpApis/AMES/IRPT.cs +++ b/AMESCoreStudio.Web/HttpApis/AMES/IRPT.cs @@ -26,5 +26,12 @@ namespace AMESCoreStudio.Web /// [WebApiClient.Attributes.HttpGet("api/RPT/GetRPT002View")] ITask GetRPT002View(string sDate, string eDate); + + /// + /// 生產看板 + /// + /// + [WebApiClient.Attributes.HttpGet("api/ProductionIndexes/GetProductionIndex4RPT001")] + ITask> GetProductionIndex4RPT001(string sdate, string edate); } } diff --git a/AMESCoreStudio.Web/ViewModels/RPT/RPT001AViewModel.cs b/AMESCoreStudio.Web/ViewModels/RPT/RPT001AViewModel.cs new file mode 100644 index 00000000..5fa5a1bd --- /dev/null +++ b/AMESCoreStudio.Web/ViewModels/RPT/RPT001AViewModel.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace AMESCoreStudio.Web.ViewModels.RPT +{ + public class RPT001BViewModel + { + public RPT001BViewModel() + { + Datas = new List(); + } + + public List Datas { get; set; } + } + + public class DayGroup + { + + /// + /// 月份 + /// + public string Day { get; set; } + + /// + /// 良率 + /// + public double Yield { get; set; } + } +} diff --git a/AMESCoreStudio.Web/ViewModels/RPT/RPT001BViewModel.cs b/AMESCoreStudio.Web/ViewModels/RPT/RPT001BViewModel.cs new file mode 100644 index 00000000..c129e2fc --- /dev/null +++ b/AMESCoreStudio.Web/ViewModels/RPT/RPT001BViewModel.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace AMESCoreStudio.Web.ViewModels.RPT +{ + public class RPT001AViewModel + { + public RPT001AViewModel() + { + Datas = new List(); + } + + public List Datas { get; set; } + } + + public class MonthGroup + { + + /// + /// 月份 + /// + public string Month { get; set; } + + /// + /// 良率 + /// + public double Yield { get; set; } + } +} diff --git a/AMESCoreStudio.Web/Views/RPT/RPT001.cshtml b/AMESCoreStudio.Web/Views/RPT/RPT001.cshtml index 02e85ab4..208a523a 100644 --- a/AMESCoreStudio.Web/Views/RPT/RPT001.cshtml +++ b/AMESCoreStudio.Web/Views/RPT/RPT001.cshtml @@ -104,7 +104,7 @@ + +@section Scripts { + @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); + await Html.RenderPartialAsync("_FileinputScriptsPartial"); } + + + + +} \ No newline at end of file diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/ProductionIndexesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/ProductionIndexesController.cs index 626ddd0c..37e6260b 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/ProductionIndexesController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/ProductionIndexesController.cs @@ -85,6 +85,8 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } + q = q.OrderBy(p => p.ProductionDate); + //紀錄筆數 result.DataTotal = q.Count();