# 資料同步 ## 員工資料下載 * Services/BPSNService.asmx * METHOD Download:下載員工資料 * 資料存取類別:DAC_BPSN * 資料讀取方法:SelectForClient() ## 報到資料上傳 * Services/SignUpService.asmx * METHOD UploadCheckIns(int courseID, List items):上傳簽到簽退資料清單 * 資料表 * SignUp 參加人員 * Classes 課程 * 資料存取類別 * DAC_SignUp 參加人員 * DAC_Classes 課程 * 上傳資料欄位(CheckInItem) * CourseID (INTEGER NOT NULL) - 課程ID * Name (TEXT NOT NULL) - 學員姓名 * Mobile (TEXT NOT NULL) - 手機號 * IDNumber (TEXT) - 身分證字號 * IDType (TEXT) - 身分別 * MealType (TEXT) - 餐點 * Email (TEXT) - 電子郵件 * SignUpType (TEXT) - 報名方式(預約 / 現場) * CheckInType (TEXT) - 簽到類別(CHECKIN / CHECKOUT) * CheckInTime (DATETIME) - 簽到/簽退時間 * 驗證規則 * CourseID: 必填、必須存在於課程表 Classes.ID * Name: 必填 * Mobile: 必填 * SignUpType: 必填,允許值 (預約 / 現場) * CheckInType: 必填,允許值(CHECKIN / CHECKOUT) * CheckInTime: 必填,格式 yyyy-MM-dd HH:mm:ss * 處理邏輯 * 用 CourseID 查詢 Classes.ID,若不存在則拒絕整批資料 * 按 (CourseID, Name, Mobile) 作為複合主鍵查詢 SignUp 表 * 若找到則依照 CheckInType 使用傳入的 CheckInTime 更新 CheckInTime/CheckOutTime,計入成功筆數 * 若沒找到則新增 (SignUpType="現場"),並依 CheckInType 設定時間欄位,計入成功筆數 * 不使用 transaction * 回應格式 * 成功: { Success: true, Message: "...", Data: { CreatedCount, UpdatedCount, FailedCount, SkippedCount, SuccessIDs, Errors } } * 失敗: { Success: false, Message: "..." }