From 9085ce380f1d8ab18e3fbc714562017336ab6d3f Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 14 Jul 2023 16:57:11 +0800 Subject: [PATCH] =?UTF-8?q?1.=20PCS004=20=E8=AA=BF=E6=95=B4=E6=9F=A5?= =?UTF-8?q?=E8=A9=A2=E5=88=A4=E6=96=B7=202.=20=E9=81=8E=E7=AB=99=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=20=E6=B2=BB=E5=85=B7=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PCSController.cs | 38 ++++--- AMESCoreStudio.Web/Views/PCS/PCS004.cshtml | 2 +- AMESCoreStudio.Web/Views/PCS/PCS005.cshtml | 4 +- AMESCoreStudio.Web/Views/PCS/PCS006.cshtml | 2 +- AMESCoreStudio.Web/Views/PCS/PCS012.cshtml | 4 +- .../AMES/OutfitInfoesController.cs | 103 ++++++++++++++++++ .../Controllers/AMES/WipAlarmsController.cs | 14 +++ .../Controllers/BLL/BarCodeCheckController.cs | 37 ++++++- AMESCoreStudio.WebApi/Enums/EnumWipAlarm.cs | 63 +++++++++++ 9 files changed, 243 insertions(+), 24 deletions(-) create mode 100644 AMESCoreStudio.WebApi/Enums/EnumWipAlarm.cs diff --git a/AMESCoreStudio.Web/Controllers/PCSController.cs b/AMESCoreStudio.Web/Controllers/PCSController.cs index 1ab6ab76..8f2d2c09 100644 --- a/AMESCoreStudio.Web/Controllers/PCSController.cs +++ b/AMESCoreStudio.Web/Controllers/PCSController.cs @@ -3603,14 +3603,18 @@ namespace AMESCoreStudio.Web.Controllers /// public async Task PCS004QueryAsync(string unitno, string wipno, int page = 0, int limit = 10) { - IResultModel result = await _pcsApi.GetWipInfoSelectParameter(unitno: unitno - , wipno: wipno - , page: page - , limit: limit); - - if (result.Data != null) + // 安勤要求需要輸入工單號碼 + if (!string.IsNullOrWhiteSpace(wipno)) { - return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal }); + IResultModel result = await _pcsApi.GetWipInfoSelectParameter(unitno: unitno + , wipno: wipno + , page: page + , limit: limit); + + if (result.Data != null) + { + return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal }); + } } return Json(new Table() { count = 0, data = null }); } @@ -7371,21 +7375,21 @@ namespace AMESCoreStudio.Web.Controllers else { - var result_EVER = await _pcsApi.GetFqcInhouseMasterMultiQuery_Avalue(barcodeNo: barcodeNo, wipNo: wipNo - , boxNo: boxNo, inhouseNo: inhouseNo, date_str: date_str, date_end: date_end - , status: status, page: page, limit: limit); + var result_EVER = await _pcsApi.GetFqcInhouseMasterMultiQuery_Avalue(barcodeNo: barcodeNo, wipNo: wipNo + , boxNo: boxNo, inhouseNo: inhouseNo, date_str: date_str, date_end: date_end + , status: status, page: page, limit: limit); + - foreach (var item in result_EVER.Data) - { - var wipresult= await _pcsApi.GetWipInfoByWipNO_EVER(wipno: item.WipNo); //查對應安勤工單&料號 - + { + var wipresult = await _pcsApi.GetWipInfoByWipNO_EVER(wipno: item.WipNo); //查對應安勤工單&料號 + item.WipNo = wipresult.Select(s => s.RelatedWONO).FirstOrDefault(); if (!string.IsNullOrWhiteSpace(item.WipNo)) { var itemresult = await _pcsApi.GetWipAtt(id: item.WipNo); - if ( itemresult != null) + if (itemresult != null) { item.ItemNo = itemresult.ItemNO; } @@ -7396,11 +7400,11 @@ namespace AMESCoreStudio.Web.Controllers } else { - item.ItemNo =""; + item.ItemNo = ""; } } - result = result_EVER ; + result = result_EVER; } if (result.Data.Count() != 0) diff --git a/AMESCoreStudio.Web/Views/PCS/PCS004.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS004.cshtml index 065a4c3b..6cc08338 100644 --- a/AMESCoreStudio.Web/Views/PCS/PCS004.cshtml +++ b/AMESCoreStudio.Web/Views/PCS/PCS004.cshtml @@ -43,7 +43,7 @@
- +
diff --git a/AMESCoreStudio.Web/Views/PCS/PCS005.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS005.cshtml index a45dc450..0601d5c2 100644 --- a/AMESCoreStudio.Web/Views/PCS/PCS005.cshtml +++ b/AMESCoreStudio.Web/Views/PCS/PCS005.cshtml @@ -28,7 +28,7 @@
- +
@@ -36,7 +36,7 @@
- +
diff --git a/AMESCoreStudio.Web/Views/PCS/PCS006.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS006.cshtml index 74805a4a..0bf6a2eb 100644 --- a/AMESCoreStudio.Web/Views/PCS/PCS006.cshtml +++ b/AMESCoreStudio.Web/Views/PCS/PCS006.cshtml @@ -43,7 +43,7 @@
- +
diff --git a/AMESCoreStudio.Web/Views/PCS/PCS012.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS012.cshtml index f20df2fd..63690a37 100644 --- a/AMESCoreStudio.Web/Views/PCS/PCS012.cshtml +++ b/AMESCoreStudio.Web/Views/PCS/PCS012.cshtml @@ -88,7 +88,7 @@
- +
@@ -96,7 +96,7 @@
- +
diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/OutfitInfoesController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitInfoesController.cs index 8f27f002..0e773ad5 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/OutfitInfoesController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/OutfitInfoesController.cs @@ -135,6 +135,109 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return q; } + /// + /// 取得治具與規格資料 + /// + /// 治具編號 + /// + [HttpGet("GetOutfitInfoAndOutfitVariety")] + public async Task> GetOutfitInfoAndOutfitVariety(string OutfitNo) + { + var q = from q1 in _context.OutfitInfoes + where q1.OutfitNo == OutfitNo.Trim().ToUpper() + join q2 in _context.OutfitVarityInfoes on q1.VarietyID equals q2.VarityID + select new + { + q1.OutfitNo, + q1.StatusNo, + q1.UseTimes, + q1.UseStatusNo, + q2.UseLimitTimes, + q2.AlertForeDays, + q2.Status, + q2.SafeStock + }; + return await q.ToListAsync(); + } + + /// + /// 確認治具編號是否已到預警提醒 + /// + /// 治具編號 + /// Y:是 N:否 + [HttpGet("GetOutfitInfoByAlertTimes")] + public async Task> GetOutfitInfoByAlertTimes(string OutfitNo) + { + var UseStatusNo = new List { "N", "R" }; + var q = await GetOutfitInfoAndOutfitVariety(OutfitNo); + if (q.Count() != 0) + { + if (q.Where(w => w.Status == "A" && w.StatusNo == "A" && UseStatusNo.Contains(w.UseStatusNo)).Any()) + { + if (q.Where(w => w.UseTimes >= Math.Abs(w.UseLimitTimes - w.AlertForeDays)).Any()) + { + return "Y"; + } + } + } + return "N"; + } + + /// + /// 在庫治具可用數量 + /// + /// 治具編號 + /// + [HttpGet("GetTotalInStock")] + public async Task> GetOutfitInfoByTotalInStock(string OutfitNo) + { + var q = await GetOutfitInfoByOutfitNo(OutfitNo.Trim().ToUpper()); + var UseStatusNo = new List { "N", "R" }; + if (q.Value != null) + { + var qq = from q1 in _context.OutfitInfoes + where q1.VarietyID == q.Value.VarietyID + join q2 in _context.OutfitVarityInfoes on q1.VarietyID equals q2.VarityID + select new + { + q1.OutfitNo, + q1.StatusNo, + q1.UseTimes, + q1.UseStatusNo, + q2.UseLimitTimes, + q2.AlertForeDays, + q2.Status, + q2.SafeStock + }; + + return qq.Where(w => w.Status == "A" && w.StatusNo == "A" && UseStatusNo.Contains(w.UseStatusNo)) + .Sum(s => s.SafeStock); + } + return 0; + } + + /// + /// 確認治具編號使用次數已經超過預計次數 + /// + /// 治具編號 + /// Y:是 N:否 + [HttpGet("GetOutfitInfoByOverUseTimes")] + public async Task> GetOutfitInfoByOverUseTimes(string OutfitNo) + { + var q = await GetOutfitInfoAndOutfitVariety(OutfitNo); + if (q.Count() != 0) + { + if (q.Where(w => w.Status == "A" && w.StatusNo == "A").Any()) + { + if (q.Where(w => w.UseTimes >= Math.Abs(w.UseLimitTimes)).Any()) + { + return "Y"; + } + } + } + return "N"; + } + /// /// /// diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/WipAlarmsController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/WipAlarmsController.cs index c53e4253..25f2d789 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/WipAlarmsController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/WipAlarmsController.cs @@ -170,6 +170,20 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return wipAlarm; } + /// + /// By 工單號碼與治具編號查詢通知 + /// + /// 工單號碼 + /// 治具編號 + /// + [HttpGet("ByOutfit")] + public async Task>> GetWipAlarmByOutfit(string wipNo, string outfitNo) + { + IQueryable q = _context.WipAlarms.Where(w => w.WipNO == wipNo.Trim().ToUpper() && w.AlarmParam == outfitNo.Trim().ToUpper()); + var wipAlarm = await q.ToListAsync(); + return wipAlarm; + } + /// /// 修改警報資料 /// diff --git a/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs b/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs index 571d1ab8..12196b95 100644 --- a/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs +++ b/AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs @@ -10,6 +10,9 @@ using AMESCoreStudio.WebApi.Models.AMES; using AMESCoreStudio.CommonTools.Result; using AMESCoreStudio.WebApi.Controllers.BAS; using AMESCoreStudio.WebApi.DTO.AMES; +using AMESCoreStudio.WebApi.Controllers.BLL; +using AMESCoreStudio.WebApi.Enum; +using Microsoft.Extensions.Configuration; namespace AMESCoreStudio.WebApi.Controllers.AMES { @@ -21,13 +24,15 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES public class BarCodeCheckController : ControllerBase { private readonly AMESContext _context; + private readonly IConfiguration _config; /// /// /// /// - public BarCodeCheckController(AMESContext context) + public BarCodeCheckController(AMESContext context, IConfiguration config) { + _config = config; _context = context; } @@ -887,6 +892,36 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES if (!result.Success) return result; } + + WipAlarmsController wipAlarmsController = new WipAlarmsController(_context); + var wipAlarms = await wipAlarmsController.GetWipAlarmByOutfit(barCodeCheckDto.wipNo, item.inputData.Trim().ToUpper()); + // 判斷確認治具編號是否已到預警提醒 + if (outfitInfoesController.GetOutfitInfoByAlertTimes(item.inputData.Trim().ToUpper()).Result.Value == "Y") + { + if (!wipAlarms.Value.Where(w => w.AlarmTypeID == (int)EnumWipAlarm.EnumTypeId.OutfitAlert).Any()) + { + string MailGroup = "OUTFIT_ALARM"; + string Subject = $"[AMES系統通知] 治具編號:{item.inputData.Trim().ToUpper()},預警提前通知"; + string Body = ""; + + await new MailController(_context, _config).PostMail(Subject, Body, MailGroup, "", false); + + WipAlarm wipAlarm = new WipAlarm(); + wipAlarm.AlarmTypeID = (int)EnumWipAlarm.EnumTypeId.OutfitAlert; + wipAlarm.WipNO = barCodeCheckDto.wipNo; + wipAlarm.AlarmParam = item.inputData.ToUpper(); + wipAlarm.AlarmValue = "1"; + wipAlarm.AlarmDesc = Subject; + wipAlarm.AlarmDateTime = DateTime.Now; + + await wipAlarmsController.PostWipAlarm(wipAlarm); + } + } + //// 確認治具編號使用次數已經超過預計次數 + //if (outfitInfoesController.GetOutfitInfoByOverUseTimes("").Result.Value == "Y") + //{ + + //} } return result; diff --git a/AMESCoreStudio.WebApi/Enums/EnumWipAlarm.cs b/AMESCoreStudio.WebApi/Enums/EnumWipAlarm.cs new file mode 100644 index 00000000..2b8dafae --- /dev/null +++ b/AMESCoreStudio.WebApi/Enums/EnumWipAlarm.cs @@ -0,0 +1,63 @@ +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System; +using System.Linq; +using System.Reflection; +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc.Rendering; + +namespace AMESCoreStudio.WebApi.Enum +{ + /// + /// 工單警示通知 + /// + public class EnumWipAlarm + { + /// + /// WipAlarm_TypeId 類型 + /// + public enum EnumTypeId + { + /// + /// 工單號碼不良代碼累積超過 + /// + [Description("工單號碼不良代碼累積超過")] + [Display(Name = "工單號碼不良代碼累積超過")] + BarCodeCheckNg = 1 , + + /// + /// 維修代碼累積超過 + /// + [Description("維修代碼累積超過")] + [Display(Name = "維修代碼累積超過")] + PostNgComponent = 3, + + /// + /// 治具到達預警提前通知 + /// + [Description("治具到達預警提前通知")] + [Display(Name = "治具到達預警提前通知")] + OutfitAlert = 4, + + /// + /// 治具使用次數已超過預計使用次數 + /// + [Description("治具使用次數已超過預計使用次數")] + [Display(Name = "治具使用次數已超過預計使用次數")] + OutfitOutLimit = 5, + } + + /// + /// Get Enum Display + /// + /// + /// + public static string GetDisplayName(System.Enum enumValue) + { + return enumValue.GetType()? + .GetMember(enumValue.ToString())?.First()? + .GetCustomAttribute()? + .Name; + } + } +} \ No newline at end of file