This commit is contained in:
chaosBreaking
2019-08-31 14:59:13 +08:00
commit dc5423d356
65 changed files with 3813 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
'use strict';
const Ticket = require('./ticket.model');
const handleTicket = require('./ticket.handler');
module.exports = {
async reqHandleTicket (req, res) {
const { handler } = res.local.handler;
const { id } = req.body;
const ticket = await Ticket.findById(id).exec().catch(err => {
mylog.error(err);
return null;
});
if (!ticket) return res.json({
code: 1,
msg: 'unknow ticket'
});
handleTicket(ticket, handler).then(data => {
return res.json({
code: 0,
msg: 'success'
});
}).catch(err => {
return res.json({
code: 1,
error: JSON.stringify(err)
});
});
},
async getTicketList (req, res) {
const { pageSize, pageIndex } = req.query;
return Ticket.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 getTicketDetail (req, res) {
const { ticketId } = req.query;
return Ticket.findById(ticketId).then(data => {
return res.json({
code: 0,
data
});
}).catch(err => {
return res.json({
code: 1,
error: JSON.stringify(err)
});
});
}
};

View File

@@ -0,0 +1,43 @@
'use strict';
const Ticket = require('./ticket.model');
const User = require('../user/user.model');
const name2type = {
withdraw: 0
};
async function handleTicket (ticket, handler) {
// 所有工单在此处理只要状态未完结status !== 'finished',就可以多次调用改变状态。
const { userId, status } = ticket;
const user = await User.findById(userId).exec();
if (!user) return null;
ticket = await ticket.next(handler);
if (status === 'processing') {
await dealTicket(ticket, user);
await ticket.next(handler);
return ticket;
}
return null;
}
async function dealTicket (ticket, user) {
if (ticket.type === 0) {
// 提现
dealWithdraw(ticket, user);
}
}
async function dealWithdraw (ticket, user) {
}
function createTicket (name, data) {
const type = name2type[name];
const status = 'created';
const { userId, handler, action, option } = data;
return new Ticket({
status, type, userId, handler, action, option
});
}
module.exports = {
createTicket,
handleTicket
};

View File

@@ -0,0 +1,58 @@
'use strict';
const mongoose = require('mongoose');
// 用户提现专用工单!!!
const TicketSchema = new mongoose.Schema({
userId: {
// 订单所属用户的objId
type: String,
},
type: {
// 订单类型
type: String,
},
amount: {
type: Number
},
status: {
type: String
},
action: {
type: {}
},
handler: {
type: String
},
option: {
type: {}
}
},{
timestamps: {}
});
const TicketModel = mongoose.model('Ticket', TicketSchema);
/**
* status: created -> processing -> finished
*/
TicketModel.prototype.next = async function (handler = '') {
// handler 表示处理人
if (this.status === 'finished') return this;
if (this.type === 0) {
// deposite
if (this.status === 'created') {
await this.update({
status: 'processing',
handler
});
}
if (this.status === 'processing') {
await this.update({
status: 'finished',
handler
});
}
}
return this;
};
module.exports = TicketModel;

View File

@@ -0,0 +1,27 @@
'use strict';
const indexRoute = '/ticket';
const controller = require('./ticket.controller');
const services = [
{
url: '/handle',
method: 'POST',
controller: controller.reqHandleTicket
},
{
url: '/list',
method: 'GET',
controller: controller.getTicketList
},
{
url: '/detail',
method: 'GET',
controller: controller.getTicketDetail
},
];
module.exports = services.map(service => {
// 可以在此处对要导出的服务map进行统一处理
service.url = indexRoute + service.url;
return service;
});