audits
Version:
audit registrant
113 lines (104 loc) • 3.31 kB
JavaScript
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
};