EasyUI项目之购物车结算功能

前言:继续讲解EasyUi项目《网上书城》之购物车结算功能

码字不易,点个关注

转载请说明!

开发工具:eclipse,MySQL 


目录

一、明确目标:

①名字乱码问题

 ②将订单项,订单表加入到数据库 


一、明确目标:

         1、将上次的购物车显示名字乱码的问题解决

         2、将订单项表加入到数据库

         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();
		}
	}

运行结果

结算前

结算后 

 

 数据库

订单表

 订单项表

  到这里就结束了,欢迎大佬指点 

猜你喜欢

转载自blog.csdn.net/weixin_56069070/article/details/120704106