123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- export default class ch_sign{
- private static _instance:ch_sign;
- public static getInstance():ch_sign{
- if(!this._instance) this._instance = new ch_sign();
- return this._instance;
- }
- private _sign_data:Set<number>=new Set();
- private _max:number = 7;
- private _creat_date:number=0;
- private _sign_count:number=0;
- private _mode:number=1;
- /**设定的签到天数*/
- public get max_day():number{return this._max;}
- private getCreatDayCount():number{
- if(this._creat_date==0){
- chsdk.log.warn("签到模块没有初始化");
- return 0;
- }
- return chsdk.date.getDiffDayNum(this._creat_date,chsdk.date.now())+1;
- }
- /**
- * 签到初始化
- * @param mode =1可以补签 =2不可补签
- * @param data 签到存档数据,可以为空为第一天
- * @param max_day 签到最大天数
- */
- public init(mode:1|2,data:{sign_list:number[],creat_date:number}|{sign_count:number,last_date:number}|null,max_day:number=7):void{
- this._mode=mode;
- if(this._mode==1){
- if(data){
- data =data as {sign_list:number[],creat_date:number};
- const sign_list=data.sign_list ?? [];
- const creat_date=data.creat_date ?? chsdk.date.now();
- for(let i=0;i<sign_list.length;i++)this._sign_data.add(sign_list[i]);
- this._sign_count=this._sign_data.size;
- this._creat_date=creat_date;
- }else{
- this._sign_count=0;
- this._sign_data.clear();
- this._creat_date=chsdk.date.now();
- }
- }else{
- if(data){
- data = data as {sign_count:number,last_date:number};
- this._sign_count=data.sign_count ?? 0;
- this._creat_date=data.last_date ?? 0;
- }else{
- this._sign_count=0;
- this._creat_date=0;
- }
- }
- this._max=max_day;
- }
- /**已签到的数据,用于存档*/
- public getSignData():{sign_list:number[],creat_date:number}|{sign_count:number,last_date:number}{
- if(this._mode==1){
- return {sign_list:Array.from(this._sign_data.keys()),creat_date:this._creat_date};
- }else if(this._mode==2){
- return {sign_count:this._sign_count,last_date:this._creat_date};
- }
- }
- /** 返回某一天的状态
- * 0 等待签到
- * 1 已经签到
- * 2 失效等待补签
- * */
- public checkSigineState(day:number):number{
- if(this._mode==1){
- if(day<1 || day>this._max)return 0;
- if(this._sign_data.has(day))return 1;
- const count = this.getCreatDayCount();
- if(count <=0) return 0;
- if(day <count) return 2;
- }else if(this._mode==2){
- if(day<=this._sign_count) return 1;
- }
- return 0;
- }
- /**今天是否可以签到*/
- public checkSigin():boolean{
- if(this._mode==1){
- const count = this.getCreatDayCount();
- if(count<=0 || count>this._max)return false;
- return !this._sign_data.has(count);
- }else if(this._mode==2){
- const count = this._sign_count;
- if(count>=this._max)return false;
- return !chsdk.date.isSameDate(this._creat_date,chsdk.date.now());
- }
- return false;
- }
- /**签到是否全部完成*/
- public checkSiginComplete():boolean{
- const count = this._sign_count;
- return count>=this._max;
- }
- /**
- * 是否能补签
- * 不能返回0,
- * 可以补签返回可以补签的那一天*/
- public checkReSigin():number{
- if(this._mode!=1) return 0;
- let count = this.getCreatDayCount()-1;
- if(count<=0)return 0;
- if(count>this._max)count=this._max;
- for(let i=1;i<=count;i++){
- if(!this._sign_data.has(i)) return i;
- }
- return 0;
- }
- /**签到
- * 失败返回 0
- * 成功返回签到当天
- */
- public signIn(): number {
- if (!this.checkSigin()) {
- return 0;
- }
- if(this._mode==1){
- const day = this.getCreatDayCount();
- this._sign_data.add(day);
- this._sign_count=this._sign_data.size;
- return day;
- }else if(this._mode==2){
- this._sign_count++;
- this._creat_date=chsdk.date.now();
- return this._sign_count;
- }
- return 0;
- }
- /**补签
- * 失败返回 0
- * 成功返回补签那天
- */
- public reSignIn():number{
- if(this._mode!=1)return 0;
- const index = this.checkReSigin();
- if(index<=0 || index>this._max){
- return 0;
- }
- this._sign_data.add(index);
- this._sign_count=this._sign_data.size;
- return index;
- }
- //
- }
|