/* * Backgroudn worker */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; namespace Project { public partial class fMain { void Mail_JobReportDay() { // addmsg("업무일지 미 작성자 추출 작업을 시작 합니다"); var vCate = "JD"; var taMailForm = new DSMailTableAdapters.MailFormTableAdapter(); var taMailData = new DSMailTableAdapters.MailDataTableAdapter(); var taPrjList = new DSMailTableAdapters.ProjectsIngListTableAdapter(); var taSche = new DSMailTableAdapters.EETGW_ProjectsScheduleTableAdapter(); var taJobReport = new DSMailTableAdapters.JobReportTableAdapter(); var taHolidayList = new DSMailTableAdapters.HolidayLIstTableAdapter(); var taGroupUser = new DSMailTableAdapters.vGroupUserTableAdapter(); var taJobReportDateList = new DSMailTableAdapters.JobReportDateListTableAdapter(); //기준일자는 오늘부터 -15일이다 //var basedate = new DateTime(2022, 05, 20);// DateTime.Now; var basedate = DateTime.Now; var sd = basedate.AddDays(-15); var ed = basedate.AddDays(-1); var str_sd = sd.ToShortDateString(); var str_ed = ed.ToShortDateString(); var str_dt = basedate.ToShortDateString(); var gcodelist = FCOMMON.DBM.getGroupListWithoutGcode("gcode", "MailForm", "gcode is not null and gcode <> 'DEV'"); foreach (var vGcode in gcodelist) { //메일정보가 등록되지 않았다면 처리하지 않는다 var MailForm = taMailForm.GetData(vGcode, vCate).FirstOrDefault(); if (MailForm == null) continue; if (MailForm.exceptmail == null) MailForm.exceptmail = string.Empty; if (MailForm.exceptmailcc == null) MailForm.exceptmailcc = string.Empty; if (string.IsNullOrEmpty(MailForm.subject) || string.IsNullOrEmpty(MailForm.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) continue; List NoMailList = new List(); NoMailList.Add($"그룹\t사번\t성명\t경고일"); //대상 사용자 목록을 추출한다; var users = taGroupUser.GetData(vGcode); Dictionary uids = new Dictionary(); foreach (var userinfo in users) { //적용대상제거 if (userinfo.useJobReport == false || userinfo.useUserState == false) continue; //퇴사자 확인 if (string.IsNullOrEmpty(userinfo.outdate) == false && userinfo.outdate.CompareTo(str_dt) < 1) continue; //이 대상의 이메일이 받는 사람에 제외되어있다면 처리하지 않는다. var exxptolist = MailForm.exceptmail.ToUpper().Split(';'); if (exxptolist.Contains(userinfo.email.ToUpper())) continue; //메일대상자로 선정한다 uids.Add(userinfo.id, userinfo); //자동생성된 자료가 없는 경우에만 처리한다 } //먼저 날짜목록을 가져온다 var dtDateList = taJobReportDateList.GetData(vGcode, str_sd, str_ed);// //날짜대로 루프를 돈다 List days = new List(); foreach (var jobdata in dtDateList) { //날짜입력데이터 확인 if (DateTime.TryParse(jobdata.pdate, out DateTime dt) == false) continue; //토,일요일에는 동작하지 않는다 if (dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Saturday) continue; //이 날짜가 휴일인지 체크한다. var Holyinfo = taHolidayList.GetData(jobdata.pdate).FirstOrDefault(); if (Holyinfo != null && Holyinfo.free == true) continue; //이날짜에는 8시간을 근무 해야 한다 days.Add(DateTime.Parse(jobdata.pdate)); } //사용자 목록과 날짜 목록을 모두 수집했다 List totWarnList = new List(); foreach (var userinfo in uids) { //이사용자의 기간내 근무데이터를 확인 var UserDatas = taJobReport.GetData(vGcode, userinfo.Key, str_sd, str_ed); Dictionary WarnList = new Dictionary(); foreach (var dt in days.OrderBy(t => t)) { var dtstr = dt.ToShortDateString(); var userdata = UserDatas.Where(t => t.pdate == dtstr); //해당날짜의 데이터를 확인한다. var hrs = 0f; if (userdata.Any()) hrs = (float)userdata.Sum(t => t.hrs); //입력시간이 8시간 미만이면 경고한다 if (hrs < 8f) { WarnList.Add(dt, hrs); totWarnList.Add(new ReportUserData { date = dt, hrs = hrs, uid = userinfo.Key, uname = userinfo.Value.name }); //전체알림시에 사용하는 목록 } } //경고데이터가 있는 경우에만 메일 발송 if (WarnList.Any()) { if (string.IsNullOrEmpty(userinfo.Value.email)) { NoMailList.Add($"{vGcode}\t{userinfo.Key}\t{userinfo.Value}\t{WarnList.Count}"); //addmsg($"[{vGcode}] {userinfo.Value}({userinfo.Key}) 의 메일 정보가 존재하지 않습니다"); } else { //일별경고(월요일제외) var mail_subject = MailForm.subject.Replace("{담당자}", userinfo.Value.name).Replace("{사번}", userinfo.Value.id); var mail_to = MailForm.tolist.Replace("{담당자}", userinfo.Value.email); var mail_cc = string.Empty; // if (MailForm.cc != null) mail_cc = MailForm.cc.Replace("{담당자}", userinfo.Value.email); var mail_bcc = string.Empty; if (MailForm.bcc != null) mail_bcc = MailForm.bcc.Replace("{담당자}", userinfo.Value.email); var mail_body = MailForm.body.Replace("{담당자}", userinfo.Value.name); mail_body = mail_body.Replace("{사번}", userinfo.Value.id); //메일본문을 생성해서 진행해야함 var mail_content = "

일자별 정보

"; mail_content += $"
조회기간 : {str_sd}~{str_ed}"; mail_content += "
"; foreach (var warnitem in WarnList) { mail_content += $""; } mail_content += "
날짜요일시간
{warnitem.Key.ToShortDateString()}{warnitem.Key.DayOfWeek.ToString()}{warnitem.Value:N1}
"; //메일데이터를 생성한다. //mail_to = "chikyun.kim@amkor.co.kr"; //mail_bcc = string.Empty; //mail_cc = string.Empty; mail_to = MailSort(mail_to, MailForm.exceptmail); if (string.IsNullOrEmpty(mail_to) == false) { //db = new EEEntities(); using (var dt = new DSMail.MailDataDataTable()) { var newdr = dt.NewMailDataRow(); newdr.gcode = vGcode; newdr.cate = vCate; newdr.subject = mail_subject; newdr.fromlist = userinfo.Value.email; newdr.tolist = MailSort(mail_to, MailForm.exceptmail); newdr.bcc = mail_bcc; newdr.cc = MailSort(mail_cc, MailForm.exceptmailcc); newdr.pdate = DateTime.Now.ToShortDateString(); newdr.body = mail_body.Replace("{내용}", 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); var cnt = taMailData.Update(dt); if (cnt == 1) System.Threading.Thread.Sleep(500); } } } } } //첫줄은 제목이므로 2줄이상 있어야 한다 if (NoMailList.Count > 1) { using (var dt = new DSMail.MailDataDataTable()) { var newdr = dt.NewMailDataRow(); newdr.gcode = "EET1P"; newdr.cate = "ERR"; newdr.subject = $"[GW] {vGcode} - 업무일지 담당자 이메일 경고"; 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 = string.Join("
", NoMailList.ToList()); 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); if (cnt == 1) System.Threading.Thread.Sleep(500); } } } taMailForm.Dispose(); taMailData.Dispose(); taJobReport.Dispose(); taHolidayList.Dispose(); taGroupUser.Dispose(); taJobReportDateList.Dispose(); } void Mail_JobReportWeek() { var vCate = "JW"; var taMailForm = new DSMailTableAdapters.MailFormTableAdapter(); var taMailData = new DSMailTableAdapters.MailDataTableAdapter(); var taPrjList = new DSMailTableAdapters.ProjectsIngListTableAdapter(); var taSche = new DSMailTableAdapters.EETGW_ProjectsScheduleTableAdapter(); var taJobReport = new DSMailTableAdapters.JobReportTableAdapter(); var taHolidayList = new DSMailTableAdapters.HolidayLIstTableAdapter(); var taGroupUser = new DSMailTableAdapters.vGroupUserTableAdapter(); var taJobReportDateList = new DSMailTableAdapters.JobReportDateListTableAdapter(); //기준일자는 오늘부터 -15일이다 var sd = DateTime.Now.AddDays(-15); var ed = DateTime.Now.AddDays(-1); var str_sd = sd.ToShortDateString(); var str_ed = ed.ToShortDateString(); var str_dt = DateTime.Now.ToShortDateString(); var gcodelist = FCOMMON.DBM.getGroupListWithoutGcode("gcode", "MailForm", "gcode is not null and gcode <> 'DEV'"); foreach (var vGcode in gcodelist) { //메일양식이 지정되어있는지 체크 var MailForm = taMailForm.GetData(vGcode, vCate).FirstOrDefault(); if (MailForm == null) continue; if (MailForm.exceptmail == null) MailForm.exceptmail = string.Empty; if (MailForm.exceptmailcc == null) MailForm.exceptmailcc = string.Empty; if (string.IsNullOrEmpty(MailForm.subject) || string.IsNullOrEmpty(MailForm.tolist)) continue; //오늘날짜로 주간 데이터가 등록되어있느지 확인한다. //var Existweek = taMailData.GetData(vGcode, str_dt, vCate).Any(); 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) continue; //대상 사용자 목록을 추출한다 var users = taGroupUser.GetData(vGcode); Dictionary uids = new Dictionary(); foreach (var userinfo in users) { //적용대상제거 if (userinfo.useJobReport == false || userinfo.useUserState == false) continue; //퇴사자 확인 if (string.IsNullOrEmpty(userinfo.outdate) == false && userinfo.outdate.CompareTo(str_dt) < 1) continue; //이 대상의 이메일이 받는 사람에 제외되어있다면 처리하지 않는다. var exxptolist = MailForm.exceptmail.ToUpper().Split(';'); if (exxptolist.Contains(userinfo.email.ToUpper())) continue; //메일대상자로 선정한다 uids.Add(userinfo.id, userinfo); //자동생성된 자료가 없는 경우에만 처리한다 } var dtDateList = taJobReportDateList.GetData(vGcode, str_sd, str_ed);// //날짜대로 루프를 돈다 List days = new List(); foreach (var jobdata in dtDateList) { // var jobdata = dateitem.FirstOrDefault(); var dt = DateTime.Parse(jobdata.pdate); if (dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Saturday) continue; //이 날짜가 휴일인지 체크한다. var Holyinfo = taHolidayList.GetData(jobdata.pdate).FirstOrDefault(); //var Holyinfo = db.HolidayLIst.Where(t => t.pdate == jobdata.pdate).FirstOrDefault(); if (Holyinfo != null && Holyinfo.free == true) continue; //이날짜에는 8시간을 근무 해야 한다 days.Add(DateTime.Parse(jobdata.pdate)); } // addmsg($"[{vGcode}] {days.Count} 건의 일자가 확인 되었습니다(기간:{str_sd}~{str_ed}"); //사용자 목록과 날짜 목록을 모두 수집했다 List totWarnList = new List(); foreach (var uid in uids) { //이사용자의 날짜별 근무시간을 확인한다. var UserDatas = taJobReport.GetData(vGcode, uid.Key, str_sd, str_ed); Dictionary WarnList = new Dictionary(); foreach (var dt in days.OrderBy(t => t)) { var dtstr = dt.ToShortDateString(); var userdata = UserDatas.Where(t => t.pdate == dtstr); //해당날짜의 데이터를 확인한다. var hrs = 0f; if (userdata.Any()) hrs = (float)userdata.Sum(t => t.hrs); //자료를 입력하지 않았거나, 입력시간이 8시간 미만이면 경고한다 if (hrs < 8f) { //WarnList.Add(dt, hrs); totWarnList.Add(new ReportUserData { date = dt, hrs = hrs, uid = uid.Key, uname = uid.Value.name }); //전체알림시에 사용하는 목록 } } } if (totWarnList.Count > 0) { //addmsg($"[{vGcode}] 주간 경고 데이터는 {totWarnList.Count} 건 입니다"); //오늘잘짜로 등록된 자료가 있으면 처리하지 안흔다. //해당 사용자의 오늘 날짜로 등록된 자동 데이터가 있다면 대상에 넣지 않는다 //db = new EEEntities(); var mail_subject = MailForm.subject; var mail_to = MailForm.tolist;//.Replace("{담당자}", userinfo.email); var pmail_cc = new List(); // if (MailForm.cc != null) pmail_cc = MailForm.cc.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();//.Replace("{담당자}", userinfo.email); var mail_bcc = string.Empty; if (MailForm.bcc != null) mail_bcc = MailForm.bcc;//.Replace("{담당자}", userinfo.email); var mail_body = MailForm.body;//.Replace("{담당자}", userinfo.name); //메일본문을 생성해서 진행해야함 var vmail_body = "

담당자별 정보

"; vmail_body += "
조회기간 : " + sd.ToShortDateString() + "~" + ed.ToShortDateString(); ////참고데이터를 추가한다 var usergrplist = totWarnList.OrderBy(t => t.uname).GroupBy(t => t.uid).ToList(); vmail_body += "
"; var mail_cc = string.Join(";", pmail_cc); //모든 대상을 세미콜론으로 붙인다. foreach (var warnitem in usergrplist) { var item = warnitem.FirstOrDefault(); vmail_body += $""; } vmail_body += "
담당자일자별시간
{item.uname}({item.uid})"; foreach (var ii in warnitem.OrderBy(t => t.date)) { vmail_body += $" {ii.date.ToString("MM/dd")}({ii.hrs:N1}h)"; } vmail_body += "
"; //메일데이터를 생성한다. //mail_bcc = string.Empty; //mail_cc = string.Empty; //mail_to = "chikyun.kim@amkor.co.kr"; //db = new EEEntities(); mail_to = MailSort(mail_to, MailForm.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; newdr.bcc = mail_bcc; newdr.cc = MailSort(mail_cc, MailForm.exceptmailcc); newdr.pdate = DateTime.Now.ToShortDateString(); newdr.body = mail_body.Replace("{내용}", vmail_body); 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); if (cnt == 1) System.Threading.Thread.Sleep(1000); } } } } taMailForm.Dispose(); taMailData.Dispose(); taPrjList.Dispose(); taSche.Dispose(); taJobReport.Dispose(); taHolidayList.Dispose(); taGroupUser.Dispose(); taJobReportDateList.Dispose(); } void Mail_NoSchedule() { var taForm = new DSMailTableAdapters.MailFormTableAdapter(); var taMailData = new DSMailTableAdapters.MailDataTableAdapter(); var taPrjList = new DSMailTableAdapters.ProjectsIngListTableAdapter(); var taSche = new DSMailTableAdapters.EETGW_ProjectsScheduleTableAdapter(); var vCate = "SN"; try { //기준일자는 오늘부터 -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 = FCOMMON.DBM.getGroupListWithoutGcode("gcode", "MailForm", "gcode is not null and gcode <> 'DEV'"); foreach (var vGcode in gcodelist) { //메일양식이 지정되어있는지 체크 var MailForm = taForm.GetData(vGcode, vCate).FirstOrDefault(); if (MailForm == null) continue; if (MailForm.exceptmail == null) MailForm.exceptmail = string.Empty; if (MailForm.exceptmailcc == null) MailForm.exceptmailcc = string.Empty; if (string.IsNullOrEmpty(MailForm.subject) || string.IsNullOrEmpty(MailForm.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) continue; var projects = taPrjList.GetData(vGcode); //addmsg($"[{vGcode}] {projects.Count} 건의 데이터가 확인 되었습니다"); //메일데이터 생성 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(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); //var gp = projects.GroupBy(t => t.idx); foreach (var row in projects) { //스케쥴에서 데이터를 찾는다. var cnt = taSche.GetData(vGcode, row.idx).Any(); if (cnt == true) continue; body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); } body.AppendLine("
시작일상태번호Project요청Champion협업만료일수량외주금액자체금액절감액CR/CF
{row.sdate}{row.status}{row.idx}{row.name}{row.reqstaff}{row.userManager}{row.usermain}/{row.usersub}/{row.userhw2}{row.edate}{row.cnt}{row.costo}{row.costn}{row.costo - row.costn}{row.orderno}
"); //일별경고(월요일제외) //if (MailForm != null) { var mail_subject = MailForm.subject;//.Replace("{담당자}", userinfo.name).Replace("{사번}", userinfo.id); var mail_to = MailForm.tolist;//.Replace("{담당자}", userinfo.email); var mail_cc = string.Empty; // if (MailForm.cc != null) mail_cc = MailForm.cc;//.Replace("{담당자}", userinfo.email); var mail_bcc = string.Empty; if (MailForm.bcc != null) mail_bcc = MailForm.bcc;//.Replace("{담당자}", userinfo.email); var mail_body = MailForm.body; //메일본문을 생성해서 진행해야함 var mail_content = mail_body.Replace("{data}", body.ToString()); mail_to = MailSort(mail_to, MailForm.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, MailForm.exceptmail); newdr.bcc = mail_bcc; newdr.cc = MailSort(mail_cc, MailForm.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); } } } } } catch (Exception ex) { using (var dt = new DSMail.MailDataDataTable()) { var newdr = dt.NewMailDataRow(); newdr.gcode = "EET1P"; newdr.cate = "ER"; newdr.subject = "[ERROR] 스케쥴없음 메일작성 실패"; 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(); taSche.Dispose(); taPrjList.Dispose(); } /// /// 스케쥴기한임박알림(일) /// void MakeScheduleDay() { var taForm = new DSMailTableAdapters.MailFormTableAdapter(); var taMailData = new DSMailTableAdapters.MailDataTableAdapter(); var taMailPrjSche = new DSMailTableAdapters.vMailingProjectScheduleTableAdapter(); var vCate = "SJ"; try { 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 = FCOMMON.DBM.getGroupListWithoutGcode("gcode", "MailForm", "gcode is not null and gcode <> 'DEV'"); foreach (var vGcode in gcodelist) { //메일양식이 지정되어있는지 체크 var MailForm = taForm.GetData(vGcode, vCate).FirstOrDefault(); if (MailForm == null) continue; if (MailForm.exceptmail == null) MailForm.exceptmail = string.Empty; if (MailForm.exceptmailcc == null) MailForm.exceptmailcc = string.Empty; if (string.IsNullOrEmpty(MailForm.subject) || string.IsNullOrEmpty(MailForm.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) continue; //대상 사용자 목록을 추출한다 //var ta = new DataSet1TableAdapters.vMailingProjectScheduleTableAdapter(); var users = new DSMail.vMailingProjectScheduleDataTable(); taMailPrjSche.Fill(users, vGcode); //var users = db.vMailingProjectSchedule.ToList();// .vJobReportForUser.Where(t => t.gcode == Pub.vGcode).GroupBy(t => t.id); //addmsg($"[{vGcode}] {users.Count} 명의 데이터가 확인 되었습니다"); //메일데이터 생성 var body = new System.Text.StringBuilder(); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); var gp = users.GroupBy(t => t.idx); foreach (var row in gp) { var prc = row.Sum(t => t.progress) / row.Count(); var dr = row.FirstOrDefault(); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine(""); //여기에 스케쥴이 들어가야한다 body.AppendLine($""); } body.AppendLine("
진행(%)ProjectChampion등록일스케쥴
{prc}[{dr.idx}] {dr.name}{dr.userManager}{dr.pdate}"); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); var ll = row.OrderBy(t => t.seq).ToList(); foreach (var srow in ll) { body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); } body.AppendLine("
NoTitlePlan(ww)Actual(ww)진행비고
시작완료시작완료% 
{srow.seq}{srow.title}{srow.sw}{srow.ew}{srow.swa}{srow.ewa}{srow.progress}{srow.memo}
"); body.AppendLine("
"); //일별경고(월요일제외) //if (MailJD != null) //{ var mail_subject = MailForm.subject;//.Replace("{담당자}", userinfo.name).Replace("{사번}", userinfo.id); var mail_to = MailForm.tolist;//.Replace("{담당자}", userinfo.email); var mail_cc = string.Empty; // if (MailForm.cc != null) mail_cc = MailForm.cc;//.Replace("{담당자}", userinfo.email); var mail_bcc = string.Empty; if (MailForm.bcc != null) mail_bcc = MailForm.bcc;//.Replace("{담당자}", userinfo.email); var mail_body = MailForm.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, MailForm.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, MailForm.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); } } //} } } catch (Exception ex) { using (var dt = new DSMail.MailDataDataTable()) { var newdr = dt.NewMailDataRow(); newdr.gcode = "EET1P"; newdr.cate = "ER"; newdr.subject = "[ERROR] 스케쥴(day) 메일작성 실패"; 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); } } taMailData.Dispose(); taForm.Dispose(); taMailPrjSche.Dispose(); } /// /// 스케쥴기한임박알림(주) /// void MakeScheduleDayWeek() { var taForm = new DSMailTableAdapters.MailFormTableAdapter(); var taMailData = new DSMailTableAdapters.MailDataTableAdapter(); var taMailPrjSche = new DSMailTableAdapters.vMailingProjectScheduleTableAdapter(); var vCate = "SP"; try { Console.WriteLine("스케쥴기한임박자료(주) 미 작성자 추출 작업을 시작 합니다"); 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(); 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 users = new DSMail.vMailingProjectScheduleDataTable(); taMailPrjSche.Fill(users, vGcode); //var users = db.vMailingProjectSchedule.ToList();// .vJobReportForUser.Where(t => t.gcode == Pub.vGcode).GroupBy(t => t.id); //Console.WriteLine($"[{vGcode}] {users.Count} 명의 데이터가 확인 되었습니다");// (); //메일데이터 생성 var body = new System.Text.StringBuilder(); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); var gp = users.GroupBy(t => t.idx); foreach (var row in gp) { var prc = row.Sum(t => t.progress) / row.Count(); var dr = row.FirstOrDefault(); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine(""); //여기에 스케쥴이 들어가야한다 body.AppendLine($""); } body.AppendLine("
진행(%)ProjectChampion등록일스케쥴
{prc}[{dr.idx}] {dr.name}{dr.userManager}{dr.pdate}"); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); body.AppendLine(""); var ll = row.OrderBy(t => t.seq).ToList(); foreach (var srow in ll) { body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); body.AppendLine($""); } body.AppendLine("
NoTitlePlan(ww)Actual(ww)진행비고
시작완료시작완료% 
{srow.seq}{srow.title}{srow.sw}{srow.ew}{srow.swa}{srow.ewa}{srow.progress}{srow.memo}
"); body.AppendLine("
"); //일별경고(월요일제외) 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}] 메일 전송 완료(스케쥴day)"); } } } } catch (Exception ex) { using (var dt = new DSMail.MailDataDataTable()) { var newdr = dt.NewMailDataRow(); newdr.gcode = "EET1P"; newdr.cate = "ER"; newdr.subject = "[ERROR] 스케쥴(주) 메일작성 실패"; 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); } } finally { ChkMakeSchDayWeekTime = DateTime.Now; } taForm.Dispose(); taMailData.Dispose(); taMailPrjSche.Dispose(); } /// /// 전송되지 않은 메일을 확인하고 그것을 전송한다 /// void SendMail() { //메일서버역할이 있다. try { var cn = new System.Data.SqlClient.SqlConnection(Properties.Settings.Default.gwcs); var cmd = new System.Data.SqlClient.SqlCommand("", cn); cn.Open(); //1개의데이터 가져오기 cmd.CommandText = "SELECT top 1 * FROM MailData WHERE ISNULL(SendOK, 0) = 0 order by wdate"; var dar = cmd.ExecuteReader(); var list_from = string.Empty;// getMaillist(dar["fromlist"]); var list_to = string.Empty;// getMaillist(dar["tolist"]); var list_bcc = string.Empty;// getMaillist(dar["bcc"]); var list_cc = string.Empty;//getMaillist(dar["cc"]); var subject = string.Empty;// getdbdata(dar["subject"]).Trim(); var body = string.Empty;//getdbdata(dar["body"]).Trim(); var idx = -1; while (dar.Read()) { list_from = getMaillist(dar["fromlist"]); list_to = getMaillist(dar["tolist"]); list_bcc = getMaillist(dar["bcc"]); list_cc = getMaillist(dar["cc"]); subject = getdbdata(dar["subject"]).Trim(); body = getdbdata(dar["body"]).Trim(); idx = (int)dar["idx"]; } dar.Close(); string sendMsg = ""; if (list_from == "") { sendMsg = ("보내는 주소가 없습니다"); } else if (subject.Trim() == "") { sendMsg = ("메일 제목이 없습니다"); } else if (body.Trim() == "") { sendMsg = ("본문이 없습니다"); } else if (list_to == "") { sendMsg = ("받는 주소가 없습니다"); } if (idx > 0) { if (sendMsg.isEmpty() == false) { //오류가 있다 try { cmd.CommandText = "UPDATE MailData SET SendOK = 1, SendMsg = @msg WHERE(idx = @idx) and isnull(sendok,0) = 0"; cmd.Parameters.Clear(); cmd.Parameters.Add("msg", System.Data.SqlDbType.VarChar).Value = sendMsg; cmd.Parameters.Add("idx", System.Data.SqlDbType.Int).Value = idx; //Console.WriteLine(string.Format("Send Complete index={0},Msg={1}", dar["idx"], sendMsg)); //ta.UpdateSendOK(sendMsg, dr.idx); var ucnt = cmd.ExecuteNonQuery(); if (ucnt == 1) { Console.WriteLine("send mail to" + list_to + ",subject=" + getdbdata(subject)); } } catch (Exception eX) { sendMsg = eX.Message; } } else { //var body = getdbdata(dar["body"]); body += "

" + "
이 메일은 EET 프로그램에서 자동 발신 되었습니다." + "
메일이 잘못 전송 되었다면 [chikyun.kim@amkor.co.kr] 로 문의 주시기 바랍니다" + "

"; //전송을 해야 함 var mc = new System.Net.Mail.SmtpClient("10.101.10.6"); var msg = new System.Net.Mail.MailMessage (list_from, list_to, subject, body); if (list_bcc != "") msg.Bcc.Add(list_bcc); if (list_cc != "") msg.CC.Add(list_cc); msg.IsBodyHtml = true; bool msgupdate = false; try { sendMsg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); cmd.CommandText = "UPDATE MailData SET SendOK = 1, SendMsg = @msg WHERE(idx = @idx) and isnull(sendok,0) = 0"; cmd.Parameters.Clear(); cmd.Parameters.Add("msg", System.Data.SqlDbType.VarChar).Value = sendMsg; cmd.Parameters.Add("idx", System.Data.SqlDbType.Int).Value = idx; //Console.WriteLine(string.Format("Send Complete index={0},Msg={1}", dar["idx"], sendMsg)); //ta.UpdateSendOK(sendMsg, dr.idx); var ucnt = cmd.ExecuteNonQuery(); if (ucnt == 1) { mc.Send(msg); Console.WriteLine("send mail to" + list_to + ",subject=" + getdbdata(subject)); } } catch (Exception eX) { sendMsg = eX.Message; msgupdate = true; } try { if (msgupdate) { cmd.CommandText = "UPDATE MailData SET SendMsg = @msg WHERE idx = @idx "; cmd.Parameters.Clear(); cmd.Parameters.Add("idx", System.Data.SqlDbType.Int).Value = idx; var ucnt = cmd.ExecuteNonQuery(); } } catch (Exception eX) { //sendMsg = eX.Message; //msgupdate = true; } } } cmd.Dispose(); cn.Close(); } catch (Exception ex) { } finally { ChkSendMailTime = DateTime.Now; } } /// /// 자동생성 메일 작성 /// void MakeAutoMail() { try { var taData = new dsMSSQLTableAdapters.MailDataTableAdapter(); var taList = new dsMSSQLTableAdapters.MailAutoTableAdapter(); var dtList = taList.GetByAutoSend(); var dtInsert = new dsMSSQL.MailDataDataTable(); //대상 Console.WriteLine("Make Auto Send Mail Data (" + dtList.Rows.Count.ToString() + ")"); foreach (dsMSSQL.MailAutoRow dr in dtList) { //시간정보가 없는 애들은 처리 하지 않음 if (dr.stime.IndexOf(":") == -1) continue; if (dr.sday == null || dr.sday.Length < 2) continue; //발신시간을 넘어야 한다 var curTime = DateTime.Now.ToString("HH:mm"); if (string.Compare(curTime, dr.stime) < 0) continue; //지정된 시간 이전이면 생성 안한다 //자동생성 구분용 카테고리 var cate = string.Format("{0},{1}", dr.sday[0], dr.sday[1]); //동륵일 var pdate = DateTime.Now.ToString("yyyy-MM-dd"); //같은날, 같은 atime aidx pdate 의 같이 있으면 이미 생성된것이므로 추가하지 않는다 var existData = taData.FindAutoData(dr.idx, dr.stime, pdate, cate); //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(); var PreMakeCount = (int)(existData); if (PreMakeCount > 0) continue; //전송간격과 대상 if (dr.sday[0] == 1) { //week var bitString = Convert.ToString(dr.sday[1], 2).PadLeft(8, '0').ToArray(); var weeknum = (int)(DateTime.Now.DayOfWeek); if (bitString[weeknum + 1] == '0') continue; } else { //month if (dr.sday[1] != DateTime.Now.Day) continue; } //같은날, 같은 atime aidx pdate 의 같이 있으면 이미 생성된것이므로 추가하지 않는다 //생성해야할 자료라면 만들어 준다 var newdr = dtInsert.NewMailDataRow(); newdr.pdate = pdate;// DateTime.Now.ToString("yyyy-MM-dd"); newdr.gcode = dr.gcode; newdr.fromlist = dr.fromlist; newdr.tolist = dr.tolist; newdr.bcc = dr.bcc; newdr.cate = cate;// string.Format("{0},{1}", dr.sday[0], dr.sday[1]); //cate에 해당 자료를 기록한다. newdr.cc = dr.cc; newdr.subject = dr.subject; newdr.body = dr.body; newdr.aidx = dr.idx; newdr.atime = dr.stime; 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(); dtInsert.AddMailDataRow(newdr); try { taData.Update(newdr); Console.WriteLine("auto make : " + newdr.tolist + ",subject=" + newdr.subject); } catch (Exception eX) { Console.WriteLine("auto make error : " + eX.Message); } } } catch (Exception ex) { } finally { ChkMakeAutoTime = DateTime.Now; } } } }