2021SC@SDUSC
此方法用于添加话题。
此方法共有六个参数,其中前四个参数需要在方法调用时传入。第一个参数 keyname 为话题名称,第二个参数 id 为主题id,第三个参数 uid 为用户id ,第四个参数 mod_id 为模型id。方法返回值为模型类型,0表示独立模型,1表示系统模型。
根据参数 db 的值判断数据来自于哪个模型,并将模型实例化。当 keyname 不为空时,方法才能执行。若 keyname 类型不是数组,使用 split() 方法按照逗号将 keyname 分割成数组,赋值给 keywrods(大概又是手误orz)。将 keywrods 中的每个元素添加进去即可。
async addkey(keyname, id, uid, mod_id, mod_type = 1, db = false) {
let keyword_data;
if (!db) {
keyword_data = this.model('keyword_data');
} else {
keyword_data = this.model('keyword_data').db(db);
}
if (!think.isEmpty(keyname)) {
let keywrods;
if (!think.isArray(keyname)) {
keywrods = keyname.split(',');
} else {
keywrods = keyname;
}
for (const v of keywrods) {
const add = await this.thenAdd({keyname: v, discuss_count_update: new Date().getTime(), videonum: 1}, {keyname: v});
if (add.type == 'exist') {
await this.where({id: add.id}).update({discuss_count_update: new Date().getTime()});
await this.where({id: add.id}).increment('videonum', 1);
}
await keyword_data.add({tagid: add.id, docid: id, add_time: new Date().getTime(), uid: uid, mod_type: mod_type, mod_id: mod_id});
}
}
}
此方法用于删除话题。
此方法有三个参数,第一个参数 docid 为需要删除的话题id,第二个参数 mod_id 为模型id。
根据参数 db 的值判断数据来自于哪个模型,并将模型实例化。在模型数据中按照参数 docid 和 mod_id 查找 tagid。当tagid不为空时,删除话题即可。
async delkey(docid, mod_id, db = false) {
let keyword_data;
if (!db) {
keyword_data = this.model('keyword_data');
} else {
keyword_data = this.model('keyword_data').db(db);
}
const tagid = await keyword_data.where({docid: docid, mod_id: mod_id}).getField('tagid', true);
if (!think.isEmpty(tagid)) {
await keyword_data.where({docid: docid, mod_id: mod_id}).delete();
await this.where({id: tagid}).decrement('videonum');
}
}
此方法用于更新话题。
此方法共有六个参数,其中前四个参数需要在方法调用时传入。第一个参数 keyname 为话题名称,第二个参数 id 为主题id,第三个参数 uid 为用户id ,第四个参数 mod_id 为模型id。方法返回值为模型类型,0表示独立模型,1表示系统模型。
根据参数 db 的值判断数据来自于哪个模型,并将模型实例化。根据参数 id、mod_type、mod_id 在模型中查找 tagid 并赋值给 topicid 。之后,获取还存在的话题、要添加的话题和要删除的话题,进行对应操作即可,方法结束。
async updatekey(keyname, id, uid, mod_id, mod_type = 0, db = false) {
let keyword_data;
if (!db) {
keyword_data = this.model('keyword_data');
} else {
keyword_data = this.model('keyword_data').db(db);
}
const where = {};
where.docid = id;
where.mod_type = mod_type;
where.mod_id = mod_id;
let keyword;
const topicid = await keyword_data.where(where).getField('tagid');
if (!think.isEmpty(topicid)) {
keyword = await this.where({id: ['IN', topicid]}).getField('keyname');
}
let newkn = keyname;
if (!think.isEmpty(newkn)) {
newkn = newkn.split(',');
} else {
newkn = [];
}
const okn = [];
const nkn = [];
for (const k of newkn) {
if (think._.includes(keyword, k)) {
okn.push(k);
} else {
nkn.push(k);
}
}
const dkn = think._.xor(okn, keyword);
if (!think.isEmpty(dkn)) {
const did = await this.where({keyname: ['IN', dkn]}).getField('id');
where.tagid = ['in', did];
await keyword_data.where(where).delete();
await this.where({keyname: ['IN', dkn]}).decrement('videonum', 1);
}
await this.addkey(nkn, id, uid, mod_id, mod_type, db);
}