chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -0,0 +1,359 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using 報到系統客戶端.Data.Models;
|
||||
|
||||
namespace 報到系統客戶端.Data.Repositories
|
||||
{
|
||||
/// <summary>
|
||||
/// BPSN 本地資料庫操作類別
|
||||
/// 對應員工資料
|
||||
/// </summary>
|
||||
public class BPSNRepository
|
||||
{
|
||||
private readonly DatabaseService _dbService;
|
||||
|
||||
public BPSNRepository()
|
||||
{
|
||||
_dbService = DatabaseService.Instance;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新增一筆 BPSN 資料
|
||||
/// </summary>
|
||||
public bool Insert(LocalBPSNItem item)
|
||||
{
|
||||
try
|
||||
{
|
||||
var conn = _dbService.GetConnection();
|
||||
string sql = @"
|
||||
INSERT OR REPLACE INTO BPSN
|
||||
(BPENO, BPNME, BPAWD, Is系統管理群組, Is客戶管理群組, Is現場工作群組, Is查詢群組, CreatedAt, UpdatedAt)
|
||||
VALUES (@BPENO, @BPNME, @BPAWD, @Is系統管理群組, @Is客戶管理群組, @Is現場工作群組, @Is查詢群組, @CreatedAt, @UpdatedAt)
|
||||
";
|
||||
|
||||
using (SqliteCommand cmd = new SqliteCommand(sql, conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@BPENO", item.BPENO ?? (object)DBNull.Value);
|
||||
cmd.Parameters.AddWithValue("@BPNME", item.BPNME ?? (object)DBNull.Value);
|
||||
cmd.Parameters.AddWithValue("@BPAWD", item.BPAWD ?? (object)DBNull.Value);
|
||||
cmd.Parameters.AddWithValue("@Is系統管理群組", item.Is系統管理群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@Is客戶管理群組", item.Is客戶管理群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@Is現場工作群組", item.Is現場工作群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@Is查詢群組", item.Is查詢群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@CreatedAt", DateTime.Now);
|
||||
cmd.Parameters.AddWithValue("@UpdatedAt", DateTime.Now);
|
||||
|
||||
return cmd.ExecuteNonQuery() > 0;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception($"新增 BPSN 資料失敗:{ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 批量新增 BPSN 資料
|
||||
/// </summary>
|
||||
public void InsertBatch(List<LocalBPSNItem> items)
|
||||
{
|
||||
try
|
||||
{
|
||||
var conn = _dbService.GetConnection();
|
||||
|
||||
using (SqliteTransaction transaction = conn.BeginTransaction())
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (LocalBPSNItem item in items)
|
||||
{
|
||||
string sql = @"
|
||||
INSERT OR REPLACE INTO BPSN
|
||||
(BPENO, BPNME, BPAWD, Is系統管理群組, Is客戶管理群組, Is現場工作群組, Is查詢群組, CreatedAt, UpdatedAt)
|
||||
VALUES (@BPENO, @BPNME, @BPAWD, @Is系統管理群組, @Is客戶管理群組, @Is現場工作群組, @Is查詢群組, @CreatedAt, @UpdatedAt)
|
||||
";
|
||||
|
||||
using (SqliteCommand cmd = new SqliteCommand(sql, conn))
|
||||
{
|
||||
cmd.Transaction = transaction;
|
||||
cmd.Parameters.AddWithValue("@BPENO", item.BPENO ?? (object)DBNull.Value);
|
||||
cmd.Parameters.AddWithValue("@BPNME", item.BPNME ?? (object)DBNull.Value);
|
||||
cmd.Parameters.AddWithValue("@BPAWD", item.BPAWD ?? (object)DBNull.Value);
|
||||
cmd.Parameters.AddWithValue("@Is系統管理群組", item.Is系統管理群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@Is客戶管理群組", item.Is客戶管理群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@Is現場工作群組", item.Is現場工作群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@Is查詢群組", item.Is查詢群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@CreatedAt", DateTime.Now);
|
||||
cmd.Parameters.AddWithValue("@UpdatedAt", DateTime.Now);
|
||||
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
transaction.Commit();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception($"批量新增 BPSN 資料失敗:{ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新一筆 BPSN 資料
|
||||
/// </summary>
|
||||
public bool Update(LocalBPSNItem item)
|
||||
{
|
||||
try
|
||||
{
|
||||
var conn = _dbService.GetConnection();
|
||||
string sql = @"
|
||||
UPDATE BPSN SET
|
||||
BPNME = @BPNME,
|
||||
BPAWD = @BPAWD,
|
||||
Is系統管理群組 = @Is系統管理群組,
|
||||
Is客戶管理群組 = @Is客戶管理群組,
|
||||
Is現場工作群組 = @Is現場工作群組,
|
||||
Is查詢群組 = @Is查詢群組,
|
||||
UpdatedAt = @UpdatedAt
|
||||
WHERE BPENO = @BPENO
|
||||
";
|
||||
|
||||
using (SqliteCommand cmd = new SqliteCommand(sql, conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@BPENO", item.BPENO ?? (object)DBNull.Value);
|
||||
cmd.Parameters.AddWithValue("@BPNME", item.BPNME ?? (object)DBNull.Value);
|
||||
cmd.Parameters.AddWithValue("@BPAWD", item.BPAWD ?? (object)DBNull.Value);
|
||||
cmd.Parameters.AddWithValue("@Is系統管理群組", item.Is系統管理群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@Is客戶管理群組", item.Is客戶管理群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@Is現場工作群組", item.Is現場工作群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@Is查詢群組", item.Is查詢群組 ? 1 : 0);
|
||||
cmd.Parameters.AddWithValue("@UpdatedAt", DateTime.Now);
|
||||
|
||||
return cmd.ExecuteNonQuery() > 0;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception($"更新 BPSN 資料失敗:{ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刪除一筆 BPSN 資料
|
||||
/// </summary>
|
||||
public bool Delete(string bpeno)
|
||||
{
|
||||
try
|
||||
{
|
||||
var conn = _dbService.GetConnection();
|
||||
string sql = "DELETE FROM BPSN WHERE BPENO = @BPENO";
|
||||
|
||||
using (SqliteCommand cmd = new SqliteCommand(sql, conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@BPENO", bpeno ?? (object)DBNull.Value);
|
||||
return cmd.ExecuteNonQuery() > 0;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception($"刪除 BPSN 資料失敗:{ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查詢所有 BPSN 資料
|
||||
/// </summary>
|
||||
public List<LocalBPSNItem> GetAll()
|
||||
{
|
||||
return Query("SELECT * FROM BPSN ORDER BY BPENO ASC");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查詢單筆 BPSN 資料
|
||||
/// </summary>
|
||||
public LocalBPSNItem GetByBPENO(string bpeno)
|
||||
{
|
||||
try
|
||||
{
|
||||
var conn = _dbService.GetConnection();
|
||||
string sql = "SELECT * FROM BPSN WHERE BPENO = @BPENO LIMIT 1";
|
||||
|
||||
using (SqliteCommand cmd = new SqliteCommand(sql, conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@BPENO", bpeno ?? (object)DBNull.Value);
|
||||
|
||||
using (SqliteDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
if (reader.Read())
|
||||
{
|
||||
return ReadBPSNItem(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception($"查詢 BPSN 資料失敗:{ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 條件查詢 BPSN 資料(分頁)
|
||||
/// </summary>
|
||||
public List<LocalBPSNItem> GetByCondition(int pageIndex, int pageSize, string bpeno = "", string bpnme = "")
|
||||
{
|
||||
try
|
||||
{
|
||||
var conn = _dbService.GetConnection();
|
||||
string sql = "SELECT * FROM BPSN WHERE 1=1";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(bpeno))
|
||||
sql += " AND BPENO LIKE '%' || @BPENO || '%'";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(bpnme))
|
||||
sql += " AND BPNME LIKE '%' || @BPNME || '%'";
|
||||
|
||||
sql += " ORDER BY BPENO ASC LIMIT @PageSize OFFSET @Offset";
|
||||
|
||||
List<LocalBPSNItem> result = new List<LocalBPSNItem>();
|
||||
|
||||
using (SqliteCommand cmd = new SqliteCommand(sql, conn))
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(bpeno))
|
||||
cmd.Parameters.AddWithValue("@BPENO", bpeno);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(bpnme))
|
||||
cmd.Parameters.AddWithValue("@BPNME", bpnme);
|
||||
|
||||
cmd.Parameters.AddWithValue("@PageSize", pageSize);
|
||||
cmd.Parameters.AddWithValue("@Offset", (pageIndex - 1) * pageSize);
|
||||
|
||||
using (SqliteDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
result.Add(ReadBPSNItem(reader));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception($"查詢 BPSN 資料失敗:{ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查詢 BPSN 資料總數
|
||||
/// </summary>
|
||||
public int GetCount(string bpeno = "", string bpnme = "")
|
||||
{
|
||||
try
|
||||
{
|
||||
var conn = _dbService.GetConnection();
|
||||
string sql = "SELECT COUNT(*) FROM BPSN WHERE 1=1";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(bpeno))
|
||||
sql += " AND BPENO LIKE '%' || @BPENO || '%'";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(bpnme))
|
||||
sql += " AND BPNME LIKE '%' || @BPNME || '%'";
|
||||
|
||||
using (SqliteCommand cmd = new SqliteCommand(sql, conn))
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(bpeno))
|
||||
cmd.Parameters.AddWithValue("@BPENO", bpeno);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(bpnme))
|
||||
cmd.Parameters.AddWithValue("@BPNME", bpnme);
|
||||
|
||||
return Convert.ToInt32(cmd.ExecuteScalar());
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception($"統計 BPSN 資料失敗:{ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除所有 BPSN 資料
|
||||
/// </summary>
|
||||
public void DeleteAll()
|
||||
{
|
||||
try
|
||||
{
|
||||
var conn = _dbService.GetConnection();
|
||||
using (SqliteCommand cmd = new SqliteCommand("DELETE FROM BPSN", conn))
|
||||
{
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception($"清除 BPSN 資料失敗:{ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 私用方法 - 執行查詢
|
||||
/// </summary>
|
||||
private List<LocalBPSNItem> Query(string sql)
|
||||
{
|
||||
try
|
||||
{
|
||||
var conn = _dbService.GetConnection();
|
||||
List<LocalBPSNItem> result = new List<LocalBPSNItem>();
|
||||
|
||||
using (SqliteCommand cmd = new SqliteCommand(sql, conn))
|
||||
{
|
||||
using (SqliteDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
result.Add(ReadBPSNItem(reader));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception($"查詢 BPSN 失敗:{ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 私用方法 - 讀取資料列
|
||||
/// </summary>
|
||||
private LocalBPSNItem ReadBPSNItem(SqliteDataReader reader)
|
||||
{
|
||||
return new LocalBPSNItem
|
||||
{
|
||||
BPENO = reader.IsDBNull(reader.GetOrdinal("BPENO")) ? null : reader.GetString(reader.GetOrdinal("BPENO")),
|
||||
BPNME = reader.IsDBNull(reader.GetOrdinal("BPNME")) ? null : reader.GetString(reader.GetOrdinal("BPNME")),
|
||||
BPAWD = reader.IsDBNull(reader.GetOrdinal("BPAWD")) ? null : reader.GetString(reader.GetOrdinal("BPAWD")),
|
||||
Is系統管理群組 = reader.GetInt32(reader.GetOrdinal("Is系統管理群組")) != 0,
|
||||
Is客戶管理群組 = reader.GetInt32(reader.GetOrdinal("Is客戶管理群組")) != 0,
|
||||
Is現場工作群組 = reader.GetInt32(reader.GetOrdinal("Is現場工作群組")) != 0,
|
||||
Is查詢群組 = reader.GetInt32(reader.GetOrdinal("Is查詢群組")) != 0,
|
||||
CreatedAt = reader.GetDateTime(reader.GetOrdinal("CreatedAt")),
|
||||
UpdatedAt = reader.GetDateTime(reader.GetOrdinal("UpdatedAt"))
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user