⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cartserviceimpl.java

📁 网上商店
💻 JAVA
字号:
package service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import service.CartService;
import domain.Account;
import domain.Item;
import domain.LineItem;
import domain.Order;

public class CartServiceImpl implements CartService {
	//购物车的条目都是用map来操作,声明为私有变量,不声明为private的话,给其他类访问的话,
	//该属性不放在方法体里,就不能被外部类访问,为了避免混乱,声明为私有,给自己调用
	private Map map = new TreeMap();  //private可以在方法体外部new 出一个实例 

	private Account account;

	public CartServiceImpl(Account account) {
		this.account = account;
	} //构造一个Account参数的构造器,便于在Account的登陆成功时创建一个购物车实例
	
	//LineItem的值存到map中,map就被用做数据库暂时储存数据
	public void addLineItem(LineItem item) {
		map.put(item.getProductId(), item); //put(key,value),一个item以自己的id和其他item区分

	}

	public void alterLineItem(LineItem item) { //改变item的Num属性,或者其他属性,
		if (map.containsKey(item.getProductId())) {  //如果传进来的item的ProductId和在map的一样,就覆盖原来在map的item
			map.put(item.getProductId(), item);
		}
	}

	public void removeLineItem(LineItem item) {
		map.remove(item.getProductId());

	}

	//Order和Item同时存入数据库
	public Order toOrder() {
		//1.得到orderId,并加入order的id,create_date,account_id,
		Order order = new Order();
		String orderId = "" + account.getId() + System.currentTimeMillis(); // "" +通过Object的toString()方法转型
		order.setId(orderId);
		order.setCreateDate(new Date());
		order.setAccount(account); //存入的是Account类型,从hbm.xml的<many-to-one>中自动取到Account的id
		
		//2.取出LineItem的条目值
		Set set = map.keySet(); //提取map的key ,放在一个集合
		Iterator it = set.iterator(); //用iterator操作set(Collection)
		
		Set itemSet = new HashSet();
		double totalPrice = 0.0;
		
		while (it.hasNext()) {
			LineItem li = (LineItem) map.get(it.next()); //得到map的key的值
		//3.把LineItem放到Item中,Item又放在HashSet中,并没有有放到数据库中
			Item item = new Item();
			item.setProductId(li.getProductId());
			item.setProductNum(li.getNum());
			item.setProductPrice(li.getPrice());
			item.setOrderId(orderId);//设置外键
			
			itemSet.add(item);//放在HashSet中,可以 ProductId的不同来分开存order传过来的总的数据
			totalPrice += li.getPrice() * li.getNum(); //得到总价
		}
		//4.通过order的setItems的一对多关系把Item的数据存到Item的数据库中,Item通过外键orderId
		order.setItems(itemSet);//order的数据库上没有items的字段
		//5.加入order的total_price字段
		order.setTotalPrice(totalPrice);
		return order;

	}

	public List getAllLineItem() {
		List itemList = new ArrayList();
		Iterator it = map.keySet().iterator();
		while (it.hasNext()) {
			itemList.add(map.get(it.next()));
		}
		return itemList;
	}

	public double getTotalPrice() {
		Iterator it = map.keySet().iterator();
		double totalPrice = 0.0;
		while (it.hasNext()) {
			LineItem li = (LineItem) map.get(it.next());
			totalPrice += li.getPrice() * li.getNum();
		}
		return totalPrice;
	}

	public LineItem loadLineItem(Object key) {
		return (LineItem) map.get(key); //key为product的id
	}
	
	//清除map的数据
	public void clear() {
		map.clear();
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -