Я создал веб-приложение, используя узел js (express) и MySQL. Это ERP-решение.
При сохранении продаж возникает проблема.
Когда на сервер одновременно отправляются 2 запроса от 2 разных систем, один из них получает правильный ответ, а другой получает ответ, аналогичный 1-му.
Допустим, 2 человека сохраняют продажу одновременно. Идентификатор продаж 1-го лица равен 10, а идентификатор 2-го - 11 *.
В ответ 1-й человек получает счет-фактуру 10, а 2-й получает детали счета-фактуры 10, в то время как он / она должен получить детали счета-фактуры 11.
Какова возможная причина этой проблемы?
Мой процесс продаж выглядит следующим образом:
- Когда пользователь сохраняет продажи, он возвращает идентификатор продажи .
- Через этот идентификатор продажи снова делается запрос на получение деталей этой продажи.
Нет проблем с сохранением данных.
Но когда я получаю информацию о продажах, все портится.
Вот маршрут продаж:
router.route('sales/:id')
.get(async function (req, res, next) {
let json = {};
let report = new ReportObj(req.conn);
let dbs_name = req.session.main_db;
try {
json = await report.getSalesById({
dbs_name,
ids: req.params.id
});
res.send(json);
} catch (e) {
next(e);
}
});
и это функция getSalesById:
this.getSalesById = function (sendData) {
// console.log(sendData);
return new Promise(function (resolve, reject) {
json = {};
var select_header_with_date_sql = `SELECT
...
FROM sales_entry_header seh
LEFT JOIN customers c ON c.id = seh.customer_id
LEFT JOIN form_type ft On ft.id = c.form_type
LEFT JOIN state_list s ON s.id = c.state
LEFT JOIN \`${sendData.dbs_name}\`.users u ON u.id = seh.user_sold
WHERE seh.id = ?`;
conn.query(select_header_with_date_sql, [sendData.ids], function (err, result) {
if (err) {
resolve({
status: 'error',
message: 'Error',
debug: err
});
} else {
if (result.length > 0) {
json = result[0];
var details_sql = `SELECT
...
FROM sales_entry_details sed
LEFT JOIN products p ON p.\`product-id\` = sed.product_id
LEFT JOIN hsn h ON h.id = p.hsn
LEFT JOIN unit_type u ON u.id = p.\`unit-type\`
LEFT JOIN purchase_entry_details ped ON ped.id = sed.batch_no
LEFT JOIN salesman sm ON sm.id = sed.salesman
WHERE sed.sales_entry_header_id = ?`;
conn.query(details_sql, [json.sales_id], function (err, details_result) {
if (err) {
resolve({
status: 'error',
message: 'Error',
debug: err
});
} else {
json.items = details_result.map(function (obj) {
obj.available_qty = obj.unit_purchase - obj.unit_sale + +obj.unit_sale_return - obj.unit_purchase_return + +obj.qty;
obj.return_available_qty = obj.unit_sale - obj.unit_sale_return;
return obj;
});
resolve(json);
}
});
} else {
resolve({
status: "error",
message: "No sales selected"
});
}
}
});
});
};