购物车功能实现

xiaoxiao2021-02-28  105

表有汇PC端购物车功能实现

加入购物车后的结算功能

购物车页面:

   

购物车页面html代码:

[html]  view plain  copy <div class="cart_box">              <!--购物车-->       <h1 class="main_tit">         <span><a onclick="DeleteClear(this,'/','0');" href="javascript:;">清空购物车</a></span>         我的购物车<strong>Shopping Cart</strong>       </h1>       <div class="cart_step">         <ul>           <li class="selected"><span>1</span>放进购物车</li>           <li><span>2</span>填写订单信息</li>           <li class="last"><span>3</span>支付/确定订单</li>         </ul>       </div>       <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>         </tr>                           <tr>           <td><a target="_blank" href="/goods/show-62.html"><img src="/upload/201505/04/201505041442488793.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">                          +                          10           </td>           <!--价格-->           <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:30px;text-align:center;ime-mode:Disabled;" 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>           <!--优惠-->           <!--<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>             </font>           </td>           <td align="center"><a onclick="DeleteCart(this,'/','62');" href="javascript:;">删除</a></td>         </tr>                                  <tr>           <th colspan="9" align="right">             商品件数:1 件    商品总金额(不含运费):<font color="#FF0000" size="2">¥2600</font>元    总积分:<font color="#FF0000" size="2">10分</font>           </th>         </tr>                </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>       <div class="clear"></div>       <!--/购物车-->                   </div>  

对照一下商品的颜色、数量等是否选择正确,如果无误可以点击马上结算按钮,进入订单信息界面,填写信息

订单信息界面:

订单信息页面html代码:

[html]  view plain  copy <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);           });       </script>       <!--结算中心-->       <h1 class="main_tit">         <span><a href="/shopping/cart.html">返回</a></span>         确认订单信息<strong>Confirm order</strong>       </h1>          <div class="cart_step">         <ul>           <li class="item"><span>1</span>放进购物车</li>           <li class="selected"><span>2</span>填写订单信息</li>           <li class="last"><span>3</span>支付/确定订单</li>         </ul>       </div>          <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">         <dl>           <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>         </dl>         <dl>           <dt>收货地址:</dt>           <dd><input name="address" id="address" type="text" class="input txt" value="广东省佛山市" datatype="*2-100" sucmsg=" " style="width:300px;"><span class="Validform_checktip">*收货人的详细地址</span></dd>         </dl>         <dl>           <dt>邮政编码:</dt>           <dd><input name="post_code" id="post_code" type="text" class="input txt"><span class="Validform_checktip">所在地区的邮政编码,非必填</span></dd>         </dl>         <dl>           <dt>手机号码:</dt>           <dd><input name="mobile" id="mobile" type="text" class="input txt" value="13256202154" datatype="m" sucmsg=" "><span class="Validform_checktip">*收货人的手机号码</span></dd>         </dl>         <dl>           <dt>联系电话:</dt>           <dd><input name="telphone" id="telphone" type="text" class="input txt" value=""><span class="Validform_checktip">收货人的联系电话,非必填</span></dd>         </dl>       </div>              <div class="line20"></div>       <h3 class="bar_tit">2、支付方式</h3>       <ul class="item_box">          <!--取得一个DataTable-->                  <li>                      <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>         </li>                  <li>                      <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>         </li>                  <li>                      <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>         </li>                  <li>                      <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>         </li>                </ul>              <div class="line20"></div>       <h3 class="bar_tit">3、配送方式</h3>       <ul class="item_box">          <!--取得一个DataTable-->                  <li>                      <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>         </li>                  <li>                      <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>         </li>                </ul>              <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>         </tr>                  <tr>           <td><a target="_blank" href="/goods/show-63.html"><img src="/upload/201505/04/201505041444321122.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">                          +                          10           </td>           <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>               </font>           </td>           <td><input id="car_id" name="car_id" type="hidden" value="63"></td>         </tr>                </tbody></table>              <div class="line20"></div>       <h3 class="bar_tit">5、结算信息</h3>       <div>         <div class="left">           <h4>订单留言<span>字数控制在100个字符内</span></h4>           <textarea name="message" class="input" style="width:250px;height:35px;"></textarea>         </div>                  <div class="right" style="text-align:right;line-height:40px;">           商品件数:<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>                      <br>           <b class="font18">应付总金额:<font color="#FF0000"><label id="order_amount">5500</label></font></b>         </div>       </div>          <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>       <div class="clear"></div>       </form>       <!--/结算中心-->            </div>  

填写好必要的信息(如:收货人姓名、地址、手机号码、快递、付款方式等),点击确认提交按钮进入支付界面;

支付界面:

支付页面html代码:

     

[html]  view plain  copy <div class="cart_box">       <h1 class="main_tit">         支付中心<strong>Payment</strong>       </h1>              <!--提交支付-->       <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="b15061907244648">      <!--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">         <ul>           <li><span>1</span>放进购物车</li>           <li class="item"><span>2</span>填写订单信息</li>           <li class="last selected"><span>3</span>支付/确定订单</li>         </ul>       </div>       <div class="form_box">         <dl>           <dt>订单号:</dt>           <dd>b15061907244648</dd>         </dl>         <dl>           <dt>收货人姓名:</dt>           <dd>发vdxgsd</dd>         </dl>         <dl>           <dt>送货地址:</dt>           <dd>广东省佛山市</dd>         </dl>         <dl>           <dt>手机号码:</dt>           <dd>13256202154</dd>         </dl>         <dl>           <dt>固定电话:</dt>           <dd></dd>         </dl>         <dl>           <dt>备注留言:</dt>           <dd>都很健康</dd>         </dl>         <dl>           <dt>支付金额:</dt>           <dd>2614.00</dd>         </dl>         <dl>           <dt>支付方式:</dt>           <dd>账户余额</dd>         </dl>         <dl>           <dt></dt>           <dd><input id="btnSubmit" name="btnSubmit" type="submit" class="btn_submit" value="确认支付"></dd>         </dl>       </div>       <input id="pay_subject" name="pay_subject" type="hidden" value="购买商品">              </form>       <!--提交支付-->              <div class="clear"></div>     </div>  

在确认信息无误后,点击确认支付按钮;如果正常,就会提示支付成功

成功提示:

提示html代码:

[html]  view plain  copy <div class="cart_box">       <h1 class="main_tit">         支付中心<strong>Payment</strong>       </h1>              <!--支付成功-->       <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>       </div>       <!--支付成功-->              <div class="clear"></div>     </div>  

当然也可以在商品介绍页面点击立刻购买按钮,从而进入填写订单信息页面:(步骤同上)

商品介绍页html代码:

[html]  view plain  copy <dl class="head green">                       <dt>购物商城</dt>                       <dd>                           <span>当前位置:<a href="<%linkurl("index","")%>">首页 </a>><a href="<%linkurl("goods","")%>">购物商城</a>{category_nav}</span>                       </dd>                   </dl>                   <div class="line20">                   </div>                   <!--商品图片-->                   <div class="left294">                       <!--幻灯片开始-->                       <div class="pictureDIV">                           <div id="preview" class="spec-preview">                               <span class="jqzoom">                                   <img /></span>                           </div>                           <!--缩图开始-->                           <div class="spec-scroll">                               <a class="prev"><</a> <a class="next">></a>                               <div class="items">                                   <ul>                                       <%if(model.albums!=null)%>                                       <%foreach(DTcms.Model.goods_albums modelt in model.albums)%>                                       <li>                                           <img bimg="{modelt.original_path}" src="{modelt.thumb_path}" onmousemove="preview(this);" /></li>                                       <%/foreach%>                                       <%/if%>                                   </ul>                               </div>                           </div>                           <!--缩图结束-->                       </div>                       <!--幻灯片结束-->                   </div>                   <!--/商品图片-->                   <!--商品属性-->                   <div class="pro-attr right356">                       <h1>                           {model.title}</h1>                       <div class="pro-items">                           <dl>                               <dt>商品货号:</dt>                               <dd>                                   {model.goods_no}                                   </dd>                           </dl>                           <dl>                               <dt>销售价格:</dt>                               <dd><b class="red">¥{model.sell_price}</b></dd>                           </dl>                           <dl>                               <dt>颜色选择:</dt>                               <%if(yanse!=null)%>                                                           <dd>                               <%for(int i=0;i<yanse.Length;i++)%>                               <a id="<%=str[i]%>" href="javascript:void()" style="border: 1px solid #CCCCCC; margin-top:10px;"                                onclick="selected(this.id);">                               <b class="green" style="font-family:宋体; font-size:8;"><%=yanse[i]%></b>                               </a>                                 <%/for%>                                                           </dd>                                                           <%else%>                               <dd><b class="red">抱歉,该商品没有颜色选择</b></dd>                               <%/if%>                                 <script>                                     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";                                             }                                             count = id;                                                                          }                                         else {  }                                                                           }                                 </script>                           </dl>                           <!--<dl>                               <dt>会员价格:</dt>                               <dd>                                   <%set decimal user_price=get_user_goods_price(model.id)%>                                   <%if(user_price>-1)%>                                   <b class="red">¥{user_price}</b>                                   <%else%>                                   登录可见                                   <%/if%>                               </dd>                           </dl>-->                           <dl>                               <dt>上架时间:</dt>                               <dd>                                   {model.add_time}</dd>                           </dl>                       </div>                       <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>                           <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>                               <%else%>                               <a title="该商品供货紧张,无法加入购物车" class="add-over">加入购物车</a> <a title="该商品供货紧张,无法立即购买" class="buy-over">                                   立即购买</a>                               <%/if%>                           </div>                       </div>                       <div class="line10">                       </div>                       <!--分享-->                       <%template src="_share2_js.html"%>                       <!--/分享-->                   </div>                   <!--/商品属性-->  

 

购物车的结算功能的表和表的关系

购物车商品结算涉及到的表有:订单表(dt_orders)、订单商品表(dt_order_goods)、购物车表(dt_shoppingCar)、用户表(dt_users

订单表的字段有:订单id、订单号、交易号担保支付用到、用户ID、用户名、支付方式、支付手续费、支付状态1未支付2已支付、支付时间、快递ID、快递单号、物流费用、发货状态1未发货2已发货、发货时间、收货人姓名、邮政编码、联系电话、手机、所属省市区、收货地址、订单留言、订单备注/评估描述情况、应付商品总金额、实付商品总金额             

列名

数据类型

主键/外键

说明

id

int

主键

订单id

order_no

nvarchar

 

订单号

trade_no

nvarchar

 

交易号担保支付用到

user_id

int

外键

用户id

user_name

nvarchar

 

用户名

payment_id

int

 

支付方式

payment_fee

decimal

 

支付手续费

payment_status

tinyint

 

支付状态1未支付2已支付

payment_time

datetime

 

支付时间

express_id

int

外键

快递id

express_no

nvarchar

 

快递单号

express_fee

decimal

 

物流费用

express_status

tinyint

 

发货状态1未发货2已发货

express_time

datetime

 

发货时间

accept_name

nvarchar

 

收货人姓名

post_code

nvarchar

 

邮政编码

telphone

nvarchar

 

联系电话

mobile

nvarchar

 

手机

area

nvarchar

 

所属省市区

address

nvarchar

 

收货地址

message

nvarchar

 

订单留言

remark

nvarchar

 

订单备注/评估描述情况

payable_amount

decimal

 

应付商品总金额

real_amount

decimal

 

实付商品总金额

order_amount

decimal

 

订单总金额

订单商品表的字段有:自增id、订单id、商品id、商品名称、商品价格、实际价格、数量、颜色、积分

列名

数据类型

主键/外键

说明

id

int

主键

自增ID

order_id

int

外键

订单ID

goods_id

int

外键

商品ID

goods_title

nvarchar

 

商品标题

goods_price

decimal

 

商品价格

real_price

nvarchar

 

实际价格

quantity

nvarchar

 

数量

color

decimal

 

颜色

point

int

 

积分

         

用户表的字段有:用户id、用户组id、用户名、密码、6位随机字符串,加密用到、电子邮箱用户昵称、头像、性别、生日、联系电话、手机号码、QQ号码、联系地址、安全问题、问题答案、预存款、用户积分、经验值、用户状态、注册时间、注册IP、经度、纬度、城市、介绍、执照照片、场地照片、身份证号                                       

列名

数据类型

主键/外键

说明

id

int

主键

用户id

group_id

int

外键

用户组id

user_name

nvarchar(100)

 

用户名

password

nvarchar(100)

 

密码

salt

nvarchar(20)

 

6位随机字符串加密用到

email

nvarchar(50)

 

电子邮箱

nick_name

nvarchar(100)

 

用户昵称

avatar

nvarchar(255)

 

头像

sex

nvarchar(20)

 

性别

birthday

datetime

 

生日

telphone

nvarchar(50)

 

联系电话

mobile

nvarchar(20)

 

手机号码

qq

nvarchar(30)

 

QQ号码

address

nvarchar(255)

 

联系地址

safe_question

nvarchar(255)

 

安全问题

safe_answer

nvarchar(255)

 

问题答案

amount

decimal(9, 2)

 

预存款

point

int

 

用户积分

exp

int

 

经验值

status

tinyint

 

用户状态

reg_time

datetime

 

注册时间

reg_ip

nvarchar(30)

 

注册IP

longitude

nvarchar(100)

 

经度

latitude

nvarchar(100)

 

纬度

city

nvarchar(100)

 

城市

content

ntext

 

介绍

license_img

nvarchar(255)

 

执照照片

place_img

nvarchar(255)

 

场地照片

shenfenzheng

nvarchar(255)

 

身份证号

物流快递表的字段有:自增id、快递名称、物流编码、配送费用、快递网址、备注说明排序、是否不显示

列名

数据类型

主键/外键

说明

id

int

主键

自增ID

title

nvarchar

 

快递名称

express_code

nvarchar

 

物流编码

express_fee

decimal

 

配送费用

website

nvarchar

 

快递网址

remark

ntext

 

备注说明

sort_id

int

 

排序

is_lock

tinyint

 

是否不显示

关系图:

功能模块的具体实现:这个方式是利用dtcms3.0的二次开发,更多请浏览dtcms官方网站:http://www.dtcms.NET/news/show/97.aspx

购物车页面:‘马上结算’按钮

[html]  view plain  copy <a class="btn btn-success marL10" href="<%linkurl("shopping","confirm")%>">马上去结算</a>   马上结算按钮的作用是跳转页面如上;

与form表单相对应的方法:

[javascript]  view plain  copy #region 保存用户订单OK=============可以了,把cooke换过来了================           private void order_save(HttpContext context)           {               //获得传参信息               int payment_id = DTRequest.GetFormInt("payment_id");   //支付ID               int express_id = DTRequest.GetFormInt("express_id");   //快递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\":\"对不起,请选择配送方式!\"}");                   return;               }               Model.express expModel = new BLL.express().GetModel(express_id);               if (expModel == null)               {                   context.Response.Write("{\"status\":0, \"msg\":\"对不起,配送方式不存在或已删除!\"}");                   return;               }               //检查支付方式               if (payment_id == 0)               {                   context.Response.Write("{\"status\":0, \"msg\":\"对不起,请选择支付方式!\"}");                   return;               }               Model.payment payModel = new BLL.payment().GetModel(payment_id);               if (payModel == null)               {                   context.Response.Write("{\"status\":0, \"msg\":\"对不起,支付方式不存在或已删除!\"}");                   return;               }               //检查收货人               if (string.IsNullOrEmpty(accept_name))               {                   context.Response.Write("{\"status\":0, \"msg\":\"对不起,请输入收货人姓名!\"}");                   return;               }               //检查手机和电话               if (string.IsNullOrEmpty(telphone) && string.IsNullOrEmpty(mobile))               {                   context.Response.Write("{\"status\":0, \"msg\":\"对不起,请输入收货人联系电话或手机!\"}");                   return;               }               //检查地址               if (string.IsNullOrEmpty(address))               {                   context.Response.Write("{\"status\":0, \"msg\":\"对不起,请输入详细的收货地址!\"}");                   return;               }               //如果开启匿名购物则不检查会员是否登录               int user_id = 0;               int user_group_id = 0;               string user_name = string.Empty;               //检查用户是否登录               Model.users userModel = new BasePage().GetUserInfo();               if (userModel != null)               {                   user_id = userModel.id;                   user_group_id = userModel.group_id;                   user_name = userModel.user_name;                   bool kkk = new BLL.shoppingcar().updateQuantity(user_id);               }               if (orderConfig.anonymous == 0 && userModel == null)               {                   context.Response.Write("{\"status\":0, \"msg\":\"对不起,用户尚未登录或已超时!\"}");                   return;               }               //检查购物车商品               //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\":\"对不起,购物车为空,无法结算!\"}");                   return;               }               //统计购物车               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_id;   //用户id               model.user_name = user_name;  //用户名               model.payment_id = payment_id;  //支付方式id               model.express_id = express_id;  //快递id               model.accept_name = accept_name; //收货人               model.post_code = post_code;  //邮编               model.telphone = telphone;  //电话               model.mobile = mobile;  //手机号码               model.address = address;  //地址               model.message = message;  //留言               model.payable_amount = carModel.payable_amount;   //总金额                model.real_amount = carModel.real_amount;   //实付金额               model.express_status = 1;               model.express_fee = expModel.express_fee; //物流费用                  //提交订单后,就修改的数据库购物车表的有效否,不让以购买的商品显示,自己修改的               Model.shoppingcar carmodel = new Model.shoppingcar();               carmodel.user_id = userModel.id;               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_amount;                   }               }               //订单总金额=实付商品金额+运费+支付手续费               model.order_amount = model.real_amount + model.express_fee + model.payment_fee;               //购物积分,可为负数               model.point = carModel.total_point;               model.add_time = DateTime.Now;               //商品详细列表               List<Model.order_goods> gls = new List<Model.order_goods>();               for (int i = 0; i < data.Rows.Count; i++)  //对购物车内的商品进行数量金额积分的计算,这里的数量金额应该不用进行判断了,出错再判断吧               {                   int spID=Convert.ToInt32(data.Rows[i]["goods_id"]);              //商品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 = gls;               int result = new BLL.orders().Add(model);  //保存订单               if (result < 1)               {                   context.Response.Write("{\"status\":0, \"msg\":\"订单保存过程中发生错误,请重新提交!\"}");                   return;               }               //扣除积分               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\":\"恭喜您,订单已成功提交!\"}");               return;           }           #endregion   此过程用调用的BLL逻辑层涉及到的方法:

快递BLL(payment.cs)层涉及到的方法:

[csharp]  view plain  copy /// <summary>           /// 得到一个对象实体           /// </summary>           public DTcms.Model.express GetModel(int id)           {               return dal.GetModel(id);           }   与快递BLL对应的DAL方法:

[csharp]  view plain  copy /// <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 = id;                  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());                   }                   return model;               }               else               {                   return null;               }           }   支付方式BLL(payment.cs)涉及到的方法:

[csharp]  view plain  copy /// <summary>           /// 得到一个对象实体           /// </summary>           public Model.payment GetModel(int id)           {               return dal.GetModel(id);           }   支付方式BLL对应的DAL方法:

[csharp]  view plain  copy /// <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 = id;                 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();                  return model;              }              else              {                  return null;              }          }   购物车BLL(shoppingcar.cs)涉及到的方法:

[csharp]  view plain  copy /// <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.Count; i++)  //对购物车内的商品进行数量金额积分的计算               {                   id = Convert.ToInt32(dt.Rows[i]["id"]);                   model.id = id;                   if (Delete(model))                   {                       k = 1;                   }               }               if (k > 0)               {                   return true;               }               else { return false; }              }   /// <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.Count; 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 + ";" + point;               return str;           }   /// <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.Count; 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 - quantity;  //数量运算                   }                   string str = "stock_quantity=" + goods_quantity;                   goods.UpdateField(goods_id, str);               }               return true;           }   /// <summary>           /// 删除           /// </summary>           /// <param name="model"></param>           /// <returns></returns>           public bool Delete(Model.shoppingcar model)           {               return dal.Delete(model);           }  

与购物车BLL对应的DAL方法:

[csharp]  view plain  copy /// <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.id;                parameters[1].Value = false;                int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);                if (rows > 0)                {                    return true;                }                else                {                    return false;                }            }   /// <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)里面的方法

[csharp]  view plain  copy 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)涉及到的方法:

[csharp]  view plain  copy /// <summary>           /// 增加一条数据+++           /// </summary>           public int Add(Model.orders model)           {               return dal.Add(model);           }   与订单信息BLL对应的DAL方法:

[csharp]  view plain  copy /// <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_no;               parameters[1].Value = model.trade_no;               parameters[2].Value = model.user_id;               parameters[3].Value = model.user_name;               parameters[4].Value = model.payment_id;               parameters[5].Value = model.payment_fee;               parameters[6].Value = model.payment_status;               parameters[7].Value = model.payment_time;               parameters[8].Value = model.express_id;               parameters[9].Value = model.express_no;               parameters[10].Value = model.express_fee;               parameters[11].Value = model.express_status;               parameters[12].Value = model.express_time;               parameters[13].Value = model.accept_name;               parameters[14].Value = model.post_code;               parameters[15].Value = model.telphone;               parameters[16].Value = model.mobile;               parameters[17].Value = model.area;               parameters[18].Value = model.address;               parameters[19].Value = model.message;               parameters[20].Value = model.remark;               parameters[21].Value = model.payable_amount;               parameters[22].Value = model.real_amount;               parameters[23].Value = model.order_amount;               parameters[24].Value = model.point;               parameters[25].Value = model.status;               parameters[26].Value = model.add_time;               parameters[27].Value = model.confirm_time;               parameters[28].Value = model.complete_time;               parameters[29].Direction = ParameterDirection.Output;               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.InputOutput;                       parameters2[1].Value = models.goods_id;                       parameters2[2].Value = models.goods_title;                       parameters2[3].Value = models.goods_price;                       parameters2[4].Value = models.real_price;                       parameters2[5].Value = models.quantity;                       parameters2[6].Value = models.color;                       parameters2[7].Value = models.point;                       cmd = new CommandInfo(strSql2.ToString(), parameters2);                       sqllist.Add(cmd);                   }               }               DbHelperSQL.ExecuteSqlTranWithIndentity(sqllist);               return (int)parameters[29].Value;           }  

 仅供学习,禁止商业用途

转载请注明原文地址: https://www.6miu.com/read-43573.html

最新回复(0)