电子商务--订单

电子商务--订单,第1张

订单是整个电子商务的核心 整个电子商务的流程也是围绕订单的状态执行的 这篇博客主要向大家介绍订单号的生成方式

现在大型电商网站大多都有好几种下单途径 比如 通过Web网站下单 通过打电话到呼叫中心下单(CallCenter) 使用手机Wap下单 如果只采用单数据库来存储订单信息的话 其随着订单量的增加 单数据库写压力必然增大 数据库服务器就会不堪重负 所以大都会根据业务采用分库做法 如下

Web网站来源订单调用生成订单API后 存储在Web订单库 CallCenter网站调用生成订单API后 存储在CallCente订单库 Wap来源订单调用订单生成API后 存储在Wap订单库 最后需要把Web订单库 CallCenter订单库 Wap订单库等数据同步到后台订单主库中 后台订单主库是我们的核心库 存储所有订单数据 那么我们怎么才能把不同库中的订单数据同步到后台主库中 需要满足什么条件呢?电商网站中订单表大多都是以订单号做表的主键 我们必须保证各个子订单库中存储的订单号不能重复 这样才能保证可以安全的同步到后台主库中

目前几个大型电子商务网站是如何生成订单号的呢 让我们先看看订单号的格式吧 京东商城订单号格式 苏宁易购订单号格式 凡客诚品订单号格式 银泰网订单号格式

我们先来分析一下凡客诚品和银泰网的订单号生成规则 初看一下 凡客诚品和银泰网订单号都含有 这是因为这 张订单都是 年 月 号下的订单 我们总结一下 凡客的订单规则 业务编码+年的后 位+月+日+订单数 银泰网的订单号规则 年的第三位数+业务编码+年的后 位+月+日+订单数 其实现方式应该是在数据库中新建一张订单量记录表维护每天的订单量 生成订单时 根据当天的日期查询这张表的订单数量加 然后组合业务编码(比如业务编码Web= CallCenter= Wap= )即为订单号 生成订单成功后在回写数据库(需记录订单量) 这种方式在高并发下会频繁更新订单量记录表 很容易产生锁表

京东商城和苏宁易购的订单号看不出规则 我们猜想应该是 有一个全局数据库 这个数据库中只有一张订单表(Order) 表Order只有一个自增的字段Id 这个自增的字段Id就是订单号 所有生成订单的API会首先访问全局数据库的Order表获得订单号 然后再生成订单 这样就可以保证子库订单号不重复 其实现方式避免了频繁的更新 *** 作 只有Insert *** 作 性能要好很多

lishixinzhi/Article/program/net/201311/12674

SQL server中可以用sequence来实现订单号的自动生成。

例如创建如下序列:

create sequence orderSeq

as bigint --数据类型

start with 100000 --开始值

increment by 1 --增量

minvalue 1 --最小值

maxvalue 1000000--最大值

no cycle --不循环

cache 3 --设置cache大小为3

这样订单号就会从100000开始每次自增1生成。

可以利用asp代码生成,如果是数据库端的话,应该是不可能的,自动编号不可能中间,不生成那些数字就直接跳过的。我写了端代码,你看下吧,可以不使用自动编号,就搞定你说的功能。数据表ordertable,订单字段ordernum。ordernum设置成文本类型。 dim num,mydate,year,month,day,sql

mydate=date()

year=year(mydate)

month=year(mydate)

day=year(mydate)if month<10 then

month="0"&month

end ifif day<10 then

day="0"&day

end ifmydate=year&month&day sql="select ordernum form ordertable where ordernum like"&mydate&"% order by ordernum desc"

set rs=execute(sql)

if rs.eof or rs.bof then

num=mydate&"001"

else

num=right(rs("ordernum"),3)

num=cint(num)

if num=999 then

response.write "今日的订单号码,超越上限。此订单仍将有效,该订单号将记录为"&mydate&"1000,请管理员,尽快处理!"end if

num=num+1end if if num="001" thenresponse.write "订单超量,此订单将不能存储,请与管理员联系,管理员号码为:XXXXXXXX"

else num=mydate&"num"

sql="insert into ordertable set ordernum='"&num&"'"

execute(sql) if err thenresponse.write"订单保存出现错误,请重试!"err.clearend if

end if


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6799963.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存