一、在购物车界面点击结算过后生产订单:
1、确认订单界面简洁代码展示:
<h1>确认订单</h1>
<h6>确认收货地址</h6>
<input type="text" id="oaddress" style="width:100%;height:40px"/>
<hr/>
<h6>确认订单信息</h6>
<p>商品总件数${sessionScope.maps.sumCount}</p>
<h6>商品信息</h6>
<c:forEach items="${sessionScope.maps.cartByUsersid}" var="mycart">
<span>
<span>${mycart.g.gname}</span>
<img src="${mycart.g.gpath}" width="100" height="100"/>
</span>
</c:forEach>
<hr/>
<p style="text-align:center">
<h1>总金额:${sessionScope.maps.sumPrice}</h1>
</p>
<p style="text-align:center">
<button style="background: pink;color:white;font-weight:bold;width:100px;height:50px;border-radius: 100%;cursor: pointer;" onclick="confirmOrder()">确认订单</button>
</p>
<script type="text/javascript">
//确认订单的点击事件
function confirmOrder(){
var oaddress=document.getElementById("oaddress");
//alert(oaddress.value);
if(!oaddress.value){
alert("请输入地址再确认订单");
return;
}
location.href="ConfirmOrderServlet?oaddress="+oaddress.value;
}
</script>
2、提交过后生产订单详情:
// 1.设置字符集编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 获取
String oaddress = request.getParameter("oaddress");
// System.out.println("oaddress="+oaddress);
// 生成一个所谓订单 以及生成订单的同时 生成 详情
// userid num price oaddress ostate
// 获取session
HttpSession session = request.getSession();
// 用户
Yongy y = (Yongy) session.getAttribute("users");
ICartBiz icb = new CartBiz();
List<Cart> cartByUsersid = icb.getCartByUsersid(y.getYid());
// 1.总件数
int sumCount = 0;
int sumPrice = 0;
for (Cart cart : cartByUsersid) {
sumCount += cart.getCcount();
sumPrice += cart.getCtotal();
}
//实例化Order实体 来封装以上获取的属性
Order order=new Order(new BaseDao().getTableMaxID("orders", "orderId"),y, sumCount, sumPrice, oaddress, 0);
//将当前用户的购物车集合进行set设置
order.setList(cartByUsersid);
//实例化biz
IOrderBiz iob=new OrderBiz();
//最佳方案:将购物车商品集合作为order实体的属性进行传递
iob.addOrder(order);
3、部分底层代码展示:
①、根据指定的表名和指定的主键字段获取最大ID
/**
* 根据指定的表名和指定的主键字段获取最大ID
*/
public int getTableMaxID(String tableName, String colName) {
// 1.定义对应的三兄弟以及其他相关变量
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "";
// 2.给对应的对象及变量赋值
try {
// 获取连接
con = DBHelper.getCon();
// sql
sql = "select nvl(max("+colName+"),0)+1 from "+tableName;
// 执行sql语句
ps = con.prepareStatement(sql);
// 返回结果集
rs = ps.executeQuery();
// 遍历结果集
if (rs.next()) {
return rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBHelper.myClose(con, ps, rs);
}
// 3.返回结果
return 0;
}
②点击提交过后增加一个订单项和订单详情以及清除购物车中结算的商品:
@Override
public int addOrder(Order order) {
int n=0;
Connection con=null;
PreparedStatement ps=null;
String sql="";
try {
con=DBHelper.getCon();
sql="insert into orders select nvl(max(orderid),0)+1 ,?,?,?,?,? from orders";
//执行语句
ps=con.prepareStatement(sql);
ps.setInt(1, order.getY().getYid());
ps.setInt(2, order.getNum());
ps.setInt(3, order.getPrice());
ps.setString(4, order.getOaddress());
ps.setInt(5, order.getOstate());
n=ps.executeUpdate();
//生成订单详情
if(n!=0) {
//拿到购物车商品
if(order.getList()!=null) {
List<Cart> list = order.getList();
for (Cart cart : list) {
OrderItems orderItems=new OrderItems();
//将这些商品保存到订单详情中
//id--订单详情编号 不需要
//orderId--订单编号
orderItems.setOrder(order);
//gid--商品编号
orderItems.setGoods(cart.getG());
//num--商品数量
orderItems.setNum(cart.getCcount());
//price--总价
orderItems.setPrice(cart.getCtotal());
ioid.addOrderItems(orderItems);
//调用删除购物车的方法 根据用户删除
//new CartDao.deleteCartGoodsByUsersid(userid);
new CartDao().deleteCartGoodsByUser(order.getY().getYid());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, null);
}
return n;
}