import { MongoBaseService } from "cgserver"; import { MongoBaseModel } from "cgserver"; import { EErrorCode } from "../Config/_error_"; export enum EQAState { /** * 需要回答 */ Normal=0, /** * 已经回复 */ Replied=1, /** * 问题已关闭,不再二次处理 */ Closed=2 } export class ReplyItem { content:string="" user_id:number=0 nickname:string="" create_time:number=0 } export class QAModel extends MongoBaseModel { club_id:number=-1 user_id:number=0 /** * 无需标题直接问题就好了,只支持文字 */ content:string="" /** * 回复对话内容,json字符串 */ replies=new Array() /** * 创建时间 */ create_time:number=0 /** * 最新后台处理时间 */ do_time:number=0 do_user_id:number=0 do_user_nickname:string="" /** * 最新再次提问时间·· */ again_time:number=0 /** * */ state:number=0 /** * 1阅读,0未读 */ is_read:number=1 } export let GQASer:QAService=null class QAService extends MongoBaseService { /** * min_time 是do_time和again_time中较大的一个 * 这样就不用每次全拉了 * @param user_id * @param min_time */ async getByUserId(club_id:number,user_id:number,min_time:number) { club_id=club_id||-1 let qa_list:Array=await this.gets(null,{user_id:user_id,$or:[{do_time:{$gt:min_time}},{again_time:{$gt:min_time}},{create_time:{$gt:min_time}}],club_id:club_id}) return qa_list } async updateReply(qa_id:number,user_id:number,nickname:string,content:string) { let qa = await this.get(qa_id) if(!qa) { return EErrorCode.No_QA } if(qa.state==EQAState.Closed) { return EErrorCode.QA_Closed } let reply_item=new ReplyItem() reply_item.content=content reply_item.user_id=user_id reply_item.nickname=nickname reply_item.create_time=Date.now() let model= { do_time:reply_item.create_time, do_user_id:user_id, do_user_nickname:nickname, state:EQAState.Normal, is_read:1, $push:{replies:reply_item} } let sr = await this.updateOne(model,{id:qa_id}) if(sr.errcode) { return sr.errcode } return } async closeQA(qa_id:string,user_id:number,nickname:string) { let model= { do_user_id:user_id, do_user_nickname:nickname, state:EQAState.Closed } let sr = await this.updateOne(model,{_id:qa_id}) if(sr.errcode||sr.rs.modifiedCount==0) { return false } return true } async add(club_id:number,user_id:number,content:string) { club_id=club_id||-1 let qam=new QAModel() qam.user_id=user_id qam.club_id=club_id qam.content=content qam.again_time=Date.now() qam.create_time=qam.again_time qam.state=EQAState.Normal let sr=await this.insert(qam) if(sr.errcode||!sr.rs.insertedId) { return } qam._id=sr.rs.insertedId return qam } } GQASer=new QAService("ques_ans",QAModel)