import * as _ from "underscore" import { GExtUserSer } from './ExtUserService'; import { EErrorCode } from '../Config/_error_'; import { GLog } from 'cgserver'; import { GClubSer } from './ClubService'; import { MongoBaseModel } from "cgserver"; import { MongoBaseService } from "cgserver"; export class EmailModel extends MongoBaseModel { club_id:number=-1 from_user_id:number=-1 from_user_nickname:string="" from_user_sex:number=-1 from_user_logo:string="" user_id:number=-1 title:string="" info={} create_time:number=-1 is_read:number=0 is_get:number=0//-1为没有附件,0为没有领取,1为已领取 } export let GEmailSer:EmailService=null class EmailService extends MongoBaseService { async getByUserId(club_id:number,user_id:number,min_id:number) { club_id = club_id||-1 let list:Array = await this.gets(null,{from_user_id:user_id,id:{$gt:min_id},club_id:club_id}) return list } async read(email_id:string) { this.updateOne({is_read:1},{_id:email_id}) return } async send(club_id:number,from_user_id:number,to_user_id:number,title:string,info:string,attachment?) { if (!info) { return null } let email_info = { info:info, attachment:attachment } let em=new EmailModel() em.club_id=club_id if(from_user_id<0) { em.from_user_id = -1 em.from_user_nickname = "系统" em.from_user_logo = "1" } else { let r = await GExtUserSer.getById(from_user_id) em.from_user_id = from_user_id em.from_user_nickname = r.nickname em.from_user_sex = r.sex em.from_user_logo = r.logo } em.user_id = to_user_id em.title = title em.info = JSON.stringify(email_info) em.create_time = Date.now() em.is_read = 0 if(attachment) { em.is_get = 0 } else { em.is_get = -1 } let sr=await this.insert(em) em._id = sr.rs.insertedId return em } async removeX(id:string) { let email = await this.get({_id:id}) if(!email) { return EErrorCode.No_Email } if(email.info.attachment&&!email.is_get) { return EErrorCode.Can_Not_Remove_For_Att } this.deleteOne({_id:id}) return } async getAttachment(email_id:string) { let rs={att:null,errcode:null} let email = await this.get(email_id) if(!email) { rs.errcode = EErrorCode.No_Email return rs } if(email.is_get==-1) { rs.errcode = EErrorCode.No_Attachment return rs } if(email.is_get==1) { rs.errcode = EErrorCode.Has_Got_Attachment return rs } this.updateOne({is_get:1},{_id:email_id}) let info = JSON.parse(email.info) let user_id = email.user_id let club_id = email.club_id||-1 for(let key in info.attachment) { //如果又多个领取,防止一个领取失败导致掐他的也无法领取的bug if(key=="bank_coin") { if(!club_id||club_id<=0) { GExtUserSer.updateOne({$inc:{bank_coin:email.info.attachment[key]}},{_id:email_id}) } else { GClubSer.addBankCoin(user_id,club_id,info.attachment[key]) } } else if(key=="coin") { if(club_id<=0) { GExtUserSer.updateOne({$inc:{coin:email.info.attachment[key]}},{id:user_id}) } else { GClubSer.addCoin(user_id,club_id,info.attachment[key]) } } else if(key=="crystal") { if(club_id<=0) { GExtUserSer.updateOne({$inc:{crystal:email.info.attachment[key]}},{id:user_id}) } else { await GClubSer.addCrystal(user_id,club_id,info.attachment[key]) } } } rs.att = info.attachment return rs } } GEmailSer = new EmailService("email",EmailModel)