UNPKG

audits

Version:

audit registrant

124 lines (114 loc) 3.88 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(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 };