chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -0,0 +1,211 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Timers;
|
||||
using System.IO;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Data.SqlClient;
|
||||
using WebLib;
|
||||
|
||||
namespace Education
|
||||
{
|
||||
public class FollowService
|
||||
{
|
||||
private static FollowService _instance = null;
|
||||
private Timer _timer = null;
|
||||
private static int _interval = 30;
|
||||
private static string _doWorkTime = "00:00";
|
||||
private static bool _enabled = false;
|
||||
private static bool _busy = false;
|
||||
private static 發送郵件 發送郵件 = new 發送郵件();
|
||||
private DAC_BPSN Dao員工;
|
||||
private DbConnection conn;
|
||||
|
||||
/// <summary>
|
||||
/// 發動時間,預設值為 00:00
|
||||
/// </summary>
|
||||
public static string DoWorkTime
|
||||
{
|
||||
get
|
||||
{
|
||||
return _doWorkTime;
|
||||
}
|
||||
set
|
||||
{
|
||||
_doWorkTime = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 郵件模版路徑
|
||||
/// </summary>
|
||||
public static string TemplatePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 設定或取得簽核跟催服務是否啟動
|
||||
/// </summary>
|
||||
public static bool Enabled
|
||||
{
|
||||
get
|
||||
{
|
||||
return _enabled;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
if (_enabled)
|
||||
return;
|
||||
|
||||
Instance._timer.Interval = _interval * 1000;
|
||||
Instance._timer.AutoReset = true;
|
||||
Instance._timer.Enabled = true;
|
||||
_enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!_enabled)
|
||||
return;
|
||||
|
||||
_enabled = false;
|
||||
Instance._timer.Enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private FollowService()
|
||||
{
|
||||
_timer = new Timer();
|
||||
_timer.Enabled = false;
|
||||
_timer.Elapsed += new ElapsedEventHandler(DoFollowWork);
|
||||
conn = DAC.NewConnection();
|
||||
Dao員工 = new DAC_BPSN(conn);
|
||||
}
|
||||
|
||||
public static FollowService Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null)
|
||||
_instance = new FollowService();
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
private void DoFollowWork(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
string nowTime = DateTime.UtcNow.AddHours(8).ToString("HH:mm");
|
||||
if (nowTime.CompareTo(_doWorkTime) == 0 && !_busy)
|
||||
{
|
||||
_busy = true;
|
||||
try
|
||||
{
|
||||
DAC_表單簽核明細 dao表單簽核明細 = new DAC_表單簽核明細(conn);
|
||||
表單簽核明細List first = dao表單簽核明細.Select第一次稽催();
|
||||
表單簽核明細List second = dao表單簽核明細.Select第二次稽催();
|
||||
表單簽核明細List third = dao表單簽核明細.Select第三次稽催();
|
||||
|
||||
foreach (表單簽核明細 item in first)
|
||||
{
|
||||
SendFollowMail(item, 3);
|
||||
item.稽催狀態 = 1;
|
||||
dao表單簽核明細.UpdateOne(item);
|
||||
}
|
||||
|
||||
foreach (表單簽核明細 item in second)
|
||||
{
|
||||
SendFollowMail(item, 7);
|
||||
item.稽催狀態 = 2;
|
||||
dao表單簽核明細.UpdateOne(item);
|
||||
}
|
||||
|
||||
foreach (表單簽核明細 item in third)
|
||||
{
|
||||
SendFollowMail(item, 14);
|
||||
item.稽催狀態 = 3;
|
||||
dao表單簽核明細.UpdateOne(item);
|
||||
}
|
||||
|
||||
DoSurveyReminderWork();
|
||||
}
|
||||
finally
|
||||
{
|
||||
_busy = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SendFollowMail(表單簽核明細 item, int 天數)
|
||||
{
|
||||
string 電子郵件 = Dao員工.Get電子郵件(item.簽核人員);
|
||||
string 員工姓名 = Dao員工.Get員工姓名(item.簽核人員);
|
||||
發送郵件 發送郵件 = new 發送郵件();
|
||||
發送郵件.發送簽核跟催郵件(item.簽核ID, 員工姓名, 電子郵件, 天數, TemplatePath);
|
||||
}
|
||||
|
||||
private void DoSurveyReminderWork()
|
||||
{
|
||||
if (string.IsNullOrEmpty(PublicVariable.SiteBaseUrl))
|
||||
return;
|
||||
|
||||
string 手機版網址 = PublicVariable.SiteBaseUrl + "/MobileSurvey/Login.aspx";
|
||||
int deadlineDays = PublicVariable.SurveyReminderDeadlineDays;
|
||||
DateTime minDate = PublicVariable.SurveyReminderMinCourseDate;
|
||||
string[] excludeEmps = PublicVariable.SurveyReminderExcludeEmployees
|
||||
.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
DbCommand cmd = conn.CreateCommand();
|
||||
cmd.CommandText =
|
||||
@"select A.學員編號, A.訓練課程編號, C.BPNME as 學員姓名, C.BPEML as 電子郵件,
|
||||
B.顯示編號, B.訓練名稱, B.訓練日期, B.訓練日期迄
|
||||
from 課程報名 A
|
||||
inner join 訓練課程企劃 B on A.訓練課程編號 = B.編號
|
||||
inner join BPSNView C on A.學員編號 = C.BPENO
|
||||
where (A.報名狀態 = 'Y' or A.報名狀態 = 'R')
|
||||
and B.訓練日期 >= @MinCourseDate
|
||||
and (A.滿意度催填狀態 is null or A.滿意度催填狀態 = '')
|
||||
and not exists (
|
||||
select 1 from 滿意度調查 D
|
||||
where D.訓練課程企劃編號 = A.訓練課程編號 and D.學員編號 = A.學員編號
|
||||
)
|
||||
and dateadd(day, @DeadlineDays, B.訓練日期迄) < getdate()
|
||||
order by A.學員編號";
|
||||
cmd.Parameters.Add(new SqlParameter("@MinCourseDate", minDate));
|
||||
cmd.Parameters.Add(new SqlParameter("@DeadlineDays", deadlineDays));
|
||||
|
||||
DataTable dt = new DataTable();
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
dt.Load(reader);
|
||||
}
|
||||
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
string 學員編號 = DAC.GetString(row["學員編號"]);
|
||||
if (excludeEmps.Contains(學員編號))
|
||||
continue;
|
||||
|
||||
string 學員姓名 = DAC.GetString(row["學員姓名"]);
|
||||
string 電子郵件 = DAC.GetString(row["電子郵件"]);
|
||||
string 訓練名稱 = DAC.GetString(row["訓練名稱"]);
|
||||
DateTime 訓練日期 = DAC.GetDateTime(row["訓練日期"]);
|
||||
DateTime 訓練日期迄 = DAC.GetDateTime(row["訓練日期迄"]);
|
||||
int 訓練課程編號 = DAC.GetInt32(row["訓練課程編號"]);
|
||||
|
||||
發送郵件 發送郵件 = new 發送郵件();
|
||||
發送郵件.發送滿意度催填郵件(學員姓名, 電子郵件, 訓練名稱, 訓練日期, 訓練日期迄, 手機版網址);
|
||||
|
||||
DbCommand cmdUpd = conn.CreateCommand();
|
||||
cmdUpd.CommandText =
|
||||
"update 課程報名 set 滿意度催填狀態 = 'Y'" +
|
||||
" where 訓練課程編號 = @訓練課程編號 and 學員編號 = @學員編號";
|
||||
cmdUpd.Parameters.Add(new SqlParameter("@訓練課程編號", 訓練課程編號));
|
||||
cmdUpd.Parameters.Add(new SqlParameter("@學員編號", 學員編號));
|
||||
cmdUpd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user