| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- 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<T = typeof UpdateEum> 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<T>(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<T>(name: keyof (typeof DailyDate),value: any) {
- let t = 'Daily'
- let dailyDate = this.data[t] || {}
- dailyDate[name] = value
- this.data[t] = dailyDate
- }
- getData<C extends (keyof T)>(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<C extends (keyof T)>(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')
|