audits
Version:
audit registrant
124 lines (114 loc) • 3.88 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(contactId, tld, cb) {
dbh.query("select auditRegistrant.name,auditRegistrant.org,auditRegistrant.json from payment.audits"
+ " inner join auditRegistrant"
+ " on payment.audits.uniId=auditRegistrant.uniId COLLATE utf8_unicode_ci"
+ " where payment.audits.contactId=?",
[contactId],
function(err, rows) {
if(err || !rows.length) {
cb(err || new Error("没找到认证数据"));
return;
}
var json = JSON.parse(rows[0].json);
json.registrantId = contactId;
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';
break;
case 'auditing':
task.status = result.auditStatus;
switch(task.status) {
case 'UNPASS':
console.log(task.contactId, task.tld, task.status, result.rejectReasonSet.toString());
}
}
break;
case 'ERROR':
task.status = 'unpass';
console.log(task.contactId, task.tld, task.status, result.description);
}
dbh.query("update auditContact set `"+task.tld+"`=? where contactId=?",
[task.status, task.contactId]);
}
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.contactId, task.tld, auditResult(task));
break;
case 'auditing':
soap.queryRegistrant(task.contactId, task.tld, auditResult(task));
}
}
function createAuditContact() {
dbh.query("select payment.audits.contactId from payment.audits"
+ " inner join auditRegistrant"
+ " on payment.audits.uniId=auditRegistrant.uniId COLLATE utf8_unicode_ci"
+ " left join auditContact"
+ " on payment.audits.contactId=auditContact.contactId"
+ " where payment.audits.uniIdOk=1 and auditContact.contactId is null",
function(err, rows) {
if(err || !rows.length) return;
for(var i=0; i<rows.length; i++)
dbh.query("insert into auditContact set contactId=?", [rows[i].contactId]);
});
}
function submitAuditContact(tld) {
dbh.query("select payment.audits.contactId,auditContact.`"+tld+"` from payment.audits"
+ " inner join auditContact"
+ " on payment.audits.contactId=auditContact.contactId"
+ " where auditContact.`"+tld+"` in ('data','auditing')",
function(err, rows) {
if(err || !rows.length) return;
for(var i=0; i<rows.length; i++)
queue.push({
contactId: rows[i].contactId,
status: rows[i][tld],
tld: tld
});
});
}
module.exports = {
init: function(config) {
connect_mysql(config.mysql);
process.on('exit', end_mysql);
soap.init(config.audit);
createAuditContact();
},
submitAuditContact: submitAuditContact,
auditRequest: auditRequest
};