Странная проблема происходит в узле js (запрос обмена) - PullRequest
0 голосов
/ 22 июня 2019

Я создал веб-приложение, используя узел js (express) и MySQL. Это ERP-решение.

При сохранении продаж возникает проблема.

Когда на сервер одновременно отправляются 2 запроса от 2 разных систем, один из них получает правильный ответ, а другой получает ответ, аналогичный 1-му.

Допустим, 2 человека сохраняют продажу одновременно. Идентификатор продаж 1-го лица равен 10, а идентификатор 2-го - 11 *.

В ответ 1-й человек получает счет-фактуру 10, а 2-й получает детали счета-фактуры 10, в то время как он / она должен получить детали счета-фактуры 11.

Какова возможная причина этой проблемы?

Мой процесс продаж выглядит следующим образом:

  1. Когда пользователь сохраняет продажи, он возвращает идентификатор продажи .
  2. Через этот идентификатор продажи снова делается запрос на получение деталей этой продажи.

Нет проблем с сохранением данных.

Но когда я получаю информацию о продажах, все портится.

Вот маршрут продаж:

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"
                    });
                }
            }
        });
    });
};

Ответы [ 2 ]

0 голосов
/ 24 июля 2019

Я думаю, что проблема с объявлением переменной!

Когда я объявляю json = {}; в getSalesById без `var, который объявляется как глобальный var.

Это может быть проблемой. Я изменил с var json = {}; проблема не возникает до сих пор.


Спасибо, что пытались помочь, я ценю ваши усилия :).

0 голосов
/ 25 июня 2019

Есть несколько предположений.Но я не уверен.Попытался написать 'console.log' после начала функции и до 'resol ()'.

Проверьте параметры запроса и результаты.Обратите внимание - действительно ли вы обрабатываете 2 запроса с разными параметрами - действительно ли вы получаете 2 запроса (возможно, обработан 1 запрос и имеется ли какое-то кэширование) - действительно ли вы делаете запросы к БД с разными идентификаторами.- действительно ли DB выдает равные / неравные результаты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...