function genQQLink(isAdmin, ticketCid, visitCid, threads) { var p = new AV.Promise(); if (isAdmin) { muser.findUserById(ticketCid).then(function (c) { if (c && c.qq) { p.resolve('/clients/' + ticketCid); } else { p.resolve(null); } }, mutil.rejectFn(p)); } else { if (ticketCid == visitCid) { admin.findCleanAdmins().then(function (admins) { for (var i = threads.length - 1; i >= 0; i--) { var thread = threads[i]; for (var j = 0; j < admins.length; j++) { var admin = admins[j]; mlog.log('cid=' + admin.cid + ' ' + thread.cid); if (thread.cid == admin.cid) { p.resolve('/engineers/' + admin.id); return; } } } p.resolve(); }, mutil.rejectFn(p)); } else { p.resolve(); } } return p; }
function getStatictics(res, results, sway, dateConfig) { var map = {}; if (sway == 'recorder') { var q = new AV.Query('Recorder'); q.find().then(function(rcs) { for (var i = 0; i < rcs.length; i++) { map[rcs[i].get('name')] = 0; }; for (var i = 0; i < results.length; i++) { var r = results[i].get('recorder'); if(r.get('name') == undefined){ continue; } var cost = results[i].get('cost'); if (r.get('name')) { map[r.get('name')] = map[r.get('name')] + cost; } }; mutil.renderData(res, {values:map,dateConfig:dateConfig}); }); } else if (sway == 'studio') { var q = new AV.Query('Studio'); q.find().then(function(rcs) { for (var i = 0; i < rcs.length; i++) { map[rcs[i].get('name')] = 0; }; for (var i = 0; i < results.length; i++) { var r = results[i].get('studio'); if(r.get('name') == undefined){//todo continue; } var cost = results[i].get('cost'); if (r.get('name')) { map[r.get('name')] = map[r.get('name')] + cost; } }; mutil.renderData(res, {values:map,dateConfig:dateConfig}); }); } else if (sway == 'businessType') { var tps = mconfig.convertDictToList('businessTypes'); for (var i = 0; i < tps.length; i++) { map[tps[i].text] = 0; }; for (var i = 0; i < results.length; i++) { var text = mconfig.getConfigMapByValue('businessTypes', results[i].get('businessType')); if (text) { map[text.text] = map[text.text] + results[i].get('cost'); } }; mutil.renderData(res, {values:map,dateConfig:dateConfig}); } else{ mutil.renderError(res, {code:500, message:'参数错误'}); } }
app.get(config.baseUrl + '/account/isLogin', function(req, res) { var u = isLogin(); if (u) { mutil.renderData(res, u); } else { mutil.renderErrorData(res, { code: 500, message: '请重新登录!' }); } });
app.get(config.baseUrl + '/dict/:key', function(req, res) { var key = req.params.key var dictData = mconfig.convertDictToList(key); if (dictData == null) { mutil.renderError(res, { code: 404, message: 'dict not found' }); } mutil.renderData(res, mconfig.convertDictToList(key)); });
function agreeAllAddRequests(){ var p=new AV.Promise(); mutil.findAll('AddRequest',function(q){ q.equalTo('status',0); },mutil.rejectFn(p)).then(function(adds){ var ps=[]; _.each(adds,function(add){ ps.push(_agreeAddRequest(add.id)); }); AV.Promise.when(ps).then(function(){ p.resolve(); },mutil.rejectFn(p)); }); return p; }
function sendEmail(ticket, subject, text, email) { var type = ticket.get('type'); admin.findEmailsByType(type).then(function (emails) { var to; if (email) { to = email; } else { if (emails) { to = emails.join(','); } } if (__production && to) { mg.sendRaw(_s.sprintf('AVOS Cloud Ticket System <%s>', config.emailHost), [to], 'From:' + config.emailHost + '\nTo: ' + to + '\nContent-Type: text/html; charset=utf-8' + '\nSubject: ' + subject + '\n\n' + text, function (err) { err && console.log(err) }); } else { mlog.log(text + 'email= ' + to); } }, mutil.logErrorFn()); }
findClient(req, res, function (token, cid, client) { mlog.log('find client'); req.token = token; req.cid = cid; req.client = client; mlog.log('find cid=' + req.cid); isAdmin(cid).then(function (isAdmin) { req.admin = isAdmin; if (req.cid != anonymousCid && client.emailVerified == false) { if (/^\/(requestEmailVerify|logout)/.test(req.url) || config.needEmailVerify === false) { next(); } else { renderEmailVerify(res, client.email); } } else { if (/^\/admin.*/.test(req.url)) { if (isAdmin) { next(); } else { mlog.log('isn\'t not admin'); mutil.renderForbidden(res); } }else{ next(); } } }, mutil.renderErrorFn(res)); });
admin.findAdmins().then(function (admins) { admins = _.map(admins, admin.transformAdmin); var allTickets; var allThreads; var promises = []; promises.push(admin.findAll('Ticket').then(function (tickets) { allTickets = tickets; })); promises.push(admin.findAll('Thread').then(function (threads) { allThreads = threads; })); //mlog.log('find all'); AV.Promise.when(promises).then(function () { var ticketThreads = []; var used = new Array(allThreads.length); for (var i = 0; i < used.length; i++) { used[i] = false; } allTickets.forEach(function (ticket) { var threads = []; for (var i = 0; i < allThreads.length; i++) { var thread = allThreads[i]; if (used[i] == false && thread.get('ticket').id == ticket.id) { used[i] = true; threads.push(thread); } } ticketThreads.push({ticket: ticket, threads: threads}); }); var __ret = getStatisticsEachType(admins, ticketThreads); getStatisticsEachAdmin(admins, ticketThreads); //mlog.log(admins); res.render('admin_statistics', {token: token, week: __ret.week, allhistory: __ret.allhistory, admins: admins}); }, mutil.renderErrorFn(res)); }, mutil.renderErrorFn(res));
query.count().then(function(count) { pageMap = concretePageMap(count); if (count == 0 || pageNumber > pageMap.totalPageNum) { pageMap['values'] = []; pageMap['currentPage'] = pageMap.totalPageNum; mutil.renderData(res, pageMap); } else { pageMap['currentPage'] = pageNumber; query.include('recorder'); query.include('studio'); query.limit(pageSize); query.skip(pageSize * (pageNumber - 1)); query.find({ success: function(lst) { var rlist = []; for (var i = 0; i < lst.length; i++) { rlist.push(tanformTask(lst[i])); }; pageMap['values'] = rlist; mutil.renderData(res, pageMap); }, error: function(error) { mutil.renderError(res, error); } }); } });
function tryCreateAddRequest(req,res){ var fromUserId=req.params.fromUserId; var toUserId=req.params.toUserId; _tryCreateAddRequest(fromUserId,toUserId).then(function(){ res.success(); },mutil.cloudErrorFn(res)); }
function haveAddRequest(fromUserId,toUserId){ var p=new AV.Promise(); var fromUser=createUser(fromUserId); var toUser=createUser(toUserId); mutil.findOne('AddRequest',function(q){ q.equalTo('fromUser',fromUser); q.equalTo('toUser',toUser); q.equalTo('status',statusWait); }).then(function(addRequest){ if(addRequest){ p.resolve(true); }else{ p.resolve(false); } },mutil.rejectFn(p)); return p; }
success: function(lst) { var rlist = []; for (var i = 0; i < lst.length; i++) { rlist.push(tanformTask(lst[i])); }; pageMap['values'] = rlist; mutil.renderData(res, pageMap); },
},mutil.rejectFn(p)).then(function(adds){ var ps=[]; _.each(adds,function(add){ ps.push(_agreeAddRequest(add.id)); }); AV.Promise.when(ps).then(function(){ p.resolve(); },mutil.rejectFn(p)); });
app.get('/contact', function (req, res) { var cid = req.cid; var client = req.client; admin.findAdmins().then(function (admins) { admins = _.map(admins, admin.transformAdmin); _.each(admins, addTypeName); isAdmin = req.admin; res.render('contact', {admins: admins, isAdmin: isAdmin, client: client}); }, mutil.renderErrorFn(res)); });
function addNotify(link, cid, msg) { console.log(link + ' ' + cid); var n = new AV.Object('TicketNotification'); n.set('cid', cid); n.set('link', link); if (msg) n.set('message', msg); n.save().then(function () { }, mutil.logErrorFn()); }
function check_login(res) { var u = isLogin(); if (u) { return u; } else { mutil.renderError(res, { code: 501, message: '未登录,请重新登录!' }); } };
haveAddRequest(fromUserId,toUserId).then(function(have){ mlog.log('have='+have); if(have){ p.reject(Error('已经请求过了')); }else{ createAddRequest(fromUserId,toUserId).then(function(){ mlog.log('create'); p.resolve(); },mutil.rejectFn(p)); } },mutil.rejectFn(p));
app.get('/engineers/:id', function (req, res) { var id = req.params.id; admin.findCleanAdminById(id).then(function (admin) { if (admin) { addTypeName(admin); res.render('admin_open_detail', {admin: admin}); } else { renderError(res, '对不起,未找到该工程师的信息。'); } }, mutil.renderErrorFn(res)); });
function findUserByEmail(email) { var p = new AV.Promise(); findRawClientByEmail(email).then(function (user) { if (user) { var user = transfromUser(user); p.resolve(user); } else { p.resolve(); } },mutil.rejectFn(p)); return p; }
app.post('/clients/:id', function (req, res) { var cid = req.cid; var id = req.params.id; var is = isAdminOrMe(req.admin, id, cid); if (is) { muser.updateCurUser(req.body).then(function () { res.redirect('/contact'); }, mutil.renderErrorFn(res)); } else { renderForbidden(res); } });
function updateLoan(loan, reqBody){ loan.set('loanType', reqBody.loanType); //TODO: check is this in dict or not loan.set('amount', reqBody.amount); loan.set('spanMonth', reqBody.spanMonth); loan.set('startDate', mutil.wrapperStrToDate(reqBody.startDate)); //合同相关 loan.set('endDate', mutil.wrapperStrToDate(reqBody.endDate)); //合同相关 loan.set('payCircle', reqBody.payCircle); //还款周期,每几月还一次 loan.set('payTotalCircle', reqBody.payTotalCircle); //共需要还几期 loan.set('currPayStep', 1); //设置当前期数 loan.set('interests', reqBody.interests); loan.set('assureCost', reqBody.assureCost); loan.set('serviceCost', reqBody.serviceCost); loan.set('overdueCostPercent', reqBody.overdueCostPercent);//违约金率 千分之 loan.set('otherCost', reqBody.otherCost); loan.set('keepCost', reqBody.keepCost); loan.set('payWay', reqBody.payWay); if(reqBody.payWay == mconfig.payBackWays.debx.value){ loan.set('overdueBreachPercent', reqBody.overdueBreachPercent); }else{ loan.set('overdueBreachPercent', parseFloat(0)); } loan.set('isSmsRemind', reqBody.isSmsRemind); loan.set('isEmailRemind', reqBody.isEmailRemind); loan.set('otherCostDesc', reqBody.otherCostDesc); loan.set('keepCostDesc', reqBody.keepCostDesc); loan.set('payedMoney', 0); //还款时间 //根据还款类型确认初次还款日期 //存储一个正常的首次还款时间 //loan.set('normalFirstPayDate', mutil.wrapperStrToDate(reqBody.normalFirstPayDate)); loan.set('currPayDate', mutil.wrapperStrToDate(reqBody.firstPayDate)); loan.set('firstPayDate', mutil.wrapperStrToDate(reqBody.firstPayDate)); loan.set('status', mconfig.loanStatus.draft.value); return loan; };
function isAdmin(cid) { var p = new AV.Promise(); var user = AV.Object.createWithoutData('_User', cid); madmin.findAdmins(function (q) { q.equalTo('user', user); }).then(function (admins) { if (admins && admins.length > 0) { p.resolve(true); } else { p.resolve(false); } }, mutil.rejectFn(p)); return p; }
q.get(objectId).then(function(addRequest){ if(addRequest.get('status')==statusDone){ p.reject(Error('该请求已经同意过了')); return; } var fromUser=addRequest.get('fromUser'); var toUser=addRequest.get('toUser'); muser.addFriendForBoth(fromUser.id,toUser.id).then(function(){ addRequest.set('status',statusDone); addRequest.save().then(function(){ p.resolve(); },mutil.rejectFn(p)); },mutil.rejectFn(p)); },mutil.rejectFn(p));
app.get('/clients/:id', function (req, res) { var cid = req.cid; var id = req.params.id; if (judgeDetailVisible(req.admin,id, cid)) { muser.findUserById(id).then(function (client) { if (client) { res.render('client_detail', {client: client}); } else { renderInfo(res, '此用户并未建立用户信息'); } }, mutil.renderErrorFn(res)); } else { renderForbidden(res); } });
function _tryCreateAddRequest(fromUserId,toUserId){ var p=new AV.Promise(); haveAddRequest(fromUserId,toUserId).then(function(have){ mlog.log('have='+have); if(have){ p.reject(Error('已经请求过了')); }else{ createAddRequest(fromUserId,toUserId).then(function(){ mlog.log('create'); p.resolve(); },mutil.rejectFn(p)); } },mutil.rejectFn(p)); return p; }
q.find().then(function(rcs) { for (var i = 0; i < rcs.length; i++) { map[rcs[i].get('name')] = 0; }; for (var i = 0; i < results.length; i++) { var r = results[i].get('studio'); if(r.get('name') == undefined){//todo continue; } var cost = results[i].get('cost'); if (r.get('name')) { map[r.get('name')] = map[r.get('name')] + cost; } }; mutil.renderData(res, {values:map,dateConfig:dateConfig}); });
ticket.fetch().then(function (ticket) { if (isTicketEmpty(ticket) == false) { ticket = transformTicket(ticket); threads = _.map(threads, transformThread); var isAdmin = req.admin; var open = ticket.open; ticket.visible = judgeVisibleForOne(open, isAdmin, cid, ticket.cid); judgeVisible(threads, isAdmin, cid, ticket.cid); var lastOpen = findMyLastOpen(isAdmin, ticket, threads); genQQLink(isAdmin, ticket.cid, cid, threads).then(function (qqLink) { mlog.log('qqlink' + qqLink); res.render("edit", { ticket: ticket, token: token, threads: threads, admin: isAdmin, cid: cid, lastOpen: lastOpen, qqLink: qqLink}); }, mutil.renderErrorFn(res)); } else { renderError(res, "找不到工单,该工单可能已经被删除"); } }, renderErrorFn(res));
app.post('/register', function (req, res) { var username = req.body.username; var password = req.body.password; var email = req.body.email; if (username && password && email) { var user = new AV.User(); user.set('username', username); user.set('password', password); user.set('email', email); user.signUp(null).then(function (user) { login.renderEmailVerify(res, email); }, function (error) { renderInfo(res, util.inspect(error)); }); } else { mutil.renderError(res, '不能为空'); } });
function findClient(req, res, f) { var curUser = AV.User.current(); if (curUser) { curUser.fetch().then(function(curUser){ var user = muser.transfromUser(curUser); setResLoginStatus(res, true, user); f.call(this, user.token, user.id, user); },mutil.renderErrorFn(res)); } else { var anonymousClient = { id: anonymousCid, username: '******', email: req.body.email, token: anonymousToken }; setResLoginStatus(res, false, anonymousClient); f.call(this, anonymousToken, anonymousCid, anonymousClient); } }
app.get('/tickets', function (req, res) { var token = req.token; var cid = req.cid; var isAdmin=req.admin; if (isAdmin) { //enter admin page. res.redirect('/admin/tickets'); } else { var query = new AV.Query("Ticket"); query.ascending("status"); query.descending("createdAt"); query.equalTo("cid", cid); query.find().then(function (tickets) { tickets = tickets || []; tickets = _.map(tickets, transformTicket); res.render('list', {tickets: tickets, token: token}); }, mutil.renderErrorFn(res)); } });