員工考核系統 - 部署說明

系統需求

  • Windows Server 2019+ 或 Linux (Ubuntu 20.04+)
  • .NET 8 SDK / Runtime
  • Microsoft SQL Server 2016+
  • IIS 或 Kestrel(.NET 內建)

步驟一:建立資料庫

  1. 開啟 SQL Server Management Studio (SSMS)
  2. 連線到公司的 SQL Server
  3. 開啟 database_setup.sql,執行全部 SQL
-- 確認資料庫建立成功
USE ExamSystem;
SELECT * FROM Dimensions;   -- 應看到 3 筆面向資料
SELECT * FROM Questions;    -- 應看到 12 筆題目
  1. 建立專用帳號(建議不要用 sa):
CREATE LOGIN exam_user WITH PASSWORD = '強密碼請自訂';
USE ExamSystem;
CREATE USER exam_user FOR LOGIN exam_user;
GRANT SELECT, INSERT, UPDATE ON SCHEMA::dbo TO exam_user;

步驟二:修改設定檔

編輯 appsettings.json,填入實際資訊:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=192.168.1.100;Database=ExamSystem;User Id=exam_user;Password=你的密碼;TrustServerCertificate=True"
  },
  "Jwt": {
    "Key": "換成你自己的32字元以上隨機字串",
    "Issuer": "ExamSystem",
    "Audience": "ExamSystemUsers"
  }
}

⚠️ 正式環境請勿將密碼寫在 appsettings.json,改用環境變數或 Windows Secrets


步驟三:建立員工帳號

用以下 API 或直接在資料庫建立員工(密碼請用 BCrypt hash):

API 方式(登入 HR 帳號後):

POST /api/hr/employees
{
  "employeeNo": "E003",
  "name": "張三",
  "department": "業務部",
  "email": "zhang@company.com",
  "initialPassword": "員工初始密碼"
}

批次匯入方式: 可準備 CSV,請工程師撰寫匯入腳本


步驟四:執行系統

開發測試

cd ExamSystem
dotnet run
# 開啟瀏覽器:http://localhost:5000

正式部署(IIS)

# 發佈
dotnet publish -c Release -o ./publish
 
# 將 ./publish 資料夾複製到 IIS 網站目錄
# IIS 應用程式集區:選 .NET CLR 版本「無 Managed 程式碼」
# 安裝 ASP.NET Core Hosting Bundle

正式部署(Linux + systemd)

dotnet publish -c Release -o /var/www/examsystem
sudo nano /etc/systemd/system/examsystem.service
[Unit]
Description=員工考核系統
 
[Service]
WorkingDirectory=/var/www/examsystem
ExecStart=/usr/bin/dotnet ExamSystem.dll
Restart=always
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://0.0.0.0:5000
 
[Install]
WantedBy=multi-user.target
sudo systemctl enable examsystem
sudo systemctl start examsystem

步驟五:設定內部 DNS

請 IT 在內部 DNS 新增記錄:

hr-exam.company.local  →  伺服器 IP(例:192.168.1.50)

員工只需在瀏覽器輸入:http://hr-exam.company.local


API 端點總覽

方法路徑說明權限
POST/api/auth/login登入公開
GET/api/exam/periods取得考核週期員工
GET/api/exam/questions/{periodId}取得題目員工
POST/api/exam/submit提交考核員工
GET/api/exam/my-results個人歷史成績員工
GET/api/hr/report/{periodId}全員成績報表HR
GET/api/hr/summary/{periodId}統計摘要HR
GET/api/hr/not-submitted/{periodId}未提交名單HR
POST/api/hr/employees新增員工HR

開發模式 Swagger 文件:http://localhost:5000/swagger


常見問題

Q:員工忘記密碼怎麼辦? HR 登入後台,透過 API 重設:

UPDATE Employees
SET PasswordHash = dbo.fn_bcrypt('新密碼')
WHERE EmployeeNo = 'E001';

(或請工程師提供密碼重設 API)

Q:如何匯出 Excel 成績報表? 目前版本可由 HR 在後台介面匯出 CSV, 如需 Excel 格式請告知工程師加入 EPPlus 套件。

Q:如何修改考核題目? 直接在資料庫 Questions 資料表新增/修改, 或請工程師開發後台題目管理頁面。