# 活動人員簽到簽退 ## 資料關聯 Classes.ID (1) <-> (*) SignUp.CourseID ## 資料類別 * 各資料存取類別、資料集合類別、資料類別已有程式碼 * 如需擴充加在 DAC_XXXX2.cs 裡面 * DAC_Classes:活動資料處理類別 * ClassesList:活動資料集類別 * ClassesItem:活動資料項目類別 * DAC_SignUp:活動參加人員資料處理類別 * SignUpList:活動參加人員資料集類別 * SignUpItem:活動參加人員資料項目類別 * CheckInItem:簽到資料項目類別(用於 UploadCheckIns) ## 畫面檔 * 沒有,這是寫給 WinForm 客戶端使用的後端服務 ## 後端服務 * Services/ClassesService.asmx * 活動的後端服務 * SearchClasses:查詢活動清單 * Services/SignUpService.asmx * 活動參加人員的後端服務 * SearchSignUps:以活動編號(CourseID)查詢參加人員 * UploadCheckIns(int courseID, List items):批量上傳簽到簽退資料 * 上傳資料欄位(CheckInItem):CourseID, Name, Mobile, IDNumber, IDType, MealType, Email, SignUpType, CheckInType, CheckInTime * 驗證規則 * CourseID: 必填、必須存在於課程表 Classes.ID * Name, Mobile: 必填 * SignUpType: 必填,允許值 (預約 / 現場) * CheckInType: 必填,允許值 (CHECKIN / CHECKOUT) * CheckInTime: 必填,格式 yyyy-MM-dd HH:mm:ss * 處理邏輯 * 按 (CourseID, Name, Mobile) 查詢 SignUp 表 * 若找到則依照 CheckInType 更新 CheckInTime/CheckOutTime,計入成功筆數 * 若沒找到則新增 (SignUpType="現場"),並依 CheckInType 設定時間欄位,計入成功筆數 * 不使用 transaction * 回應格式 * 成功: { Success: true, Message: "...", Data: { CreatedCount, UpdatedCount, FailedCount, SkippedCount, SuccessIDs, Errors } } * 失敗: { Success: false, Message: "...", Data: {...} } ## 技術規格 * 前端使用 Vue.js 實作,不使用 Server Control * 後端使用 WebService,要 EnableSession