verify
This commit is contained in:
@@ -1,12 +1,13 @@
|
|||||||
const User = require('./user.model');
|
const User = require('./user.model');
|
||||||
const Fund = require('../fund/fund.model');
|
const Fund = require('../fund/fund.model');
|
||||||
|
const VReq = require('../vreq/vreq.model');
|
||||||
const MsgCode = require('../msgCode/msgCode.controller');
|
const MsgCode = require('../msgCode/msgCode.controller');
|
||||||
const changePwd = require('../sign/sign.controller').changePasswd;
|
const changePwd = require('../sign/sign.controller').changePasswd;
|
||||||
const Crypto = require('../../utils/crypto');
|
const Crypto = require('../../utils/crypto');
|
||||||
const { parseForm } = require('../../utils/form');
|
const { parseForm } = require('../../utils/form');
|
||||||
const { USER_FILE_DIR: userFileDir } = require('../../../configSec.js');
|
const { USER_FILE_DIR: userFileDir } = require('../../../configSec.js');
|
||||||
const { createAction } = require('../action/action.handler');
|
const { createAction } = require('../action/action.handler');
|
||||||
const { createTicket } = require('../ticket/ticket.handler');
|
const { createVerifyReq } = require('../vreq/vreq.handler');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
if (!fs.existsSync(userFileDir)) {
|
if (!fs.existsSync(userFileDir)) {
|
||||||
@@ -152,11 +153,35 @@ module.exports = {
|
|||||||
data: list
|
data: list
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
async getVerifyInfo (req, res) {
|
||||||
|
const { userId } = res.locals.user;
|
||||||
|
return await Promise.all([User.findById(userId), VReq.find({ userId })])
|
||||||
|
.then(([user, reqs]) => {
|
||||||
|
const verifyLevel = user.verifyLevel;
|
||||||
|
let verifyStatus = 'unknow';
|
||||||
|
for (let i = 0, len = reqs.length; i < len; ++i) {
|
||||||
|
if (reqs[i].verifyLevel === verifyLevel) {
|
||||||
|
verifyStatus = reqs[i].verifyStatus;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res.json({
|
||||||
|
code: 0,
|
||||||
|
data: {
|
||||||
|
verified: +user.verifyLevel > 0,
|
||||||
|
verifyLevel: user.verifyLevel,
|
||||||
|
verifyData: user.verifyData[user.verifyLevel],
|
||||||
|
verifyStatus
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
async verify (req, res) {
|
async verify (req, res) {
|
||||||
const { userId } = res.locals.user;
|
const { userId } = res.locals.user;
|
||||||
const user = await User.findById(userId);
|
const user = await User.findById(userId);
|
||||||
if (!user.verified) {
|
if (!user.verifyLevel || user.verifyLevel < 0) {
|
||||||
// 未进行过认证
|
// 未进行过认证
|
||||||
|
// 一级认证
|
||||||
const verifyLevel = 1;
|
const verifyLevel = 1;
|
||||||
const form = await parseForm(req, {
|
const form = await parseForm(req, {
|
||||||
tag: userId,
|
tag: userId,
|
||||||
@@ -173,17 +198,62 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
const action = createAction(5, {
|
const action = createAction(5, {
|
||||||
userId,
|
userId,
|
||||||
level: verifyLevel,
|
detail: { verifyLevel, name, nation, idType, idNo, pic1: pic1.path, pic2: pic2.path }
|
||||||
detail: { name, nation, idType, idNo, pic1: pic1.path, pic2: pic2.path }
|
|
||||||
});
|
});
|
||||||
action.save();
|
const verifyReq = createVerifyReq({ userId, verifyLevel, name, nation, idType, idNo, pic1: pic1.path, pic2: pic2.path });
|
||||||
|
await Promise.all([
|
||||||
|
action.save(),
|
||||||
|
verifyReq.save(),
|
||||||
|
User.findByIdAndUpdate(userId, {
|
||||||
|
verifyData: {
|
||||||
|
[verifyLevel]: { name, nation, idType, idNo, pic1: pic1.path, pic2: pic2.path }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
])
|
||||||
|
.catch(err => mylog.error(userId, '认证信息保存失败 ',err.msg));
|
||||||
return res.json({
|
return res.json({
|
||||||
code: 0,
|
code: 0,
|
||||||
msg: '审核信息已提交'
|
msg: '审核信息已提交'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (user.verified && +user.verifyLevel === 1) {
|
else if (user.verified && +user.verifyLevel === 1) {
|
||||||
|
// 二级认证
|
||||||
|
const verifyLevel = 2;
|
||||||
|
const form = await parseForm(req, {
|
||||||
|
tag: userId,
|
||||||
|
uploadDir: userFileDir,
|
||||||
|
maxFileSize: 20 * 1024 * 1024, // 限制文件体积最大20m
|
||||||
|
keepExtensions: true,
|
||||||
|
encoding: 'utf-8'
|
||||||
|
});
|
||||||
|
const { pic } = form.data;
|
||||||
|
if (!pic) return res.json({
|
||||||
|
code: 1,
|
||||||
|
msg: '缺少必要信息'
|
||||||
|
});
|
||||||
|
const action = createAction(5, {
|
||||||
|
userId,
|
||||||
|
detail: { verifyLevel, pic: pic.path }
|
||||||
|
});
|
||||||
|
const verifyReq = createVerifyReq({ userId, verifyLevel, pic: pic.path });
|
||||||
|
await Promise.all([
|
||||||
|
action.save(),
|
||||||
|
verifyReq.save(),
|
||||||
|
User.findByIdAndUpdate(userId, {
|
||||||
|
verifyData: {
|
||||||
|
[verifyLevel]: { pic: pic.path }
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
])
|
||||||
|
.catch(err => mylog.error(userId, '认证信息保存失败 ',err.msg));
|
||||||
|
return res.json({
|
||||||
|
code: 0,
|
||||||
|
msg: '审核信息已提交'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return res.json({
|
||||||
|
code: 404,
|
||||||
|
msg: '已经完成认证'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -32,6 +32,14 @@ const UserSchema = new mongoose.Schema({
|
|||||||
avatar: {
|
avatar: {
|
||||||
type: String
|
type: String
|
||||||
},
|
},
|
||||||
|
verifyLevel: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
verifyData: {
|
||||||
|
type: {},
|
||||||
|
default: {}
|
||||||
|
},
|
||||||
option: {
|
option: {
|
||||||
type: {}
|
type: {}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -53,6 +53,11 @@ const services = [
|
|||||||
method: 'POST',
|
method: 'POST',
|
||||||
controller: controller.verify
|
controller: controller.verify
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
url: '/verifyInfo',
|
||||||
|
method: 'GET',
|
||||||
|
controller: controller.getVerifyInfo
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
module.exports = services.map(service => {
|
module.exports = services.map(service => {
|
||||||
|
|||||||
67
src/modules/vreq/vreq.controller.js
Normal file
67
src/modules/vreq/vreq.controller.js
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const Vreq = require('./vreq.model');
|
||||||
|
const handleTicket = require('./vreq.handler');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
// 处理工单请求的api
|
||||||
|
async reqHandle (req, res) {
|
||||||
|
const { adminId } = res.locals.user;
|
||||||
|
if (!adminId) return res.json({ code: 1, msg: '非法访问' });
|
||||||
|
const { id } = req.body;
|
||||||
|
// 存在性检查
|
||||||
|
const ticket = await Vreq.findById(id).exec().catch(err => {
|
||||||
|
mylog.error(err);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
if (!ticket) return res.json({
|
||||||
|
code: 1,
|
||||||
|
msg: 'unknow ticket'
|
||||||
|
});
|
||||||
|
// 调用处理函数
|
||||||
|
handleTicket(ticket, adminId).then(data => {
|
||||||
|
return res.json({
|
||||||
|
code: 0,
|
||||||
|
msg: 'success',
|
||||||
|
data: JSON.stringify(data)
|
||||||
|
});
|
||||||
|
}).catch(err => {
|
||||||
|
return res.json({
|
||||||
|
code: 1,
|
||||||
|
error: JSON.stringify(err)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getReqList (req, res) {
|
||||||
|
const { adminId } = res.locals.user;
|
||||||
|
if (!adminId) return res.json({ code: 1, msg: '非法访问' });
|
||||||
|
const { pageSize = 0, pageIndex = 1} = req.query;
|
||||||
|
return Vreq.find({}).skip((+pageIndex - 1) * +pageSize).limit(+pageSize).then(data => {
|
||||||
|
return res.json({
|
||||||
|
code: 0,
|
||||||
|
data
|
||||||
|
});
|
||||||
|
}).catch(err => {
|
||||||
|
return res.json({
|
||||||
|
code: 1,
|
||||||
|
error: JSON.stringify(err)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getReqDetail (req, res) {
|
||||||
|
const { adminId } = res.locals.user;
|
||||||
|
if (!adminId) return res.json({ code: 1, msg: '非法访问' });
|
||||||
|
const { ticketId } = req.query;
|
||||||
|
return Vreq.findById(ticketId).then(data => {
|
||||||
|
return res.json({
|
||||||
|
code: 0,
|
||||||
|
data
|
||||||
|
});
|
||||||
|
}).catch(err => {
|
||||||
|
return res.json({
|
||||||
|
code: 1,
|
||||||
|
error: JSON.stringify(err)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
30
src/modules/vreq/vreq.handler.js
Normal file
30
src/modules/vreq/vreq.handler.js
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
'use strict';
|
||||||
|
const VReq = require('./vreq.model');
|
||||||
|
const User = require('../user/user.model');
|
||||||
|
|
||||||
|
function createVerifyReq (data) {
|
||||||
|
const { userId, verifyLevel, ...rest } = data;
|
||||||
|
return new VReq({
|
||||||
|
userId, verifyLevel, data: rest
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleReq (ticket, handlerId) {
|
||||||
|
// 所有工单在此处理,只要状态未完结(status !== 'finished'),就可以多次调用改变状态。
|
||||||
|
ticket = await ticket.next(handlerId);
|
||||||
|
if (ticket.status === 'processing') {
|
||||||
|
await dealTicket(ticket);
|
||||||
|
await ticket.next(handlerId);
|
||||||
|
return ticket;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function dealTicket (ticket, user) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
createVerifyReq,
|
||||||
|
handleReq
|
||||||
|
};
|
||||||
47
src/modules/vreq/vreq.model.js
Normal file
47
src/modules/vreq/vreq.model.js
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const mongoose = require('mongoose');
|
||||||
|
// 实名认证工单
|
||||||
|
const VreqSchema = new mongoose.Schema({
|
||||||
|
userId: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
verifyLevel: {
|
||||||
|
type: Number,
|
||||||
|
default: 1
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
type: {}
|
||||||
|
},
|
||||||
|
info: {
|
||||||
|
type: String,
|
||||||
|
default: '审核中'
|
||||||
|
},
|
||||||
|
option: {
|
||||||
|
type: {}
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
timestamps: {}
|
||||||
|
});
|
||||||
|
|
||||||
|
const VreqModel = mongoose.model('Vreq', VreqSchema);
|
||||||
|
/**
|
||||||
|
* status: created -> processing -> finished
|
||||||
|
*/
|
||||||
|
VreqModel.prototype.next = async function (handler = '') {
|
||||||
|
// handler 表示处理人
|
||||||
|
if (+this.status === 1) return this;
|
||||||
|
if (this.status === 0) {
|
||||||
|
await this.update({
|
||||||
|
status: 'processing',
|
||||||
|
handler
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = VreqModel;
|
||||||
27
src/modules/vreq/vreq.service.js
Normal file
27
src/modules/vreq/vreq.service.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const indexRoute = '/vreq';
|
||||||
|
const controller = require('./vreq.controller');
|
||||||
|
const services = [
|
||||||
|
{
|
||||||
|
url: '/handle',
|
||||||
|
method: 'POST',
|
||||||
|
controller: controller.reqHandle
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: '/list',
|
||||||
|
method: 'GET',
|
||||||
|
controller: controller.getReqList
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: '/detail',
|
||||||
|
method: 'GET',
|
||||||
|
controller: controller.getReqDetail
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
module.exports = services.map(service => {
|
||||||
|
// 可以在此处对要导出的服务map进行统一处理
|
||||||
|
service.url = indexRoute + service.url;
|
||||||
|
return service;
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user