首页 > 解决方案 > 如何计算谁先接受订单?

问题描述

有一些用户。他们可以执行命令。可以为所有用户发送订单。

当用户收到订单时,他可以在 1 分钟内接受或拒绝订单。

如果用户接受订单,我将信息存储在 MySQL 中。

id | order_id | user_id | timestamp
1    1          1         12345679
2    1          2         59589333

剩下一分钟,没有人可以接受订单。

之后,我的服务会处理所有存储的数据并计算谁先被接受订单。

问题是用户可以更快地接受订单,但是由于互联网连接或其他原因,日期会被扭曲。

有两种方法:

一(在接受时刻计算客户端的时间):

  1. 用户接受订单
  2. 获取当前时间戳
  3. 将当前时间戳发送到服务器
  4. 将当前时间戳存储在 Db 中

二(在将数据存储在 Db 中的时刻计算服务器上的时间)

  1. 用户接受订单
  2. 向服务器发送数据
  3. 获取当前时间戳
  4. 将当前时间戳存储在 Db 中

因此,不能保证按创建的时间戳对用户进行排序。而且我不能分配订单第一个用户,因为我对时间没有信心。

标签: c#mysqlalgorithmrabbitmq

解决方案


互联网连接速度慢或其他原因是用户问题。您应该只关心女巫命令更快地到达您的服务器。您可以使用它来将订单发送到您的数据库。

INSERT INTO orders (order_id , user_id, reached_time) VALUES(1, 1, NOW());

然后像这样选择它们。

SELECT id, order_id, user_id FROM orders WHERE reached_time < '2020-01-01 01-00-00' ORDER BY reached_time ASC;

Datetime '2020-01-01 01-00-00' 是截止日期,在此之后的任何订单都不会被选中。


推荐阅读