import { saveRoot } from '../saveCompent/MySave'; import { SaveBase } from '../saveCompent/SaveBase'; // 定义每天更新的数据,每天充值为默认值 const DailyDate = { //金币不足领取次数 rewardCoinTimes: 0, } const WeekDate = { } const MonthDate = { } export interface UpdateType { Daily: any, Week: any, Month: any } const UpdateEum = { Daily: DailyDate, Week: WeekDate, Month: MonthDate, } /** * 固定时间更新数据 */ @saveRoot('Update') export class Update extends SaveBase { private data: { [key: string]: any } = {} private lastTime: number = 0 private conf: T = UpdateEum as T // 提供序列化跟新,和手动跟新两种形式 serialize() { let res = { data: this.data, lastTime: this.lastTime } return res } unserialize(data: any): this { if (!data) { this.data = {} this.lastTime = 0 } else { let d = data this.data = d.data || {} this.lastTime = d.lastTime ?? 0 } let now = this.getNowTime(); this.checkDate(now) this.lastTime = now return this } private getNowTime() { return chsdk.date.now() // return 0 } getDaly(name: keyof (typeof DailyDate)) { let type = 'Daily' let t = type as string let dailyDate = this.data[t] if (!dailyDate) { return this.conf[t][name] } return dailyDate[name] ?? this.conf[t][name] } setDaly(name: keyof (typeof DailyDate),value: any) { let t = 'Daily' let dailyDate = this.data[t] || {} dailyDate[name] = value this.data[t] = dailyDate } getData(type: C, name: keyof (T[C])) { let t = type as string let dailyDate = this.data[t] if (!dailyDate) { return this.conf[t][name] } return dailyDate[name] ?? this.conf[t][name] } setData(type: C, name: keyof (T[C]), value: any) { let t = type as string let dailyDate = this.data[t] || {} dailyDate[name] = value this.data[t] = dailyDate } private reset(type: keyof UpdateType) { let t = type as string this.data[t] = {} } private checkDate(now: number) { let data = this.data || {} if (!now) { this.data = data this.lastTime = now return } if (!this.isSameDate(now, this.lastTime)) { this.reset('Daily') } if (!this.areDatesInSameWeek(now, this.lastTime)) { this.reset('Week') } if (!this.areDatesInSameMonth(now, this.lastTime)) { this.reset('Month') } } /**判定两个时间是否是同一天*/ private isSameDate(timestamp1: number, timestamp2: number): boolean { let date1 = new Date(timestamp1); let date2 = new Date(timestamp2); return date1.getFullYear() == date2.getFullYear() && date1.getMonth() == date2.getMonth() && date1.getDate() == date2.getDate(); } /**判定两个时间是否是同一周*/ private areDatesInSameWeek(date1: number, date2: number): boolean { const startOfWeek1 = this.getStartOfWeek(new Date(date1)); const startOfWeek2 = this.getStartOfWeek(new Date(date2)); return startOfWeek1.getTime() === startOfWeek2.getTime(); } private getStartOfWeek(date: Date): Date { const startOfWeek = new Date(date); const day = startOfWeek.getDay(); // 星期日是 0,星期一是 1,依此类推 const diff = startOfWeek.getDate() - day; // 计算当前日期所在周的第一天 startOfWeek.setDate(diff); // 设置为该周的第一天 startOfWeek.setHours(0, 0, 0, 0); // 设置时间为 00:00:00 return startOfWeek; } private areDatesInSameMonth(date1: number, date2: number): boolean { const d1 = new Date(date1); const d2 = new Date(date2); return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth(); } } // let update = new Update() // update.getDate('Daily', 'aa')