从订单页面订单系统对商品的再次购买功能是怎么实现的?

先谈一下购物车的演变:
早期的购物车默认全选功能然后进行提交订单,但是狠多用户将购物车当成了收藏夹,只是收藏而不购买,如果每次都是全选的话,用户需要将收藏的商品手动勾选掉,体验比较不友好,所以慢慢演变成购物车会记录用户勾选了哪些商品,在用户下次进入购物车的时候只有上次勾选的商品才会默认被勾选。
购物车的异常区域,有时候用户将很早的商品加到购物车,时间久了,这件商品可能会被下架或者库存为零,导致用户不能正常下单的时候需要在购物车里面对这部分商品进行提醒,所以也就有了购物车的异常区域。
购物车的另一个功能---降价通知,当用户加入的商品有降价的时候,会进行一个提醒,这需要购物车将当时用户加入商品的价格记录下来,后面用户每次打开购物车的时候对比最新的价格
购物车之促销功能,常用的范围促销有:满减,满赠,满返等这类促销可以在商详上看到规则,但是在商详页用户基本搞不清楚目前购买的商品是否满足此促销,这个时候就需要在购物车对用户进行提醒,主流的购物车基本都有如下功能。
购物车逻辑
设计购物车首先考虑的是,需不需要登录?
在生成订单的时候,必须要登录,但是购物车这个环节,一定需要动态吗?大多数的网站是必须要登录态的。这样在购车环节就可以知道是哪一个用户加入哪一个商品进入的购物车。但是这样的体验并不是很好。如果不需要登录态,这时候会面临一个问题:没有登录态我们就不知道这个商品是哪个用户加入了。这个时候我们就需要一个叫做离线购物车的。他根据设备号来记录哪个商品加入到哪个设备的购物车,在用户加入离线物车之后真正去提交订单的环节再提示用户需要登录态。这是一种比较好的体验。支持离线购物车的话,还会面临一个问题是:离线购物车和在线购车如何合并的问题。在用户登录后我们会去判断用户这个设备下面有没有离线购车的数据。如果有离线购物车的数据,那么我们认为他之前已经离线加入购物车,我们会将离线购物车的数据和在线购物者的数据进行合并。
用户的购车数据一定是会落到数据库里的。购物车的数据库只需要落地用户和商品的关系就可以了,购物车里面会展示商品信息、促销信息、库存信息这些都不需要加到购物车的数据库。类似价格信息促销信息库存信息这些都是需要实时调用相应的系统。比如 某件产品10元,几天后降价到8元,如果把商品的价格落地到购物车数据库的话,那么用户再次打开购物车的时候他是看不到商品的最新的价格信息。
需要跟哪些外部系统进行交互?
商品:从商品系统主要是获取商品的一些基本信息。有商品的主题、商品的文描、商品的上下架状态、以及商品上的一些特殊属性的标志与标记位。有一些体验比较好的电商平台会将购物车中商品已经下架的商品置灰掉提示用户此商品目前不能进行购买。
库存:从库存系统主要是获取商品目前库存数量情况以及是从哪个仓库出货,后面拆单的时候会用到这个信息。购物车系统会进行判断目前商品的库存是否满足用户购买的数量?如果库存已经卖光会将商品制成灰色提示用户商品已经没有库存。
促销:促销是购物车中比较重要的部分,也是最复杂的部分。购物车会将目前用户选中的商品列表传给促销系统。促销系统经过一系列复杂的运算会告诉购车目前这些商品命中了哪些促销?因为一个购物车里面的商品可能有不同商家的,这里还要按照商家的纬度再进行一轮计算。算出每个商家纬度下面有哪些促销?可以说,这里是整个购物车中最复杂的一个环节。各个平台购物车做得好坏的区别主要就体现在这里。
淘宝:需要时刻跟服务器保持同步
例:手机A 添加购物车
登录后也可以查看
商品列表界面:商品订单号是唯一的
商品详情界面:根据商品的pid 向服务器请求详情界面的数据
点击购物车按钮:发送网络请求,向服务器传送数据(商品id,用户id),服务器会把商品信息存放在一个购物车数据库表里
(如果服务器接受到数据会返回一个成功的返回码,接受到返回码之后在本地做一个缓存,缓存的是购物车的信息,只是展示作用)
跳转到购物车界面:调用接口(URL),服务器会把购物车所有的信息返回回来
1.后台接口
3.购物车的商品id(还有私钥,公钥,这里就不多做介绍了)
发送给支付宝服务器(支付页面,输入密码页面,支付)
支付宝服务端会把最终信息返回到自己公司的服务器
公司的服务器会把成功或者失败的返回码返回给客户端
订单,未完成订单,已完成订单,调接口
商城购物车逻辑思路
这个是商城购物车逻辑思路,做个记录也是乐于分享!大家相互交流学习
电子商城加入购物车的设计流程
1.判断用户是否登录,如果用户登录采用Db存储商品(即采用数据库的方式存购物车中的商品),如果是用户...
电子商务网站购物车设计
购物车的实现原理
购物车相当于现实中超市的购物车,不同的是一个是实体车,一个是虚拟车而已。用户可以在购物网站的不同页面之间跳转,以选购自己喜爱的商品,点击购买时,该商品...
购物车模块系统的开发
一、购物车的需求描述和基本流程
1、需求描述
用户可以在登录状态下将商品添加到购物车
用户可以在未登录状态下将商品添加到购物车
用户可以使用购物车一起结算下单
商城项目实战35:购物车功能实现
1 需要实现
1、 实现淘淘商城的购物车功能
2 购物车功能
2.1 功能说明
1、商品加入购物车时,不是必须要求登录。京东不需要登录,淘宝需要登录。各有好处。
2、计算购物车中商品的总价。...
【SSH网上商城项目实战17】购物车基本功能的实现
上一节我们将商品的详细页面做完了,并使用了Hibernate的二级缓存加载详细页面来提高系统的性能。这节我们开始做购物车部分。
1. 添加新的表
首先我们向数据库中添加几张...
购物车功能实现
表有汇PC端购物车功能实现
加入购物车后的结算功能
购物车页面:
购物车页面html代码:
[html] view
plain copy
1.生成订单2.用户确认订单
//1.先创建eventbusevent包;2.创建MessageEvent类;3.创建PriceAndCountEvent类,用来存储价格和数量
public class MessageEvent ...
简单的&em&购物车&/em&页面和&em&逻辑&/em&实现
我们先来分析一下业务场景:1.用户没有登录使用cookie实现购物车:优点:1、实现简单
2、不需要占用服务端存储空间。缺点:1、存储容量有限
2、更换设备购车信息不能同步。2.用户已经登录把购物车商...
没有更多推荐了,习惯上图,看流程图把,下面是具体实现以后的一个流程图。
(1)点击订单详情,进入订单详情列表,展示订单的一下基本信息,在上图框内,可随机输入查询信息,查询具体订单信息。
(2)点击订单商品详情,进入具体订单,图中进入订单编号1的商品页面,可以看到具体商品信息,从数据库我们建立一张表,关联订单跟具体商品的关系。
直接上代码吧,简单粗暴,因为之前有朋友需要具体实现,我会把最重要的放在这里,因为篇幅,所以一些不太重要的就不放了,下面是OrderDaoImpl.java的具体代码,这三个方法具体就涉及到了上图三个页面的跳转。
import java.sql.SQLE
import java.util.ArrayL
import java.util.L
import org.apache.commons.dbutils.QueryR
import org.apache.commons.dbutils.handlers.BeanListH
import org.apache.commons.dbutils.handlers.ColumnListH
import com.shao.Util.C3P0U
import com.shao.dao.OrderD
import com.shao.pojo.O
public class OrderDaoImpl implements OrderDao {
public List&Order& selectOrders() throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select * from orders";
return qr.query(sql, new BeanListHandler&Order&(Order.class));
public List&Object& selectItemsById(int order_id) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select item_id from ord_item where order_id = ?";
return qr.query(sql, new ColumnListHandler(1), order_id);
public List&Order& selectByCondition(String id, String shop_id, String user_id) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select * from orders where 1=1 ";
List list = new ArrayList();
if(!"".equals(id.trim())){
int iid = Integer.parseInt(id.trim());
sql+=" and id =?"; // 不能在这写% %'1002'%
list.add(iid);// '%1002%'
if(!"".equals(shop_id.trim())){
int sid = Integer.parseInt(shop_id.trim());
sql+=" and shop_id=?";
list.add(sid);
if(!"".equals(user_id.trim())){
int uid = Integer.parseInt(user_id.trim());
sql+=" and user_id = ?";
list.add(uid);
return qr.query(sql, new BeanListHandler&Order&(Order.class), list.toArray());
(1)public List&Order& selectOrders() 该方法主要是实现对所有订单的查询,这个应该没有难度。
(2)public List&Object& selectItemsById(int order_id) 该方法具体涉及到根据订单编号,寻找商品编号,然后我们再根据商品编号,寻找具体商品信息。寻找具体商品信息我写在ItemDaoImpl.java里面了。
public Item selectItemById(int id) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select * from item where id = ?";
return qr.query(sql, new BeanHandler&Item&(Item.class), id);
(3) public List&Order& selectByCondition(String id, String shop_id, String user_id)该方法主要就是通过输入条件,进一步对订单筛选,这样我们可以快速定位到我们需要的订单信息。
其实上面的都应该好处理,在这里,我遇到了一个问题,主要在于具体商品商品信息的处理,怎么才能通过上面的轮转跳到具体商品信息呢,在这里我后来用这样的方法处理出来了!
上面是订单详情的事件处理,/servlet/FindItemsByOrderServlet?order_id=${o.id },通过把order_id的编号传给这个servlet来处理,具体FindItemsByOrderServlet代码如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
int order_id =Integer.parseInt(request.getParameter("order_id")) ;//获取order_id的参数并且转化成int类型
System.out.println("order_id = "+order_id);
OrderService os = new OrderServiceImpl();
ItemService is = new ItemServiceImpl();
List&Object& list = new ArrayList&&();
list= os.selectItemsById(order_id); //根据order_id找到对应的Item_id的集合,并放在list中
System.out.println(list.toString());
List&Item& itemList = new ArrayList&Item&();
for(int i=0;i&list.size();i++){
itemList.add(is.selectItemById((int)list.get(i))); //遍历list,根据商品编号找到具体的商品信息放在JavaBen(Item),然后存入itemList
request.getSession().setAttribute("item", itemList);
System.out.println("找到订单对应的商品信息!");
request.getRequestDispatcher("/admin/myhome/ord_itemlist.jsp").forward(request, response);
可以看到具体输出,我们通过得到订单编号1,查到在订单编号里面有2件商品,商品编号为2,3,然后放在List里面,最后遍历list 得到具体商品的信息,显示在页面中。
还有一个问题,之前写完以后,发现List一直为空,没有取到2,3的商品编号,然后我就定义到下面的数据库语句:
public List&Integer& selectItemsById(int order_id) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select item_id from ord_item where order_id = ?";
return qr.query(sql, new BeanListHandler&Integer&(Integer.class), order_id);
select item_id from ord_item where order_id = 1,通过运行这句话得到上面的结果,语句是对的,但是却一直说List 是空,那么我的问题就出在return qr.query(sql, new BeanListHandler&Integer&(Integer.class), order_id);后来查询了资料,BeanListHandler主要是存储对象的集合,而我这里只有一列值,但是我不知道为什么存储值就不行?所以我就继续找,一列数据采用的是ColumnListHandler,于是我改成了new
ColumnListHandler&Integer&(),然后eclipse开始报错The type ColumnListHa it cannot be parameterized with arguments &Integer&告诉我,里面是不能存Integer,不支持,里面还是只能放Object,最后就继续改,写成了下面这样:
public List&Object& selectItemsById(int order_id) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select item_id from ord_item where order_id = ?";
return qr.query(sql, new ColumnListHandler(1), order_id);
最后,控制器哪里也要处理,所以在servlet里面我们看到这样一句话:
for(int i=0;i&list.size();i++){
itemList.add(is.selectItemById((int)list.get(i))); //遍历list,根据商品编号找到具体的商品信息放在JavaBen(Item),然后存入itemList
我把(int)list.get(i)强制转化成Int类型,因为is.selectItemById(int shop_id);里面定义的Int 类型,到此就结束了,list里面终于出现了我预期的【2,3】集合。
问题就是这么让你意想不到,不过现在遇到问题我也不急了,主要就是一定要看错误,然后定义到具体位置,最怕就是显示台什么也不报错,我也出现了,于是我就重启服务器,然后显示台就会把错误显示出来,我们然后根据提示大概定义到错误的地方,我们可以采用我里面的System.out.print()去尝试输出,也可以Debug来一步步看,这样我们就可以快速定位问题,多做多调试,其实编程也可以很快乐,那种一点点的成就感!喜欢的可以关注,有问题,或者对上面的解决方案你有更好的,欢迎探讨,谢谢!
仿淘宝订单界面
之前是因为有客户需要这个,自己百度找了半天都木有发现雷锋,于是就自己写了一个,主要是针对订单类的展现,有需要的朋友可以去看看http://dl.vmall.com/c02taalp7a(华为网盘),另...
3-4 订单详情页
首先MiaoshaController类,因为生成订单之前要进行秒杀。其中,@RequestParam是获取表单提交的name属性中value①判断秒杀商品的库存。MiaoshaController:...
实现订单列表页面
思路:1. 实现如图1视图布局;2. 实现订单列表功能;3. 订单列表各元素绘制,严格按照如图所示效果设计;4. 实现下拉刷新和上拉加载更多,分页功能5. 列表视图用RecyclerView控件展示接...
订单页面多订单
function goodsAll(page,size){ $('tbody').empty(); var url = &{:U('Order/selectOrderAll')}&...
仿京东购物车订单页面
先来个效果图,再上代码。
为秒杀做优化,为秒杀订单加缓存package com.mydre.miaosha.public class OrderKey extends BasePrefix{ private Ord...
订单功能模块设计与实现
https://www.cnblogs.com/fengli9998/p/6417117.html在商城项目中,之前我们介绍了购物车功能模块的实现,商品加入到购物车之后,就是到购物车结算,然后显示购物...
Shop项目后台--4.所有订单的订单详情/admin/order/list.jsp
contrl+H 可以快速查找全部工程下,你所提高关键字的位置
1、在list.jsp订单详情需要弹出层插件,插件代码有表示,触发按钮,弹出的内容,关闭按钮。
AdminServlet
...
没有更多推荐了,商品订单购买进度步骤代码
相关最新源码
商品订单购买进度步骤代码,基于jQuery技术,提取后台传输到页面的数据,根据数据进行进度的变更。订单步骤包括创建订单、审核订单、生产、配送、签收。
&&&&&&&&&&&&&&&&&&&&&&&&&
源码下载地址表有汇PC端购物车功能实现
加入购物车后的结算功能
购物车页面:
购物车页面html代码:
&div class="cart_box"&
&!--购物车--&
&h1 class="main_tit"&
&span&&a onclick="DeleteClear(this,'/','0');" href="javascript:;"&清空购物车&/a&&/span&
我的购物车&strong&Shopping Cart&/strong&
&div class="cart_step"&
&li class="selected"&&span&1&/span&放进购物车&/li&
&li&&span&2&/span&填写订单信息&/li&
&li class="last"&&span&3&/span&支付/确定订单&/li&
&div class="line20"&&/div&
&table width="938" border="0" align="center" cellpadding="8" cellspacing="0" class="cart_table"&
&tbody&&tr&
&th width="64"&&/th&
&th align="left"&商品名称&/th&
&th width="110" align="center"&颜色&/th&
&th width="80" align="center"&积分&/th&
&th width="80" align="center"&单价&/th&
&th width="80" align="center"&数量&/th&
&!--&th width="80" align="center"&优惠&/th&--&
&th width="100" align="center"&金额小计&/th&
&th width="100" align="center"&积分小计&/th&
&th width="50" align="center"&操作&/th&
&td&&a target="_blank" href="/goods/show-62.html"&&img src="/upload//488793.jpg" class="img"&&/a&&/td&
&td&&a target="_blank" href="/goods/show-62.html"&韩国乐智迅时尚正品手表学生男表女表运动防水糖果色果冻表石英表&/a&&/td&
&!--颜色--&
&td align="center"&黑色&input name="goods_color" type="hidden" value="黑色"&&/td&
&!--积分--&
&td align="center"&
&!--价格--&
&td align="center"&¥2600.00&input name="goods_price" type="hidden" value="2600.00"&&/td&&!-- value=用户价格 --&
&!--数量--&
&td align="center"&
&a href="javascript:;" class="reduce" title="减一" onclick="CartComputNum(this, '/', '62', -1);"&减一&/a&
&input type="text" name="goods_quantity" class="input" style="width:30text-align:ime-mode:D" value="1" onblur="CartAmountTotal(this, '/', '62');" onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))"&
&a href="javascript:;" class="subjoin" title="加一" onclick="CartComputNum(this,'/', '62', 1);"&加一&/a&
&!--优惠--&
&!--&td align="center"&¥&label name="discount_amount"&&/label&&/td&--&
&!--金额小记--&
string转换成int
&td align="center"&&font color="#FF0000" size="2"&¥&label name="real_amount"&2600&/label&&/font&&/td&
&td align="center"&
&font color="#FF0000" size="2"&
&label name="point_count"&10&/label&
&td align="center"&&a onclick="DeleteCart(this,'/','62');" href="javascript:;"&删除&/a&&/td&
&th colspan="9" align="right"&
商品件数:1 件
商品总金额(不含运费):&font color="#FF0000" size="2"&¥2600&/font&元
总积分:&font color="#FF0000" size="2"&10分&/font&
&/tbody&&/table&
&div class="line20"&&/div&
&div class="right"&
&a class="btn" href="/index.html"&继续购物&/a&
&a class="btn btn-success marL10" href="/shopping/confirm.html"&马上去结算&/a&
&div class="clear"&&/div&
&!--/购物车--&
对照一下商品的颜色、数量等是否选择正确,如果无误可以点击马上结算按钮,进入订单信息界面,填写信息
订单信息界面:
订单信息页面html代码:
&div class="cart_box"&
&link rel="stylesheet" href="/css/validate.css"&
&script type="text/javascript" src="/scripts/jquery/jquery.form.min.js"&&/script&
&script type="text/javascript" src="/scripts/jquery/Validform_v5.3.2_min.js"&&/script&
&script type="text/javascript"&
$(function () {
//表单提交
AjaxInitForm('order_form', 'btnSubmit', 0);
&!--结算中心--&
&h1 class="main_tit"&
&span&&a href="/shopping/cart.html"&返回&/a&&/span&
确认订单信息&strong&Confirm order&/strong&
&div class="cart_step"&
&li class="item"&&span&1&/span&放进购物车&/li&
&li class="selected"&&span&2&/span&填写订单信息&/li&
&li class="last"&&span&3&/span&支付/确定订单&/li&
&div class="line20"&&/div&
&form name="order_form" id="order_form" url="/tools/submit_ajax.ashx?action=order_save"&
&h3 class="bar_tit"&1、收货信息&/h3&
&div class="form_box"&
&dt&收货人姓名:&/dt&
&dd&&input name="accept_name" id="accept_name" type="text" class="input txt wide" value="发vdxgsd" datatype="s2-20" sucmsg=" "&&span class="Validform_checktip"&*收货人姓名&/span&&/dd&
&dt&收货地址:&/dt&
&dd&&input name="address" id="address" type="text" class="input txt" value="广东省佛山市" datatype="*2-100" sucmsg=" " style="width:300"&&span class="Validform_checktip"&*收货人的详细地址&/span&&/dd&
&dt&邮政编码:&/dt&
&dd&&input name="post_code" id="post_code" type="text" class="input txt"&&span class="Validform_checktip"&所在地区的邮政编码,非必填&/span&&/dd&
&dt&手机号码:&/dt&
&dd&&input name="mobile" id="mobile" type="text" class="input txt" value="" datatype="m" sucmsg=" "&&span class="Validform_checktip"&*收货人的手机号码&/span&&/dd&
&dt&联系电话:&/dt&
&dd&&input name="telphone" id="telphone" type="text" class="input txt" value=""&&span class="Validform_checktip"&收货人的联系电话,非必填&/span&&/dd&
&div class="line20"&&/div&
&h3 class="bar_tit"&2、支付方式&/h3&
&ul class="item_box"&
&!--取得一个DataTable--&
&label&&input name="payment_id" type="radio" onclick="PaymentAmountTotal(this);" value="1"&&input name="payment_price" type="hidden" value="0.00"&货到付款
&em&手续费:0.00元&/em&&/label&
&label&&input name="payment_id" type="radio" onclick="PaymentAmountTotal(this);" value="2"&&input name="payment_price" type="hidden" value="0.00"&账户余额
&em&手续费:0.00元&/em&&/label&
&label&&input name="payment_id" type="radio" onclick="PaymentAmountTotal(this);" value="3"&&input name="payment_price" type="hidden" value="0.00"&支付宝
&em&手续费:0.00元&/em&&/label&
&label&&input name="payment_id" type="radio" onclick="PaymentAmountTotal(this);" value="4" datatype="*" sucmsg=" "&&input name="payment_price" type="hidden" value="0.00"&财付通
&em&手续费:0.00元&/em&&span class="Validform_checktip"&&/span&&/label&
&div class="line20"&&/div&
&h3 class="bar_tit"&3、配送方式&/h3&
&ul class="item_box"&
&!--取得一个DataTable--&
&label&&input name="express_id" type="radio" onclick="FreightAmountTotal(this);" value="1"&&input name="express_price" type="hidden" value="20.00"&顺丰快递
&em&费用:20.00元&/em&&/label&
&label&&input name="express_id" type="radio" onclick="FreightAmountTotal(this);" value="2" datatype="*" sucmsg=" "&&input name="express_price" type="hidden" value="14.00"&韵达快递
&em&费用:14.00元&/em&&span class="Validform_checktip"&&/span&&/label&
&div class="line20"&&/div&
&h3 class="bar_tit"&4、商品清单&/h3&
&table width="938" border="0" align="center" cellpadding="8" cellspacing="0" class="cart_table"&
&tbody&&tr&
&th width="64"&&/th&
&th align="left"&商品名称&/th&
&th width="110" align="center"&颜色&/th&
&th width="80" align="center"&积分&/th&
&th width="80" align="center"&单价&/th&
&th width="80" align="center"&数量&/th&
&th width="80" align="center"&优惠&/th&
&th width="100" align="center"&金额小计&/th&
&th width="100" align="center"&积分小计&/th&
&td&&a target="_blank" href="/goods/show-63.html"&&img src="/upload//321122.jpg" class="img"&&/a&&/td&
&td&&a target="_blank" href="/goods/show-63.html"&卡帝仕正品超薄运动手表防水手表户外手表大表盘男表时装表&/a&&/td&
&!--颜色--&
&td align="center"&&input name="goods_color" type="hidden" value=""&&/td&
&td align="center"&
&td align="center"&¥5500.00&input name="goods_price" type="hidden" value="5500.00"&&/td&
&td align="center"&1&/td&
&td align="center"&¥&label name="discount_amount"&5500&/label&&/td&
&td align="center"&&font color="#FF0000" size="2"&¥&label name="real_amount"&5500&/label&&/font&&/td&
&td align="center"&
&font color="#FF0000" size="2"&
&label name="point_count"&10&/label&
&td&&input id="car_id" name="car_id" type="hidden" value="63"&&/td&
&/tbody&&/table&
&div class="line20"&&/div&
&h3 class="bar_tit"&5、结算信息&/h3&
&div class="left"&
&h4&订单留言&span&字数控制在100个字符内&/span&&/h4&
&textarea name="message" class="input" style="width:250height:35"&&/textarea&
&div class="right" style="text-align:line-height:40"&
商品件数:&font color="#FF0000"&1&/font& 件
总积分:&font color="#FF0000"&10&/font& 分
商品金额:&font color="#FF0000"&¥&label id="goods_amount"&5500&/label&&/font&
运费:&font color="#FF0000"&¥&label id="express_fee"&0.00&/label&&/font&
支付手续费:&font color="#FF0000"&¥&label id="payment_fee"&0.00&/label&&/font&
&b class="font18"&应付总金额:&font color="#FF0000"&¥&label id="order_amount"&5500&/label&&/font&&/b&
&div class="line20"&&/div&
&div class="right"&
&a class="btn" href="/shopping/cart.html"&返回修改&/a&
&input id="btnSubmit" name="btnSubmit" type="submit" value="确认提交" class="btn btn-success marL10"&
&div class="clear"&&/div&
&!--/结算中心--&
填写好必要的信息(如:收货人姓名、地址、手机号码、快递、付款方式等),点击确认提交按钮进入支付界面;
支付界面:
支付页面html代码:
&div class="cart_box"&
&h1 class="main_tit"&
支付中心&strong&Payment&/strong&
&!--提交支付--&
&form id="pay_form" name="pay_form" method="post" action="/api/payment/balance/index.aspx" target="_blank"&
&input id="pay_order_no" name="pay_order_no" type="hidden" value="b48"&
&!--hidden--&
&input id="pay_order_amount" name="pay_order_amount" type="hidden" value="2614.00"&
&input id="pay_user_name" name="pay_user_name" type="hidden" value="admin00"&
&div class="cart_step"&
&li&&span&1&/span&放进购物车&/li&
&li class="item"&&span&2&/span&填写订单信息&/li&
&li class="last selected"&&span&3&/span&支付/确定订单&/li&
&div class="form_box"&
&dt&订单号:&/dt&
&dd&b48&/dd&
&dt&收货人姓名:&/dt&
&dd&发vdxgsd&/dd&
&dt&送货地址:&/dt&
&dd&广东省佛山市&/dd&
&dt&手机号码:&/dt&
&dt&固定电话:&/dt&
&dt&备注留言:&/dt&
&dd&都很健康&/dd&
&dt&支付金额:&/dt&
&dd&2614.00&/dd&
&dt&支付方式:&/dt&
&dd&账户余额&/dd&
&dd&&input id="btnSubmit" name="btnSubmit" type="submit" class="btn_submit" value="确认支付"&&/dd&
&input id="pay_subject" name="pay_subject" type="hidden" value="购买商品"&
&!--提交支付--&
&div class="clear"&&/div&
在确认信息无误后,点击确认支付按钮;如果正常,就会提示支付成功
成功提示:
提示html代码:
&div class="cart_box"&
&h1 class="main_tit"&
支付中心&strong&Payment&/strong&
&!--支付成功--&
&div class="msg_tips"&
&div class="ico"&&/div&
&div class="msg"&
&strong&支付成功啦!&/strong&
&p&恭喜您,您的支付已经成功!&/p&
&p&您可以点击这里进入&a href="/user/center/index.html"&会员中心&/a&查看订单状态!&/p&
&p&如有其它问题,请立即与我们客服人员联系。&/p&
&!--支付成功--&
&div class="clear"&&/div&
当然也可以在商品介绍页面点击立刻购买按钮,从而进入填写订单信息页面:(步骤同上)
商品介绍页html代码:
&dl class="head green"&
&dt&购物商城&/dt&
&span&当前位置:&a href="&%linkurl("index","")%&"&首页 &/a&&&a href="&%linkurl("goods","")%&"&购物商城&/a&{category_nav}&/span&
&div class="line20"&
&!--商品图片--&
&div class="left294"&
&!--幻灯片开始--&
&div class="pictureDIV"&
&div id="preview" class="spec-preview"&
&span class="jqzoom"&
&img /&&/span&
&!--缩图开始--&
&div class="spec-scroll"&
&a class="prev"&&&/a& &a class="next"&&&/a&
&div class="items"&
&%if(model.albums!=null)%&
&%foreach(DTcms.Model.goods_albums modelt in model.albums)%&
&img bimg="{modelt.original_path}" src="{modelt.thumb_path}" onmousemove="preview(this);" /&&/li&
&%/foreach%&
&!--缩图结束--&
&!--幻灯片结束--&
&!--/商品图片--&
&!--商品属性--&
&div class="pro-attr right356"&
{model.title}&/h1&
&div class="pro-items"&
&dt&商品货号:&/dt&
{model.goods_no}
&dt&销售价格:&/dt&
&dd&&b class="red"&¥{model.sell_price}&/b&&/dd&
&dt&颜色选择:&/dt&
&%if(yanse!=null)%&
&%for(int i=0;i&yanse.Li++)%&
&a id="&%=str[i]%&" href="javascript:void()" style="border: 1px solid #CCCCCC; margin-top:10"
onclick="selected(this.id);"&
&b class="green" style="font-family:宋体; font-size:8;"&&%=yanse[i]%&&/b&
&dd&&b class="red"&抱歉,该商品没有颜色选择&/b&&/dd&
var count = 0;
function selected(id) {
if (count != id) {
$('#goods_color').val(id);
var kk = document.getElementById(id);
kk.style.border = "2px solid red";
if (parseInt(count) != 0) {
var hh = document.getElementById(count);
hh.style.border = "1px solid #CCCCCC";
&dt&会员价格:&/dt&
&%set decimal user_price=get_user_goods_price(model.id)%&
&%if(user_price&-1)%&
&b class="red"&¥{user_price}&/b&
&dt&上架时间:&/dt&
{model.add_time}&/dd&
&div class="pro-btns"&
&div class="input-box"&
购买数量:&input name="goods_id" id="goods_id" type="hidden" value="{model.id}" /&&input
&input name="goods_color" id="goods_color" type="hidden" value="" /&
&input type="text" name="goods_quantity" id="goods_quantity" value="1" class="txt" style="ime-mode: disabled" /&
&div class="btn-box"&
&%if({model.stock_quantity}&0)%&
&a href="javascript:void(0);" class="add" onclick="CartAdd(this, '{config.webpath}', 0, '&%linkurl("shopping","cart")%&');"&
加入购物车&/a& &a href="javascript:void(0);" class="buy" onclick="CartAdd(this, '{config.webpath}', 1, '&%linkurl("shopping","confirm")%&');"&
立即购买&/a&
&a title="该商品供货紧张,无法加入购物车" class="add-over"&加入购物车&/a& &a title="该商品供货紧张,无法立即购买" class="buy-over"&
立即购买&/a&
&div class="line10"&
&!--分享--&
&%template src="_share2_js.html"%&
&!--/分享--&
&!--/商品属性--&
购物车的结算功能的表和表的关系
购物车商品结算涉及到的表有:订单表(dt_orders)、订单商品表(dt_order_goods)、购物车表(dt_shoppingCar)、用户表(dt_users)
订单表的字段有:订单id、订单号、交易号担保支付用到、用户ID、用户名、支付方式、支付手续费、支付状态1未支付2已支付、支付时间、快递ID、快递单号、物流费用、发货状态1未发货2已发货、发货时间、收货人姓名、邮政编码、联系电话、手机、所属省市区、收货地址、订单留言、订单备注/评估描述情况、应付商品总金额、实付商品总金额
交易号担保支付用到
payment_id
payment_fee
支付手续费
payment_status
支付状态1未支付2已支付
payment_time
express_id
express_no
express_fee
express_status
发货状态1未发货2已发货
express_time
accept_name
收货人姓名
所属省市区
订单备注/评估描述情况
payable_amount
应付商品总金额
real_amount
实付商品总金额
order_amount
订单总金额
订单商品表的字段有:自增id、订单id、商品id、商品名称、商品价格、实际价格、数量、颜色、积分
goods_title
goods_price
real_price
用户表的字段有:用户id、用户组id、用户名、密码、6位随机字符串,加密用到、电子邮箱、用户昵称、头像、性别、生日、联系电话、手机号码、QQ号码、联系地址、安全问题、问题答案、预存款、用户积分、经验值、用户状态、注册时间、注册IP、经度、纬度、城市、介绍、执照照片、场地照片、身份证号
nvarchar(100)
nvarchar(100)
nvarchar(20)
6位随机字符串加密用到
nvarchar(50)
nvarchar(100)
nvarchar(255)
nvarchar(20)
nvarchar(50)
nvarchar(20)
nvarchar(30)
nvarchar(255)
safe_question
nvarchar(255)
safe_answer
nvarchar(255)
decimal(9, 2)
nvarchar(30)
nvarchar(100)
nvarchar(100)
nvarchar(100)
license_img
nvarchar(255)
nvarchar(255)
shenfenzheng
nvarchar(255)
物流快递表的字段有:自增id、快递名称、物流编码、配送费用、快递网址、备注说明、排序、是否不显示
express_code
express_fee
是否不显示
功能模块的具体实现:这个方式是利用dtcms3.0的二次开发,更多请浏览dtcms官方网站:http://www.dtcms.net/news/show/97.aspx
购物车页面:‘马上结算’按钮
&a class="btn btn-success marL10" href="&%linkurl("shopping","confirm")%&"&马上去结算&/a&马上结算按钮的作用是跳转页面如上;
与form表单相对应的方法:
#region 保存用户订单OK=============可以了,把cooke换过来了================
private void order_save(HttpContext context)
//获得传参信息
int payment_id = DTRequest.GetFormInt("payment_id");
int express_id = DTRequest.GetFormInt("express_id");
string accept_name = Utils.ToHtml(DTRequest.GetFormString("accept_name"));
string post_code = Utils.ToHtml(DTRequest.GetFormString("post_code"));
string telphone = Utils.ToHtml(DTRequest.GetFormString("telphone"));
string mobile = Utils.ToHtml(DTRequest.GetFormString("mobile"));
string address = Utils.ToHtml(DTRequest.GetFormString("address"));
string message = Utils.ToHtml(DTRequest.GetFormString("message"));
//获取订单配置信息
Model.orderconfig orderConfig = new BLL.orderconfig().loadConfig();
//检查物流方式
if (express_id == 0)
context.Response.Write("{\"status\":0, \"msg\":\"对不起,请选择配送方式!\"}");
Model.express expModel = new BLL.express().GetModel(express_id);
if (expModel == null)
context.Response.Write("{\"status\":0, \"msg\":\"对不起,配送方式不存在或已删除!\"}");
//检查支付方式
if (payment_id == 0)
context.Response.Write("{\"status\":0, \"msg\":\"对不起,请选择支付方式!\"}");
Model.payment payModel = new BLL.payment().GetModel(payment_id);
if (payModel == null)
context.Response.Write("{\"status\":0, \"msg\":\"对不起,支付方式不存在或已删除!\"}");
//检查收货人
if (string.IsNullOrEmpty(accept_name))
context.Response.Write("{\"status\":0, \"msg\":\"对不起,请输入收货人姓名!\"}");
//检查手机和电话
if (string.IsNullOrEmpty(telphone) && string.IsNullOrEmpty(mobile))
context.Response.Write("{\"status\":0, \"msg\":\"对不起,请输入收货人联系电话或手机!\"}");
//检查地址
if (string.IsNullOrEmpty(address))
context.Response.Write("{\"status\":0, \"msg\":\"对不起,请输入详细的收货地址!\"}");
//如果开启匿名购物则不检查会员是否登录
int user_id = 0;
int user_group_id = 0;
string user_name = string.E
//检查用户是否登录
Model.users userModel = new BasePage().GetUserInfo();
if (userModel != null)
user_id = userModel.
user_group_id = userModel.group_
user_name = userModel.user_
bool kkk = new BLL.shoppingcar().updateQuantity(user_id);
if (orderConfig.anonymous == 0 && userModel == null)
context.Response.Write("{\"status\":0, \"msg\":\"对不起,用户尚未登录或已超时!\"}");
//检查购物车商品
//IList&Model.cart_items& iList = DTcms.Web.UI.ShopCart.GetList(user_group_id);
DataTable data = new BLL.shoppingcar().getList(user_id).Tables[0];
//查询购物车
if (data.Rows.Count & 0)
context.Response.Write("{\"status\":0, \"msg\":\"对不起,购物车为空,无法结算!\"}");
//统计购物车
Model.car_total carModel = new Model.car_total();
BLL.shoppingcar carBll = new BLL.shoppingcar();
string str = carBll.get_quantity(user_id);
string[] ss = str.Split(';');//用;进行分割
//判断数量、积分、金额判断是否为空,如果为空整型的转化就会出错
if (Convert.ToInt32(ss[0]) & 0)
carModel.total_quantity = Convert.ToInt32(ss[0]);
//查询购物车商品件数
if (Convert.ToInt32(ss[1]) & 0)
carModel.real_amount = Convert.ToInt32(ss[1]);
//查询购物车商品总金额
carModel.payable_amount = Convert.ToInt32(ss[1]);
//查询购物车商品总金额
if (Convert.ToInt32(ss[2]) & 0)
carModel.total_point = Convert.ToInt32(ss[2]);
//查询购物车商品总积分
//保存订单=======================================================================
Model.orders model = new Model.orders();
model.order_no = "B" + Utils.GetOrderNumber(); //订单号B开头为商品订单
model.user_id = user_
model.user_name = user_
model.payment_id = payment_
//支付方式id
model.express_id = express_
model.accept_name = accept_ //收货人
model.post_code = post_
model.telphone =
model.mobile =
//手机号码
model.address =
model.message =
model.payable_amount = carModel.payable_
model.real_amount = carModel.real_
//实付金额
model.express_status = 1;
model.express_fee = expModel.express_ //物流费用
//提交订单后,就修改的数据库购物车表的有效否,不让以购买的商品显示,自己修改的
Model.shoppingcar carmodel = new Model.shoppingcar();
carmodel.user_id = userModel.
BLL.shoppingcar car = new BLL.shoppingcar();
bool bi = car.submitDelete(carmodel);
//如果是先款后货的话
if (payModel.type == 1)
model.payment_status = 1; //标记未付款
if (payModel.poundage_type == 1) //百分比
model.payment_fee = model.real_amount * payModel.poundage_amount / 100;
else //固定金额
model.payment_fee = payModel.poundage_
//订单总金额=实付商品金额+运费+支付手续费
model.order_amount = model.real_amount + model.express_fee + model.payment_
//购物积分,可为负数
model.point = carModel.total_
model.add_time = DateTime.N
//商品详细列表
List&Model.order_goods& gls = new List&Model.order_goods&();
for (int i = 0; i & data.Rows.C i++)
//对购物车内的商品进行数量金额积分的计算,这里的数量金额应该不用进行判断了,出错再判断吧
int spID=Convert.ToInt32(data.Rows[i]["goods_id"]);
string title = data.Rows[i]["title"].ToString();
//商品名称
decimal price = Convert.ToDecimal(data.Rows[i]["sell_price"]);
int quantity = Convert.ToInt32(data.Rows[i]["quantity"]);
string color = data.Rows[i]["color"].ToString();
int point = Convert.ToInt32(data.Rows[i]["point"]);
gls.Add(new Model.order_goods { goods_id = spID, goods_title = title, goods_price = price, real_price = price, quantity = quantity,color = color, point = point });
//foreach (Model.cart_items item in data.Rows)
gls.Add(new Model.order_goods { goods_id = item.id, goods_title = item.title, goods_price = item.price, real_price = item.user_price, quantity = item.quantity, point = item.point });
model.order_goods =
int result = new BLL.orders().Add(model);
//保存订单
if (result & 1)
context.Response.Write("{\"status\":0, \"msg\":\"订单保存过程中发生错误,请重新提交!\"}");
//扣除积分
if (model.point & 0)
new BLL.user_point_log().Add(model.user_id, model.user_name, model.point, "积分换购,订单号:" + model.order_no, false);
//清空购物车
//DTcms.Web.UI.ShopCart.Clear("0");
//提交成功,返回URL
context.Response.Write("{\"status\":1, \"url\":\"" + new Web.UI.BasePage().linkurl("payment", "confirm", model.order_no) + "\", \"msg\":\"恭喜您,订单已成功提交!\"}");
#endregion此过程用调用的BLL逻辑层涉及到的方法:
快递BLL(payment.cs)层涉及到的方法:
/// &summary&
/// 得到一个对象实体
/// &/summary&
public DTcms.Model.express GetModel(int id)
return dal.GetModel(id);
}与快递BLL对应的DAL方法:
/// &summary&
/// 得到一个对象实体
/// &/summary&
public Model.express GetModel(int id)
StringBuilder strSql = new StringBuilder();
strSql.Append("select
top 1 id,title,express_code,express_fee,website,remark,sort_id,is_lock from " + databaseprefix + "express ");
strSql.Append(" where id=@id");
SqlParameter[] parameters = {
new SqlParameter("@id", SqlDbType.Int,4)};
parameters[0].Value =
Model.express model = new Model.express();
DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
if (ds.Tables[0].Rows.Count & 0)
if (ds.Tables[0].Rows[0]["id"].ToString() != "")
model.id = int.Parse(ds.Tables[0].Rows[0]["id"].ToString());
model.title = ds.Tables[0].Rows[0]["title"].ToString();
model.express_code = ds.Tables[0].Rows[0]["express_code"].ToString();
if (ds.Tables[0].Rows[0]["express_fee"].ToString() != "")
model.express_fee = decimal.Parse(ds.Tables[0].Rows[0]["express_fee"].ToString());
model.website = ds.Tables[0].Rows[0]["website"].ToString();
model.remark = ds.Tables[0].Rows[0]["remark"].ToString();
if (ds.Tables[0].Rows[0]["sort_id"].ToString() != "")
model.sort_id = int.Parse(ds.Tables[0].Rows[0]["sort_id"].ToString());
if (ds.Tables[0].Rows[0]["is_lock"].ToString() != "")
model.is_lock = int.Parse(ds.Tables[0].Rows[0]["is_lock"].ToString());
支付方式BLL(payment.cs)涉及到的方法:
/// &summary&
/// 得到一个对象实体
/// &/summary&
public Model.payment GetModel(int id)
return dal.GetModel(id);
与支付方式BLL对应的DAL方法:
/// &summary&
/// 得到一个对象实体
/// &/summary&
public Model.payment GetModel(int id)
StringBuilder strSql = new StringBuilder();
strSql.Append("select
top 1 id,title,img_url,remark,type,poundage_type,poundage_amount,sort_id,is_lock,api_path from " + databaseprefix + "payment ");
strSql.Append(" where id=@id");
SqlParameter[] parameters = {
new SqlParameter("@id", SqlDbType.Int,4)};
parameters[0].Value =
Model.payment model = new Model.payment();
DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
if (ds.Tables[0].Rows.Count & 0)
if (ds.Tables[0].Rows[0]["id"].ToString() != "")
model.id = int.Parse(ds.Tables[0].Rows[0]["id"].ToString());
model.title = ds.Tables[0].Rows[0]["title"].ToString();
model.img_url = ds.Tables[0].Rows[0]["img_url"].ToString();
model.remark = ds.Tables[0].Rows[0]["remark"].ToString();
if (ds.Tables[0].Rows[0]["type"].ToString() != "")
model.type = int.Parse(ds.Tables[0].Rows[0]["type"].ToString());
if (ds.Tables[0].Rows[0]["poundage_type"].ToString() != "")
model.poundage_type = int.Parse(ds.Tables[0].Rows[0]["poundage_type"].ToString());
if (ds.Tables[0].Rows[0]["poundage_amount"].ToString() != "")
model.poundage_amount = decimal.Parse(ds.Tables[0].Rows[0]["poundage_amount"].ToString());
if (ds.Tables[0].Rows[0]["sort_id"].ToString() != "")
model.sort_id = int.Parse(ds.Tables[0].Rows[0]["sort_id"].ToString());
if (ds.Tables[0].Rows[0]["is_lock"].ToString() != "")
model.is_lock = int.Parse(ds.Tables[0].Rows[0]["is_lock"].ToString());
model.api_path = ds.Tables[0].Rows[0]["api_path"].ToString();
购物车BLL(shoppingcar.cs)涉及到的方法:
/// &summary&
/// 提交购物车订单后,修改购物车表的有效否
/// &/summary&
/// &param name="model"&&/param&
/// &returns&&/returns&
public bool submitDelete(Model.shoppingcar model)
int id = 0;
//购物车id
int k = 0;
DataTable dt = getList(model.user_id).Tables[0];
for (int i = 0; i & dt.Rows.C i++)
//对购物车内的商品进行数量金额积分的计算
id = Convert.ToInt32(dt.Rows[i]["id"]);
model.id =
if (Delete(model))
if (k & 0)
/// &summary&
/// &/summary&
/// &param name="user_id"&&/param&
/// &returns&&/returns&
public DataSet getList(int user_id)
//get_quantity(user_id);
//DataTable dt = dal.getList(user_id).Tables[0];
return dal.getList(user_id);
/// &summary&
/// 查询购物车的商品数量、积分、金额++
/// &/summary&
/// &param name="user_id"&&/param&
/// &returns&&/returns&
public string get_quantity(int user_id)
DataTable dt = new DataTable();
dt=dal.get_quantity(user_id).Tables[0];
int quantity = 0;
int sell_price = 0;
int point = 0;
for (int i = 0; i & dt.Rows.C i++)
//对购物车内的商品进行数量金额积分的计算
if (dt.Rows[i]["quantity"] != Convert.DBNull)
//如果dt.Rows[i]["quantity"]为空的话就转换不到整形,所以这里用Convert.DBNull进行判断
quantity += Convert.ToInt32(dt.Rows[i]["quantity"]);
if (dt.Rows[i]["sell_price"] != Convert.DBNull && dt.Rows[i]["quantity"] != Convert.DBNull)
sell_price += Convert.ToInt32(dt.Rows[i]["sell_price"]) * Convert.ToInt32(dt.Rows[i]["quantity"]);
if (dt.Rows[i]["point"] != Convert.DBNull && dt.Rows[i]["quantity"] != Convert.DBNull)
point += Convert.ToInt32(dt.Rows[i]["point"]) *Convert.ToInt32(dt.Rows[i]["quantity"]);
string str = "";
str = quantity + ";" + sell_price + ";" +
/// &summary&
/// 这个方法用于保存订单的时候,修改商品的数量
/// &/summary&
/// &param name="user_id"&&/param&
/// &returns&&/returns&
public bool updateQuantity(int user_id)
DataTable dt = new DataTable();
dt = dal.getList(user_id).Tables[0];
int quantity = 0;
for (int i = 0; i & dt.Rows.C i++)
//进行遍历修改商品数量
quantity = Convert.ToInt32(dt.Rows[i]["quantity"]);
//获取每一行的数量
int goods_id = Convert.ToInt32(dt.Rows[i]["goods_id"]);
BLL.goods goods = new goods();
int goods_quantity = Convert.ToInt32(goods.GetQuantity(goods_id));
if (goods_quantity &=quantity)
goods_quantity = goods_quantity -
//数量运算
string str = "stock_quantity=" + goods_
goods.UpdateField(goods_id, str);
/// &summary&
/// &/summary&
/// &param name="model"&&/param&
/// &returns&&/returns&
public bool Delete(Model.shoppingcar model)
return dal.Delete(model);
与购物车BLL对应的DAL方法:
/// &summary&
/// 删除购物车,一行数据
/// &/summary&
/// &param name="model"&&/param&
/// &returns&&/returns&
public bool Delete(Model.shoppingcar model)
StringBuilder strSql = new StringBuilder();
strSql.Append("update " + databaseprefix + "shoppingCar set youxiaofou=@youxiaofou where id=@id");
SqlParameter[] parameters = {
new SqlParameter("@id", SqlDbType.Int,4),
new SqlParameter("@youxiaofou",SqlDbType.Bit)
parameters[0].Value = model.
parameters[1].Value =
int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
if (rows & 0)
/// &summary&
/// 查询购物车
/// &/summary&
/// &param name="user_id"&根据当前‘用户ID’来查询该用户的购物车&/param&
/// &returns&&/returns&
public DataSet getList(int user_id)
StringBuilder strSql = new StringBuilder();
strSql.Append("select a.*,b.sell_price,b.title,b.img_url,b.point FROM " + databaseprefix + "shoppingCar a left join dt_goods b on a.goods_id=b.id");
strSql.Append(" where user_id=" + user_id + " and youxiaofou=1");
strSql.Append(" order by a.id desc");
return DbHelperSQL.Query(strSql.ToString());
/// &summary&
/// 返回购物车商品数量、价格、积分总数
/// &/summary&
/// &param name="user_id"&根据用户ID来查询&/param&
/// &returns&&/returns&
public DataSet get_quantity(int user_id)
StringBuilder strSql = new StringBuilder();
strSql.Append("select a.quantity,b.sell_price,b.point FROM " + databaseprefix + "shoppingCar a left join dt_goods b on a.goods_id=b.id");
strSql.Append(" where user_id=" + user_id + " and youxiaofou=1");
return DbHelperSQL.Query(strSql.ToString());
另外购物车BLL(shoppingcar.cs)涉及到了商品BLL(goods.cs)里面的方法BLL里面的方法:
/// &summary&
/// 修改一列数据
/// &/summary&
public void UpdateField(int id, string strValue)
dal.UpdateField(id, strValue);
DAL的方法:
/// &summary&
/// 修改一列数据
/// &/summary&
public void UpdateField(int id, string strValue)
StringBuilder strSql = new StringBuilder();
strSql.Append("update " + databaseprefix + "goods set " + strValue);
strSql.Append(" where id=" + id);
DbHelperSQL.ExecuteSql(strSql.ToString());
}订单信息BLL(orders.cs)涉及到的方法:
/// &summary&
/// 增加一条数据+++
/// &/summary&
public int Add(Model.orders model)
return dal.Add(model);
与订单信息BLL对应的DAL方法:
/// &summary&
/// 增加一条数据,及其子表数据
/// &/summary&
public int Add(Model.orders model)
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into " + databaseprefix + "orders(");
strSql.Append("order_no,trade_no,user_id,user_name,payment_id,payment_fee,payment_status,payment_time,express_id,express_no,express_fee,express_status,express_time,accept_name,post_code,telphone,mobile,area,address,message,remark,payable_amount,real_amount,order_amount,point,status,add_time,confirm_time,complete_time)");
strSql.Append(" values (");
strSql.Append("@order_no,@trade_no,@user_id,@user_name,@payment_id,@payment_fee,@payment_status,@payment_time,@express_id,@express_no,@express_fee,@express_status,@express_time,@accept_name,@post_code,@telphone,@mobile,@area,@address,@message,@remark,@payable_amount,@real_amount,@order_amount,@point,@status,@add_time,@confirm_time,@complete_time)");
strSql.Append(";set @ReturnValue= @@IDENTITY");
SqlParameter[] parameters = {
new SqlParameter("@order_no", SqlDbType.NVarChar,100),
new SqlParameter("@trade_no", SqlDbType.NVarChar,100),
new SqlParameter("@user_id", SqlDbType.Int,4),
new SqlParameter("@user_name", SqlDbType.NVarChar,100),
new SqlParameter("@payment_id", SqlDbType.Int,4),
new SqlParameter("@payment_fee", SqlDbType.Decimal,5),
new SqlParameter("@payment_status", SqlDbType.TinyInt,1),
new SqlParameter("@payment_time", SqlDbType.DateTime),
new SqlParameter("@express_id", SqlDbType.Int,4),
new SqlParameter("@express_no", SqlDbType.NVarChar,100),
new SqlParameter("@express_fee", SqlDbType.Decimal,5),
new SqlParameter("@express_status", SqlDbType.TinyInt,1),
new SqlParameter("@express_time", SqlDbType.DateTime),
new SqlParameter("@accept_name", SqlDbType.NVarChar,50),
new SqlParameter("@post_code", SqlDbType.NVarChar,20),
new SqlParameter("@telphone", SqlDbType.NVarChar,30),
new SqlParameter("@mobile", SqlDbType.NVarChar,20),
new SqlParameter("@area", SqlDbType.NVarChar,100),
new SqlParameter("@address", SqlDbType.NVarChar,500),
new SqlParameter("@message", SqlDbType.NVarChar,500),
new SqlParameter("@remark", SqlDbType.NVarChar,500),
new SqlParameter("@payable_amount", SqlDbType.Decimal,5),
new SqlParameter("@real_amount", SqlDbType.Decimal,5),
new SqlParameter("@order_amount", SqlDbType.Decimal,5),
new SqlParameter("@point", SqlDbType.Int,4),
new SqlParameter("@status", SqlDbType.TinyInt,1),
new SqlParameter("@add_time", SqlDbType.DateTime),
new SqlParameter("@confirm_time", SqlDbType.DateTime),
new SqlParameter("@complete_time", SqlDbType.DateTime),
new SqlParameter("@ReturnValue",SqlDbType.Int)};
parameters[0].Value = model.order_
parameters[1].Value = model.trade_
parameters[2].Value = model.user_
parameters[3].Value = model.user_
parameters[4].Value = model.payment_
parameters[5].Value = model.payment_
parameters[6].Value = model.payment_
parameters[7].Value = model.payment_
parameters[8].Value = model.express_
parameters[9].Value = model.express_
parameters[10].Value = model.express_
parameters[11].Value = model.express_
parameters[12].Value = model.express_
parameters[13].Value = model.accept_
parameters[14].Value = model.post_
parameters[15].Value = model.
parameters[16].Value = model.
parameters[17].Value = model.
parameters[18].Value = model.
parameters[19].Value = model.
parameters[20].Value = model.
parameters[21].Value = model.payable_
parameters[22].Value = model.real_
parameters[23].Value = model.order_
parameters[24].Value = model.
parameters[25].Value = model.
parameters[26].Value = model.add_
parameters[27].Value = model.confirm_
parameters[28].Value = model.complete_
parameters[29].Direction = ParameterDirection.O
List&CommandInfo& sqllist = new List&CommandInfo&();
CommandInfo cmd = new CommandInfo(strSql.ToString(), parameters);
sqllist.Add(cmd);
//订单商品列表
if (model.order_goods != null)
StringBuilder strSql2;
foreach (Model.order_goods models in model.order_goods)
strSql2 = new StringBuilder();
strSql2.Append("insert into " + databaseprefix + "order_goods(");
strSql2.Append("order_id,goods_id,goods_title,goods_price,real_price,quantity,color,point)");
strSql2.Append(" values (");
strSql2.Append("@order_id,@goods_id,@goods_title,@goods_price,@real_price,@quantity,@color,@point)");
SqlParameter[] parameters2 = {
new SqlParameter("@order_id", SqlDbType.Int,4),
new SqlParameter("@goods_id", SqlDbType.Int,4),
new SqlParameter("@goods_title", SqlDbType.NVarChar,100),
new SqlParameter("@goods_price", SqlDbType.Decimal,5),
new SqlParameter("@real_price", SqlDbType.Decimal,5),
new SqlParameter("@quantity", SqlDbType.Int,4),
new SqlParameter("@color", SqlDbType.NVarChar,150),
new SqlParameter("@point", SqlDbType.Int,4)};
parameters2[0].Direction = ParameterDirection.InputO
parameters2[1].Value = models.goods_
parameters2[2].Value = models.goods_
parameters2[3].Value = models.goods_
parameters2[4].Value = models.real_
parameters2[5].Value = models.
parameters2[6].Value = models.
parameters2[7].Value = models.
cmd = new CommandInfo(strSql2.ToString(), parameters2);
sqllist.Add(cmd);
DbHelperSQL.ExecuteSqlTranWithIndentity(sqllist);
return (int)parameters[29].V
仅供学习,禁止商业用途
实现购物车页面结算功能
html ng-app=&myApp&&
meta charset=&utf-8&&
title&实现购物车结算功能title&
商城项目实战35:购物车功能实现
1 需要实现
1、 实现淘淘商城的购物车功能
2 购物车功能
2.1 功能说明
1、商品加入购物车时,不是必须要求登录。京东不需要登录,淘宝需要登录。各有好处。
2、计算购物车中商品的总价。...
JS&em&购物车结算&/em&代码 立即下载
上传者: qq_ 时间:
综合评分: 0 积分/C币:3
移动端购物车自动&em&结算html&/em&5代码 立即下载
上传者: shgy123...
JS原生代码实现&em&购物车&/em&添加商品、删除商品等操作的&em&结算&/em&
&em&购物车结算&/em&jquery 5C币 2下载
jquery购物车特效 3C币 187下载
jquery 实现购物车飞入特效 5C币 10下载
js购物车源代码&em&购物车结算&/em& 3C币 2下载
&em&html&/em&5购物...
购物车的实现及结算处理
本示例利用Session对象来实现一个简单的购物车。主要用于教学演示。Book类此类主是代表购物车的一本书using Snamespace CartTest{ ///
/// Books...
购物车自动结算功能
选中商品后更改商品数量和删除商品,自动计算总价。
*{margin: 0;padding: 0}
a{text-decor...
没有更多推荐了,}

我要回帖

更多关于 单页面订单系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信