UNPKG

audits

Version:

audit registrant

113 lines (104 loc) 3.31 kB
var mysql = require('mysql'); var soap = require('./soap.js'); var dbh, queue = [], tasks = 0; function connect_mysql(config) { dbh = mysql.createConnection(config); dbh.on('error', connect_mysql); } function end_mysql(code) { dbh.end(); console.log('Exit code:', code); } function auditRegistrant(uniId, tld, cb) { dbh.query("select * from auditRegistrant where status='data' and uniId=?", [uniId], function(err, rows) { if(err || !rows.length) { cb(err || new Error("没找到认证数据")); return; } var json = JSON.parse(rows[0].json); json.registrantId = uniId; json.tldName = tld; json.registrantName = rows[0].name; json.orgName = rows[0].org; soap.auditRegistrant(json, cb); }); } function _auditResult(task, result) { switch(result.code) { case 'SUCCESS': switch(task.status) { case 'data': task.status = 'auditing'; task.description = ''; break; case 'auditing': task.status = result.auditStatus; switch(task.status) { case 'AUDITING': task.description = new Date().toISOString(); break; case 'PASS': task.description = ''; dbh.query("update payment.audits set uniIdOk=1,dirty=0 where uniId=? and dirty=2", [task.uniId]); break; case 'UNPASS': task.description = result.rejectReasonSet.toString(); dbh.query("update payment.audits set uniIdOk=0,dirty=0 where uniId=? and dirty=2", [task.uniId]); } } break; case 'ERROR': task.status = ''; task.description = result.description; dbh.query("update payment.audits set uniIdOk=0,dirty=0 where uniId=? and dirty=2", [task.uniId]); } dbh.query("update auditRegistrant set status=?,description=? where uniId=?", [task.status, task.description, task.uniId]); } function auditResult(task) { tasks++; return function(err, result) { tasks--; if(!err) _auditResult(task, result.return); setTimeout(auditRequest, 1000); }; } function auditRequest() { if(tasks>= 5) return; var task = queue.shift(); if(!task) { if(!tasks) process.exit(0); return; } console.log(task); switch(task.status) { case 'data': auditRegistrant(task.uniId, task.tld, auditResult(task)); break; case 'auditing': soap.queryRegistrant(task.uniId, task.tld, auditResult(task)); } } function processRegistrant() { dbh.query("select uniId,status from auditRegistrant where status in ('data','auditing')", function(err, rows) { if(err || !rows.length) return; for(var i=0; i<rows.length; i++) queue.push({ status: rows[i].status, uniId : rows[i].uniId, tld : 'md5' }); }); } module.exports = { init: function(config) { connect_mysql(config.mysql); process.on('exit', end_mysql); soap.init(config.audit); processRegistrant(); }, auditRequest: auditRequest };