Всем добрый день использую модуль mysql. Написал вот такой код запросов в БД. Пишу как умею. Что-то сложно становится его отлаживать, да и дополнять его тоже трудновато. Путаница. Может дадите советов как упростить код? Ну может где-то типичные ошибки имеются которых я не замечаю?
Вот код:
con.query("SELECT * FROM xml_person WHERE done='0' ORDER BY id_xml_person ASC", function (err, resultFromXml_person) {
if (err) throw err;
if (resultFromXml_person.length != 0) { //если ответ не пустой
console.log("result.length: ", resultFromXml_person.length);
var x = 0;
var timer = setInterval(function () {
con.beginTransaction(function (err) {
if (err) {
throw err;
}
if (resultFromXml_person[x].iin && resultFromXml_person[x].surname) { //если имеется фамилия или ИИН
con.query("SELECT * FROM person WHERE iin='" + resultFromXml_person[x].iin + "'", function (err, resultFromPerson) { //запрос в person строки с таким иин
if (err) {
return con.rollback(function () {
throw err;
});
}
if (resultFromPerson.length == 0) { //если такой строки не существует
console.log("такой иин в person отсутствует");
con.query("INSERT INTO subject (idsubject) VALUES(NULL)", function (err, resultFromSubject) {
if (err) {
return con.rollback(function () {
throw err;
});
}
let sex = -1;
if (resultFromXml_person[x].pol === "Женский") {
sex = 0;
}
else if (resultFromXml_person[x].pol === "Мужской") {
sex = 1;
}
con.query("INSERT INTO `person` (`idperson`, `iin`, `surname`, `name`, `middlename`, `birthday`, " +
"`sex`, `change_date`) VALUES ('" + resultFromSubject.insertId + "', '" + resultFromXml_person[x].iin + "', '" + resultFromXml_person[x].surname + "', '" + resultFromXml_person[x].name +
"', '" + resultFromXml_person[x].patronymic + "', '" + resultFromXml_person[x].birthday + "', '" + sex + "', NULL)", function (err) {
if (err) {
return con.rollback(function () {
throw err;
});
}
let phone = resultFromXml_person[x].tel.split(", ")[1];
con.query("SELECT * FROM person LEFT JOIN phone ON person.idperson=phone.id_person WHERE iin='" + resultFromXml_person[x].iin + "'", function (err, resultFromPhones) {
if (err) {
return con.rollback(function () {
throw err;
});
}
con.query("UPDATE xml_person SET done='4' WHERE id_xml_person='" + resultFromXml_person[x].id_xml_person + "'", function (err, result) {
if (err) {
return con.rollback(function () {
throw err;
});
}
console.log("done=4, новая строка");
x++;
checkEnd2(x, resultFromXml_person, timer);
con.commit(function (err) {
if (err) {
return con.rollback(function () {
throw err;
});
}
});
});
});
});
})
}
else {
console.log("такой иин в person имеется");
if (resultFromXml_person[x].iin === resultFromPerson[0].iin && resultFromXml_person[x].surname === resultFromPerson[0].surname && resultFromXml_person[x].name === resultFromPerson[0].name && resultFromXml_person[x].patronymic === resultFromPerson[0].middlename && resultFromXml_person[x].birthday === resultFromPerson[0].birthday && resultFromXml_person[x].pol === resultFromPerson[0].sex) {
con.query("UPDATE xml_person SET done='1' WHERE id_xml_person='" + resultFromXml_person[x].id_xml_person + "'", function (err, result) {
if (err) {
return con.rollback(function () {
throw err;
});
}
console.log("done=1, без изменений");
x++;
checkEnd2(x, resultFromXml_person, timer);
con.commit(function (err) {
if (err) {
return con.rollback(function () {
throw err;
});
}
});
});
} else {
console.log("id_xml_person", resultFromXml_person[x].id_xml_person);
con.query("UPDATE person SET surname='" + resultFromXml_person[x].surname + "', name='" + resultFromXml_person[x].name + "', middlename='" + resultFromXml_person[x].patronymic +
"', birthday='" + resultFromXml_person[x].birthday + "', sex='" + resultFromXml_person[x].pol + "', change_date='" + moment().format("YYYY-MM-DD HH:mm:ss") + "' WHERE iin='" + resultFromXml_person[x].iin + "'", function (err) {
if (err) {
return con.rollback(function () {
throw err;
});
}
con.query("UPDATE xml_person SET done='2' WHERE id_xml_person='" + resultFromXml_person[x].id_xml_person + "'", function (err, result) {
if (err) {
return con.rollback(function () {
throw err;
});
}
console.log("done=2, обновлено");
x++;
checkEnd2(x, resultFromXml_person, timer);
con.commit(function (err) {
if (err) {
return con.rollback(function () {
throw err;
});
}
});
});
});
}
}
});
} else { ...