1213 lines
61 KiB
C#
1213 lines
61 KiB
C#
/*
|
|
* 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<string> NoMailList = new List<string>();
|
|
NoMailList.Add($"그룹\t사번\t성명\t경고일");
|
|
|
|
//대상 사용자 목록을 추출한다;
|
|
var users = taGroupUser.GetData(vGcode);
|
|
Dictionary<string, DSMail.vGroupUserRow> uids = new Dictionary<string, DSMail.vGroupUserRow>();
|
|
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<DateTime> days = new List<DateTime>();
|
|
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<ReportUserData> totWarnList = new List<ReportUserData>();
|
|
foreach (var userinfo in uids)
|
|
{
|
|
//이사용자의 기간내 근무데이터를 확인
|
|
var UserDatas = taJobReport.GetData(vGcode, userinfo.Key, str_sd, str_ed);
|
|
|
|
Dictionary<DateTime, double?> WarnList = new Dictionary<DateTime, double?>();
|
|
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 = "<p>일자별 정보</p>";
|
|
mail_content += $"<br/>조회기간 : {str_sd}~{str_ed}";
|
|
mail_content += "<br/><table border='1' cellspacing='1' cellpadding='1'><tr><td>날짜</td><td>요일</td><td>시간</td></tr>";
|
|
foreach (var warnitem in WarnList)
|
|
{
|
|
mail_content += $"<tr><td>{warnitem.Key.ToShortDateString()}</td><td>{warnitem.Key.DayOfWeek.ToString()}</td><td>{warnitem.Value:N1}</td></tr>";
|
|
}
|
|
mail_content += "</table>";
|
|
|
|
//메일데이터를 생성한다.
|
|
//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("<br/>", 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<string, DSMail.vGroupUserRow> uids = new Dictionary<string, DSMail.vGroupUserRow>();
|
|
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<DateTime> days = new List<DateTime>();
|
|
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<ReportUserData> totWarnList = new List<ReportUserData>();
|
|
foreach (var uid in uids)
|
|
{
|
|
//이사용자의 날짜별 근무시간을 확인한다.
|
|
var UserDatas = taJobReport.GetData(vGcode, uid.Key, str_sd, str_ed);
|
|
|
|
Dictionary<DateTime, double?> WarnList = new Dictionary<DateTime, double?>();
|
|
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<string>(); //
|
|
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 = "<p>담당자별 정보</p>";
|
|
vmail_body += "<br/>조회기간 : " + sd.ToShortDateString() + "~" + ed.ToShortDateString();
|
|
|
|
////참고데이터를 추가한다
|
|
var usergrplist = totWarnList.OrderBy(t => t.uname).GroupBy(t => t.uid).ToList();
|
|
vmail_body += "<br/><table border='1' cellspacing='1' cellpadding='1'><tr><td>담당자</td><td>일자별시간</td></tr>";
|
|
var mail_cc = string.Join(";", pmail_cc); //모든 대상을 세미콜론으로 붙인다.
|
|
foreach (var warnitem in usergrplist)
|
|
{
|
|
var item = warnitem.FirstOrDefault();
|
|
vmail_body += $"<tr><td>{item.uname}({item.uid})</td><td>";
|
|
foreach (var ii in warnitem.OrderBy(t => t.date))
|
|
{
|
|
vmail_body += $" {ii.date.ToString("MM/dd")}({ii.hrs:N1}h)";
|
|
}
|
|
vmail_body += "</td></tr>";
|
|
}
|
|
vmail_body += "</table>";
|
|
|
|
//메일데이터를 생성한다.
|
|
//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("<table border='1' cellspacing='1' cellpadding='1' style='text-align:center;'>");
|
|
body.AppendLine("<tr>");
|
|
body.AppendLine("<td>시작일</td>");
|
|
body.AppendLine("<td>상태</td>");
|
|
body.AppendLine("<td>번호</td>");
|
|
body.AppendLine("<td>Project</td>");
|
|
body.AppendLine("<td>요청</td>");
|
|
body.AppendLine("<td>Champion</td>");
|
|
body.AppendLine("<td>협업</td>");
|
|
body.AppendLine("<td>만료일</td>");
|
|
body.AppendLine("<td>수량</td>");
|
|
body.AppendLine("<td>외주금액</td>");
|
|
body.AppendLine("<td>자체금액</td>");
|
|
body.AppendLine("<td>절감액</td>");
|
|
body.AppendLine("<td>CR/CF</td>");
|
|
body.AppendLine("</tr>");
|
|
|
|
//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($"<tr>");
|
|
body.AppendLine($"<td>{row.sdate}</td>");
|
|
body.AppendLine($"<td>{row.status}</td>");
|
|
body.AppendLine($"<td>{row.idx}</td>");
|
|
body.AppendLine($"<td>{row.name}</td>");
|
|
body.AppendLine($"<td>{row.reqstaff}</td>");
|
|
body.AppendLine($"<td>{row.userManager}</td>");
|
|
body.AppendLine($"<td>{row.usermain}/{row.usersub}/{row.userhw2}</td>");
|
|
body.AppendLine($"<td>{row.edate}</td>");
|
|
body.AppendLine($"<td>{row.cnt}</td>");
|
|
body.AppendLine($"<td>{row.costo}</td>");
|
|
body.AppendLine($"<td>{row.costn}</td>");
|
|
body.AppendLine($"<td>{row.costo - row.costn}</td>");
|
|
body.AppendLine($"<td>{row.orderno}</td>");
|
|
body.AppendLine($"</tr>");
|
|
}
|
|
body.AppendLine("</table>");
|
|
|
|
//일별경고(월요일제외)
|
|
|
|
//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();
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 스케쥴기한임박알림(일)
|
|
/// </summary>
|
|
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("<table border='1' cellspacing='1' cellpadding='1' style='text-align:center;'>");
|
|
body.AppendLine("<tr>");
|
|
body.AppendLine("<td>진행(%)</td>");
|
|
body.AppendLine("<td>Project</td>");
|
|
body.AppendLine("<td>Champion</td>");
|
|
body.AppendLine("<td>등록일</td>");
|
|
body.AppendLine("<td>스케쥴</td>");
|
|
body.AppendLine("</tr>");
|
|
|
|
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($"<tr>");
|
|
body.AppendLine($"<td>{prc}</td>");
|
|
body.AppendLine($"<td>[{dr.idx}] {dr.name}</td>");
|
|
body.AppendLine($"<td>{dr.userManager}</td>");
|
|
body.AppendLine($"<td>{dr.pdate}</td>");
|
|
body.AppendLine("<td>");
|
|
body.AppendLine("<table border='1' cellspacing='1' cellpadding='1' style='text-align:center;'>");
|
|
body.AppendLine("<tr>");
|
|
body.AppendLine("<td rowspan='2'>No</td><td rowspan='2'>Title</td><td colspan='2'>Plan(ww)</td><td colspan='2'>Actual(ww)</td><td>진행</td><td>비고</td>");
|
|
body.AppendLine("</tr>");
|
|
body.AppendLine("<tr>");
|
|
body.AppendLine("<td>시작</td><td>완료</td><td>시작</td><td>완료</td><td>%</td><td> </td>");
|
|
body.AppendLine("</tr>");
|
|
var ll = row.OrderBy(t => t.seq).ToList();
|
|
foreach (var srow in ll)
|
|
{
|
|
body.AppendLine($"<tr>");
|
|
body.AppendLine($"<td>{srow.seq}</td>");
|
|
body.AppendLine($"<td>{srow.title}</td>");
|
|
body.AppendLine($"<td>{srow.sw}</td>");
|
|
body.AppendLine($"<td>{srow.ew}</td>");
|
|
body.AppendLine($"<td>{srow.swa}</td>");
|
|
body.AppendLine($"<td>{srow.ewa}</td>");
|
|
body.AppendLine($"<td>{srow.progress}</td>");
|
|
body.AppendLine($"<td>{srow.memo}</td>");
|
|
body.AppendLine($"</tr>");
|
|
}
|
|
body.AppendLine("</table>");
|
|
body.AppendLine("</td>");
|
|
//여기에 스케쥴이 들어가야한다
|
|
body.AppendLine($"</tr>");
|
|
}
|
|
body.AppendLine("</table>");
|
|
|
|
//일별경고(월요일제외)
|
|
|
|
//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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 스케쥴기한임박알림(주)
|
|
/// </summary>
|
|
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("<table border='1' cellspacing='1' cellpadding='1' style='text-align:center;'>");
|
|
body.AppendLine("<tr>");
|
|
body.AppendLine("<td>진행(%)</td>");
|
|
body.AppendLine("<td>Project</td>");
|
|
body.AppendLine("<td>Champion</td>");
|
|
body.AppendLine("<td>등록일</td>");
|
|
body.AppendLine("<td>스케쥴</td>");
|
|
body.AppendLine("</tr>");
|
|
|
|
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($"<tr>");
|
|
body.AppendLine($"<td>{prc}</td>");
|
|
body.AppendLine($"<td>[{dr.idx}] {dr.name}</td>");
|
|
body.AppendLine($"<td>{dr.userManager}</td>");
|
|
body.AppendLine($"<td>{dr.pdate}</td>");
|
|
body.AppendLine("<td>");
|
|
body.AppendLine("<table border='1' cellspacing='1' cellpadding='1' style='text-align:center;'>");
|
|
body.AppendLine("<tr>");
|
|
body.AppendLine("<td rowspan='2'>No</td><td rowspan='2'>Title</td><td colspan='2'>Plan(ww)</td><td colspan='2'>Actual(ww)</td><td>진행</td><td>비고</td>");
|
|
body.AppendLine("</tr>");
|
|
body.AppendLine("<tr>");
|
|
body.AppendLine("<td>시작</td><td>완료</td><td>시작</td><td>완료</td><td>%</td><td> </td>");
|
|
body.AppendLine("</tr>");
|
|
var ll = row.OrderBy(t => t.seq).ToList();
|
|
foreach (var srow in ll)
|
|
{
|
|
body.AppendLine($"<tr>");
|
|
body.AppendLine($"<td>{srow.seq}</td>");
|
|
body.AppendLine($"<td>{srow.title}</td>");
|
|
body.AppendLine($"<td>{srow.sw}</td>");
|
|
body.AppendLine($"<td>{srow.ew}</td>");
|
|
body.AppendLine($"<td>{srow.swa}</td>");
|
|
body.AppendLine($"<td>{srow.ewa}</td>");
|
|
body.AppendLine($"<td>{srow.progress}</td>");
|
|
body.AppendLine($"<td>{srow.memo}</td>");
|
|
body.AppendLine($"</tr>");
|
|
}
|
|
body.AppendLine("</table>");
|
|
body.AppendLine("</td>");
|
|
//여기에 스케쥴이 들어가야한다
|
|
body.AppendLine($"</tr>");
|
|
}
|
|
body.AppendLine("</table>");
|
|
|
|
//일별경고(월요일제외)
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 전송되지 않은 메일을 확인하고 그것을 전송한다
|
|
/// </summary>
|
|
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 +=
|
|
"<p>" +
|
|
"<br />이 메일은 EET 프로그램에서 자동 발신 되었습니다." +
|
|
"<br />메일이 잘못 전송 되었다면 [<a href='chikyun.kim@amkor.co.kr'>chikyun.kim@amkor.co.kr</a>] 로 문의 주시기 바랍니다" +
|
|
"</p>";
|
|
|
|
//전송을 해야 함
|
|
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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 자동생성 메일 작성
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|