'use strict'; const Service = require('../core/base_service'); const fileName = "Exam"; const { Op } = require('sequelize'); class ExamService extends Service { async loginUser(phone) { const { ctx } = this; try { const where = { phone }; const result = await ctx.model5.Examinee.findOne({ where }); return result || false; } catch (error) { const blockName = fileName + "--" + "loginUser"; ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error); return 'error'; } } async uidfinder(uid) { const { ctx } = this; try { const where = { uid }; const result = await ctx.model5.Examinee.findOne({ where }); return result || false; } catch (error) { const blockName = fileName + "--" + "uidfinder"; ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error); return 'error'; } } async getUser(uid) { const { ctx } = this; try { const attributes = ['user_name', 'identity_card', 'real_check', 'email', 'phone', 'address', 'workplace', 'status']; const where = { uid }; const result = await ctx.model5.Examinee.findOne({ attributes, where }); if(result.dataValues.status == 2) return false; if(result.dataValues.real_check == 0 || result.dataValues.real_check == 2) { const where = { user_uid: uid, user_name: result.dataValues.user_name, identity_card: result.dataValues.identity_card, }; const audit = await ctx.model5.Audit.findOne({ attributes: ['status'], where }); if (audit != null) await ctx.model5.Examinee.update({ real_check: audit.dataValues.status }, { where: { uid } }); }; return result || false; } catch (error) { const blockName = fileName + "--" + "getUser"; ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error); return 'error'; } } async editUser(userMsg, uid) { const { ctx } = this; try { const where = { uid }; let attributes = ['user_name', 'identity_card']; const check = await ctx.model5.Examinee.findOne({ attributes, where }); const { user_name, identity_card } = check.dataValues; if(user_name !== userMsg.user_name || identity_card !== userMsg.identity_card) { userMsg.real_check = 0; }; const audit = await ctx.model5.Audit.findOne({ where: { user_uid: uid, status: 0 } }); if(audit == null) { const auditForm = { user_uid: uid, user_name: userMsg.user_name, identity_card: userMsg.identity_card, status: 0, created_at: new Date(), }; await ctx.model5.Audit.create(auditForm); } else { const auditUpdate = { user_name: userMsg.user_name, identity_card: userMsg.identity_card, created_at: new Date(), } await ctx.model5.Audit.update(auditUpdate, { where: { user_uid: uid, status: 0 } }); } const result = await ctx.model5.Examinee.update(userMsg, { where }); return result[0] == 0 ? false : result; } catch (error) { const blockName = fileName + "--" + "editUser"; ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error); return 'error'; } } async changePassword(uid, oldPassword, newPassword) { const { ctx } = this; try { const where = { uid }; const salt = this.generateRandomString(); const setPassword = this.shaForm(newPassword, salt); const result = await ctx.model5.Examinee.findOne({ where }); if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false; const resultList = await ctx.model5.Examinee.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where }); return resultList[0] == 0 ? false : resultList; } catch (error) { const blockName = fileName + "--" + "changePassword"; ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error); return 'error'; } } async resetPassword(uid, modelType, defaultPassword, password, body, resetType) { const { ctx } = this; try { const result = await ctx.model5.Examinee.findOne({ where: { uid, role: [6, 9] } }); if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false; const salt = this.generateRandomString(); if(defaultPassword == "") { defaultPassword = '123456'; } const originPassword = this.shaForm(defaultPassword, salt); let where = {}, role; if(result.dataValues.password == 9) { role = { [Op.not]: [9] }; } else { role = { [Op.not]: [6, 9] }; } if(modelType == "single") { where = { role, ...body }; } else if (modelType == "multiple") { let user_name = [], phone = []; for (const key in body) { body[key].forEach(element => { user_name.push(element.user_name); phone.push(element.phone); }); } where = { role, user_name, phone }; } else if (modelType == "all") { where = { role }; } const resetList = await ctx.model5.Examinee.update({ salt: this.encryptRequest(salt), status: 0, password: originPassword }, { where }); return resetList.length == 0 ? false : resetList; } catch (error) { const blockName = fileName + "--" + "resetPassword"; ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error); return 'error'; } } async loginStatus(uid, login_status) { const { ctx } = this; try { const where = { uid }; await ctx.model5.Examinee.update({ login_status }, { where }); } catch (error) { const blockName = fileName + "--" + "loginStatus"; ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error); return 'error'; } } } module.exports = ExamService;