diff --git a/AMESCoreStudio.Web/Controllers/FQCController.cs b/AMESCoreStudio.Web/Controllers/FQCController.cs index 67806974..4d16dd8a 100644 --- a/AMESCoreStudio.Web/Controllers/FQCController.cs +++ b/AMESCoreStudio.Web/Controllers/FQCController.cs @@ -43,7 +43,7 @@ namespace AMESCoreStudio.Web.Controllers _env = env; _pcsApi = pcsApi; _bllApi = bllApi; - _basApi = basApi; + _basApi = basApi; } #region 下拉選單 @@ -1210,6 +1210,9 @@ namespace AMESCoreStudio.Web.Controllers if (model.QaResult == "P") await _fqcApi.PassingByFQC(model.InhouseNo, model.SeqID, GetLogInUserID()); + //FQC報表自動派送 + await CheckFQCToMail(fqcInhouseMaster.ItemNo, model.QaResult, model.InhouseNo, model.SeqID); + var _msg = "新增成功!"; return RedirectToAction("WindowReload", "Home", new { msg = _msg }); } @@ -1222,6 +1225,60 @@ namespace AMESCoreStudio.Web.Controllers } #endregion + #region 自動寄信 + /// + /// 判斷是否設定FQC自動自動寄信 + /// + /// 料號 + /// 抽驗結果 + /// FQC單號 + /// FQC單號_編號 + /// + private async Task CheckFQCToMail(string Material, string Result, string inhouseNo, int seqID) + { + var result = await _fqcApi.GetFqcNoticeMailQuery(material: Material, fqcResult: Result, status: "Y"); + if (result.Data.Count() != 0) + { + var MailGroup = result.Data.Select(s => s.MailGroup).ToArray(); + // 檔案上傳 到暫存區 + string FileName = $"{inhouseNo}_{seqID} {DateTime.Now:yyyyMMddHHmm}.xls"; + string NewName = string.Empty; + string FilePath = string.Empty; + //取得使用者上傳檔案的原始檔名 + //取原始檔名中的副檔名 + //var fileExt = Path.GetExtension(FileName); + //為避免使用者上傳的檔案名稱發生重複,重新給一個亂數名稱 + //NewName = Path.GetRandomFileName() + fileExt; + //指定要寫入的路徑、檔名和副檔名 + FilePath = $@"{_env.WebRootPath}\UploadFolder\FQC\Temp"; + var path = $@"{FilePath}\{FileName}"; + + if (!Directory.Exists(FilePath)) + { + Directory.CreateDirectory(FilePath); + } + + string mimeType = ""; + int extension = 1; + Dictionary param = new Dictionary(); + var localReport = GetReprot(inhouseNo, seqID); + var reportResult = localReport.Result.Execute(RenderType.Excel, extension, param, mimeType); + + using (var stream = new FileStream(path, FileMode.Create)) + { + await stream.WriteAsync(reportResult.MainStream, 0, reportResult.MainStream.Length); + } + + Result = Result == "P" ? "允收" : "驗退"; + string Subject = $"FQC自動派送發信 FQC單號:{inhouseNo} 料號:{Material}"; + string Body = $@"FQC單號:{inhouseNo} 料號:{Material}
+ 檢驗結果為:{Result}"; + + await _bllApi.PostToMail(Subject, Body, string.Join(',', MailGroup) , "", false, path); + } + } + #endregion + #region 附件 [HttpGet] public async Task FQC007D(int fqc) @@ -1294,7 +1351,7 @@ namespace AMESCoreStudio.Web.Controllers } else { - ModelState.AddModelError("error", "ssddf"); + ModelState.AddModelError("error", "請確認是否夾帶檔案"); } model.fqcResultMasterBlobs = await _fqcApi.GetFqcResultMasterBlobByFqcID(model.FqcID); return View("FQC007D", model); @@ -1519,133 +1576,38 @@ namespace AMESCoreStudio.Web.Controllers { string mimeType = ""; int extension = 1; - var path = $"{this._env.WebRootPath}\\Reports\\FQC010View.rdlc"; - LocalReport localReport = new LocalReport(path); Dictionary param = new Dictionary(); - System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); - System.Text.Encoding.GetEncoding(1252); - var FQC010Master = new FQC010VIiew(); - IResultModel resultFqcQuery; - resultFqcQuery = _fqcApi.GetFqcQuery(inhouseNo, seqID).InvokeAsync().Result; - - if (resultFqcQuery.Data.Count() != 0) - { - var FqcQuery = resultFqcQuery.Data.FirstOrDefault(); - // Enum 轉換 - FqcQuery.AQLType = EnumFQC.GetDisplayName((EnumFQC.EnumAQL_Type)Enum.Parse(typeof(EnumFQC.EnumAQL_Type), FqcQuery.AQLType)); - FqcQuery.InspectionStatus = EnumFQC.GetDisplayName((EnumFQC.EnumInspection_Status)Enum.Parse(typeof(EnumFQC.EnumInspection_Status), FqcQuery.InspectionStatus)); - - FQC010Master = new FQC010VIiew() - { - DefectDescription = FqcQuery.QaMeno, - InspectionDate = FqcQuery.EndTime, - AC = FqcQuery.AcQty.ToString(), - Approved = FqcQuery.Supervisor_Name, - AQL = FqcQuery.AQL.ToString(), - SpeciallyAdoption = FqcQuery.SpecialPo, - BIOSVer = FqcQuery.BIOS, - ECN = FqcQuery.PLMECN, - ECNMemo = FqcQuery.ECN_Memo, - Factory = FqcQuery.Werk.Split('-')[0], - FactoryRemark = FqcQuery.Werk.Split('-')[1], - InspectionInstrumentNumber = FqcQuery.OutfitNo, - InspectionItems = $"OS:[{FqcQuery.OS}] CPU test:[{FqcQuery.CPU}] RAM test:[{FqcQuery.RAM}]", - InspectionNumber = FqcQuery.InhouseNo, - InspectionStatus = FqcQuery.InspectionStatus, - InspectionType = FqcQuery.InspectionTypeName, - Inspector = FqcQuery.UpdateUser_Name, - Judgment = "Defect Quantity", - Line = FqcQuery.InhouseMemo, - LotSize = FqcQuery.InhouseQty.ToString(), - Major = FqcQuery.MajorQty.ToString(), - MedicalModel = FqcQuery.CustomerMedical, - Minor = FqcQuery.MinorQty.ToString(), - Model = FqcQuery.ItemNo, - ModelName = FqcQuery.ModelNo, - NOTE = FqcQuery.Note, - OrderNumber = FqcQuery.WipNo, - QuotDescription = FqcQuery.QuotDescription, - ReMajor = FqcQuery.ReQty.ToString(), - Sample = FqcQuery.QcQty.ToString(), - QuotName = FqcQuery.QuotName, - //StorageLocation = "9000", - Avalue = "AVALUE", - VIP = FqcQuery.CustomerVIP, - WaiveRequisition = FqcQuery.StatusName, - AQLType = FqcQuery.AQLType - }; - - // 抓全部檢驗工項 - var result_QcItem = await _fqcApi.GetQcItemQuery(0, 0, 0); - // 取綁定工單檢驗工項資料 - var result_WipFQC = await _fqcApi.GetWipFqcItemByWipNo(FqcQuery.WipNo); - if (result_WipFQC.Count == 0) - { - //工單無設定檢驗工項時 在抓料號綁定檢驗工項 - var result_MaterialFQC = await _fqcApi.GetMaterialFqcItemsByitemNo(FqcQuery.ItemNo); - if (result_MaterialFQC.Count != 0) - { - // 檢驗工項 - foreach (var item in result_QcItem.Data.Where(w => result_MaterialFQC.Select(s => s.QcItemID).Contains(w.ItemID)).ToList()) - { - FQC010Master.Detail1.Add(new FQC010Detail1 - { - ItemID = item.ItemID.ToString(), - ItemName = item.ItemNameCN, - ItemType = item.ItemTypeName - }); - } - } - } - else - { - // 檢驗工項 - foreach (var item in result_QcItem.Data.Where(w => result_WipFQC.Select(s => s.QcItemID).Contains(w.ItemID)).ToList()) - { - FQC010Master.Detail1.Add(new FQC010Detail1 - { - ItemID = item.ItemID.ToString(), - ItemName = item.ItemNameCN, - ItemType = item.ItemTypeName - }); - } - } - - // 條碼細項 - var fqcDetail = await _fqcApi.FQC007InhouseDetails(FqcQuery.InhouseNo, Convert.ToInt32(FqcQuery.SeqID)); - foreach (var item in fqcDetail.Data) - { - FQC010Master.Detail2.Add(new FQC010Detail2 - { - ProductionSerialNumber = item.BarcodeNo, - ShippingSerialNumber = item.ExtraBarcodeNo, - IsSample = item.IsSample, - InspectionResults = item.StatusNo - }); - } - } + var localReport = GetReprot(inhouseNo, seqID); + var result = localReport.Result.Execute(RenderType.Pdf, extension, param, mimeType); + return File(result.MainStream, "application/pdf"); + } - var FQC010Masters = new List(); - FQC010Masters.Add(FQC010Master); + public async Task FQC010_Excel(string inhouseNo, int seqID) + { + string mimeType = ""; + int extension = 1; + Dictionary param = new Dictionary(); + var localReport = GetReprot(inhouseNo, seqID); + var result = localReport.Result.Execute(RenderType.Excel, extension, param, mimeType); + return File(result.MainStream, "application/msexcel", "Export.xls"); + //return File(result.MainStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Export.xlsx"); - localReport.AddDataSource("DataSet1", FQC010Masters); - localReport.AddDataSource("DataSet2", FQC010Master.Detail1); - localReport.AddDataSource("DataSet3", FQC010Master.Detail2); - var result = localReport.Execute(RenderType.Pdf, extension, param, mimeType); - return File(result.MainStream, "application/pdf"); - //var result = localReport.Execute(RenderType.Excel, extension, param, mimeType); //return File(result.MainStream, "application/msexcel", "Export.xls"); } - public async Task FQC010_Excel(string inhouseNo, int seqID) + /// + /// 產生FQC報表 + /// + /// FQC單號 + /// FQC單號_編號 + /// + private async Task GetReprot(string inhouseNo, int seqID) { - string mimeType = ""; - int extension = 1; var path = $"{this._env.WebRootPath}\\Reports\\FQC010View.rdlc"; LocalReport localReport = new LocalReport(path); - Dictionary param = new Dictionary(); + System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); System.Text.Encoding.GetEncoding(1252); var FQC010Master = new FQC010VIiew(); @@ -1756,12 +1718,7 @@ namespace AMESCoreStudio.Web.Controllers localReport.AddDataSource("DataSet2", FQC010Master.Detail1); localReport.AddDataSource("DataSet3", FQC010Master.Detail2); - //var result = localReport.Execute(RenderType.Pdf, extension, param, mimeType); - //return File(result.MainStream, "application/pdf"); - - var result = localReport.Execute(RenderType.Excel, extension, param, mimeType); - await _bllApi.PostToMail("主旨", "內容", "", "raylin@hotmail.com", false, result.MainStream); - return File(result.MainStream, "application/msexcel", "Export.xls"); + return localReport; } #endregion @@ -1815,7 +1772,7 @@ namespace AMESCoreStudio.Web.Controllers var checkMaterialItem = await _pcsApi.GetMaterialItemByItemNO(modelRequest.Material.ToUpper()); if (checkMaterialItem == null) { - isValid = false; + isValid = false; ModelState.AddModelError("error", "找不到料號"); } diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IBLL.cs b/AMESCoreStudio.Web/HttpApis/AMES/IBLL.cs index 8b6645fa..bccd68c7 100644 --- a/AMESCoreStudio.Web/HttpApis/AMES/IBLL.cs +++ b/AMESCoreStudio.Web/HttpApis/AMES/IBLL.cs @@ -28,7 +28,7 @@ namespace AMESCoreStudio.Web /// 附件 /// [WebApiClient.Attributes.HttpPost("api/Mail/ToMail")] - ITask> PostToMail(string Subject, string Body, string ToMailGroup, string ToMail, bool ToCC = false, byte[] Attachment = null); + ITask> PostToMail(string Subject, string Body, string ToMailGroup, string ToMail, bool ToCC = false, string Attachment = null); #endregion } } diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IFQC.cs b/AMESCoreStudio.Web/HttpApis/AMES/IFQC.cs index 6b52ed5a..713ee797 100644 --- a/AMESCoreStudio.Web/HttpApis/AMES/IFQC.cs +++ b/AMESCoreStudio.Web/HttpApis/AMES/IFQC.cs @@ -559,7 +559,7 @@ namespace AMESCoreStudio.Web /// /// [WebApiClient.Attributes.HttpGet("api/FqcNoticeMail/Query")] - ITask> GetFqcNoticeMailQuery(string material, string fqcResult, string status, int page = 0, int limit = 10); + ITask> GetFqcNoticeMailQuery(string material, string fqcResult = null, string status = null, int page = 0, int limit = 10); /// /// 查詢FQC報表自動派送 ID diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/FqcNoticeMailController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/FqcNoticeMailController.cs index 24ce4884..ee0c9e7c 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/FqcNoticeMailController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/FqcNoticeMailController.cs @@ -40,7 +40,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES // GET: api/FqcNoticeMail/5 [HttpGet("{id}")] - public async Task GetFqcNoticeMail(int id) + public async Task GetFqcNoticeMailBy(int id) { IQueryable q = _context.FqcNoticeMails.Where(w => w.FqcNoticeMailID == id); var result = await q.FirstOrDefaultAsync(); diff --git a/AMESCoreStudio.WebApi/Controllers/BLL/MailController.cs b/AMESCoreStudio.WebApi/Controllers/BLL/MailController.cs index 89bd086a..df0e473c 100644 --- a/AMESCoreStudio.WebApi/Controllers/BLL/MailController.cs +++ b/AMESCoreStudio.WebApi/Controllers/BLL/MailController.cs @@ -44,7 +44,7 @@ namespace AMESCoreStudio.WebApi.Controllers.BLL /// 附件 /// [HttpPost("ToMail")] - public async Task> PostMail(string Subject, string Body, string ToMailGroup, string ToMail, bool ToCC = false, byte[] Attachment = null) + public async Task> PostMail(string Subject, string Body, string ToMailGroup, string ToMail, bool ToCC = false, string Attachment = null) { ResultModel result = new ResultModel(); @@ -84,7 +84,7 @@ namespace AMESCoreStudio.WebApi.Controllers.BLL foreach (var userMail in await q.ToListAsync()) { - if (string.IsNullOrWhiteSpace(userMail.UserEMail)) + if (!string.IsNullOrWhiteSpace(userMail.UserEMail)) { mesMail.CC.Add(new MailAddress(userMail.UserEMail)); } @@ -127,7 +127,7 @@ namespace AMESCoreStudio.WebApi.Controllers.BLL foreach (var userMail in await q.ToListAsync()) { - if (string.IsNullOrWhiteSpace(userMail.UserEMail)) + if (!string.IsNullOrWhiteSpace(userMail.UserEMail)) { mesMail.To.Add(new MailAddress(userMail.UserEMail)); } @@ -153,10 +153,7 @@ namespace AMESCoreStudio.WebApi.Controllers.BLL // 是否有附件檔案 if (Attachment != null) { - using (MemoryStream ms = new MemoryStream(Attachment)) - { - mesMail.Attachments.Add(new Attachment(ms, "application/msexcel", "Export.xls")); - } + mesMail.Attachments.Add(new Attachment(Attachment)); } SmtpClient mailClient = new SmtpClient(mailSmtpServer, mailSmtpPort); @@ -165,18 +162,19 @@ namespace AMESCoreStudio.WebApi.Controllers.BLL NetworkCredential nc = new NetworkCredential(); nc.UserName = mailUser; nc.Password = mailPassword; - mailClient.Credentials = nc; - mailClient.Send(mesMail); + try { + mailClient.Credentials = nc; + mailClient.Send(mesMail); result.Success = true; - result.Msg = "OK"; + result.Msg = "寄信成功"; } catch (Exception ex) { result.Success = false; - result.Msg = ex.InnerException.Message; + result.Msg = "寄信失敗,錯誤:" + ex.InnerException.Message; } return result;