📄 cartserviceimpl.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 + -