init
This commit is contained in:
58
src/modules/ticket/ticket.controller.js
Normal file
58
src/modules/ticket/ticket.controller.js
Normal 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)
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
43
src/modules/ticket/ticket.handler.js
Normal file
43
src/modules/ticket/ticket.handler.js
Normal 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
|
||||
};
|
||||
58
src/modules/ticket/ticket.model.js
Normal file
58
src/modules/ticket/ticket.model.js
Normal 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;
|
||||
27
src/modules/ticket/ticket.service.js
Normal file
27
src/modules/ticket/ticket.service.js
Normal 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;
|
||||
});
|
||||
Reference in New Issue
Block a user