处理webapp脱机时的销售交易

时间:2011-07-02 04:37:02

标签: javascript web-applications offlineapps

我的网络应用程序(销售点)处理多个分支机构的销售。每笔销售都有一个唯一的整数ID。分支1上的某些销售ID是 n ,然后分支2上的下一个销售是 n +1。

当分支机构失去互联网连接时,我会将销售信息保存在浏览器内部数据库中,其中销售ID是最后一个销售ID加1。连接恢复后,我将该信息发送到服务器,然后将其存储在真实数据库中。

当两个或更多分支机构松散互联网连接时,就会发生梦魇。因为当他们离线销售并且互联网重新开启时,服务器将收到两个具有相同ID的销售,这很糟糕,因为客户票已经打印过了!

我现在的计划是,将每个销售ID从分支ID和分支实际销售数量中混合。因此,分支1销售ID将是 1-1 ,而分支2的下一个销售将是 2-1 。听起来很不错,直到有两个销售点,但事实并非如此,但它不是很有前途的证据。

您认为最好的方法是什么?有没有更好的方法呢?

3 个答案:

答案 0 :(得分:1)

理想情况下,每个销售点都有自己的ID。例如,我曾经在一家国际零售连锁店工作(这里不会命名),该连锁店在全球拥有数千家分店,每个分店最多有15个销售点。每个POS都有自己的ID分配给它 - 并且在对后端系统进行身份验证时使用了此ID。

如果您的设置属于这种情况,则应使用POS ID代替分支ID。这样,如果您在同一分支中有多个POS,则将POS ID预先挂起到事务ID。

答案 1 :(得分:1)

避免单个ID上的ID冲突的唯一真正安全的方法是服务器始终分配ID。如果POS脱机,那么您可能希望分配本地和临时ID以在本地记录销售,然后当POS重新联机时,您从服务器获取真实ID并在发送事务之前将本地ID修改为真实ID 。我有一个系统曾经使用负数来表示客户端创建的ID和服务器创建ID的正数。当服务器收到否定ID时,它会将其更改为唯一创建的服务器ID并将该ID返回给客户端,以便客户端可以使用真实的事务ID更新其数据库。

如果您需要/需要全局唯一的客户定义ID,则每个POS客户端都需要服务器分配的唯一ID,该唯一ID可以是多部分复合ID的一部分。然后,每个客户端都可以维护它自己的计数器,当与它结合使用时,它的唯一客户机ID始终是全局唯一的ID。它是您的branchID概念的扩展,除了它是唯一分配给每个客户端的clientID,因此您可以在每个分支上拥有多个POS客户端。分配clientID既可以在客户端设置时手动完成,也可以通过在某些设置或初始化过程中向服务器请求唯一的clientID来更加动态地完成。

这样的技术对你来说最实用取决于你的系统比你在这里描述的要多得多,所以你要么必须根据你的知识选择,要么更多地描述你的系统如何为我们工作能够提供更多帮助。

答案 2 :(得分:0)

如您所述的复合键是解决此问题的好方法。当我需要在分布式情况下避免关键冲突时,我倾向于使用GUID。