From 4b8291d78726885663999d10a414fd0c7965f243 Mon Sep 17 00:00:00 2001 From: chi Date: Mon, 12 Jun 2023 00:04:03 +0900 Subject: [PATCH] .. --- Project/Properties/AssemblyInfo.cs | 4 +- Project/StateMachine/_BW.cs | 12 ++ Project/StateMachine/_MailService.cs | 189 ++++++++++++++++++++++++++ Project/fMain.Designer.cs | 38 ++++-- Project/fMain.cs | 5 + Project/fMain.resx | 10 +- SubProject/FCOMMON/DataBaseManager.cs | 14 ++ 7 files changed, 256 insertions(+), 16 deletions(-) diff --git a/Project/Properties/AssemblyInfo.cs b/Project/Properties/AssemblyInfo.cs index 0a79d2b..f9ed788 100644 --- a/Project/Properties/AssemblyInfo.cs +++ b/Project/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로 // 지정되도록 할 수 있습니다. // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("23.06.08.1140")] -[assembly: AssemblyFileVersion("23.06.08.1140")] +[assembly: AssemblyVersion("23.06.11.2350")] +[assembly: AssemblyFileVersion("23.06.11.2350")] diff --git a/Project/StateMachine/_BW.cs b/Project/StateMachine/_BW.cs index 40ef8dd..2b6d492 100644 --- a/Project/StateMachine/_BW.cs +++ b/Project/StateMachine/_BW.cs @@ -20,6 +20,7 @@ namespace Project DateTime ChkNoSchedule = DateTime.Now.AddDays(-1); DateTime ChkJobreportDay = DateTime.Now.AddDays(-1); DateTime ChkJObreportWeek = DateTime.Now.AddDays(-1); + DateTime ChkTakeARest = DateTime.Now.AddDays(-1); public string MailSort(string addr, string except) { @@ -145,7 +146,18 @@ namespace Project finally { ChkJobreportDay = DateTime.Now; } } + ///휴가신청(Remind) - 230611 + var tsTakeaRest = DateTime.Now - ChkTakeARest; + if (tsTakeaRest.TotalMinutes > 15 && + DateTime.Now.DayOfWeek != DayOfWeek.Saturday && + DateTime.Now.DayOfWeek != DayOfWeek.Sunday && + DateTime.Now.Hour >= 17) + { + try { Mail_Take_a_rest_remind(); } + catch { } + finally { ChkTakeARest = DateTime.Now; } + } System.Threading.Thread.Sleep(1000); } diff --git a/Project/StateMachine/_MailService.cs b/Project/StateMachine/_MailService.cs index 24add3a..8f61333 100644 --- a/Project/StateMachine/_MailService.cs +++ b/Project/StateMachine/_MailService.cs @@ -1213,6 +1213,195 @@ namespace Project } } + /// + /// 휴가신청(Remind) + /// + void Mail_Take_a_rest_remind() + { + + var taForm = new DSMailTableAdapters.MailFormTableAdapter(); + var taMailData = new DSMailTableAdapters.MailDataTableAdapter(); + var taMailPrjSche = new DSMailTableAdapters.vMailingProjectScheduleTableAdapter(); + var vCate = "HA"; + try + { + Console.WriteLine("휴가신청remind - 검출 시작"); + var gcodelist = FCOMMON.DBM.getGroupListWithoutGcode("gcode", "MailForm", "gcode is not null and gcode <> 'DEV'"); + + //var db = new EEEntities(); + + //기준일자는 오늘부터 -15일이다 + var sd = DateTime.Now.AddDays(-15); + var ed = DateTime.Now; + var str_sd = sd.ToShortDateString(); + var str_ed = ed.ToShortDateString(); + var str_dt = DateTime.Now.ToShortDateString(); + + //var gcodelist = db.MailForm.GroupBy(t => t.gcode).ToList(); + var cn = FCOMMON.DBM.getCn(); + cn.Open(); + var cmd = new System.Data.SqlClient.SqlCommand("", cn); + + foreach (var vGcode in gcodelist) + { + //메일양식이 지정되어있는지 체크 + var MailJD = taForm.GetData(vGcode, vCate).FirstOrDefault(); + if (MailJD == null) continue; + if (MailJD.exceptmail == null) MailJD.exceptmail = string.Empty; + if (MailJD.exceptmailcc == null) MailJD.exceptmailcc = string.Empty; + if (string.IsNullOrEmpty(MailJD.subject) || string.IsNullOrEmpty(MailJD.tolist)) continue; + + //오늘날짜로 데이터가 등록되어있느지 확인한다. + var Existweek = taMailData.GetData(vGcode, str_dt, vCate).Where(t => t.tolist.Equals("chikyun.kim@amkor.co.kr") == false && t.wuid.Equals("debug") == false).Any(); + if (Existweek) return; + + //대상 사용자 목록을 추출한다 + var sql = "select datediff(day, getdate(),sdate ),uid,cate,sdate,edate,isnull(remark,'')" + + " ,holydays,holytimes from EETGW_HolydayRequest " + + $" where gcode = '{vGcode}'" + + " and isnull(conf,0) = 0" + + " and datediff(day, getdate(), sdate ) between - 100 and 2" + + " order by sdate desc"; + cmd.CommandText = sql; + var dar = cmd.ExecuteReader(); + + + //메일데이터 생성 + var body = new System.Text.StringBuilder(); + body.AppendLine(""); + body.AppendLine(""); + body.AppendLine(""); + body.AppendLine(""); + body.AppendLine(""); + body.AppendLine(""); + body.AppendLine(""); + body.AppendLine(""); + body.AppendLine(""); + body.AppendLine(""); + body.AppendLine(""); + + while (dar.Read()) + { + var idx = 0; + var remainday = int.Parse(dar[idx++].ToString()); + var uid = dar[idx++].ToString(); + var username = FCOMMON.DBM.GetUserName(vGcode, uid); + var cate = dar[idx++].ToString(); + var sdate = dar[idx++].ToString(); + var edate = dar[idx++].ToString(); + var remark = dar[idx++].ToString(); + var o_days = dar[idx++]; + var o_time = dar[idx++]; + var v_days = string.Empty; + var v_time = string.Empty; + if (o_days != null) v_days = o_days.ToString(); + if (o_time != null) v_time = o_time.ToString(); + + body.AppendLine($""); + body.AppendLine($""); + body.AppendLine($""); + body.AppendLine($""); + body.AppendLine($""); + body.AppendLine($""); + body.AppendLine($""); + body.AppendLine($""); + body.AppendLine($""); + body.AppendLine(""); + } + body.AppendLine("
남은일수신청인형태시작일종료일시간비고
{remainday}[{uid}] {username}{cate}{sdate}{edate}{v_days}{v_time}{remark}
"); + dar.Close(); + + //일별경고(월요일제외) + var mail_subject = MailJD.subject;//.Replace("{담당자}", userinfo.name).Replace("{사번}", userinfo.id); + var mail_to = MailJD.tolist;//.Replace("{담당자}", userinfo.email); + var mail_cc = string.Empty; // + if (MailJD.cc != null) mail_cc = MailJD.cc;//.Replace("{담당자}", userinfo.email); + var mail_bcc = string.Empty; + if (MailJD.bcc != null) mail_bcc = MailJD.bcc;//.Replace("{담당자}", userinfo.email); + var mail_body = MailJD.body;//.Replace("{담당자}", userinfo.name); + //mail_body = mail_body.Replace("{사번}", userinfo.id); + + //메일본문을 생성해서 진행해야함 + var mail_content = mail_body.Replace("{data}", body.ToString()); + + //메일데이터를 생성한다. + //mail_to = "chikyun.kim@amkor.co.kr"; + //mail_bcc = string.Empty; + //mail_cc = string.Empty; + + mail_to = MailSort(mail_to, MailJD.exceptmail); + if (string.IsNullOrEmpty(mail_to) == false) + { + using (var dt = new DSMail.MailDataDataTable()) + { + var newdr = dt.NewMailDataRow(); + newdr.gcode = vGcode; + newdr.cate = vCate; + newdr.subject = mail_subject; + newdr.fromlist = "eetgw@amkor.co.kr"; + newdr.tolist = mail_to;// MailSort(mail_to, MailJD.exceptmail); + newdr.bcc = mail_bcc; + newdr.cc = MailSort(mail_cc, MailJD.exceptmailcc); + newdr.pdate = DateTime.Now.ToShortDateString(); + newdr.body = mail_content; + newdr.wuid = FCOMMON.info.Login.no;// "dev"; + newdr.wdate = DateTime.Now; + + if (System.Diagnostics.Debugger.IsAttached) + { + newdr.tolist = "chikyun.kim@amkor.co.kr"; + newdr.bcc = string.Empty; + newdr.cc = string.Empty; + newdr.wuid = "debug"; + } + newdr.EndEdit(); + dt.AddMailDataRow(newdr); + taMailData.Update(dt);// db.SaveChanges(); + Console.WriteLine($"[{vGcode}] 메일 전송 완료(holy remind)"); + } + } + } + + cmd.Dispose(); + cn.Close(); + cn.Dispose(); + } + catch (Exception ex) + { + + using (var dt = new DSMail.MailDataDataTable()) + { + var newdr = dt.NewMailDataRow(); + newdr.gcode = "EET1P"; + newdr.cate = "ER"; + newdr.subject = "[ERROR] holy remind 메일작성 실패"; + newdr.fromlist = "chikyun.kim@amkor.co.kr"; + newdr.tolist = "chikyun.kim@amkor.co.kr"; + newdr.bcc = string.Empty; + newdr.cc = string.Empty; + newdr.pdate = DateTime.Now.ToShortDateString(); + newdr.body = ex.Message; + newdr.wuid = FCOMMON.info.Login.no;// "dev"; + newdr.wdate = DateTime.Now; + if (System.Diagnostics.Debugger.IsAttached) + { + newdr.tolist = "chikyun.kim@amkor.co.kr"; + newdr.bcc = string.Empty; + newdr.cc = string.Empty; + newdr.wuid = "debug"; + } + newdr.EndEdit(); + dt.AddMailDataRow(newdr); + var cnt = taMailData.Update(dt); + } + + } + + + taForm.Dispose(); + taMailData.Dispose(); + taMailPrjSche.Dispose(); + } } } diff --git a/Project/fMain.Designer.cs b/Project/fMain.Designer.cs index bc325e7..694f8a8 100644 --- a/Project/fMain.Designer.cs +++ b/Project/fMain.Designer.cs @@ -149,6 +149,8 @@ this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); this.toolStripButton3 = new System.Windows.Forms.ToolStripButton(); + this.메일전송ToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.휴가REMINDToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.cmTab.SuspendLayout(); this.statusStrip1.SuspendLayout(); this.menuStrip1.SuspendLayout(); @@ -392,7 +394,7 @@ // 일반구매ToolStripMenuItem // this.일반구매ToolStripMenuItem.Name = "일반구매ToolStripMenuItem"; - this.일반구매ToolStripMenuItem.Size = new System.Drawing.Size(180, 24); + this.일반구매ToolStripMenuItem.Size = new System.Drawing.Size(139, 24); this.일반구매ToolStripMenuItem.Text = "NR 구매"; this.일반구매ToolStripMenuItem.Click += new System.EventHandler(this.일반구매ToolStripMenuItem_Click); // @@ -400,7 +402,7 @@ // this.cR구매ToolStripMenuItem.ForeColor = System.Drawing.Color.Black; this.cR구매ToolStripMenuItem.Name = "cR구매ToolStripMenuItem"; - this.cR구매ToolStripMenuItem.Size = new System.Drawing.Size(180, 24); + this.cR구매ToolStripMenuItem.Size = new System.Drawing.Size(139, 24); this.cR구매ToolStripMenuItem.Text = "CR 구매"; this.cR구매ToolStripMenuItem.Click += new System.EventHandler(this.cR구매ToolStripMenuItem_Click); // @@ -408,19 +410,19 @@ // this.sPR구매ToolStripMenuItem.Enabled = false; this.sPR구매ToolStripMenuItem.Name = "sPR구매ToolStripMenuItem"; - this.sPR구매ToolStripMenuItem.Size = new System.Drawing.Size(180, 24); + this.sPR구매ToolStripMenuItem.Size = new System.Drawing.Size(139, 24); this.sPR구매ToolStripMenuItem.Text = "SPR 구매"; this.sPR구매ToolStripMenuItem.Click += new System.EventHandler(this.sPR구매ToolStripMenuItem_Click); // // toolStripMenuItem14 // this.toolStripMenuItem14.Name = "toolStripMenuItem14"; - this.toolStripMenuItem14.Size = new System.Drawing.Size(177, 6); + this.toolStripMenuItem14.Size = new System.Drawing.Size(136, 6); // // 품목입고ToolStripMenuItem // this.품목입고ToolStripMenuItem.Name = "품목입고ToolStripMenuItem"; - this.품목입고ToolStripMenuItem.Size = new System.Drawing.Size(180, 24); + this.품목입고ToolStripMenuItem.Size = new System.Drawing.Size(139, 24); this.품목입고ToolStripMenuItem.Text = "품목 입고"; this.품목입고ToolStripMenuItem.Click += new System.EventHandler(this.품목입고ToolStripMenuItem_Click); // @@ -440,7 +442,7 @@ // 목록ToolStripMenuItem // this.목록ToolStripMenuItem.Name = "목록ToolStripMenuItem"; - this.목록ToolStripMenuItem.Size = new System.Drawing.Size(180, 24); + this.목록ToolStripMenuItem.Size = new System.Drawing.Size(156, 24); this.목록ToolStripMenuItem.Text = "목록"; this.목록ToolStripMenuItem.Click += new System.EventHandler(this.목록ToolStripMenuItem_Click); // @@ -448,19 +450,19 @@ // this.담당자별현황ToolStripMenuItem.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); this.담당자별현황ToolStripMenuItem.Name = "담당자별현황ToolStripMenuItem"; - this.담당자별현황ToolStripMenuItem.Size = new System.Drawing.Size(180, 24); + this.담당자별현황ToolStripMenuItem.Size = new System.Drawing.Size(156, 24); this.담당자별현황ToolStripMenuItem.Text = "목록(챔피언)"; this.담당자별현황ToolStripMenuItem.Click += new System.EventHandler(this.담당자별현황ToolStripMenuItem_Click); // // toolStripMenuItem15 // this.toolStripMenuItem15.Name = "toolStripMenuItem15"; - this.toolStripMenuItem15.Size = new System.Drawing.Size(177, 6); + this.toolStripMenuItem15.Size = new System.Drawing.Size(153, 6); // // layoutToolStripMenuItem // this.layoutToolStripMenuItem.Name = "layoutToolStripMenuItem"; - this.layoutToolStripMenuItem.Size = new System.Drawing.Size(180, 24); + this.layoutToolStripMenuItem.Size = new System.Drawing.Size(156, 24); this.layoutToolStripMenuItem.Text = "Layout"; this.layoutToolStripMenuItem.Click += new System.EventHandler(this.layoutToolStripMenuItem_Click); // @@ -853,6 +855,7 @@ // btDev // this.btDev.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.메일전송ToolStripMenuItem1, this.purchaseImportToolStripMenuItem, this.purchaseOrderImportToolStripMenuItem, this.materialImportToolStripMenuItem, @@ -1158,6 +1161,21 @@ this.toolStripButton3.ToolTipText = "휴가신청"; this.toolStripButton3.Click += new System.EventHandler(this.toolStripButton3_Click); // + // 메일전송ToolStripMenuItem1 + // + this.메일전송ToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.휴가REMINDToolStripMenuItem}); + this.메일전송ToolStripMenuItem1.Name = "메일전송ToolStripMenuItem1"; + this.메일전송ToolStripMenuItem1.Size = new System.Drawing.Size(302, 24); + this.메일전송ToolStripMenuItem1.Text = "메일전송"; + // + // 휴가REMINDToolStripMenuItem + // + this.휴가REMINDToolStripMenuItem.Name = "휴가REMINDToolStripMenuItem"; + this.휴가REMINDToolStripMenuItem.Size = new System.Drawing.Size(180, 24); + this.휴가REMINDToolStripMenuItem.Text = "휴가-REMIND"; + this.휴가REMINDToolStripMenuItem.Click += new System.EventHandler(this.휴가REMINDToolStripMenuItem_Click); + // // fMain // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; @@ -1309,6 +1327,8 @@ private System.Windows.Forms.ToolStripMenuItem 담당자별현황ToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem15; private System.Windows.Forms.ToolStripMenuItem bwrunToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 메일전송ToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem 휴가REMINDToolStripMenuItem; } } diff --git a/Project/fMain.cs b/Project/fMain.cs index b070b58..b3b8c31 100644 --- a/Project/fMain.cs +++ b/Project/fMain.cs @@ -1439,5 +1439,10 @@ namespace Project { bw_DoWork(null, null); } + + private void 휴가REMINDToolStripMenuItem_Click(object sender, EventArgs e) + { + Mail_Take_a_rest_remind(); + } } } diff --git a/Project/fMain.resx b/Project/fMain.resx index c95832d..95fa8f3 100644 --- a/Project/fMain.resx +++ b/Project/fMain.resx @@ -452,14 +452,14 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPY4CDmcasDEu1MxmW6ixgWKbTwrBYVx0svkqL h2GZViHDMu15QPFWhmXqUmBxDLBUZzVQwX84Xqzzg2GJpifDMs3rKOJLtZ4ADZWA6oKCpVo2IEmBtZb/ - /U7m/E+5XP8/92TF/3lzYj/ULMr/l3q54X/kubL/qtu8oIZo90F1QsEynQn8a8yPJV+p/1Z8q+d/yc2e - /4dm5vx/1Jn2/+qkzJ8gMRg22R16gmGJzjWoTihYqitYfKu7Dqao41D9/+ulEf+PtXr9vV7o9blnWyHc + /U7m/E+5XP8/92TF/3lzYj/ULMz/l3q54X/kubL/qtu8oIZo90F1QsEynQn8a8yPJV+p/1Z8q+d/yc2e + /4dm5vx/1Jn2/+qkzJ8gMRg22R16gmGJzjWoTihYqitYfKu7Dqao41D9/+ulEf+Ptnr+vV7o9blnWyHc gOJbXRdA6qE6EaD4ZvdcmKLKSx3LzheGHLyc7PbtYpDa/20VTnuLL3Z8BMkV3Ox5B9WCCmAuKLrZUwLi v2iNEH9c5vn/SobWnyfZNmqFN3v1gbZ/LrrVcx6sAR0U3+kxLr7RdRzKZXhc7On5qNTjPxiXeHmAxICu LAVa1AJWgA0U3+kWgzIZnlR4ZcEMeFLpnQkSq79fz5F7ayIfWAEh8KjCs+9Judd/EH5c7tULFSYeAP2/ - Ee6FUo8NUGHiwP/99RwvuqJOv+mJ+w/CLzsjT4HEoNLYwb8D/Zp/D/T2/T/Qe+bZgd7fQPo/MoaKnQGr - 2d+jAdUG1LhtIjtQcP6z5fX/0DXhwiC1fw/0zAPpZfi7v7cXmyJiMEgv0Ol9tkDTlgMFVpGCQXr+Heiz - BQAcLqsGT4fV4QAAAABJRU5ErkJggg== + Ee6FUo8NUGHiwP/99RwvuqJOv+mJ+w/CLzsjT4HEoNLYwb8D/Zp/D/T2/T/Qe+bpgd7fQPo/MoaKnQGr + 2d+jAdUG1LhtIjtQcP7TZfX/0DXhwiC1fw/0zAPpZfi7v7cXmyJiMEgv0Ol9tkDTlgMFVpGCQXr+Heiz + BQAOjqr9dEfZwgAAAABJRU5ErkJggg== diff --git a/SubProject/FCOMMON/DataBaseManager.cs b/SubProject/FCOMMON/DataBaseManager.cs index ffa374c..29c466a 100644 --- a/SubProject/FCOMMON/DataBaseManager.cs +++ b/SubProject/FCOMMON/DataBaseManager.cs @@ -1018,7 +1018,21 @@ namespace FCOMMON cn.Dispose(); return retval; } + public static string GetUserName(string gcode, string uid) + { + var slq = "select isnull(name,'') from vGroupUser" + + $" where gcode = '{gcode}'" + + $" and id = '{uid}'"; + try + { + return ExecuteScalar(slq); + } + catch (Exception ex) + { + return string.Empty; + } + } public static string GetUserTel(string gcode, string uid) { var slq = "select isnull(tel,'') from vGroupUser" +