Chào mọi người, Đây là bài post đầu tiên nên có gì mọi người góp ý với nha.
- Mình có thiết kế 1 con chatbot telegram để sử dụng.
- Trong có co inline button như hìn sau:
- Nếu nhiều người dùng khác nhau nhất nhanh quá nó sẽ gửi nhiều request lên hệ thống.
- Mình đã sáng tạo ra giải thuật lock ở 1 thời điểm chỉ 1 xử lý của 1 người.
Issue: Vẫn có trường hợp 2 người cũng nhất 1 thời điểm bị xử lý sai.
Expert: Mong mọi người góp ý về code ạ.
// 1 phân tích callback_data
// Lấy mã đơn
var res = callback_data.match(/^BOOK_ORDER_(.+)$/i);
var code = res[1];
/////// KHOA DON
if (locks[code] == 1) {
return;
}
locks[code] = 1;
/////// END KHOA DON
// lọc tình trạng 2 bạn cùng lấy đơn
// 6 là trạng thái đơn trong box chung
var order = await Order.get(code);
if (order.stateorder_id != 6) {
locks[code] = 0;
return;
}
var shipper = await Shipper.get(nguoichat_id);
if (!shipper) {
locks[code] = 0;
return;
}
// 3 Lưu lần 1 để đơn chuyển sang trạng thái đã gửi, 2 người cùng lấy đơn
var params = {
SET: {
shipper_id : shipper.shipper_id,
state_order_shipper : "Đã gửi",
state_order_shipper_at : moment().format('YYYY-MM-DD HH:mm:ss'),
stateorder_id : 5,
},
WHERE: {
code
}
};
await Model.update('orderbill', params);
locks[code] = 0;