chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user