chore: 首次簽入 Thinkyu ASP.NET 專案

- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
2026-09-10 09:42:37 +08:00
commit 577060bc78
2496 changed files with 501389 additions and 0 deletions
+290
View File
@@ -0,0 +1,290 @@
using NPOI.SS.Formula.Functions;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Common;
using Wellan.Common;
using Wellan.Data;
/// <summary>
/// 打卡資料檔
/// </summary>
public class RcrdDAC : Wellan.Data.WDAC
{
public const string T01_上班 = "01";
public const string T02_下班 = "02";
public const string T03_中午休息 = "03";
public const string T04_下午上班 = "04";
public const string T05_加班上班 = "05";
public const string T06_加班下班 = "06";
public const string T07_出差離開 = "07";
public const string T08_出差返回 = "08";
public RcrdDAC()
{
}
public RcrdDAC(string connectionConfig, string connectionConfigName)
: this()
{
this._connectionConfig = connectionConfig;
this._connectionConfigName = connectionConfigName;
}
public RcrdDAC(WQuery query)
{
this._query = query;
}
/// <summary>
/// 讀取今天某人員的打卡資料
/// </summary>
/// <param name="rcusr">人員編號</param>
public DataTable ReadToday(string rcusr, DateTime date)
{
return ReadByDate(rcusr, date);
}
/// <summary>
/// 讀取某天某人員的打卡資料
/// </summary>
/// <param name="rcusr">人員編號</param>
public DataTable ReadByDate(string rcusr, DateTime date)
{
DbCommand cmd = Query.NewCommand();
cmd.CommandText =
@"SELECT RCDAT, RCUSR, RCC01, RCC02, RCC03, RCC04, RCC05, RCC06, RCC07, RCC08,
RCP01, RCP02, RCP03, RCP04, RCP05, RCP06, RCP07, RCP08
FROM RCRD WHERE RCDAT = @RCDAT AND RCUSR = @RCUSR ";
Query.AddParam(cmd, "RCDAT", date);
Query.AddParam(cmd, "RCUSR", rcusr);
return Query.Select(cmd);
}
/// <summary>
/// 讀取日期區間某人員的打卡資料
/// </summary>
/// <param name="rcusr">人員編號</param>
public DataTable SelectPeriod(string rcusr, DateTime rcdat1, DateTime rcdat2)
{
DbCommand cmd = Query.NewCommand();
cmd.CommandText =
@"SELECT RCDAT, RCUSR, RCC01, RCC02, RCC03, RCC04, RCC05, RCC06, RCC07, RCC08,
RCP01, RCP02, RCP03, RCP04, RCP05, RCP06, RCP07, RCP08
FROM RCRD WHERE RCUSR = @RCUSR AND RCDAT >= @RCDAT1 AND RCDAT < @RCDAT2";
Query.AddParam(cmd, "RCUSR", rcusr);
Query.AddParam(cmd, "RCDAT1", rcdat1.Date);
Query.AddParam(cmd, "RCDAT2", rcdat2.Date.AddDays(1));
return Query.Select(cmd);
}
/// <summary>
/// 檢查某一天某人員是否有打卡資料
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
/// <returns></returns>
public bool CheckExists(DateTime rcdat, string rcusr)
{
DbCommand cmd = Query.NewCommand();
cmd.CommandText = "SELECT COUNT(1) FROM RCRD WHERE RCDAT = @RCDAT AND RCUSR = @RCUSR ";
Query.AddParam(cmd, "RCDAT", rcdat.Date);
Query.AddParam(cmd, "RCUSR", rcusr);
int c = WQuery.GetInt32Value(Query.ExecuteScalar(cmd));
return c > 0;
}
/// <summary>
/// 打卡
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
/// <param name="time">時間</param>
/// <param name="fieldName">打卡欄位</param>
/// <param name="補打">是否為補打卡</param>
private void Punch(DateAndTime rcdat, string rcusr, string ip, string fieldName, bool )
{
DbCommand cmd = Query.NewCommand();
var d = ReadByDate(rcusr, rcdat.CardDate);
if (d.Rows.Count == 0)
{
cmd.CommandText =
String.Format(@"INSERT INTO RCRD
(TRDAT, TRMOD, TRUSR, RCDAT, RCUSR, RCC{0}, RCP{0}, RCZ{0})
VALUES
(GETDATE(), 'INSERT', @TRUSR, @RCDAT, @RCUSR, @TIME, @IP, @TIMEZONE)", fieldName);
cmd.Parameters.Clear();
Query.AddParam(cmd, "TRUSR", rcusr);
Query.AddParam(cmd, "RCDAT", rcdat.CardDate);
Query.AddParam(cmd, "RCUSR", rcusr);
Query.AddParam(cmd, "TIME", rcdat.LocalTime);
Query.AddParam(cmd, "IP", ip);
Query.AddParam(cmd, "TIMEZONE", rcdat.TimezoneName);
Query.ExecuteNonQuery(cmd);
}
else
{
if (String.IsNullOrEmpty(WDAC.GetStringValue(d.Rows[0]["RCC" + fieldName])))
{
cmd.CommandText =
String.Format(@"UPDATE RCRD
SET TRDAT = GETDATE() ,
TRMOD = 'UPDATE' ,
TRUSR = @TRUSR ,
RCC{0} = @TIME ,
RCP{0} = @IP ,
RCZ{0} = @TIMEZONE
WHERE RCDAT = @RCDAT
AND RCUSR = @RCUSR", fieldName);
cmd.Parameters.Clear();
Query.AddParam(cmd, "TRUSR", rcusr);
Query.AddParam(cmd, "TIME", rcdat.LocalTime);
Query.AddParam(cmd, "IP", ip);
Query.AddParam(cmd, "TIMEZONE", rcdat.TimezoneName);
Query.AddParam(cmd, "RCDAT", rcdat.CardDate);
Query.AddParam(cmd, "RCUSR", rcusr);
Query.ExecuteNonQuery(cmd);
}
}
}
/// <summary>
/// 清除打卡
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
/// <param name="fieldName">打卡欄位</param>
private void Clear(DateTime rcdat, string rcusr, string fieldName)
{
DbCommand cmd = Query.NewCommand();
cmd.CommandText =
String.Format(@"UPDATE RCRD
SET TRDAT = GETDATE() ,
TRMOD = 'UPDATE' ,
TRUSR = @TRUSR ,
RCC{0} = NULL ,
RCP{0} = NULL
WHERE RCDAT = @RCDAT
AND RCUSR = @RCUSR", fieldName);
cmd.Parameters.Clear();
Query.AddParam(cmd, "TRUSR", rcusr);
Query.AddParam(cmd, "RCDAT", rcdat);
Query.AddParam(cmd, "RCUSR", rcusr);
Query.ExecuteNonQuery(cmd);
}
/// <summary>
/// 打上班卡
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
/// <param name="time">時間</param>
/// <param name="補打"></param>
public void PunchRCC01(DateAndTime rcdat, string rcusr, string ip, bool )
{
Punch(rcdat, rcusr, ip, T01_上班, );
}
/// <summary>
/// 清除上班卡
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
public void ClearRCC01(DateTime rcdat, string rcusr)
{
Clear(rcdat, rcusr, T01_上班);
}
/// <summary>
/// 打下班卡
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
/// <param name="time">時間</param>
public void PunchRCC02(DateAndTime rcdat, string rcusr, string ip, bool )
{
Punch(rcdat, rcusr, ip, T02_下班, );
}
/// <summary>
/// 清除下班卡
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
public void ClearRCC02(DateTime rcdat, string rcusr)
{
Clear(rcdat, rcusr, T02_下班);
}
/// <summary>
/// 打出差外出打卡
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
/// <param name="time">時間</param>
public void PunchRCC07(DateAndTime rcdat, string rcusr, string ip, bool )
{
Punch(rcdat, rcusr, ip, T07_出差離開, );
}
/// <summary>
/// 清除出差外出打卡
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
public void ClearRCC07(DateTime rcdat, string rcusr)
{
Clear(rcdat, rcusr, T07_出差離開);
}
/// <summary>
/// 打出差返回打卡
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
/// <param name="time">時間</param>
public void PunchRCC08(DateAndTime rcdat, string rcusr, string ip, bool )
{
Punch(rcdat, rcusr, ip, T08_出差返回, );
}
/// <summary>
/// 清除出差返回打卡
/// </summary>
/// <param name="rcdat">日期</param>
/// <param name="rcusr">人員編號</param>
public void ClearRCC08(DateTime rcdat, string rcusr)
{
Clear(rcdat, rcusr, T08_出差返回);
}
/// <summary>
/// 取得某員工某日期往前6天之內的打卡天數
/// </summary>
/// <param name="rcdat"></param>
/// <param name="rcusr"></param>
/// <returns></returns>
public int PunchDaysIn7Days(DateTime rcdat, string rcusr, bool includeLastDay)
{
DbCommand cmd = Query.NewCommand();
cmd.CommandText = string.Format(@"SELECT COUNT(1) FROM RCRD
WHERE RCUSR = @RCUSR
AND RCDAT >= @RCDAT1
AND RCDAT {0} @RCDAT2
AND (RCC01 IS NOT NULL AND RCC01 <> ''
OR RCC02 IS NOT NULL AND RCC02 <> ''
OR RCC07 IS NOT NULL AND RCC07 <> ''
OR RCC08 IS NOT NULL AND RCC08 <> '')", (includeLastDay ? "<=": "<"));
Query.AddParam(cmd, "RCUSR", rcusr);
Query.AddParam(cmd, "RCDAT1", rcdat.Date.AddDays(-6));
Query.AddParam(cmd, "RCDAT2", rcdat.Date);
int c = WQuery.GetInt32Value(Query.ExecuteScalar(cmd));
return c;
}
}