前言:继续讲解EasyUi项目《网上书城》之购物车结算功能
码字不易,点个关注
转载请说明!
开发工具:eclipse,MySQL
目录
一、明确目标:
1、将上次的购物车显示名字乱码的问题解决
2、将订单项表加入到数据库
扫描二维码关注公众号,回复:
13611317 查看本文章
3、将订单表加入到数据库
4、改变订单项表中数量时书表中的销量会随之改变
①名字乱码问题
从上面图片可以看出,名字已经出现了乱码,这时就要想到解决方法,首先有两个方法,分别是前端和后台,据运行,前端的代码格式是UTF-8,所以前端没有错误,接下来看后台,后台是从mvc进来之后,到编码过滤器
编码过滤器代码
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// 中文处理必须放到 chain.doFilter(request, response)方法前面
res.setContentType("text/html;charset=" + this.encoding);
if (req.getMethod().equalsIgnoreCase("post")) {
req.setCharacterEncoding(this.encoding);
} /*else {
Map map = req.getParameterMap();// 保存所有参数名=参数值(数组)的Map集合
Set set = map.keySet();// 取出所有参数名
Iterator it = set.iterator();
while (it.hasNext()) {
String name = (String) it.next();
String[] values = (String[]) map.get(name);// 取出参数值[注:参数值为一个数组]
for (int i = 0; i < values.length; i++) {
values[i] = new String(values[i].getBytes("ISO-8859-1"),
this.encoding);
}
}
}*/
chain.doFilter(request, response);
}
问题所在:在进入到编码过滤器中,会与前台传过来的字符编码进行比对,要是不相同的话就会出现乱码问题,如:UTF-8----- ISO-8859-1就会进行编码错误
②将订单项,订单表加入到数据库
当加入到购物车的表是订单项表,而最终结算用的是订单表
1、思路
1、首先要将关于订单项表,订单表的属性创建一个实体类
2、接下来写好Dao层方法
3、接下来就是Action里面的代码
4、最后进行配置
表是订单项表,而最终结算用的是订单表
2、实现代码以及运行结果
OrderItem订单项
package com.zking.entity;
public class OrderItem {
private long id;
private long oid;
private String bid;
private int quantity;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getOid() {
return oid;
}
public void setOid(long oid) {
this.oid = oid;
}
public String getBid() {
return bid;
}
public void setBid(String bid) {
this.bid = bid;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public OrderItem(long id, long oid, String bid, int quantity) {
super();
this.id = id;
this.oid = oid;
this.bid = bid;
this.quantity = quantity;
}
@Override
public String toString() {
return "OrderItem [id=" + id + ", oid=" + oid + ", bid=" + bid + ", quantity=" + quantity + "]";
}
public OrderItem() {
}
}
OrderItemDao
package com.zking.dao;
import com.zking.entity.OrderItem;
import com.zking.util.BaseDao;
public class OrderItemDao extends BaseDao<OrderItem>{
public void add(OrderItem t) throws Exception {
String sql="insert into t_easyui_orderitem(oid,bid,quantity) values(?,?,?)";
super.executeUpdate(sql, t, new String[] {"oid","bid","quantity"});
}
}
Order订单
package com.zking.entity;
import java.util.Date;
public class Order {
private long id;
private long uid;
private Date orderTime;
private String consignee;
private String phone;
private String postalcode;
private String address;
private int sendType;
private Date sendTime;
private float orderPrice;
private int orderState;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getUid() {
return uid;
}
public void setUid(long uid) {
this.uid = uid;
}
public Date getOrderTime() {
return orderTime;
}
public void setOrderTime(Date orderTime) {
this.orderTime = orderTime;
}
public String getConsignee() {
return consignee;
}
public void setConsignee(String consignee) {
this.consignee = consignee;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPostalcode() {
return postalcode;
}
public void setPostalcode(String postalcode) {
this.postalcode = postalcode;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getSendType() {
return sendType;
}
public void setSendType(int sendType) {
this.sendType = sendType;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public float getOrderPrice() {
return orderPrice;
}
public void setOrderPrice(float orderPrice) {
this.orderPrice = orderPrice;
}
public int getOrderState() {
return orderState;
}
public void setOrderState(int orderState) {
this.orderState = orderState;
}
@Override
public String toString() {
return "Order [id=" + id + ", uid=" + uid + ", orderTime=" + orderTime + ", consignee=" + consignee + ", phone="
+ phone + ", postalcode=" + postalcode + ", address=" + address + ", sendType=" + sendType
+ ", sendTime=" + sendTime + ", orderPrice=" + orderPrice + ", orderState=" + orderState + "]";
}
}
OrderDao
package com.zking.dao;
import java.util.List;
import com.zking.entity.Order;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
public class OrderDao extends BaseDao<Order>{
/**
* 购物车结算生成订单
* @param order
* @throws Exception
*/
public void add(Order order) throws Exception {
String sql="insert into t_easyui_order(uid,orderTime,consignee,phone,postalcode,address,sendType,sendTime,orderPrice,orderState) values(?,now(),?,?,?,?,?,?,?,?)";
super.executeUpdate(sql, order, new String[] {"uid","consignee","phone","postalcode","address","sendType","sendTime","orderPrice","orderState"});
}
/**
* 按照订单时间倒序查询
* @param order
* @param pageBean
* @return
* @throws Exception
*/
public List<Order> list( Order order, PageBean pageBean) throws Exception {
String sql="select * from t_easyui_order order by orderTime desc";
return super.executeQuery(sql, Order.class, pageBean);
}
}
private ShoppingVo vo=new ShoppingVo();
private OrderDao od=new OrderDao();
private OrderItemDao oid=new OrderItemDao();
private BookDao bd = new BookDao();
/**
* 购物车结算
* @param req
* @param resp
*/
public void createOrder(HttpServletRequest req, HttpServletResponse resp) {
/**
* 1、数据入订单表
* 2、数据入订单项表
* 3、下单结束后,要将商品的销售数量发生改变
*/
User cuser = (User) req.getSession().getAttribute("cuser");
//判断登录
if(cuser==null) {
return;
}
//组装数据
Order order=new Order();
order.setAddress(vo.getAddress());
order.setConsignee(vo.getConsignee());
//订单价格总计
float orderPrice=0f;
String pageStr = vo.getPageStr();
if(StringUtils.isNotBlank(pageStr)&&pageStr.length()>1) {
for (String item:pageStr.substring(1).split(",")) {
String[] itemEle = item.split("-");
orderPrice+=Float.valueOf(itemEle[3]);
}
}
order.setOrderPrice(orderPrice);
order.setOrderState(1);
order.setPhone(vo.getPhone());
order.setPostalcode(vo.getPostalcode());
order.setSendType(vo.getSendType());
order.setUid(cuser.getId());
try {
od.add(order);
Order newest = od.list(null, null).get(0);
if(StringUtils.isNotBlank(pageStr)&&pageStr.length()>1) {
for (String item:pageStr.substring(1).split(",")) {
OrderItem oi=new OrderItem();
String[] itemEle = item.split("-");
oi.setBid(itemEle[0]);
//需要设置当前订单项是属于哪个订单的,思路是查询出最新订单的id
//按照订单时间进行倒序查询,取第一条数据即可
oi.setOid(newest.getId());
oi.setQuantity(Integer.valueOf(itemEle[2]));
oid.add(oi);
//当前书籍被购买,那么这本书的销量就应该加Quantity
Book b=new Book();
b.setName(itemEle[0]);
b.setSales(Integer.valueOf(itemEle[2]));
bd.editSales(b);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
运行结果
结算前
结算后
数据库
订单表
订单项表
到这里就结束了,欢迎大佬指点