diff --git a/AMESCoreStudio.Web/Controllers/PCSController.cs b/AMESCoreStudio.Web/Controllers/PCSController.cs index e29bed68..23957efb 100644 --- a/AMESCoreStudio.Web/Controllers/PCSController.cs +++ b/AMESCoreStudio.Web/Controllers/PCSController.cs @@ -16,6 +16,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.IO; using System.Linq; +using Newtonsoft.Json.Linq; using System.Threading.Tasks; using AMESCoreStudio.WebApi.Enum; using Microsoft.Extensions.Localization; @@ -3047,6 +3048,297 @@ namespace AMESCoreStudio.Web.Controllers #endregion #region PCS008 未結工單查詢 + public async Task PCS008(string id) + { + if (id != null) + { + await GetFactoryUnit(id); + ViewBag.UnitNo = id; + } + else + { + await GetFactoryUnit(); + } + + //await GetFactoryUnit(); + return View(); + } + + [HttpPost] + public async Task PCS008Async(string unitNo, string wipNo, string itemNo, string dateStr, string dateEnd) + { + IResultModel result = await _pcsApi.GetWipInfoPCS008(unitno: unitNo, wipno: wipNo, itemno: itemNo, + date_str: dateStr, date_end: dateEnd); + + string wipDataList = ""; + if (result.DataTotal > 0) + { + foreach (var item in result.Data) + { + JObject jo = JObject.Parse(item.ToString()); + int wip_id = int.Parse(jo["wipID"].ToString()); + int flow_rule_id = int.Parse(jo["flowRuleID"].ToString()); + int line_id = int.Parse(jo["lineID"].ToString()); + string item_no = jo["itemNO"].ToString(); + string unit_name = jo["unitName"].ToString(); + string line_desc = jo["lineDesc"].ToString(); + string wip_no = jo["wipNO"].ToString(); + int plan_qty = int.Parse(jo["planQTY"].ToString()); + int input_qty = int.Parse(jo["completeQTY"].ToString()); + int output_qty = 0; + + var standardWorkTimes = await _pcsApi.GetStandardWorkTimeByItemNo(item_no); + + string ct1 = ""; + if (standardWorkTimes.Count > 0) + { + ct1 = standardWorkTimes.Where(w => w.LineID == line_id).FirstOrDefault().CT.ToString(); + } + + wipDataList = wipDataList + "" + unit_name + " - " + line_desc + "" + " - " + "" + wip_no + "" + "" + "(" + item_no + ")" + "" + " - " + "" + plan_qty + " / " + input_qty + " / " + output_qty + "" + " | " + "" + "標準工時: " + "" + ct1 + "
"; + + var rule_sation = await _basApi.GetRuleStationsByFlow(flow_rule_id); + wipDataList = wipDataList + ""; + + string stationQty = "
"; + string stationRate = "
過站數量
"; + string stationWip = "
良率
"; + + string stationList = ""; + for (int j = 0; j < rule_sation.Count; j++) + { + if (rule_sation[j].StationID != 1000 && rule_sation[j].StationType == "M") + { + stationList = stationList + rule_sation[j].RuleStationID + ","; + + wipDataList = wipDataList + ""; + + var wip_station = await _pcsApi.GetWipStation4QRS009Group(wip_id, rule_sation[j].RuleStationID); + + int okQty = 0, ngQty = 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()); + } + } + /* + for (int k = 0; k < wip_station.Count; k++) + { + if (wip_station[k].RuleStatus == "P") + { + okQty = wip_station[k].FirstCnt; + } + else + { + ngQty = wip_station[k].FirstCnt; + } + } + */ + } + + //stationQty = stationQty + ""; + stationQty = stationQty + ""; + + double rate = ((okQty * 1.0) / (okQty + ngQty)) * 100; + + if (j == rule_sation.Count - 2) + { + if (rate <= 90) + { + stationRate = stationRate + ""; + } + else if (rate >= 95 && rate <= 97) + { + stationRate = stationRate + ""; + } + else if (rate >= 98) + { + stationRate = stationRate + ""; + } + else + { + stationRate = stationRate + ""; + } + //stationRate = stationRate + ""; + } + else + { + //stationRate = stationRate + ""; + if (rate <= 90) + { + stationRate = stationRate + ""; + } + else if (rate >= 95 && rate <= 97) + { + stationRate = stationRate + ""; + } + else if (rate >= 98) + { + stationRate = stationRate + ""; + } + else + { + stationRate = stationRate + ""; + } + stationRate = stationRate + ""; + } + } + } + stationQty = stationQty + "
WIP" + rule_sation[j].StationDesc + "" + okQty + "/" + ngQty + "" + okQty + "/" + ngQty + "" + rate.ToString("0.00") + "%" + "" + rate.ToString("0.00") + "%" + "" + rate.ToString("0.00") + "%" + "" + rate.ToString("0.00") + "%" + "" + rate.ToString("0.00") + "%" + "" + rate.ToString("0.00") + "%" + "" + rate.ToString("0.00") + "%" + "" + rate.ToString("0.00") + "%" + "" + rate.ToString("0.00") + "%" + "" + rate.ToString("0.00") + "%" + "" + "" + " >> " + "" + "
"; + + stationRate = stationRate + ""; + + string[] station_list = stationList.Split(","); + + for (int j = 0; j < station_list.Length - 1; j++) + { + var wip_station1 = await _pcsApi.GetWipStation4QRS009Group(wip_id, int.Parse(station_list[j])); + + int okQty1 = 0, ngQty1 = 0; + + if (wip_station1.DataTotal > 0) + { + foreach (var data in wip_station1.Data) + { + JObject j1 = JObject.Parse(data.ToString()); + if (j1["ruleStatus"].ToString() == "P") + { + okQty1 = int.Parse(j1["firstCnt"].ToString()); + } + else + { + ngQty1 = int.Parse(j1["firstCnt"].ToString()); + } + } + + /* + for (int k = 0; k < wip_station1; k++) + { + if (wip_station1[k].RuleStatus == "P") + { + okQty1 = wip_station1[k].FirstCnt; + } + else + { + ngQty1 = wip_station1[k].FirstCnt; + } + } + */ + } + + int okQty2 = 0, ngQty2 = 0; + //计算WIP + if (j < station_list.Length - 2) + { + var wip_station2 = await _pcsApi.GetWipStation4QRS009Group(wip_id, int.Parse(station_list[j + 1])); + + if (wip_station2.DataTotal > 0) + { + /* + for (int k = 0; k < wip_station2.Count; k++) + { + if (wip_station2[k].RuleStatus == "P") + { + okQty2 = wip_station2[k].FirstCnt; + } + else + { + ngQty2 = wip_station2[k].FirstCnt; + } + } + */ + foreach (var data in wip_station2.Data) + { + JObject j2 = JObject.Parse(data.ToString()); + if (j2["ruleStatus"].ToString() == "P") + { + okQty2 = int.Parse(j2["firstCnt"].ToString()); + } + else + { + ngQty2 = int.Parse(j2["firstCnt"].ToString()); + } + } + } + } + int wip_qty = okQty1 + ngQty1 - okQty2 - ngQty2; + if (wip_qty < 0) + { + wip_qty = 0; + } + stationWip = stationWip + "" + wip_qty + ""; + } + + stationWip = stationWip + "
"; + + wipDataList = wipDataList + ""; + + wipDataList = wipDataList + stationQty; + wipDataList = wipDataList + stationRate; + wipDataList = wipDataList + stationWip; + + /* + wipDataList = wipDataList + ""; + for (int j = 0; j < rule_sation.Count; j++) + { + if (rule_sation[j].StationID != 1000 && rule_sation[j].StationType == "M") + { + wipDataList = wipDataList + ""; + } + } + wipDataList = wipDataList + "
過站數量" + "0/0" + "
"; + */ + + /* + wipDataList = wipDataList + ""; + for (int j = 0; j < rule_sation.Count; j++) + { + if (rule_sation[j].StationID != 1000 && rule_sation[j].StationType == "M") + { + if (j == rule_sation.Count - 2) + { + wipDataList = wipDataList + ""; + } + else + { + wipDataList = wipDataList + ""; + wipDataList = wipDataList + ""; + } + } + } + wipDataList = wipDataList + "
良率" + "100%" + "" + "100%" + "" + "" + " >> " + "" + "
"; + */ + + /* + wipDataList = wipDataList + ""; + for (int j = 0; j < rule_sation.Count; j++) + { + if (rule_sation[j].StationID != 1000 && rule_sation[j].StationType == "M") + { + wipDataList = wipDataList + ""; + } + } + wipDataList = wipDataList + "
WIP" + "0" + "

"; + */ + } + } + else + { + wipDataList = wipDataList + "查無資料"; + } + wipDataList = wipDataList + "
"; + ViewData["WipDataList"] = wipDataList; + return View("PCS008V"); + } #endregion diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs b/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs index 565d279e..36687747 100644 --- a/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs +++ b/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs @@ -102,6 +102,17 @@ namespace AMESCoreStudio.Web ITask> GetWipInfoSelectParameterInBarCodeStation(string unitno = null, string wipno = null, int lineid = 0 , string itemno = null, DateTime? date_str = null, DateTime? date_end = null); + /// + /// 查詢未結工單查詢 + /// + /// 生產單位 + /// 工單號碼 + /// + [WebApiClient.Attributes.HttpGet("api/WipInfos/GetWipInfoPCS008")] + //ITask> GetWipInfoSelectParameter(string unitno = null, string wipno = null); + ITask> GetWipInfoPCS008(string unitno = null, string wipno = null, int lineid = 0 + , string itemno = null, string date_str = null, string date_end = null, int page = 0, int limit = 10); + /// /// 查詢工單基本資料-WipID /// diff --git a/AMESCoreStudio.Web/Views/PCS/PCS008.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS008.cshtml index cfbcdded..173579aa 100644 --- a/AMESCoreStudio.Web/Views/PCS/PCS008.cshtml +++ b/AMESCoreStudio.Web/Views/PCS/PCS008.cshtml @@ -1,5 +1,4 @@ -@model AMESCoreStudio.Web.ViewModels.PCS.PCS009ViewModel - + @{ ViewData["Title"] = "未結工單查詢"; Layout = "~/Views/Shared/_AMESLayout.cshtml"; @@ -33,7 +32,7 @@
-
+
@ViewBag.Title
@@ -43,30 +42,26 @@
- -
-
-
- -
- + +
- +
- +
- +
@@ -75,27 +70,14 @@
-
-
- -
-

-
- - @**@ -
-
-
-
-
-
+
@@ -106,57 +88,25 @@ await Html.RenderPartialAsync("_FileinputScriptsPartial"); } } \ No newline at end of file diff --git a/AMESCoreStudio.Web/Views/PCS/PCS008F.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS008F.cshtml deleted file mode 100644 index 931d5750..00000000 --- a/AMESCoreStudio.Web/Views/PCS/PCS008F.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@{ - ViewData["Title"] = "在製分布圖-過站FAIL條碼資料"; - Layout = "~/Views/Shared/_AMESLayout.cshtml"; -} - -
-
- - -
-
-
- -@section Scripts{ - -} \ No newline at end of file diff --git a/AMESCoreStudio.Web/Views/PCS/PCS008P.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS008P.cshtml deleted file mode 100644 index 588705c6..00000000 --- a/AMESCoreStudio.Web/Views/PCS/PCS008P.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@{ - ViewData["Title"] = "在製分布圖-過站PASS條碼資料"; - Layout = "~/Views/Shared/_AMESLayout.cshtml"; -} - -
-
- - -
-
-
- -@section Scripts{ - -} \ No newline at end of file diff --git a/AMESCoreStudio.Web/Views/PCS/PCS008V.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS008V.cshtml index 370be687..ee1c5cb7 100644 --- a/AMESCoreStudio.Web/Views/PCS/PCS008V.cshtml +++ b/AMESCoreStudio.Web/Views/PCS/PCS008V.cshtml @@ -1,5 +1,5 @@ @{ - ViewData["Title"] = "在製分布圖"; + ViewData["Title"] = "未結工單分布圖"; Layout = "~/Views/Shared/_AMESLayout.cshtml"; } diff --git a/AMESCoreStudio.Web/Views/PCS/PCS008W.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS008W.cshtml deleted file mode 100644 index 57cff918..00000000 --- a/AMESCoreStudio.Web/Views/PCS/PCS008W.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@{ - ViewData["Title"] = "在製分布圖-在製條碼資料"; - Layout = "~/Views/Shared/_AMESLayout.cshtml"; -} - -
-
- - -
-
-
- -@section Scripts{ - -} \ No newline at end of file diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs index c57f5f95..44f0ac8d 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs @@ -211,14 +211,15 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES q = q.Where(w => w.lineID == value.lineid); } - if (value.date_str != null) + DateTime dateTime = DateTime.Now; + if (DateTime.TryParse(value.date_str, out dateTime)) { - q = q.Where(w => w.CreateDate >= value.date_str); + q = q.Where(w => w.CreateDate >= DateTime.Parse(value.date_str)); } - if (value.date_end != null) + if (DateTime.TryParse(value.date_end, out dateTime)) { - q = q.Where(w => w.CreateDate <= value.date_end); + q = q.Where(w => w.CreateDate <= DateTime.Parse(value.date_end)); } if (value.itemno != null) @@ -235,7 +236,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES q = q.Skip((page - 1) * limit).Take(limit); } - var qq = await q.ToListAsync(); + var qq = await q.ToListAsync(); // 塞入開工日 foreach (var item in qq) @@ -260,6 +261,83 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return result; } + /// + /// 查詢工單資料 未結工單查詢 + /// + /// + [Route("[action]")] + [HttpGet] + public async Task> GetWipInfoPCS008([FromQuery] WipInfoDto value, string statusNo = null) + { + ResultModel result = new ResultModel(); + var q = from q1 in _context.WipInfos where q1.CompleteQTY != 0 + 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 (statusNo == null) + { + q = q.Where(w => w.StatusNO != "E"); + } + + if (value.wipno != null) + { + q = q.Where(w => w.WipNO.Equals(value.wipno)); + } + + if (value.itemno != null) + { + q = q.Where(w => w.ItemNO.Equals(value.itemno)); + } + + if (value.unitno != null) + { + q = q.Where(w => w.UnitNO.Equals(value.unitno)); + } + + DateTime dateTime = DateTime.Now; + if (DateTime.TryParse(value.date_str , out dateTime)) + { + q = q.Where(w => w.CreateDate >= DateTime.Parse(value.date_str)); + } + + if (DateTime.TryParse(value.date_end, out dateTime)) + { + q = q.Where(w => w.CreateDate <= DateTime.Parse(value.date_end)); + } + + //紀錄筆數 + 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; + } + /// /// 查詢工單資料Info By WipID /// diff --git a/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs b/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs index 16a7fd83..ae3186f7 100644 --- a/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs +++ b/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs @@ -858,7 +858,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES OperatorID = 0, FixtureNo = "NA", BarcodeID = barCodeCheckDto.barcodeID, - ReasonNo = NgItem[0].inputData, + ReasonNo = NgItem[0].inputData.Replace("$", ""), ProgramNo = "N/A", MachineNo = "N/A", StationId = barCodeCheckDto.station, @@ -877,7 +877,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES { NgID = result.Data.FirstOrDefault().NgID, LocationNo = string.IsNullOrWhiteSpace(NGNo.oldInputData) ? "N/A" : NGNo.oldInputData, - NgNo = NGNo.inputData, + NgNo = NGNo.inputData.Replace("$", ""), CreateUserID = barCodeCheckDto.userID, UpdateUserID = barCodeCheckDto.userID }; diff --git a/AMESCoreStudio.WebApi/DTO/AMES/WipInfoDto.cs b/AMESCoreStudio.WebApi/DTO/AMES/WipInfoDto.cs index 2e787ecb..126b26ca 100644 --- a/AMESCoreStudio.WebApi/DTO/AMES/WipInfoDto.cs +++ b/AMESCoreStudio.WebApi/DTO/AMES/WipInfoDto.cs @@ -28,12 +28,12 @@ namespace AMESCoreStudio.WebApi.DTO.AMES /// /// 日期查詢開始 /// - public DateTime? date_str { get; set; } + public string date_str { get; set; } /// /// 日期查詢結束 /// - public DateTime? date_end { get; set; } + public string date_end { get; set; } /// /// 料號