购物车是电商网站重要的模块之一,也是有一定难度的模块。
这里主要是教大家大概的实现思路,我还是不会把源码写出来让各位Ctrl CV ,因为项目是保密的而且只会Ctrl CV的不算是开发工程师
一,购物车
购物车这个模块因为需求不同,各个网站的购物车功能也不同,有的网站让你登陆后才可以添加购物车,有的网站是可以不登陆就添加,在这里就说说登陆后添加的购物车吧。
数据库中有两张表:StoreCart GoodsCart
StoreCart是用来创建购物车的表里面存的是用户和店铺
GoodsCart是用来存储购物车里面所有商品的信息的与StoreCart关联,多对1
添加购物车
@RequsetMapping(value = "/xxx/xxx/add_goods_cart")
public void add_goods_cart(HttpServletRequest request, HttpServletResponse response, String id, String count, String pirce, String gsp, String msg){
List<StoreCart> cart = new ArrayList<StoreCart>();
List<StoreCart> user_cart = new ArrayList<StoreCart>();//登陆状态的购物车
//这里可以判断一下库存是否充足,我就不写了
User user = LoginContext.getSesssionValueByLogin(request);
Map map = new HashMap();
StoreCart sc;
if(user != null){
if(user.getStore != null){ //这里要判断用户是否有自己的店铺,防止用户自己购买自己的东西
if(this.goodsService.getObjById(Long.parseLong(id)).getGoods_store().getStore_name().equals(user.getStore().getStore_name())){
return;
}
map.clear();
map.put("user_id",user.getId());
map.put("sc_status",Integer.valueOf(0));
user_cart = this.storeCartService.query()
}
}else{return;}
//遍历买家登陆后的购物车,你需要获取到买家购物车里是否有商品防止添加相同的。
for(StoreCart sc12 : user_cart){
boolean sc_add = true;
for(StoreCart sc1 : cart){
if(sc1.getStore().getId().equals(sc12.getStore().getId)){
sc_add = false;
}
}
if(sc_add){cart.add(sc12);}
}
//上面那些是为了得到买家在没添加商品之前的购物车数据,下面开始买家选择的商品规格
String[] gsp_ids = gsp.split(",");
Arrays.sort(gsp_ids);
boolean add = true;
double total_price = 0.0D;
int total_count = 0;
String[] gsp_ids1;//已有购物车内的商品规格
//遍历购物车去判断购物车内是否包含当前所选规格的商品。
for(StoreCart sc1 : cart){
for(GoodsCart gc : sc1.getGcs()){
if((gsp_ids != null) && (gsp_ids.length > 0) && (gc.getGsps() != null) && (gc.getGsps().size()) > 0){//这里有一个商品的规格类如何判断就靠自己了}
}
}
if(//所选规格可以添加购物车时候){
Goods goods = this.goodsService.getObjById(Long.parseLong(id));
//这里在遍历一遍,查看是要更新购物车内的商品,还是增加商品 , update / save;
StoreCart sc33 = new StoreCart();
for(StroeCart sc1 : cart){sc33 = sc1;}
this.storeCartService.save(sc33 ); / this.storeCartService.update(sc33);
//处理购物车的明细
GoodsCart obj = new GoodsCart();
obj.setAddTime(new Date());
obj.setCount(Integer.parseInt(count));
obj.setPrice(Double.parseDouble(price));
obj.setGoods(goods);
//解析一下商品的SKU,这里就不写了,自己设计吧。
GoodsSpecProperty spec; ...
obj.setSc(sc33);
this.goodsCartService.save(obj);
sc33.getGcs().add(obj);//将购物车商品明细添加到购物车内
//然后计算一下总价格,最后更新一下购物车就OK了
}
}
查看购物车
查看购物车就比较简单了
在确保用户登陆的时候,使用用户id在StoreCart表中查询数据,在查询的时候也要确保一下用户是否是卖家并且是否购买了自己家的商品,这些都没问题就把查询到的购物车信息返回给前台处理。
@RequestMapping(value = "goods_cart1")
public void goods_cart1(HttpServeltRequest request, HttpServeltResponse response){
Map map = new HashMap();
map.clear();
map.put("user_id",user.getId());
map.put("sc_status",Integer.valueOf(0));
List<StoreCart> cart = this.storeCartService.query("select obj from StoreCart obj where obj.user.id=:user_id and obj.sc_status=:sc_status",map);
if(cart != null){
Store store = ((User)LoginContext.getSessionValueByLogin(request)).getStore != null ? ((User)LoginContext.getSessionValueByLogin(request)).getStore != null : null;
for(StoreCart sc : cart){
if(sc.getStore().getId().equals(store.getId())){
for(GoodsCart gc : sc.getGcs())){
gc.getGsps().clear();
this.goodsCartService.delete(gc.getId());
}
sc.getGcs().clear();
this.storeCartService.delete(sc.getId());
}
}
}
//返回用户购物车的信息就可以了
}