API finished
This commit is contained in:
90
package-lock.json
generated
90
package-lock.json
generated
@@ -206,6 +206,15 @@
|
|||||||
"sprintf-js": "1.0.3"
|
"sprintf-js": "1.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"arguments-extended": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/arguments-extended/-/arguments-extended-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-YQfkkX0OtvCk3WYyD8Fa/HLvSUY=",
|
||||||
|
"requires": {
|
||||||
|
"extended": "0.0.6",
|
||||||
|
"is-extended": "0.0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"arr-diff": {
|
"arr-diff": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
||||||
@@ -230,6 +239,16 @@
|
|||||||
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
|
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"array-extended": {
|
||||||
|
"version": "0.0.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-extended/-/array-extended-0.0.11.tgz",
|
||||||
|
"integrity": "sha1-1xRK50jek8pybxIQCdv/FibRZL0=",
|
||||||
|
"requires": {
|
||||||
|
"arguments-extended": "0.0.3",
|
||||||
|
"extended": "0.0.6",
|
||||||
|
"is-extended": "0.0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"array-find-index": {
|
"array-find-index": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
|
||||||
@@ -2791,6 +2810,16 @@
|
|||||||
"whatwg-url": "6.4.1"
|
"whatwg-url": "6.4.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"date-extended": {
|
||||||
|
"version": "0.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/date-extended/-/date-extended-0.0.6.tgz",
|
||||||
|
"integrity": "sha1-I4AtV90b94GIE/4MMuhRqG2iZ8k=",
|
||||||
|
"requires": {
|
||||||
|
"array-extended": "0.0.11",
|
||||||
|
"extended": "0.0.6",
|
||||||
|
"is-extended": "0.0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"date-now": {
|
"date-now": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
|
||||||
@@ -2817,6 +2846,11 @@
|
|||||||
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
|
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"declare.js": {
|
||||||
|
"version": "0.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/declare.js/-/declare.js-0.0.8.tgz",
|
||||||
|
"integrity": "sha1-BHit/5VkwAT1Hfc9i8E0AZ0o3N4="
|
||||||
|
},
|
||||||
"decode-uri-component": {
|
"decode-uri-component": {
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
|
||||||
@@ -3715,6 +3749,22 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"extended": {
|
||||||
|
"version": "0.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/extended/-/extended-0.0.6.tgz",
|
||||||
|
"integrity": "sha1-f7i/e52uOXWG5IVwrP1kLHjlBmk=",
|
||||||
|
"requires": {
|
||||||
|
"extender": "0.0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extender": {
|
||||||
|
"version": "0.0.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/extender/-/extender-0.0.10.tgz",
|
||||||
|
"integrity": "sha1-WJwHSCvmGhRgttgfnCSqZ+jzJM0=",
|
||||||
|
"requires": {
|
||||||
|
"declare.js": "0.0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"extglob": {
|
"extglob": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
|
||||||
@@ -3798,6 +3848,17 @@
|
|||||||
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
|
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"fast-csv": {
|
||||||
|
"version": "2.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-2.4.1.tgz",
|
||||||
|
"integrity": "sha1-vX3SaDkfcpNntZRFuN0K0CaIGyY=",
|
||||||
|
"requires": {
|
||||||
|
"extended": "0.0.6",
|
||||||
|
"is-extended": "0.0.10",
|
||||||
|
"object-extended": "0.0.7",
|
||||||
|
"string-extended": "0.0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"fast-deep-equal": {
|
"fast-deep-equal": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
|
||||||
@@ -5629,6 +5690,14 @@
|
|||||||
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
|
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"is-extended": {
|
||||||
|
"version": "0.0.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-extended/-/is-extended-0.0.10.tgz",
|
||||||
|
"integrity": "sha1-JE4UDfdbscmjEG9BL/GC+1NKbWI=",
|
||||||
|
"requires": {
|
||||||
|
"extended": "0.0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"is-extglob": {
|
"is-extglob": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
||||||
@@ -7893,6 +7962,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"object-extended": {
|
||||||
|
"version": "0.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-extended/-/object-extended-0.0.7.tgz",
|
||||||
|
"integrity": "sha1-hP0j9WsVWCrrPoiwXLVdJDLWijM=",
|
||||||
|
"requires": {
|
||||||
|
"array-extended": "0.0.11",
|
||||||
|
"extended": "0.0.6",
|
||||||
|
"is-extended": "0.0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"object-keys": {
|
"object-keys": {
|
||||||
"version": "1.0.11",
|
"version": "1.0.11",
|
||||||
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
|
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
|
||||||
@@ -11730,6 +11809,17 @@
|
|||||||
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
|
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"string-extended": {
|
||||||
|
"version": "0.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-extended/-/string-extended-0.0.8.tgz",
|
||||||
|
"integrity": "sha1-dBlX3/SHsCcqee7FpE8jnubxfM0=",
|
||||||
|
"requires": {
|
||||||
|
"array-extended": "0.0.11",
|
||||||
|
"date-extended": "0.0.6",
|
||||||
|
"extended": "0.0.6",
|
||||||
|
"is-extended": "0.0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"string-length": {
|
"string-length": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"build": "node build/build.js"
|
"build": "node build/build.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"fast-csv": "^2.4.1",
|
||||||
"koa": "^2.5.1",
|
"koa": "^2.5.1",
|
||||||
"koa-body": "^1.7.0",
|
"koa-body": "^1.7.0",
|
||||||
"koa-compose": "^4.1.0",
|
"koa-compose": "^4.1.0",
|
||||||
|
|||||||
1
servers/.~lock.my.csv#
Normal file
1
servers/.~lock.my.csv#
Normal file
@@ -0,0 +1 @@
|
|||||||
|
,xice,xice-W65KJ1-KK1,27.05.2018 18:51,file:///home/xice/.config/libreoffice/4;
|
||||||
@@ -3,23 +3,24 @@ let bodyParser = require('koa-body');
|
|||||||
let route = require('koa-route');
|
let route = require('koa-route');
|
||||||
const logger = require('koa-logger')
|
const logger = require('koa-logger')
|
||||||
const compose = require('koa-compose');
|
const compose = require('koa-compose');
|
||||||
|
let send = require('koa-send');
|
||||||
let db = require('./sql');
|
let db = require('./sql');
|
||||||
const app = new Koa();
|
const app = new Koa();
|
||||||
app.use(bodyParser({multipart: true}));
|
app.use(bodyParser({ multipart: true }));
|
||||||
// app.use(async(ctx, next) => {
|
// app.use(async(ctx, next) => {
|
||||||
// console.log(`Process ${ctx.request.method} ${ctx.request.url}...`);
|
// console.log(`Process ${ctx.request.method} ${ctx.request.url}...`);
|
||||||
// await next();
|
// await next();
|
||||||
// })
|
// })
|
||||||
app.use(logger());
|
app.use(logger());
|
||||||
app.use(async(ctx, next)=>{
|
app.use(async (ctx, next) => {
|
||||||
if(ctx.request.method == "POST"){
|
if (ctx.request.method == "POST") {
|
||||||
// for(ctx.request.body in ctx.request.body);
|
// for(ctx.request.body in ctx.request.body);
|
||||||
console.log(ctx.request.body);
|
console.log(ctx.request.body);
|
||||||
}
|
}
|
||||||
await next();
|
await next();
|
||||||
})
|
})
|
||||||
let getTitale = async(ctx,next)=>{
|
let getTitale = async (ctx, next) => {
|
||||||
ctx.response.body = JOSN.stringify({name:(await db.activity.get_tital(ctx.query['paper_id']))});
|
ctx.response.body = JOSN.stringify({ name: (await db.activity.get_tital(ctx.query['paper_id'])) });
|
||||||
}
|
}
|
||||||
// start 返回问卷信息 开始计时
|
// start 返回问卷信息 开始计时
|
||||||
/**
|
/**
|
||||||
@@ -44,7 +45,7 @@ let getTitale = async(ctx,next)=>{
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
let start = async(ctx,next)=>{
|
let start = async (ctx, next) => {
|
||||||
let post = ctx.request.body;
|
let post = ctx.request.body;
|
||||||
let paper_id = post.paper_id;
|
let paper_id = post.paper_id;
|
||||||
delete post.paper_id;
|
delete post.paper_id;
|
||||||
@@ -53,9 +54,9 @@ let start = async(ctx,next)=>{
|
|||||||
ctx.session.activity_id = paper_id;
|
ctx.session.activity_id = paper_id;
|
||||||
ctx.session.start_time = new Date();
|
ctx.session.start_time = new Date();
|
||||||
let rec = await db.activity.get_paper(paper_id);
|
let rec = await db.activity.get_paper(paper_id);
|
||||||
if(rec == "time_err"){
|
if (rec == "time_err") {
|
||||||
ctx.response.body=JSON.stringify({success:false,msg:"不在答题时间,不能答题"});
|
ctx.response.body = JSON.stringify({ success: false, msg: "不在答题时间,不能答题" });
|
||||||
}else{
|
} else {
|
||||||
ctx.response.body = JSON.stringify(rec);
|
ctx.response.body = JSON.stringify(rec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,16 +69,16 @@ let start = async(ctx,next)=>{
|
|||||||
msg: "您已经参加过","提交成功"
|
msg: "您已经参加过","提交成功"
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
let end = async(ctx,next)=>{
|
let end = async (ctx, next) => {
|
||||||
let post = ctx.request.body;
|
let post = ctx.request.body;
|
||||||
let end_time = new Date();
|
let end_time = new Date();
|
||||||
if(await db.activity.is_time_out(
|
if (await db.activity.is_time_out(
|
||||||
ctx.session.activity_id,
|
ctx.session.activity_id,
|
||||||
ctx.session.start_time,
|
ctx.session.start_time,
|
||||||
end_time
|
end_time
|
||||||
)){
|
)) {
|
||||||
ctx.response.body = JSON.stringify({success: false,msg:"用时过分长"});
|
ctx.response.body = JSON.stringify({ success: false, msg: "用时过分长" });
|
||||||
}else{
|
} else {
|
||||||
let test_id = await db.test_paper.log_in(db.question,
|
let test_id = await db.test_paper.log_in(db.question,
|
||||||
ctx.session.activity_id,
|
ctx.session.activity_id,
|
||||||
ctx.session.user_id,
|
ctx.session.user_id,
|
||||||
@@ -85,20 +86,68 @@ let end = async(ctx,next)=>{
|
|||||||
end_time,
|
end_time,
|
||||||
post
|
post
|
||||||
);
|
);
|
||||||
if(test_id == 'had'){
|
if (test_id == 'had') {
|
||||||
ctx.response.body = JSON.stringify({success: false,msg:"已参加哦"});
|
ctx.response.body = JSON.stringify({ success: false, msg: "已参加哦" });
|
||||||
}else{
|
} else {
|
||||||
await Promise.all([db.user.add_test(ctx.session.user_id,test_id),
|
await Promise.all([db.user.add_test(ctx.session.user_id, test_id),
|
||||||
db.activity.add_test(ctx.session.activity_idtest_id,test_id)
|
db.activity.add_test(ctx.session.activity_idtest_id, test_id)
|
||||||
])
|
])
|
||||||
ctx.response.body = JSON.stringify({success: true,msg:"已成功提交"});
|
ctx.response.body = JSON.stringify({ success: true, msg: "已成功提交" });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let admin_login = async (ctx, next) => {
|
||||||
|
let post = ctx.request.body;
|
||||||
|
let admin = await db.admin.is_login_in(post.user_name, post.password)
|
||||||
|
if (!admin === false) {
|
||||||
|
ctx.session.admin = true;
|
||||||
|
ctx.session.user_id = admin._id;
|
||||||
|
ctx.response.body = JSON.stringify({ success: true, activity_list: admin });
|
||||||
|
} else {
|
||||||
|
ctx.session.admin = false;
|
||||||
|
ctx.response.body = JSON.stringify({ success: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
name
|
||||||
|
start_time
|
||||||
|
end_time
|
||||||
|
time_lim
|
||||||
|
question_num
|
||||||
|
|
||||||
|
file
|
||||||
|
type question A A.price B B.price
|
||||||
|
*/
|
||||||
|
let admin_upload = async (ctx, next) => {
|
||||||
|
if (ctx.session.admin) {
|
||||||
|
let post = ctx.request.body.fields;
|
||||||
|
let file = ctx.request.body.files.file;
|
||||||
|
let admin = await db.admin.add_activity(
|
||||||
|
ctx.session.user_id,
|
||||||
|
await db.activity.new_a_activity(db.question, post, file)
|
||||||
|
)
|
||||||
|
ctx.response.body = JSON.stringify({ success: true, activity_list: admin });
|
||||||
|
} else {
|
||||||
|
ctx.response.body = "请勿越级";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
// activity_id
|
||||||
|
let admin_download = async (ctx,next)=>{
|
||||||
|
if (ctx.session.admin) {
|
||||||
|
let path = await db.activity.get_fraction_out_put(db.test_paper,ctx.query["activity_id"]);
|
||||||
|
await send(ctx, path,{ root: '/' });
|
||||||
|
} else {
|
||||||
|
ctx.response.body = "请勿越级";
|
||||||
|
}
|
||||||
|
}
|
||||||
app.use(compose([
|
app.use(compose([
|
||||||
route.get('/api/getTital',getTitale),
|
route.get('/api/getTital', getTitale),
|
||||||
route.post('/api/start',start),
|
route.post('/api/start', start),
|
||||||
route.post('/api/end',end)
|
route.post('/api/end', end),
|
||||||
|
route.post('/api/adminLogin', admin_login),
|
||||||
|
route.post('/api/adminUpload', admin_upload)
|
||||||
]));
|
]));
|
||||||
app.listen(8083);
|
app.listen(8083);
|
||||||
console.log('app started at port 8083...');
|
console.log('app started at port 8083...');
|
||||||
7
servers/my.csv
Normal file
7
servers/my.csv
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
A
|
||||||
|
A,A,A
|
||||||
|
A,A,"A,b,c,d,s,e,d",A,A,A,A,A
|
||||||
|
A,A,"A,,,,",A,A,A,A,A,A,A,A,A
|
||||||
|
A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,
|
||||||
|
A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A
|
||||||
|
A,A,A,A,A,A,A,A,A,A,
|
||||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
266
servers/sql.js
266
servers/sql.js
@@ -1,5 +1,12 @@
|
|||||||
let mongoose = require('mongoose');
|
let mongoose = require('mongoose');
|
||||||
|
let csv = require('fast-csv');
|
||||||
|
let fs = require('fs');
|
||||||
let Schema = mongoose.Schema;
|
let Schema = mongoose.Schema;
|
||||||
|
let admin = new Schema({
|
||||||
|
user_name: String,
|
||||||
|
password: String,
|
||||||
|
activity_list: [{ type: mongoose.Schema.ObjectId, ref: "activity" }]
|
||||||
|
})
|
||||||
let user = new Schema({
|
let user = new Schema({
|
||||||
student_id: String,
|
student_id: String,
|
||||||
name: String,
|
name: String,
|
||||||
@@ -7,40 +14,78 @@ let user = new Schema({
|
|||||||
user_class: String,
|
user_class: String,
|
||||||
telephone: String,
|
telephone: String,
|
||||||
user_ip: String,
|
user_ip: String,
|
||||||
test_list:[{type: mongoose.Schema.ObjectId, ref: "test_paper"}],
|
test_list: [{ type: mongoose.Schema.ObjectId, ref: "test_paper" }],
|
||||||
});
|
});
|
||||||
let activity = new Schema({
|
let activity = new Schema({
|
||||||
name: String,
|
name: String,
|
||||||
strat_time: Date,
|
strat_time: Date,
|
||||||
end_time: Date,
|
end_time: Date,
|
||||||
question_num: Number,
|
question_num: Number,
|
||||||
question_list: [{type: mongoose.Schema.ObjectId, ref: "question"}],
|
question_list: [{ type: mongoose.Schema.ObjectId, ref: "question" }],
|
||||||
time_lim: Number,
|
time_lim: Number,
|
||||||
contestant_paper_list: [{type: mongoose.Schema.ObjectId, ref: "test_paper"}],
|
contestant_paper_list: [{ type: mongoose.Schema.ObjectId, ref: "test_paper" }],
|
||||||
})
|
})
|
||||||
let question = new Schema({
|
let question = new Schema({
|
||||||
type: Number,
|
type: Number,
|
||||||
problem: String,
|
problem: String,
|
||||||
answer:[{
|
answer: [{
|
||||||
content: String,
|
content: String,
|
||||||
price: Number,
|
price: Number,
|
||||||
try_user_list:[{type: mongoose.Schema.ObjectId, ref: "user"}],
|
try_user_list: [{ type: mongoose.Schema.ObjectId, ref: "user" }],
|
||||||
}]
|
}]
|
||||||
})
|
})
|
||||||
let test_paper = new Schema({
|
let test_paper = new Schema({
|
||||||
user_id: {type: mongoose.Schema.ObjectId, ref: "user"},
|
user_id: { type: mongoose.Schema.ObjectId, ref: "user" },
|
||||||
activity: {type: mongoose.Schema.ObjectId, ref: "activity"},
|
activity: { type: mongoose.Schema.ObjectId, ref: "activity" },
|
||||||
question_list:[{type: mongoose.Schema.ObjectId, ref: "question"}],
|
question_list: [{ type: mongoose.Schema.ObjectId, ref: "question" }],
|
||||||
answer: [String],
|
answer: [String],
|
||||||
time_start: Date,
|
time_start: Date,
|
||||||
time_end: Date,
|
time_end: Date,
|
||||||
fraction: Number,
|
fraction: Number,
|
||||||
})
|
})
|
||||||
user.statics.init_user = function(user){
|
admin.static.is_login_in = function (user_name, password) {
|
||||||
return new Promise((rec,rej)=>{
|
return new Promise((rec, rej) => {
|
||||||
this.findOne({telephone:user.telephone},async (err,rew)=>{
|
this.findOne({ user_name: user_name }).populate('activity_list').exec((err, rew) => {
|
||||||
if(err) console.log(err);
|
if (err) console.log(err);
|
||||||
if(rew){
|
if (rew && password == rew.password) {
|
||||||
|
let out = [];
|
||||||
|
for (it of rew.activity_list) {
|
||||||
|
out.push({
|
||||||
|
activity_id: it._id,
|
||||||
|
name: it.name,
|
||||||
|
num: it.contestant_paper_list.length
|
||||||
|
})
|
||||||
|
}
|
||||||
|
rec(out);
|
||||||
|
} else {
|
||||||
|
rec(false);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
admin.static.add_activity = function (user_id, activity_id) {
|
||||||
|
return new Promise((rec, rej) => {
|
||||||
|
this.findById(user_id).exec(async (err, rew) => {
|
||||||
|
if (err) console.log(err);
|
||||||
|
rew.activity_list.push(activity_id);
|
||||||
|
await rew.save();
|
||||||
|
let out = [];
|
||||||
|
for (it of rew.activity_list) {
|
||||||
|
out.push({
|
||||||
|
activity_id: it._id,
|
||||||
|
name: it.name,
|
||||||
|
num: it.contestant_paper_list.length
|
||||||
|
})
|
||||||
|
}
|
||||||
|
rec(out);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
user.statics.init_user = function (user) {
|
||||||
|
return new Promise((rec, rej) => {
|
||||||
|
this.findOne({ telephone: user.telephone }, async (err, rew) => {
|
||||||
|
if (err) console.log(err);
|
||||||
|
if (rew) {
|
||||||
rew.name = post.name;
|
rew.name = post.name;
|
||||||
rew.student_id = post.student_id;
|
rew.student_id = post.student_id;
|
||||||
rew.school = post.school;
|
rew.school = post.school;
|
||||||
@@ -55,47 +100,47 @@ user.statics.init_user = function(user){
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
user.static.add_test = function(user_id,test_id){
|
user.static.add_test = function (user_id, test_id) {
|
||||||
this.findById(user_id).exec(async(err,rew)=>{
|
this.findById(user_id).exec(async (err, rew) => {
|
||||||
if(err)console.log(err);
|
if (err) console.log(err);
|
||||||
rew.test_list.push(test_id);
|
rew.test_list.push(test_id);
|
||||||
await rew.save();
|
await rew.save();
|
||||||
rec(rew);
|
rec(rew);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
activity.static.add_test = function(activity_id,test_id){
|
activity.static.add_test = function (activity_id, test_id) {
|
||||||
this.findById(activity_id).exec(async(err,rew)=>{
|
this.findById(activity_id).exec(async (err, rew) => {
|
||||||
if(err)console.log(err);
|
if (err) console.log(err);
|
||||||
rew.contestant_paper_list.push(test_id);
|
rew.contestant_paper_list.push(test_id);
|
||||||
await rew.save();
|
await rew.save();
|
||||||
rec(rew);
|
rec(rew);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
activity.static.get_tital = function(activity_id){
|
activity.static.get_tital = function (activity_id) {
|
||||||
return new Promise((rec,rej)=>{
|
return new Promise((rec, rej) => {
|
||||||
this.findById(activity_id,(err,rew)=>{
|
this.findById(activity_id, (err, rew) => {
|
||||||
if(err)console.log(err);
|
if (err) console.log(err);
|
||||||
if(rew){
|
if (rew) {
|
||||||
rec(rew.name);
|
rec(rew.name);
|
||||||
}else{
|
} else {
|
||||||
rec('NULL');
|
rec('NULL');
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
activity.static.get_paper = function(activity_id,no_time_lim = false){
|
activity.static.get_paper = function (activity_id, no_time_lim = false) {
|
||||||
return new Promise((rec,rej)=>{
|
return new Promise((rec, rej) => {
|
||||||
this.findById(activity_id).populate('question_list').exec((err,rew)=>{
|
this.findById(activity_id).populate('question_list').exec((err, rew) => {
|
||||||
if(err) console.log(err);
|
if (err) console.log(err);
|
||||||
let now = new Date();
|
let now = new Date();
|
||||||
if((now < rew.end_time && now > rew.strat_time)||no_time_lim){
|
if ((now < rew.end_time && now > rew.strat_time) || no_time_lim) {
|
||||||
let question_list = rew.question_list;
|
let question_list = rew.question_list;
|
||||||
while (question_list.length > rew.question_num) {
|
while (question_list.length > rew.question_num) {
|
||||||
question_list.splice(Math.floor(Math.random()*(question_list.length)),1);
|
question_list.splice(Math.floor(Math.random() * (question_list.length)), 1);
|
||||||
}
|
}
|
||||||
for (it of question_list) {
|
for (it of question_list) {
|
||||||
for (at in it.answer) {
|
for (at in it.answer) {
|
||||||
it.answer[a].num = at + it.answer.length * Math.floor(Math.random()*5000);
|
it.answer[a].num = at + it.answer.length * Math.floor(Math.random() * 5000);
|
||||||
delete it.answer[a].price;
|
delete it.answer[a].price;
|
||||||
delete it.answer[a].try_user_list;
|
delete it.answer[a].try_user_list;
|
||||||
}
|
}
|
||||||
@@ -106,44 +151,138 @@ activity.static.get_paper = function(activity_id,no_time_lim = false){
|
|||||||
paper_id: rew._id,
|
paper_id: rew._id,
|
||||||
question_list: question_list
|
question_list: question_list
|
||||||
});
|
});
|
||||||
}else{
|
} else {
|
||||||
rec('time_err');
|
rec('time_err');
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
activity.static.is_time_out = function(activity_id,strat_time,end_time){
|
activity.static.is_time_out = function (activity_id, strat_time, end_time) {
|
||||||
return new Promise((rec,rej)=>{
|
return new Promise((rec, rej) => {
|
||||||
this.findById(activity_id).exec((err,rew)=>{
|
this.findById(activity_id).exec((err, rew) => {
|
||||||
if(err)console.log(err);
|
if (err) console.log(err);
|
||||||
let use_time = end_time - strat_time / 1000;
|
let use_time = end_time - strat_time / 1000;
|
||||||
if(rew.time_lim - use_time > -20){
|
if (rew.time_lim - use_time > -20) {
|
||||||
rec(false);
|
rec(false);
|
||||||
}else{
|
} else {
|
||||||
rec(true);
|
rec(true);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
test_paper.static.log_in = function(question_db,activity_id,user_id,strat_time,end_time,post){
|
activity.static.new_a_activity = function (question_db, post, file) {
|
||||||
return new Promise((rec,rej)=>{
|
return new Promise((rec, rej) => {
|
||||||
this.findOne({user_id: user_id,activity:activity_id}).exec(async(err,rew)=>{
|
let a_activity = new this({
|
||||||
if(err)console.log(err);
|
name: post.name,
|
||||||
if(rew){
|
strat_time: new Date(post.strat_time),
|
||||||
|
end_time: new Date(post.end_time),
|
||||||
|
question_num: post.question_num,
|
||||||
|
question_list: [],
|
||||||
|
time_lim: post.time_lim,
|
||||||
|
contestant_paper_list: [],
|
||||||
|
})
|
||||||
|
let promise_list = [];
|
||||||
|
fs.createReadStream(file.path)
|
||||||
|
.pipe(csv())
|
||||||
|
.on("data", (data) => {
|
||||||
|
if (data[3] != "A选项的分值") {
|
||||||
|
let out = { answer: [] };
|
||||||
|
for (key in data) {
|
||||||
|
if (data[key] === '') {
|
||||||
|
if (key == 0) {
|
||||||
|
out.type = Number(data[key]);
|
||||||
|
} else if (key == 1) {
|
||||||
|
out.problem = data[key];
|
||||||
|
} else {
|
||||||
|
if (key % 2 == 0) {
|
||||||
|
out.answer.push({ content: data[key], price: 0, try_user_list: [] });
|
||||||
|
} else {
|
||||||
|
out.answer[parseInt(key / 2) - 1].price = Number(data[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
promise_list.push(question_db.add_question(out));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.on("end", async () => {
|
||||||
|
a_activity.question_list = await Promise.all(promise_list);
|
||||||
|
await a_activity.save();
|
||||||
|
rec(a_activity._id);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// name student_id school user_class telephone fraction
|
||||||
|
activity.static.get_fraction_out_put = function (test_db, activity_id) {
|
||||||
|
return new Promise((rec, rej) => {
|
||||||
|
this.findById(activity_id).exec(async (err, rew) => {
|
||||||
|
if (err) console.log(err);
|
||||||
|
let promise_list = [];
|
||||||
|
for (i of rew.contestant_paper_list) {
|
||||||
|
promise_list.push(test_db.get_list_adout_fraction_csv(i));
|
||||||
|
}
|
||||||
|
let out_put = await Promise.all(promise_list);
|
||||||
|
out_put.unshift("name,student_id,school,user,class,telephone,fraction");
|
||||||
|
let random = new Promise((rec, rej) => {
|
||||||
|
require('crypto').randomBytes(32, function (ex, buf) {
|
||||||
|
var token = buf.toString('hex');
|
||||||
|
rec(token);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
let fileData = Buffer.from(out_put.join('\n'));
|
||||||
|
let path = '/tmp/' + (await random()) + '.csv'
|
||||||
|
let wstream = fs.createWriteStream(path);
|
||||||
|
wstream.on('open', () => {
|
||||||
|
const blockSize = 128;
|
||||||
|
const nbBlocks = Math.ceil(fileData.length / (blockSize));
|
||||||
|
for (let i = 0; i < nbBlocks; i += 1) {
|
||||||
|
const currentBlock = fileData.slice(
|
||||||
|
blockSize * i,
|
||||||
|
Math.min(blockSize * (i + 1), fileData.length),
|
||||||
|
);
|
||||||
|
wstream.write(currentBlock);
|
||||||
|
}
|
||||||
|
wstream.end();
|
||||||
|
});
|
||||||
|
wstream.on('finish', () => {rec(path);});
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
test_paper.static.get_list_adout_fraction_csv = function (test_id) {
|
||||||
|
return new Promise((rec, rej) => {
|
||||||
|
this.findById(test_id).populate("user_id").exec((err, rew) => {
|
||||||
|
if (err) console.log(err);
|
||||||
|
let out = [
|
||||||
|
rew.user_id.name,
|
||||||
|
rew.user_id.student_id,
|
||||||
|
rew.user_id.school,
|
||||||
|
rew.user_id.user_class,
|
||||||
|
rew.user_id.telephone,
|
||||||
|
rew.fraction
|
||||||
|
];
|
||||||
|
rec(out.join(','));
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
test_paper.static.log_in = function (question_db, activity_id, user_id, strat_time, end_time, post) {
|
||||||
|
return new Promise((rec, rej) => {
|
||||||
|
this.findOne({ user_id: user_id, activity: activity_id }).exec(async (err, rew) => {
|
||||||
|
if (err) console.log(err);
|
||||||
|
if (rew) {
|
||||||
rec("had");
|
rec("had");
|
||||||
}else{
|
} else {
|
||||||
let a_test_paper = new this({
|
let a_test_paper = new this({
|
||||||
user_id: user_id,
|
user_id: user_id,
|
||||||
activity:activity_id,
|
activity: activity_id,
|
||||||
question_list:[],
|
question_list: [],
|
||||||
answer:[],
|
answer: [],
|
||||||
time_start: strat_time,
|
time_start: strat_time,
|
||||||
time_end: end_time,
|
time_end: end_time,
|
||||||
fraction: 0
|
fraction: 0
|
||||||
})
|
})
|
||||||
let promise_list = [];
|
let promise_list = [];
|
||||||
for(a in post){
|
for (a in post) {
|
||||||
promise_list.push(question_db.get_in_it(a,post[a],user_id));
|
promise_list.push(question_db.get_in_it(a, post[a], user_id));
|
||||||
a_test_paper.answer.push(post[a]);
|
a_test_paper.answer.push(post[a]);
|
||||||
a_test_paper.problem.push(a);
|
a_test_paper.problem.push(a);
|
||||||
}
|
}
|
||||||
@@ -155,25 +294,34 @@ test_paper.static.log_in = function(question_db,activity_id,user_id,strat_time,e
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
question.static.get_in_it = function(question_id,answer_num,user_id){
|
question.static.get_in_it = function (question_id, answer_num, user_id) {
|
||||||
return new Promise((rec,rej)=>{
|
return new Promise((rec, rej) => {
|
||||||
this.findById(question_id).exec((err,rew)=>{
|
this.findById(question_id).exec((err, rew) => {
|
||||||
if(err) console.log(err);
|
if (err) console.log(err);
|
||||||
if(rew.answer[answer_num%rew.answer.length].try_user_list.indexOf(user_id) == -1){
|
if (rew.answer[answer_num % rew.answer.length].try_user_list.indexOf(user_id) == -1) {
|
||||||
rew.answer[answer_num%rew.answer.length].try_user_list.push(user_id);
|
rew.answer[answer_num % rew.answer.length].try_user_list.push(user_id);
|
||||||
}
|
}
|
||||||
rec(rew.answer[answer_num%rew.answer.length].price);
|
rec(rew.answer[answer_num % rew.answer.length].price);
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
question.static.add_question = function (in_question) {
|
||||||
|
let a_new_question = new this(in_question);
|
||||||
|
return new Promise(async (rec, rej) => {
|
||||||
|
await a_new_question.save();
|
||||||
|
rec(a_new_question._id);
|
||||||
|
})
|
||||||
|
}
|
||||||
mongoose.connect("mongodb://127.0.0.1:27017/question", { config: { autoIndex: false } });
|
mongoose.connect("mongodb://127.0.0.1:27017/question", { config: { autoIndex: false } });
|
||||||
|
let admin_db = mongoose.model('admin', admin);
|
||||||
let user_db = mongoose.model('user', user);
|
let user_db = mongoose.model('user', user);
|
||||||
let activity_db = mongoose.model('activity', activity);
|
let activity_db = mongoose.model('activity', activity);
|
||||||
let question_db = mongoose.model('question', question);
|
let question_db = mongoose.model('question', question);
|
||||||
let test_paper_db = mongoose.model('test_paper', test_paper);
|
let test_paper_db = mongoose.model('test_paper', test_paper);
|
||||||
let cookie_db = mongoose.model('cookie',cookie);
|
let cookie_db = mongoose.model('cookie', cookie);
|
||||||
|
|
||||||
module.exports={
|
module.exports = {
|
||||||
|
admin: admin_db,
|
||||||
user: user_db,
|
user: user_db,
|
||||||
activity: activity_db,
|
activity: activity_db,
|
||||||
question: question_db,
|
question: question_db,
|
||||||
|
|||||||
10
servers/test.js
Normal file
10
servers/test.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
let csv = require('fast-csv');
|
||||||
|
let fs = require('fs');
|
||||||
|
fs.createReadStream("my.csv")
|
||||||
|
.pipe(csv())
|
||||||
|
.on("data", function(data){
|
||||||
|
console.log(data);
|
||||||
|
})
|
||||||
|
.on("end", function(){
|
||||||
|
console.log("done");
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user