1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/git_zliang-SmartinsightXiangMuWenJuanDiaoYanZiXiTong

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
app.js 130 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
zzl Отправлено 02.08.2017 09:34 aa684fe
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912
var express = require('express');
var serveStatic = require('serve-static');
var ObjectID=require('mongodb').ObjectID;
var _ = require("underscore");
var spawn = require('child_process').spawn;
var im = require('imagemagick');
var parse = require('csv-parse');
var fs = require('fs');
var multer = require('multer');
var upload = multer({ dest: 'uploads/' });
var XLSX = require('xlsx');
var path = require('path');
var nodemailer= require('nodemailer');
var avconv = require("avconv");
var Emailchecker = require("./emailcheck")
var async = require("async");
var zlib = require('zlib');
var mime = require('mime');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/')
},
filename: function (req, file, cb) {
cb(null, (file.originalname).split('.')[0]+ Date.now() + '.jpg') //Appending .jpg
}
});
var imageupload = multer({ storage: storage });
var audiovideostorage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/')
},
filename: function (req, file, cb) {
var aArray = file.originalname.split('.');
cb(null, aArray[0]+ Date.now() + '.'+aArray[aArray.length-1]); //Appending .jpg
}
});
var videoaudioupload = multer({storage:audiovideostorage});
var bodyParser = require('body-parser');
var mongoPool = require("./db");
var logger = require("./logger");
var dict = require("./dict");
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var acl = require("./access/acl");
var Admin = require("./model/admin");
var Staff = require("./model/staff");
var aclHandler = require("./access/acl");
var app = express();
var errorMsg = {
status:"error",
//code:"duplicate"
};
var successMsg = {
status:"ok",
body:null
};
app.use('/uploads',serveStatic(__dirname + '/uploads'));
app.use('/public',serveStatic(__dirname + '/public'));
//app.use(multer({dest:"./static/"}));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json({limit: '4MB'}));
app.use(session({
secret: 'smartinsight',
resave:false,
saveUninitialized:false,
store: new MongoStore({
url: 'mongodb://localhost:27017/smartinsight'
})
}));
app.get('/public/*', function (request, response){
response.sendFile(path.resolve(__dirname, 'public', 'index.html'))
})
app.get('/', function (req, res) {
res.send('Hello World!');
});
var uploadhandle = upload.single("test");
app.post('/upload', function (req, res) {
uploadhandle(req, res, function (err) {
if (err) {
console.log(err);
res.send("filename error")
}
else{
console.log(req.file.filename)
}
});
});
app.post("/createsuperadmin",function(req,res){
var passHash = req.body.password;
if(passHash){
Admin.createSuperAdmin(passHash,function(err,msg){
if(msg == "exist"){
res.status(409);
errorMsg.code = "duplicate";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
});
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/admin/login",function(req,res){
var pass = req.body.password;
var username = req.body.username;
if(username && pass){
Admin.login(username,pass,function(err,msg){
if(msg == "error"){
req.session.userId = null;
res.status(400);
errorMsg.code = "error";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = {
role:msg.role,
id:msg._id,
name:msg.name
};
req.session.userId = msg.name;
if(msg.orgid){
req.session.orgid = msg.orgid;
}
req.session.uid = msg._id;
req.session.role = msg.role;
logger.logger.log("info","admin log in",{name:msg.name});
res.send(JSON.stringify(successMsg));
}
});
}
else{
req.session.userId = null;
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/staff/login",function(req,res){
var pass = req.body.password;
var username = req.body.username;
if(username && pass){
Staff.login(username,pass,function(err,msg){
if(msg == "error"){
req.session.userId = null;
res.status(400);
errorMsg.code = "error";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = {
role:msg.role,
id:msg._id,
name:msg.name
};
req.session.userId = msg.name;
req.session.orgid = msg.orgid;
req.session.uid = msg._id;
req.session.role = msg.role;
logger.logger.log("info","staff log in",{name:msg.name});
res.send(JSON.stringify(successMsg));
}
});
}
else{
req.session.userId = null;
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/logout",function(req,res){
res.status(200);
successMsg.body = "success";
req.session.userId = null;
req.session.orgid = null;
req.session.uid = null;
req.session.role = null;
res.send(JSON.stringify(successMsg));
});
app.get("/firstpagevisit",function(req,res){
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
Admin.firstPageVisit(ip,function(){
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
})
});
app.get("/getcapcha",function(req,res){
var cid = null;
if(req.session.captchaid){
cid = req.session.captchaid;
}
Admin.getCpacha(cid,function(err,newcid,buf){
req.session.captchaid = newcid;
res.end(buf);
})
});
app.post("/checkcapcha",function(req,res){
var ccode = req.body.capchacode;
if(ccode && req.session.captchaid){
Admin.checkCapcha(ccode,req.session.captchaid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "not found";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = "success";
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(404);
errorMsg.code = "not found";
res.send(JSON.stringify(errorMsg));
}
});
app.get('/downloadapk', function(req, res){
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
Admin.apkDownload(ip,function(err,ver){
if(ver == "notfound" || !ver.fileurl){
res.status(404);
errorMsg.code = "organization not found";
res.send(JSON.stringify(errorMsg));
}
else{
var file = __dirname +"/uploads/"+ver.fileurl;
var filename = path.basename(file);
var mimetype = mime.lookup(file);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
}
})
});
aclHandler.registerWait(function(acl){
app.get("/testacl",acl.middleware(),function(req,res){
//console.log(logger);
logger.logger.log("info","test log",{metax:1});
res.send("ok");
});
app.get("/sadmin/edata/flipkart",acl.middleware(1),function(req,res){
Admin.getFlipkartData(function(err,msg){
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
});
app.get("/sadmin/visit/count",acl.middleware(1),function(req,res){
Admin.firstPageVisitCount(function(err,count){
successMsg.body = count;
res.send(JSON.stringify(successMsg));
})
});
app.get("/sadmin/downloadapk/count",acl.middleware(1),function(req,res){
Admin.apkDownloadCount(function(err,count){
successMsg.body = count;
res.send(JSON.stringify(successMsg));
})
});
app.post("/sadmin/org/create",acl.middleware(1),function(req,res){
var orgname = req.body.name;
if(orgname){
Admin.createOrganization(orgname,function(err,msg,insertedid){
if(msg == "duplicate"){
res.status(409);
errorMsg.code = "duplicate";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new organization created",{name:msg.name});
res.status(200);
successMsg.body = insertedid;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/org/list",acl.middleware(1),function(req,res){
Admin.getOrgList(function(err,orgs){
successMsg.body = orgs;
res.send(JSON.stringify(successMsg));
})
});
app.post("/sadmin/org/admin/add",acl.middleware(1),function(req,res){
var orgid = req.body.orgid;
var name = req.body.name;
var pass = req.body.password;
if(orgid && name && pass){
Admin.createOrgAdmin(orgid,name,pass,"admin",function(err,msg,insertedid){
if(msg == "nameduplicate"){
res.status(409);
errorMsg.code = "name duplicate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "orgnotfound"){
res.status(404);
errorMsg.code = "organization not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new organization admin created",{name:msg.name});
res.status(200);
acl.addUserRoles(msg.name, 'admin');
successMsg.body = insertedid;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/org/admin/list/:orgid",acl.middleware(1),function(req,res){
var orgid = req.params.orgid;
if(orgid && ObjectID.isValid(orgid)){
Admin.getOrgAdminList(orgid,function(err,msg){
if(msg == "orgnotfound"){
res.status(404);
errorMsg.code = "organization not found";
res.send(JSON.stringify(errorMsg));
}
else{
//logger.logger.log("info","new organization admin created",{name:msg.name});
res.status(200);
//acl.addUserRoles(msg.name, 'admin');
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.delete("/sadmin/org/admin/delete",acl.middleware(1),function(req,res){
var adminid = req.body.adminid;
if(adminid && ObjectID.isValid(adminid)){
Admin.deleteAdmin(adminid,function(err,msg){
if(msg == "orgnotfound"){
res.status(404);
errorMsg.code = "admin not found";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/sadmin/personal/add",acl.middleware(1),function(req,res){
var name = req.body.name;
var pass = req.body.password;
if(name && pass){
var orgname = "__personal"+name;
if(orgname){
Admin.createOrganization(orgname,function(err,msg,insertedid){
if(msg == "duplicate"){
res.status(409);
errorMsg.code = "duplicate";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new organization created",{name:msg.name});
var orgid = insertedid.toString();
Admin.createOrgAdmin(orgid,name,pass,dict.STAFF_PERSONAL,function(err,msg,insertedid){
if(msg == "nameduplicate"){
res.status(409);
errorMsg.code = "name duplicate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "orgnotfound"){
res.status(404);
errorMsg.code = "organization not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new organization admin created",{name:msg.name});
res.status(200);
acl.addUserRoles(msg.name, dict.STAFF_PERSONAL);
successMsg.body = insertedid;
res.send(JSON.stringify(successMsg));
}
})
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/personal/list",acl.middleware(1),function(req,res){
Admin.getPersonalList(function(err,msg){
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
});
/*add by zzl 2016.8.29*/
app.get("/sadmin/logs/list",acl.middleware(1),function(req,res){
Admin.getLogsList(function(err,msg){
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
});
app.delete("/sadmin/logs/delete",acl.middleware(1),function(req,res){
var logid = req.body.logid;
console.log(logid);
if(logid&&ObjectID.isValid(logid)){
Admin.deletelogList(logid,function(err,msg){
if(msg == "notfound"){
logger.logger.log("info","not found this log!",{
logid:req.body.logid
});
console.log(msg);
res.status(404);
errorMsg.code = "this log not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","delete successed !",{
logid:req.body.logid
});
console.log(msg);
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
});
}else{
logger.logger.log("info","logid wrong!",{
logid:req.body.logid
});
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/admin/staff/list",acl.middleware(2),function(req,res){
var orgid = req.session.orgid;
Admin.getOrgStaffList(orgid,function(err,msg){
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
});
app.put("/sadmin/org/admin/resetpass",acl.middleware(1),function(req,res){
var adminid = req.body.adminid;
var pass = req.body.password;
if(adminid && pass){
Admin.sadminResetAdminPass(adminid,pass,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "admin not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","superadmin reset admin password",{name:msg.name});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/all/resetpass",function(req,res){
var adminid = req.session.uid;
var pass = req.body.password;
if(adminid && pass){
Admin.sadminResetAdminPass(adminid,pass,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "the staff not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info"," reset the staff password");
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/all/templatelist",function(req,res){
Staff.getTemplateList(function(err,templates){
logger.logger.log("info","get template list",{
editorid:req.session.uid});
res.status(200);
successMsg.body = templates;
res.send(JSON.stringify(successMsg));
})
});
app.delete("/sadmin/org/admin/delete",acl.middleware(1),function(req,res){
var adminid = req.body.adminid;
if(adminid){
Admin.sadminDisableAdmin(adminid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "admin not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","superadmin disable admin",{name:msg.name});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/ad/list",acl.middleware(1),function(req,res){
Admin.getSadminAdList(function(err,msg){
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
});
app.post("/sadmin/ad/add",acl.middleware(1),function(req,res){
var title = req.body.title;
var image = req.body.image;
var link = req.body.link;
if(title&&image&&link){
Admin.addSadminAd(title,image,link,function(err,msg){
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/sadmin/ad/edit",acl.middleware(1),function(req,res){
var adid = req.body.id;
var title = req.body.title;
var image = req.body.image;
var link = req.body.link;
if(adid&&ObjectID.isValid(adid)&&title&&image&&link){
Admin.editSadminAd(adid,title,image,link,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "admin not found";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.delete("/sadmin/ad/delete",acl.middleware(1),function(req,res){
var adid = req.body.id;
if(adid&&ObjectID.isValid(adid)){
Admin.deleteSadminAd(adid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "admin not found";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/admin/pass/change",acl.middleware(),function(req,res){
var oldpass = req.body.oldpassword;
var newpass = req.body.newpassword;
if(oldpass && newpass){
Admin.changeAdminPass(req.session.userId,oldpass,newpass,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "admin not found";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "errorpass"){
res.status(403);
errorMsg.code = "old password error";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","admin change password",{name:msg.name});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/admin/staff/add",acl.middleware(),function(req,res){
var name = req.body.name;
var role = req.body.role;
var pass = req.body.password;
if(name && (role == dict.STAFF_EDITOR || role == dict.STAFF_INVESTIGATOR || role == dict.STAFF_ORG) && pass){
Admin.addStaff(req.session.orgid,name,role,pass,function(err,msg,insertid){
if(msg == "nameduplicate"){
res.status(409);
errorMsg.code = "name duplicate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "orgnotfound"){
res.status(404);
errorMsg.code = "organization not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new staff created",{name:msg.name});
res.status(200);
acl.addUserRoles(msg.name, role);
successMsg.body = insertid;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/admin/staff/resetpass",acl.middleware(),function(req,res){
var staffid = req.body.staffid;
var pass = req.body.password;
if(staffid && pass){
Admin.resetStaffPass(req.session.orgid,staffid,pass,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "staff not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","admin reset staff password",{name:msg.name});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.delete("/admin/staff/delete",acl.middleware(),function(req,res){
var staffid = req.body.staffid;
if(staffid){
Admin.adminDisableStaff(req.session.orgid,staffid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "staff not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","admin disable staff",{adminname:req.session.userId,name:msg.name});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/staff/pass/change",acl.middleware(),function(req,res){
var oldpass = req.body.oldpassword;
var newpass = req.body.newpassword;
if(oldpass && newpass){
Staff.changeStaffPass(req.session.userId,oldpass,newpass,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "staff not found";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "errorpass"){
res.status(403);
errorMsg.code = "old password error";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff change password",{name:msg.name});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/editor/survey/create",acl.middleware(2),function(req,res){
var name = req.body.name;
var type = req.body.type;
if(name && (type == dict.TYPE_SURVEY || type == dict.TYPE_TEMPLATE)){
Staff.createSurvey(req.session.orgid,req.session.uid,name,type,function(err,sur){
logger.logger.log("info","staff create survey",{
id:sur,
editorid:req.session.uid});
res.status(200);
successMsg.body = sur;
console.log(JSON.stringify(successMsg));
res.send(JSON.stringify(successMsg));
});
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/editor/survey/edit",acl.middleware(2),function(req,res){
var name = req.body.name;
var surveyid = req.body.id;
var metainfo = req.body.metainfo;
if(name && ObjectID.isValid(surveyid)){
Staff.editSurvey(name,surveyid,metainfo,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff edit survey name",{
id:surveyid,
editorid:req.session.uid});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
});
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/editor/survey/question/add",acl.middleware(2),function(req,res){
var surveydata = req.body;
if(checkSurveyData(surveydata)){
Staff.createQuestion(req.session.orgid,surveydata,function(err,msg){
if(msg == "forbidden"){
res.status(403);
errorMsg.code = "can not operate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff create question",{
id:msg,
editorid:req.session.uid});
res.status(200);
successMsg.body = msg;
console.log(JSON.stringify(successMsg));
res.send(JSON.stringify(successMsg));
}
});
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/editor/survey/question/edit",acl.middleware(2),function(req,res){
var surveydata = req.body;
console.log(JSON.stringify(surveydata));
if(checkSurveyData(surveydata) && ObjectID.isValid(surveydata.questionid)){
Staff.editQuestion(req.session.orgid,surveydata,function(err,msg){
if(msg == "forbidden"){
res.status(403);
errorMsg.code = "can not operate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff edit question",{
id:surveydata.questionid,
editorid:req.session.uid});
res.status(200);
successMsg.body = null;
console.log(JSON.stringify(successMsg));
res.send(JSON.stringify(successMsg));
}
});
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/editor/survey/list",acl.middleware(2),function(req,res){
var editorid = req.session.uid;
Staff.getEditorSurveyList(editorid,function(err,ss){
if(!ss){
ss = [];
}
logger.logger.log("info","editor get survey list",{
editorid:req.session.uid});
res.status(200);
successMsg.body = ss;
res.send(JSON.stringify(successMsg));
});
});
app.get("/sadmin/survey/list",acl.middleware(1),function(req,res){
Staff.getSAdminSurveyList(function(err,ss){
logger.logger.log("info","admin get survey list",{
editorid:req.session.uid});
res.status(200);
successMsg.body = ss;
res.send(JSON.stringify(successMsg));
});
});
app.post("/sadmin/survey/totemplate",acl.middleware(1),function(req,res){
var surveyid = req.body.surveyid;
var templatename = req.body.templatename;
if(surveyid && ObjectID.isValid(surveyid) && templatename){
Staff.generateTemplatefromSurvey(surveyid,templatename,function(err,msg){
logger.logger.log("info","admin generate template",{
editorid:req.session.uid});
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
});
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/admin/survey/fromtemplate",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
var surveyname = req.body.surveyname;
if(surveyid && ObjectID.isValid(surveyid) && surveyname){
Staff.createSurvey(req.session.orgid,req.session.uid,surveyname,dict.TYPE_SURVEY,function(err,sur){
logger.logger.log("info","staff create survey",{
id:sur,
editorid:req.session.uid});
Staff.cloneQuestionListFromTemplate(sur,surveyid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = sur;
res.send(JSON.stringify(successMsg));
}
})
});
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/admin/survey/list",acl.middleware(2),function(req,res){
var orgid = req.session.orgid;
Staff.getAdminSurveyList(orgid,function(err,ss){
if(!ss){
ss = [];
}
logger.logger.log("info","admin get survey list",{
editorid:req.session.uid});
res.status(200);
successMsg.body = ss;
res.send(JSON.stringify(successMsg));
});
});
app.delete("/editor/survey/question/delete",acl.middleware(2),function(req,res){
var qid = req.body.questionid;
if(qid){
Staff.deleteQuestion(req.session.orgid,qid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff delete question",{
id:qid,
editorid:req.session.uid});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/editor/survey/question/sequencechange",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
var questionid = req.body.questionid;
var direction = req.body.direction;
if(surveyid && questionid && direction){
Staff.changeQuestionSequence(surveyid,questionid,direction,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff change question sequence",{
id:surveyid,
questionid:questionid});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/editor/survey/rfp",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
console.log("haha")
if(surveyid){
Staff.proposeSurvey(req.session.orgid,surveyid,function(err,msg){
if(msg == "forbidden"){
res.status(403);
errorMsg.code = "can not operate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff propose survey for audit",{
id:surveyid,
editorid:req.session.uid});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.delete("/editor/survey/delete",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
if(surveyid && ObjectID.isValid(surveyid)){
Staff.deleteSurvey(surveyid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff propose survey delete",{
id:surveyid,
editorid:req.session.uid});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/editor/survey/detail/:surveyid",acl.middleware(2),function(req,res){
var surveyid = req.params.surveyid;
if(surveyid && ObjectID.isValid(surveyid)){
Staff.getSurveyFullDetail(surveyid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff get survey detail",{
id:req.session.uid,
surveyid:surveyid
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/admin/survey/audit",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
var status = req.body.status;
if(surveyid && ObjectID.isValid(surveyid) && status &&
(status == dict.SURVEYSTATUS_DISABLE || status == dict.SURVEYSTATUS_EDIT ||
status == dict.SURVEYSTATUS_NORMAL || status == dict.SURVEYSTATUS_REJECT)){
Admin.auditSurvey(req.session.orgid,surveyid,status,function(err,msg){
if(msg == "forbidden"){
res.status(403);
errorMsg.code = "can not operate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","admin audit survey",{
id:surveyid,
adminid:req.session.uid,
status:status});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/admin/survey/assign",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
var staffid = req.body.staffid;
if(surveyid && staffid &&
ObjectID.isValid(surveyid) && ObjectID.isValid(staffid)){
Admin.assignSurvey(req.session.orgid,surveyid,staffid,function(err,msg){
if(msg == "forbidden"){
res.status(403);
errorMsg.code = "can not operate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","admin assign survey",{
surveyid:surveyid,
adminid:req.session.uid,
staffid:staffid});
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/admin/survey/publishtoown",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
var ownid = req.session.uid;
var role = req.session.role;
//var orgid = req.session.orgid;
if(surveyid && ObjectID.isValid(surveyid) && ObjectID.isValid(ownid)){
Admin.publishSurveyToOwn(surveyid,ownid,role,function(err,msg){
if(msg == "forbidden"){
res.status(403);
errorMsg.code = "forbidden";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/admin/survey/withdraw",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
var ownid = req.session.uid;
var role = req.session.role;
//var orgid = req.session.orgid;
if(surveyid && ObjectID.isValid(surveyid) && ObjectID.isValid(ownid)){
Admin.withdrawPublishSurvey(surveyid,ownid,role,function(err,msg){
if(msg == "forbidden"){
res.status(403);
errorMsg.code = "forbidden";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/admin/temporychangesurvey",function(req,res){ //临时接口,用于将已发布问卷转为publishtoall
Admin.temproryChangeSurvey(function(err,msg){
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
})
});
app.put("/sadmin/survey/audit",acl.middleware(1),function(req,res){
var surveyid = req.body.surveyid;
if(surveyid && ObjectID.isValid(surveyid)){
Admin.sadminAuditSurvey(surveyid,function(err,msg){
if(msg == "forbidden"){
res.status(403);
errorMsg.code = "forbidden";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
function flipkartModelSpider(callback){
var py = spawn("scrapy",["crawl","modelspider"],{
cwd:path.resolve("./scrapy/flipkart")
});
py.stdout.on('data', function(data) {
console.log("stdout:"+data);
});
py.stderr.on('data', function(data) {
console.log("stderr:"+data);
});
py.on("close",function(code){
console.log("close:"+code);
console.log("+++++++++++++++++++++++++++++++++++++++++++++++++")
if(callback){
callback();
}
})
}
function flipkartModelDetailSpider(callback){
var py = spawn("scrapy",["crawl","modeldetailspider"],{
cwd:path.resolve("./scrapy/flipkart/flipkart")
});
py.stdout.on('data', function(data) {
console.log("stdout:"+data);
});
py.stderr.on('data', function(data) {
console.log("stderr:"+data);
});
py.on("close",function(code){
console.log("close:"+code)
if(callback){
callback();
}
})
}
function amazonInModelSpider(callback){
var py = spawn("scrapy",["crawl","ainmodelspider"],{
cwd:path.resolve("./scrapy/flipkart")
});
py.stdout.on('data', function(data) {
console.log("stdout:"+data);
});
py.stderr.on('data', function(data) {
console.log("stderr:"+data);
});
py.on("close",function(code){
console.log("close:"+code);
console.log("+++++++++++++++++++++++++++++++++++++++++++++++++")
if(callback){
callback();
}
})
}
function amazonInModelDetailSpider(callback){
var py = spawn("scrapy",["crawl","ainmodeldetailspider"],{
cwd:path.resolve("./scrapy/flipkart/flipkart")
});
py.stdout.on('data', function(data) {
console.log("stdout:"+data);
});
py.stderr.on('data', function(data) {
console.log("stderr:"+data);
});
py.on("close",function(code){
console.log("close:"+code)
if(callback){
callback();
}
})
}
app.post("/sadmin/createspider",acl.middleware(1),function(req,res){
var spidername = req.body.spidername;
if(spidername){
Admin.createSpider(spidername,function(err,msg){
if(msg == "BUSY"){
res.status(409);
errorMsg.code = "busy";
res.send(JSON.stringify(errorMsg));
}
else{
if(spidername == "flipkart"){
flipkartModelSpider(function(){
flipkartModelDetailSpider(
function(){
Admin.stopSpider(function(err,res){
console.log("spider done");
})
}
);
});
}
else if(spidername == "amazonindia"){
amazonInModelSpider(function(){
amazonInModelDetailSpider(function () {
Admin.stopSpider(function(err,res){
console.log("spider done");
})
})
})
}
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.delete("/sadmin/deletespider",acl.middleware(1),function(req,res){
var sid = req.body.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.deleteSpider(sid,function(err,msg){
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderlist/:spidername",acl.middleware(1),function(req,res){
var sname = req.params.spidername;
if(sname){
Admin.getSpiderList(sname,function(err,msg){
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/activeid/:spidername",function(req,res){
var sname = req.params.spidername;
Admin.getSpiderActiveId(sname,function(err,msg){
res.status(200);
res.send(msg);
})
});
// app.delete("/sadmin/delete",acl.middleware(1),function(req,res){
// var sid = req.body.spiderid;
// if(sid && ObjectID.isValid(sid)){
// Admin.deleteSpider(sid,function(err,msg){
// res.status(200);
// successMsg.body = "ok";
// res.send(JSON.stringify(successMsg));
// })
// }
// else{
// res.status(406);
// errorMsg.code = "wrong";
// res.send(JSON.stringify(errorMsg));
// }
// });
var exportDomainList = {
"flipkart":[
"title","brand","color","keyfeature","price","simtype","pcamera","scamera",
"screen","Resolution","RAM","ROM","os","osversionnum","osversionname","battery",
"rating","avgrate","reviewNum"
],
"amazonindia":[
"title","brand","color","specialfeature","price","Camera",
"RAM","os","battery",
"avgrate","reviewNum"
]
};
app.post("/sadmin/exportspider",acl.middleware(1),function(req,res){
var sid = req.body.spiderid;
var sname = req.body.spidername;
if(sid && ObjectID.isValid(sid) && sname && (sname == "flipkart" || sname == "amazonindia")){
Admin.getSpiderDetailData(sid,function(err,models){
var data = [];
data.push(exportDomainList[sname]);
for(var mindex in models){
var pitem = [];
for (var tagindex in exportDomainList[sname]){
if (models[mindex][exportDomainList[sname][tagindex]]){
pitem.push(models[mindex][exportDomainList[sname][tagindex]]);
}
else{
pitem.push("");
}
}
data.push(pitem);
}
var name = sname+ new Date().toISOString() + ".xlsx";
var ws_name = "SheetJS";
function Workbook() {
if(!(this instanceof Workbook)) return new Workbook();
this.SheetNames = [];
this.Sheets = {};
}
var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
/* add worksheet to workbook */
wb.SheetNames.push(ws_name);
wb.Sheets[ws_name] = ws;
/* write file */
XLSX.writeFile(wb, 'uploads/'+name);
successMsg.body = name;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/brand/top10modelnum/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getTop10modelnumForBrand(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/brand/top10reviewnum/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getTop10reviewnumForBrand(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/brand/top10salesamount/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getTop10salesamountForBrand(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/brand/top10avgprice/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getTop10avgpriceForBrand(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/top10reviewnum/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getTop10reviewnumForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/top10salesamount/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getTop10salesamountForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/top10price/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getTop10priceForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/pricerangebynum/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getpricerangebynumForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/pricerangebyreviewnum/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getpricerangebyreviewnumForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/pricerangebysalesamount/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getpricerangebysalesamountForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/colormodelnum/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getcolorbymodelnumForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/colorreviewnum/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getcolorbyreviewnumForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/coloravgprice/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getcolorbyavgpriceForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/batterymodelnum/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getbatterybymodelnumForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/batteryreviewnum/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getbatterybyreviewnumForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/spiderstatistics/model/batteryaverageprice/:spiderid",acl.middleware(1),function(req,res){
var sid = req.params.spiderid;
if(sid && ObjectID.isValid(sid)){
Admin.getbatterybyavgpriceForModel(sid,function(err,result){
res.status(200);
successMsg.body = result;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/admin/survey/publishtoall",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
var ownid = req.session.uid;
var role = req.session.role;
if(surveyid && ObjectID.isValid(surveyid) && ObjectID.isValid(ownid)){
Admin.publishSurveyToAll(surveyid,ownid,role,function(err,msg){
if(msg == "forbidden"){
res.status(403);
errorMsg.code = "forbidden";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = null;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
//var orgid = req.session.orgid;
//var broadCastToStaffs = function(orgid,surveyid,staffs){
// var slist = [];
// for(var i in staffs){
// if(!(staffs[i].disable)){
// slist.push(staffs[i]._id);
// }
// }
//
// Admin.publishSurvey(orgid,surveyid,slist,function(err,msg){
// if(msg == "forbidden"){
// res.status(403);
// errorMsg.code = "can not operate";
// res.send(JSON.stringify(errorMsg));
// }
// else{
// res.status(200);
// successMsg.body = null;
// res.send(JSON.stringify(successMsg));
// }
//
// })
//}
//if(surveyid && ObjectID.isValid(surveyid)){
// if(req.session.role == dict.STAFF_PERSONAL){
// Admin.getPersonalList(function(err,staffs){
// broadCastToStaffs(orgid,surveyid,staffs);
// })
// }
// else{
// Admin.getOrgAllUserList(orgid,function(err,staffs){
// broadCastToStaffs(orgid,surveyid,staffs);
// })
// }
//
//}
//else{
// res.status(406);
// errorMsg.code = "wrong";
// res.send(JSON.stringify(errorMsg));
//}
});
app.get("/admin/survey/answer/list/:surveyid",function(req,res){
var surveyid = req.params.surveyid;
if(surveyid && ObjectID.isValid(surveyid)){
Admin.getSurveyAnswerList(surveyid,function(err,answers){
successMsg.body = answers;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
//app.get("/removerepeatassign",function(req,res){ //临时接口,用于去除问卷分配的重复
// Admin.removeAssginRepeat(function(err,msg){
// successMsg.body = null;
// res.send(JSON.stringify(successMsg));
// })
//});
app.get('/investigator/survey/list',acl.middleware(2),function(req,res){
Staff.getStaffSurveyList(req.session.uid,req.session.orgid,req.session.role,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff get surveylist",{
id:req.session.uid
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
})
});
app.get("/investigator/survey/detail/:surveyid",acl.middleware(2),function(req,res){
var surveyid = req.params.surveyid;
if(surveyid && ObjectID.isValid(surveyid)){
Staff.getSurveyDetail(surveyid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff get survey detail",{
id:req.session.uid,
surveyid:surveyid
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/anonymous/survey/detail/:surveyid",function(req,res){
var surveyid = req.params.surveyid;
if(surveyid && ObjectID.isValid(surveyid)){
Staff.getSurveyDetail(surveyid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","anonymous get survey detail",{
surveyid:surveyid
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.delete("/admin/survey/answer/delete",acl.middleware(2),function(req,res){
var answerid = req.body.answerid;
if(answerid && ObjectID.isValid(answerid)){
Admin.deleteAnswer(answerid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "survey not found";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/investigator/survey/answer/add",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
var investigatorid = req.session.uid;
if(surveyid && ObjectID.isValid(surveyid) && investigatorid &&
ObjectID.isValid(investigatorid) && req.body.answerlist){
Staff.saveAnswers(req.body,investigatorid,function(err,msg){
if(msg=="duplicate"){
res.status(409);
errorMsg.code = "duplicate";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff send survey answer",{
staffid:req.session.uid,
surveyid:surveyid,
answerid:msg
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/anonymous/survey/answer/add",function(req,res){
var surveyid = req.body.surveyid;
if(surveyid && ObjectID.isValid(surveyid) && req.body.answerlist){
Staff.saveAnswers(req.body,null,function(err,msg){
logger.logger.log("info","anonymous send survey answer",{
surveyid:surveyid,
answerid:msg
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/investigator/survey/answer/list/:pagesize/:pagenum",acl.middleware(2),function(req,res){
var pagesize = req.params.pagesize;
var pagenum = req.params.pagenum;
if(pagesize && pagenum){
var intPagesize = parseInt(pagesize);
var intPagenum = parseInt(pagenum);
if(!isNaN(intPagesize) && intPagesize>=0 && !isNaN(intPagenum) && intPagenum>=0){
Staff.getAnswerList(intPagesize,intPagenum,req.session.uid,function(err,msg){
logger.logger.log("info","staff get survey answer list",{
staffid:req.session.uid
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
});
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/investigator/survey/answer/detail/:answerid",acl.middleware(2),function(req,res){
var answerid = req.params.answerid;
if(answerid && ObjectID.isValid(answerid)){
Staff.getAnswerDetail(answerid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "answer not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","staff get answer detail",{
id:req.session.uid,
answerid:answerid
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
var staffImageUploadHandle = imageupload.single("file");
app.post('/staff/upload/image',acl.middleware(2),function (req, res) {
staffImageUploadHandle(req, res, function (err) {
if (err) {
res.status(406);
console.log(err);
res.send("filename error")
}
else{
var newFname = req.file.path.split(".")[0]+"_small.jpg";
im.convert([req.file.path,"-quality","30",req.file.path],function(err,fout){
successMsg.body = req.file.filename;
res.send(JSON.stringify(successMsg));
})
}
});
});
var anonymousImageUploadHandle = imageupload.single("file");
app.post('/anonymous/upload/image',function (req, res) {
anonymousImageUploadHandle(req, res, function (err) {
if (err) {
res.status(406);
console.log(err);
res.send("filename error")
}
else{
var newFname = req.file.path.split(".")[0]+"_small.jpg";
im.convert([req.file.path,"-quality","30",req.file.path],function(err,fout){
successMsg.body = req.file.filename;
res.send(JSON.stringify(successMsg));
})
}
});
});
var avuploadHandler = videoaudioupload.single("file");
app.post('/staff/upload/audio',acl.middleware(2),function (req, res) {
avuploadHandler(req, res, function (err) {
if (err) {
res.status(406);
console.log(err);
res.send("filename error")
}
else{
var dfilename = req.file.filename;
var farray = dfilename.split(".");
var ext = farray[farray.length-1];
if(ext == "amr"){
if(isFileExist("uploads/"+dfilename)){
var fmp3 = "uploads/"+farray[0]+".mp3";
if(isFileExist(fmp3)){
}
else{
var parameters = ["-i","uploads/"+dfilename,fmp3];
var stream = avconv(parameters);
}
}
}
successMsg.body = req.file.filename;
res.send(JSON.stringify(successMsg));
}
});
});
app.post('/staff/upload/video',acl.middleware(2),function (req, res) {
avuploadHandler(req, res, function (err) {
if (err) {
res.status(406);
console.log(err);
res.send("filename error")
}
else{
successMsg.body = req.file.filename;
res.send(JSON.stringify(successMsg));
}
});
});
app.post('/parsexlsx',function(req,res){
var file = req.body.file;
var letterMap = ["A","B","C","D","E",
"F","G","H","I","J",
"K","L","M","N","O",
"P","Q","R","S","T",
"U","V","W","X","Y","Z",
"AA","AB","AC","AD","AE",
"AF","AG","AH","AI","AJ",
"AK","AL","AM","AN","AO",
"AP","AQ","AR","AS","AT",
"AU","AV","AW","AX","AY","AZ",
"BA","BB","BC","BD","BE",
"BF","BG","BH","BI","BJ",
"BK","BL","BM","BN","BO",
"BP","BQ","BR","BS"
];
if(file){
var fextenstionarray = file.split(".");
var fextenstion = fextenstionarray[fextenstionarray.length-1];
if(fextenstion == "csv"){
fs.readFile("./uploads/"+file,function(err,data){
parse(data,function(err,output){
//output = output[0]
if(output[0][0] == "2"){
var qlist = parseV2List(output);
successMsg.body = qlist;
res.send(JSON.stringify(successMsg));
}
else if(output[0][0] == "3"){
var qlist = parseV3List(output);
successMsg.body = qlist;
res.send(JSON.stringify(successMsg));
}
else if(output[0][0] == "4"){
var qlist = parseV4List(output);
successMsg.body = qlist;
res.send(JSON.stringify(successMsg));
}
else{
var qlist = parseV1List(output);
successMsg.body = qlist;
res.send(JSON.stringify(successMsg));
}
})
})
}
else if(fextenstion == "xlsx"){
var workbook = XLSX.readFile("./uploads/"+file);
var sheet_name_list = workbook.SheetNames;
console.log(sheet_name_list)
var result = ""
var firstSheet = workbook.Sheets[sheet_name_list[0]];
var resultList = [];
var currentRow = 1;
while(firstSheet["A"+currentRow]){
var row = []
var start = 0;
while(firstSheet[letterMap[start]+currentRow]){
var v = firstSheet[letterMap[start]+currentRow].v;
var vt = JSON.stringify(v).trim();
if(vt[0] && vt[0] == "\""){
var vlength = vt.length;
vt = vt.substring(1,vlength-1).trim();
}
vt = vt.replace("\\r\\n","\r\n");
row.push(vt);
start+=1;
}
resultList.push(row);
currentRow+=1;
}
console.log(resultList);
if(resultList[0][0] == "2"){
var qlist = parseV2List(resultList);
}
else if(resultList[0][0] == 3){
var qlist = parseV3List(resultList);
}
else if(resultList[0][0] == "4"){
var qlist = parseV4List(resultList);
}
else{
var qlist = parseV1List(resultList);
}
successMsg.body = qlist;
res.send(JSON.stringify(successMsg));
}
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/anonymous/feedback",function(req,res){
var name = req.body.name;
var platform = req.body.platform;
var content = req.body.content;
var image = req.body.image;
var email = req.body.email;
var phone = req.body.phone;
var fdata = {
name:name,
phone:phone,
email:email,
content:content,
image:image,
platform:platform
}
Staff.addanonymousfb(fdata,function(err,msg){
logger.logger.log("info","anonymous add feedback",{
anonymousname:req.body.name
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
});
app.post("/investigator/feedback",acl.middleware(2),function(req,res){
var staffid = req.session.uid;
var platform = req.body.platform;
var osversion = req.body.osversion;
var versionnum = req.body.versionnum;
var content = req.body.content;
var image = req.body.image;
var fdata = {
staffid:staffid,
platform:platform,
osversion:osversion,
versionnum:versionnum,
content:content,
image:image
};
Staff.addFeedback(fdata,function(err,msg){
logger.logger.log("info","staff add feedback",{
staffid:req.session.uid,
feedbackid:msg
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
});
/* add by zhangzhiliang 2016.9.9 start*/
app.get("/sadmin/feedback/list",acl.middleware(1),function(req,res){
Admin.getFeedbackList(function(err,msg){
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
});
});
app.delete("/sadmin/feedback/delete",acl.middleware(1),function(req,res){
var feedbackid = req.body.feedbackid;
if(feedbackid&&ObjectID.isValid(feedbackid)){
Admin.deleteFeedbackList(feedbackid,function(err,msg){
if(msg == "notfound"){
logger.logger.log("info","not found feedback",{
feedbackid:req.body.feedbackid
});
res.status(404);
errorMsg.code = "feedback not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","ok delete feedback",{
feedbackid:req.body.feedbackid
});
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
});
}else{
logger.logger.log("info","wrong feedback",{
feedbackid:req.body.feedbackid
});
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/admin/version/add",acl.middleware(2),function(req,res){
var platform = req.body.platform;
var versionnum = req.body.versionnum;
var fileurl = req.body.fileurl;
if(platform && versionnum && fileurl){
Admin.addVersion(req.session.orgid,platform,versionnum,fileurl,function(err,msg){
logger.logger.log("info","admin add new version",{
adminid:req.session.uid,
versionid:msg
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
function datenum(v, date1904) {
if(date1904) v+=1462;
var epoch = Date.parse(v);
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}
function sheet_from_array_of_arrays(data, opts) {
var ws = {};
var range = {s: {c:10000000, r:10000000}, e: {c:0, r:0 }};
for(var R = 0; R != data.length; ++R) {
for(var C = 0; C != data[R].length; ++C) {
if(range.s.r > R) range.s.r = R;
if(range.s.c > C) range.s.c = C;
if(range.e.r < R) range.e.r = R;
if(range.e.c < C) range.e.c = C;
var cell = {v: data[R][C] };
if(cell.v == null) continue;
var cell_ref = XLSX.utils.encode_cell({c:C,r:R});
if(typeof cell.v === 'number') cell.t = 'n';
else if(typeof cell.v === 'boolean') cell.t = 'b';
else if(cell.v instanceof Date) {
cell.t = 'n'; cell.z = XLSX.SSF._table[14];
cell.v = datenum(cell.v);
}
else cell.t = 's';
ws[cell_ref] = cell;
}
}
if(range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
return ws;
}
app.post("/admin/exportxlsx",acl.middleware(2),function(req,res){
var surveyid = req.body.surveyid;
var name = req.body.name;
if(surveyid && ObjectID.isValid(surveyid) && name){
var survey = null;
var answerlistArray = null;
async.series([function(cb){
Staff.getSurveyDetail(surveyid,function(err,nsurvey){
survey = nsurvey;
for(var qindex in survey.questionlist){
var cq = survey.questionlist[qindex];
if(cq.selectlist){
if(_.isString(cq.selectlist)){
cq.selectlist = Emailchecker.safeJsonParse(cq.selectlist,[]);
}
}
}
console.log("staff end")
cb()
});
},function(cb){
Admin.getSurveyAnswerList(surveyid,function(err,alist){
answerlistArray = alist;
for(var i in answerlistArray){
var answerlist = answerlistArray[i].answerlist;
if(_.isString(answerlist)){
answerlistArray[i].answerlist = Emailchecker.safeJsonParse(answerlist,[]);
}
}
console.log("admin end")
console.log("array length is "+answerlistArray.length)
cb();
});
}],function(err){
console.log("enter final")
var qout = [];
var firstQ = [ "No.","duration","Interviewer","Visit Date",
"Country","City","Customer","Male","Female"];
for(var qindex in survey.questionlist){
var q = survey.questionlist[qindex];
var base_str = "Q"+(parseInt(qindex)+1);
if(q.type == dict.QTYPE_MULTISELECT ||
q.type == dict.QTYPE_SINGLESELECT ||
q.type == dict.QTYPE_MULTISELECT_RECORD_TEXT ||
q.type == dict.QTYPE_MULTISELECT_TEXT ||
q.type == dict.QTYPE_SINGLESELECT_RECORD_TEXT ||
q.type == dict.QTYPE_SINGLESELECT_TEXT){
for(var j in q.selectlist){
firstQ.push(base_str+"_"+(parseInt(j)+1))
}
}
else if(q.type == dict.QTYPE_SCORE){
var scoreStart = 0;
var scoreEnd = 10;
var scoreStep = 1;
if(q.scorelist && _.isArray(q.scorelist)){
scoreStart = parseInt(q.scorelist[0].start);
scoreEnd = parseInt(q.scorelist[0].end);
scoreStep = parseInt(q.scorelist[0].step);
}
for(var i=scoreStart;i<=scoreEnd;i+=scoreStep){
firstQ.push(base_str+"_"+(parseInt(i)))
}
}
else if(q.type == dict.QTYPE_SEQUENCE){
for(var j in q.selectlist){
firstQ.push(base_str+"_"+(parseInt(j)+1))
}
}
else{
firstQ.push(base_str);
}
}
qout.push(firstQ);
for(var aindex in answerlistArray){
var currentA = answerlistArray[aindex];
var calist = currentA.answerlist;
var dstring = ""
var country = "";
var city = "";
var customer = "";
var male = "";
var female = "";
var duration = "";
if(currentA.begintime && currentA.endtime){
var stime = new Date(currentA.begintime);
var etime = new Date(currentA.endtime);
if(stime && etime){
duration = (etime-stime)/(1000*60);
}
}
var namestring = currentA.namestatic?currentA.namestatic:currentA.name;
var aNameList = namestring.split("_");
var bias = 0;
if(aNameList[0] != name){
bias = 1;
}
if(aNameList[2-bias]){
var nd=new Date(aNameList[2-bias]);
var year = nd.getFullYear();
var month = nd.getMonth()+1;
var date = nd.getDate();
dstring = year+"/"+month+"/"+date;
}
country = aNameList[3-bias]?aNameList[3-bias]:"";
city = aNameList[4-bias]?aNameList[4-bias]:"";
customer = aNameList[5-bias]?aNameList[5-bias]:"";
if(aNameList[6-bias]){
if(aNameList[6-bias] == "male"){
male = "1";
}
else if(aNameList[6-bias] == "female"){
female = "1";
}
}
firstQ = [(parseInt(aindex)+1),duration,currentA.investigatorname?currentA.investigatorname:"",
dstring,country,city,customer,male,female];
for(var qindex in survey.questionlist){
var q = survey.questionlist[qindex];
if(q.type == dict.QTYPE_MULTISELECT ||
q.type == dict.QTYPE_SINGLESELECT ||
q.type == dict.QTYPE_MULTISELECT_RECORD_TEXT ||
q.type == dict.QTYPE_MULTISELECT_TEXT ||
q.type == dict.QTYPE_SINGLESELECT_RECORD_TEXT ||
q.type == dict.QTYPE_SINGLESELECT_TEXT){
var tempList = [];
for(var j in q.selectlist){
tempList.push("")
}
var qfi = _.findIndex(calist,function(item){
return item.questionid == q._id;
});
if(qfi>=0){
var slist = calist[qfi].selectindexlist;
for(var sindex in slist){
tempList[slist[sindex]] = 1;
if(calist[qfi].selectextra && calist[qfi].selectextra.length>0){
var seindex = _.findIndex(calist[qfi].selectextra,function(item){
return item.index == slist[sindex];
})
if(seindex>=0 && calist[qfi].selectextra[seindex].text){
tempList[slist[sindex]] = calist[qfi].selectextra[seindex].text;
}
}
}
}
for(var tindex in tempList){
firstQ.push(tempList[tindex]);
}
}
else if(q.type == dict.QTYPE_SCORE){
var scoreStart = 0;
var scoreEnd = 10;
var scoreStep = 1;
var tempList = [];
if(q.scorelist && _.isArray(q.scorelist)){
scoreStart = parseInt(q.scorelist[0].start);
scoreEnd = parseInt(q.scorelist[0].end);
scoreStep = parseInt(q.scorelist[0].step);
}
var qfi = _.findIndex(calist,function(item){
return item.questionid == q._id;
});
if(qfi>=0){
if(calist[qfi].scorelist){
var sfi = _.findIndex(calist[qfi].scorelist,function(item){
return item.index == 0;
})
if(sfi>=0){
for(var i=scoreStart;i<=scoreEnd;i+=scoreStep){
if(i == calist[qfi].scorelist[sfi].score){
tempList.push(1);
}
else{
tempList.push("")
}
}
}
else{
for(var i=scoreStart;i<=scoreEnd;i+=scoreStep){
tempList.push("")
}
}
}
else{
for(var i=scoreStart;i<=scoreEnd;i+=scoreStep){
tempList.push("")
}
}
}
else{
for(var i=scoreStart;i<=scoreEnd;i+=scoreStep){
tempList.push("")
}
}
for(var tindex in tempList){
firstQ.push(tempList[tindex]);
}
}
else if(q.type == dict.QTYPE_SEQUENCE){
var sortlist = [];
var qfi = _.findIndex(calist,function(item){
return item.questionid == q._id;
});
if(qfi>=0){
if(calist[qfi].sortlist){
var sorted = _.sortBy(calist[qfi].sortlist,function(item){
return item.sort
})
for(var qi in sorted){
/*
var nub =parseInt(sorted[qi].index)+1;
sortlist[qi] = nub.toString();
*/
sortlist[qi] = parseInt(sorted[qi].index)+1;
}
}
}
for(var tindex in sortlist){
firstQ.push(sortlist[tindex]);
}
// firstQ.push(sortlist);
}
else{
var qfi = _.findIndex(calist,function(item){
return item.questionid == q._id;
});
if(qfi>=0){
firstQ.push(calist[qfi].text?calist[qfi].text:"");
}
else{
firstQ.push("");
}
}
}
qout.push(firstQ);
}
var filename = name.replace(/\s+/g,"_") + ".xlsx";
var ws_name = "SheetJS";
function Workbook() {
if(!(this instanceof Workbook)) return new Workbook();
this.SheetNames = [];
this.Sheets = {};
}
var wb = new Workbook(), ws = sheet_from_array_of_arrays(qout);
/* add worksheet to workbook */
wb.SheetNames.push(ws_name);
wb.Sheets[ws_name] = ws;
/* write file */
XLSX.writeFile(wb, 'uploads/'+filename);
var gzip = zlib.createGzip();
var inp = fs.createReadStream('uploads/'+filename);
var out = fs.createWriteStream('uploads/'+filename+".gz");
inp.pipe(gzip).pipe(out);
res.status(200);
successMsg.body = filename+".gz";
res.send(JSON.stringify(successMsg));
});
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/sadmin/version/list",acl.middleware(1),function(req,res){
Admin.getSadminVersionList(function(err,msg){
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
});
app.post("/sadmin/version/add",acl.middleware(1),function(req,res){
var platform = req.body.platform;
var versionnum = req.body.versionnum;
var fileurl = req.body.fileurl;
if(platform && versionnum && fileurl){
Admin.addSadminVersion(platform,versionnum,fileurl,function(err,msg){
logger.logger.log("info","admin add new version",{
adminid:req.session.uid,
versionid:msg
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.put("/sadmin/version/edit",acl.middleware(1),function(req,res){
var versionid = req.body.id;
var platform = req.body.platform;
var versionnum = req.body.versionnum;
var fileurl = req.body.fileurl;
if(versionid&&ObjectID.isValid(versionid)&&platform&&versionnum&&fileurl){
Admin.editSadminVersion(versionid,platform,versionnum,fileurl,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "version not found";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.delete("/sadmin/version/delete",acl.middleware(1),function(req,res){
var versionid = req.body.id;
if(versionid&&ObjectID.isValid(versionid)){
Admin.deleteSadminVersion(versionid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "version not found";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/investigator/version/get/:platform",acl.middleware(2),function(req,res){
var platform = req.params.platform;
if(platform &&
(platform == dict.PLATFORMTYPE_ANDROID || platform == dict.PLATFORMTYPE_IOS || platform==dict.PLATFORMTYPE_WEB)){
Staff.getVersionInfo(platform,function(err,msg){
logger.logger.log("info","staff get version info",{
staffid:req.session.uid,
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/admin/ad/add",acl.middleware(2),function(req,res){
var title = req.body.title;
var image = req.body.image;
var link = req.body.link;
if(title && image && link){
Admin.addAd(req.session.orgid,title,image,link,function(err,msg){
logger.logger.log("info","admin add new ad",{
adminid:req.session.uid,
adid:msg
});
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.get("/investigator/ad/get",acl.middleware(2),function(req,res){
Staff.getAdInfo(req.session.orgid,function(err,ads){
logger.logger.log("info","staff get ad info",{
staffid:req.session.uid
});
res.status(200);
successMsg.body = ads;
res.send(JSON.stringify(successMsg));
})
});
//var from = "ouresateam@163.com";
//var smtpTransport = nodemailer.createTransport('smtps://ouresateam%40163.com:ouresa777@smtp.163.com');
//var from = "leochen.shanghai@gmail.com";
//var smtpTransport = nodemailer.createTransport('smtps://leochen.shanghai%40gmail.com:Bobo16188@smtp.gmail.com');
//var from = "admin@register.ouresa.com"
//var smtpTransport = nodemailer.createTransport('smtps://postmaster%40register.ouresa.com:0dfe4400ba798ead05bb59328fc765e7@smtp.mailgun.org')
//var from = "ouresaadmin@sandbox7ec8af3e18ce44239f48a365be400e76.mailgun.org"
//var smtpTransport = nodemailer.createTransport('smtps://postmaster%40sandbox7ec8af3e18ce44239f48a365be400e76.mailgun.org:aa790a31986ac6dc171ddf4dfd1da8bc@smtp.mailgun.org')
var from = "ouresa.pp@transsion.com"
//var smtpTransport = nodemailer.createTransport('smtps://ouresa.pp%40transsion.com:ouresaPP666@smtp.qiye.163.com')
var smtpTransport = nodemailer.createTransport({
host: 'smtp.qiye.163.com',
port: 465,
auth: {
user: "ouresa.pp@transsion.com",
pass: 'ouresaPP666'
},
tls: {rejectUnauthorized: false},
debug:true
}
);
app.get("/testemail",function(req,res){
//var smtpTransport = nodemailer.createTransport('smtps://leochen.shanghai%40gmail.com:Bobo16188@smtp.gmail.com');
//var smtpTransport = nodemailer.createTransport('smtp://ouresateam%40sina.com:ouresa666@smtp.sina.com');
var mailOptions = {
from: from,
to: "leochen.shanghai@qq.com",
subject: "Account Verified Code",
text: "Your Ouresa account verified code is 23457867885. Please input it into register form."
}
smtpTransport.sendMail(mailOptions, function(error, response){
if(error){
console.log(error);
res.status(500);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}else{
console.log("ok");
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
});
});
app.post("/sendverifiedcode",function(req,res){
var email = req.body.email;
var ccode = req.body.capchacode;
if(email && ccode){
Admin.checkCapcha(ccode,req.session.captchaid,function(err,msg){
if(msg!="notfound"){
Admin.generateVerifiedCode(email,function(err,msg){
var mailOptions = {
from: from,
to: email,
subject: "Account Verified Code",
text: "Your Ouresa account verified code is "+msg+". Please input it into register form."
};
smtpTransport.sendMail(mailOptions, function(error, response){
if(error){
console.log(error);
res.status(500);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}else{
console.log("ok");
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
});
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/addpersonalfree",function(req,res){
var name = req.body.name;
var pass = req.body.password;
var email = req.body.email;
var verifiedcode = req.body.verifiedcode;
if(name && pass && email && verifiedcode){
Admin.checkVerifiedCode(email,verifiedcode,function(err,msg){
if(msg){
var orgname = "__personal"+name;
if(orgname){
Admin.createOrganization(orgname,function(err,msg,insertedid){
if(msg == "duplicate"){
res.status(409);
errorMsg.code = "duplicate";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new organization created",{name:msg.name});
var orgid = insertedid.toString();
Admin.createOrgAdminWithEmail(orgid,name,pass,email,dict.STAFF_PERSONAL,function(err,msg,insertedid){
if(msg == "nameduplicate"){
res.status(409);
errorMsg.code = "name duplicate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "orgnotfound"){
res.status(404);
errorMsg.code = "organization not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new organization admin created",{name:msg.name});
acl.addUserRoles(msg.name, dict.STAFF_PERSONAL);
Admin.deleteVerifiedCode(email,verifiedcode,function(err,msg){
res.status(200);
successMsg.body = insertedid;
res.send(JSON.stringify(successMsg));
})
}
})
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
}
else{
res.status(404);
errorMsg.code = "notmatched";
res.send(JSON.stringify(errorMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/addmobilepersonal",function(req,res){
var name = req.body.username;
var pass = req.body.password;
var email = req.body.Email;
console.log(name);
if(name && pass && email){
var orgname = "__personal"+name;
if(orgname){
Admin.createOrganization(orgname,function(err,msg,insertedid){
if(msg == "duplicate"){
res.status(409);
errorMsg.code = "duplicate";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new organization created",{name:msg.name});
var orgid = insertedid.toString();
Admin.createOrgAdminWithEmail(orgid,name,pass,email,dict.STAFF_PERSONAL,function(err,msg,insertedid){
if(msg == "nameduplicate"){
res.status(409);
errorMsg.code = "name duplicate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "orgnotfound"){
res.status(404);
errorMsg.code = "organization not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new organization admin created",{name:msg.name});
acl.addUserRoles(msg.name, dict.STAFF_PERSONAL);
res.status(200);
successMsg.body = insertedid;
res.send(JSON.stringify(successMsg));
}
})
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/lookupfbid",function(req,res){
var fbid = req.body.fbid;
if(fbid){
Admin.lookupFacebookId(fbid,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "not found";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = msg;
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/addfbuser",function(req,res){
var name = req.body.fbname;
var pass = req.body.fbpass;
var email = req.body.fbemail;
var fbid = req.body.fbid;
if(name && pass && email && fbid){
var orgname = "__personal"+name;
if(orgname){
Admin.createOrganization(orgname,function(err,msg,insertedid){
if(msg == "duplicate"){
res.status(409);
errorMsg.code = "duplicate";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new organization created",{name:msg.name});
var orgid = insertedid.toString();
Admin.createOrgAdminWithFbid(orgid,name,pass,email,fbid,dict.STAFF_PERSONAL,function(err,msg,insertedid){
if(msg == "nameduplicate"){
res.status(409);
errorMsg.code = "name duplicate";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "orgnotfound"){
res.status(404);
errorMsg.code = "organization not found";
res.send(JSON.stringify(errorMsg));
}
else{
logger.logger.log("info","new organization admin created",{name:msg.name});
acl.addUserRoles(msg.name, dict.STAFF_PERSONAL);
res.status(200);
successMsg.body = {
id:insertedid,
role:msg.role
};
res.send(JSON.stringify(successMsg));
}
})
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
function sendAudioFile(file,res){
var filename = path.basename(file);
var mimetype = mime.lookup(file);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
}
function isFileExist(fname){
try{
var fstat = fs.lstatSync(fname);
return fstat.isFile()
}
catch(e){
return false;
}
}
app.get("/getmp3/:fname",function(req,res){
var fname = req.params.fname;
if(fname){
var array = fname.split(".");
if(array.length == 2){
var ext = array[array.length-1];
if(ext == "amr"){
if(isFileExist("uploads/"+fname)){
var fmp3 = "uploads/"+array[0]+".mp3";
if(isFileExist(fmp3)){
sendAudioFile(fmp3,res)
}
else{
var parameters = ["-i","uploads/"+fname,fmp3];
var stream = avconv(parameters);
stream.on('exit', function() {
sendAudioFile(fmp3,res)
})
}
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/resetpassword",function(req,res){
var email = req.body.email;
if(email){
Admin.generatResetpassEmailCode(email,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "email not found";
res.send(JSON.stringify(errorMsg));
}
else{
var mailOptions = {
from: from,
to: email,
subject: "Reset your password",
text: "Please click this link to reset your password: http://www.ouresa.com/si/public/#/resetpass/"+msg
};
smtpTransport.sendMail(mailOptions, function(error, response){
if(error){
console.log(error);
res.status(500);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}else{
console.log("ok");
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
});
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
app.post("/resetpassfromcode",function(req,res){
var code = req.body.code;
var pass = req.body.pass;
if(code && pass){
Admin.resetPassWithCode(code,pass,function(err,msg){
if(msg == "notfound"){
res.status(404);
errorMsg.code = "not found";
res.send(JSON.stringify(errorMsg));
}
else if(msg == "timeout"){
res.status(409);
errorMsg.code = "timeout";
res.send(JSON.stringify(errorMsg));
}
else{
res.status(200);
successMsg.body = "ok";
res.send(JSON.stringify(successMsg));
}
})
}
else{
res.status(406);
errorMsg.code = "wrong";
res.send(JSON.stringify(errorMsg));
}
});
});
function checkSurveyData(data){
if(!data){
return false;
}
else if(!data.surveyid){
return false;
}
else if(!data.type || (data.type!=dict.QTYPE_DESCRIPTION &&
data.type!=dict.QTYPE_MULTISELECT &&
data.type!=dict.QTYPE_SEQUENCE &&
data.type!=dict.QTYPE_SINGLESELECT &&
data.type!=dict.QTYPE_SCORE &&
data.type!=dict.QTYPE_DESCRIPTION_IMAGE_TEXT &&
data.type!=dict.QTYPE_DESCRIPTION_RECORD_TEXT &&
data.type!=dict.QTYPE_MULTISELECT_RECORD_TEXT &&
data.type!=dict.QTYPE_MULTISELECT_TEXT &&
data.type!=dict.QTYPE_SINGLESELECT_RECORD_TEXT &&
data.type!=dict.QTYPE_SINGLESELECT_TEXT)){
return false;
}
//else if(!data.title){
// return false;
//}
//else if((data.type == dict.QTYPE_MULTISELECT ||
// data.type == dict.QTYPE_SEQUENCE ||
// data.type == dict.QTYPE_SINGLESELECT ||
// data.type == dict.QTYPE_SCORE) &&
// !_.isArray(data.selectlist)){
// return false;
//}
//else if(data.type == dict.QTYPE_MULTISELECT ||
// data.type == dict.QTYPE_SEQUENCE ||
// data.type == dict.QTYPE_SINGLESELECT ||
// data.type == dict.QTYPE_SCORE){
// for(var i in data.selectlist){
// var q = data.selectlist[i];
// if(q.type!=dict.SELECTTYPE_AUDIO &&
// q.type!=dict.SELECTTYPE_DESCRIPTION &&
// q.type!=dict.SELECTTYPE_IMAGE &&
// q.type!=dict.SELECTTYPE_TEXT &&
// q.type!=dict.SELECTTYPE_VIDEO){
// return false;
// }
// }
//}
//else if(data.precederid){
// if(!data.precederselectindex){
// return false;
// }
//}
return true;
}
function parseV1List(input){
var qlist = [];
var typemap = {
"0":dict.QTYPE_SINGLESELECT,
"1":dict.QTYPE_MULTISELECT,
"2":dict.QTYPE_DESCRIPTION,
"3":dict.QTYPE_SEQUENCE,
"4":dict.QTYPE_SCORE
}
for(var i in input){
var q = {}
if(i>=1){
if(input[i][1] && input[i][2]){
q.title = input[i][1].trim();
q.type = typemap[input[i][2].trim()]
q.selectlist = [];
var start = 3;
while(input[i][start]){
q.selectlist.push({
type:"textselect",
title:input[i][start].trim()
});
start+=1;
}
qlist.push(q)
}
}
}
return qlist;
}
function parseV2List(input){
var qlist = [];
var typemap = {
"单选题":dict.QTYPE_SINGLESELECT,
"多选题":dict.QTYPE_MULTISELECT,
"描述题":dict.QTYPE_DESCRIPTION,
"选项排序题":dict.QTYPE_SEQUENCE,
"选项打分题":dict.QTYPE_SCORE
};
for(var i in input){
var q = {}
if(i>=2){
if(input[i][1] && input[i][2]){
var titleSplit = input[i][1].trim().split(",");
var tindex = titleSplit[0]
if(titleSplit.length==3){
var preindex = parseInt(titleSplit[1]);
var selectindex = parseInt(titleSplit[2]);
q.ifhasprecedent = true;
q.precedentindex = preindex-1;
q.precedentselectindex = selectindex-1;
}
else{
q.ifhasprecedent = false;
q.precedentindex = -1;
q.precedentselectindex = -1;
}
q.title = input[i][2].trim();
q.type = typemap[tindex]
q.selectlist = [];
var start = 3;
while(input[i][start]){
var stype = dict.SELECTTYPE_TEXT;
var vtrim = input[i][start].trim();
if(vtrim == "图形"){
stype = dict.SELECTTYPE_IMAGE;
vtrim = ""
}
else if(vtrim == "视频"){
stype = dict.SELECTTYPE_VIDEO;
vtrim = ""
}
else if(vtrim.indexOf("others")>=0 || vtrim.indexOf("Others")>=0){
stype = dict.SELECTTYPE_DESCRIPTION;
}
q.selectlist.push({
type:stype,
title:vtrim
});
start+=1;
}
qlist.push(q)
}
}
}
return qlist;
}
function parseV3List(input){
var qlist = [];
var typemap = {
"单选题":dict.QTYPE_SINGLESELECT,
"单选文本题":dict.QTYPE_SINGLESELECT_TEXT,
"单选录音文本题":dict.QTYPE_SINGLESELECT_RECORD_TEXT,
"多选题":dict.QTYPE_MULTISELECT,
"多选文本题":dict.QTYPE_MULTISELECT_TEXT,
"多选录音文本题":dict.QTYPE_MULTISELECT_RECORD_TEXT,
"文本题":dict.QTYPE_DESCRIPTION,
"录音文本题":dict.QTYPE_DESCRIPTION_RECORD_TEXT,
"图片上传文本题":dict.QTYPE_DESCRIPTION_IMAGE_TEXT,
"选项排序题":dict.QTYPE_SEQUENCE,
"数字题":dict.QTYPE_SCORE
};
for(var i in input){
var q = {}
if(i>=2){
if(input[i][1] && input[i][2]){
var titleSplit = input[i][1].trim().split(",");
var tindex = titleSplit[0]
if(titleSplit.length==3){
var preindex = parseInt(titleSplit[1]);
var selectindex = parseInt(titleSplit[2]);
q.ifhasprecedent = true;
q.precedentindex = preindex-1;
q.precedentselectindex = selectindex-1;
}
else{
q.ifhasprecedent = false;
q.precedentindex = -1;
q.precedentselectindex = -1;
}
q.title = input[i][2].trim();
q.type = typemap[tindex]
q.selectlist = [];
q.scorelist = [];
var start = 3;
while(input[i][start]){
var stype = dict.SELECTTYPE_TEXT;
var vtrim = input[i][start].trim();
if(q.type == dict.QTYPE_SCORE){
var scoreSplit = vtrim.split(",");
if(scoreSplit.length == 3){
q.scorelist.push({
index:parseInt(start)-3,
start:scoreSplit[0],
end:scoreSplit[1],
step:scoreSplit[2]
})
}
else if(scoreSplit.length == 4){
q.scorelist.push({
index:i,
start:scoreSplit[1],
end:scoreSplit[2],
step:scoreSplit[3]
})
q.selectlist.push({
type:stype,
title:scoreSplit[0]
})
}
}
else{
if(vtrim == "*图形*"){
stype = dict.SELECTTYPE_IMAGE;
vtrim = ""
}
else if(vtrim == "*视频*"){
stype = dict.SELECTTYPE_VIDEO;
vtrim = ""
}
else if(vtrim.indexOf("others")>=0 || vtrim.indexOf("Others")>=0){
stype = dict.SELECTTYPE_DESCRIPTION;
}
q.selectlist.push({
type:stype,
title:vtrim
});
}
start+=1;
}
qlist.push(q)
}
}
}
return qlist;
}
function parseV4List(input){
console.log("It is 4 version")
var qlist = [];
var typemap = {
"单选题":dict.QTYPE_SINGLESELECT,
"单选文本题":dict.QTYPE_SINGLESELECT_TEXT,
"单选录音文本题":dict.QTYPE_SINGLESELECT_RECORD_TEXT,
"多选题":dict.QTYPE_MULTISELECT,
"多选文本题":dict.QTYPE_MULTISELECT_TEXT,
"多选录音文本题":dict.QTYPE_MULTISELECT_RECORD_TEXT,
"文本题":dict.QTYPE_DESCRIPTION,
"录音文本题":dict.QTYPE_DESCRIPTION_RECORD_TEXT,
"图片上传文本题":dict.QTYPE_DESCRIPTION_IMAGE_TEXT,
"选项排序题":dict.QTYPE_SEQUENCE,
"数字题":dict.QTYPE_SCORE
};
for(var i in input){
var q = {}
var jumpArray = []
if(i>=2){
if(input[i][1] && input[i][2]){
var titleSplit = input[i][1].trim().split(",");
var tindex = titleSplit[0]
if(titleSplit.length>1){
var arrayLength = titleSplit.length;
var firstPos = 1;
var nextPos = 2;
while(firstPos<arrayLength && nextPos<arrayLength){
var selectindex = parseInt(titleSplit[firstPos]);
var questionindex = parseInt(titleSplit[nextPos]);
jumpArray.push([selectindex,questionindex]);
firstPos += 2;
nextPos += 2;
}
}
q.title = input[i][2].trim();
q.type = typemap[tindex]
q.selectlist = [];
q.scorelist = [];
var start = 3;
while(input[i][start]){
var stype = dict.SELECTTYPE_TEXT;
var vtrim = input[i][start].trim();
var selectIndex = parseInt(start)-3;
if(q.type == dict.QTYPE_SCORE){
var scoreSplit = vtrim.split(",");
if(scoreSplit.length == 3){
q.scorelist.push({
index:parseInt(start)-3,
start:scoreSplit[0],
end:scoreSplit[1],
step:scoreSplit[2]
})
}
else if(scoreSplit.length == 4){
q.scorelist.push({
index:parseInt(start)-3,
start:scoreSplit[1],
end:scoreSplit[2],
step:scoreSplit[3],
title:scoreSplit[0]
});
}
}
else{
if(vtrim == "*图形*"){
stype = dict.SELECTTYPE_IMAGE;
vtrim = ""
}
else if(vtrim == "*视频*"){
stype = dict.SELECTTYPE_VIDEO;
vtrim = ""
}
else if(vtrim.indexOf("###,")==0){
stype = dict.SELECTTYPE_DESCRIPTION;
vtrim = vtrim.slice(4);
}
var qindex = -1;
for(var jumpindex in jumpArray){
var jpair = jumpArray[jumpindex];
if(jpair[0] - 1 == parseInt(selectIndex)){
qindex = jpair[1] - 1;
}
}
q.selectlist.push({
type:stype,
title:vtrim,
qindex:qindex
});
}
start+=1;
}
qlist.push(q)
}
}
}
return qlist;
}
var server = app.listen(8080, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port)
});

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/git_zliang-SmartinsightXiangMuWenJuanDiaoYanZiXiTong.git
git@api.gitlife.ru:oschina-mirror/git_zliang-SmartinsightXiangMuWenJuanDiaoYanZiXiTong.git
oschina-mirror
git_zliang-SmartinsightXiangMuWenJuanDiaoYanZiXiTong
git_zliang-SmartinsightXiangMuWenJuanDiaoYanZiXiTong
master