项目名称:赋学网上购书系统
开发环境:Eclipse + Tomcat8.0 + Mysql + Maven
软件架构:Spring + SpringMVC + Mybatis +POI + 百度AI
项目描述:
该系统分为首页、用户管理、购物车管理、订单管理、退出5个模块。首页模块实现了模
糊分页查询、分类分页查询等功能;用户管理模块实现了登录、注册、修改、查看信息等功能;
购物车模块实现了查看、购买、修改图书数量等功能;订单模块实现了查看、删除等功能.。
负责模块:
1. 主要负责用户管理模块和购物车管理模块功能代码的实现;
2. 使用 Shiro 安全框架进行用户身份的认证和授权操作;
3. 利用 POI 实现数据输出到 Excel 中,并在线下载打印,同时防止文件并发打印;
4. 利用 AOP 思想管理软件的日志操作;
购物车管理你是怎样实现的?
实现流程
我先介绍一下购物车模块的存储方式,这里用的是相对简单的redis(hash类型)进行存储,大key为CacheKey(卡 s k).CART_LIST ,这是一个购物车,当前登录名username作为小key,value是list用于存储多条商品信息,map的有两个属性,一个是 item(i等en),表示购物车明细数据,这个不用多说,单价,商品详细信息等等,另一个是checked,用于存储购物车是否被选中。这个可以实现价格的总计以及批量删除等功能。
用户添加商品
首先在接口中定义方法,传入username,skuId(死古),num(nang)这三个值。这里其实也涉及到了其他两个功能,一个是商品的数量的加减,第二个是商品的删除,当num为商品数量的相反数是,实现商品的删除功能,也是在service层中对接口进行一个实现,首先利用之前的方法拿到用户的购物车列表,对购物车列表进行一个遍历,利用传入的skuId和列表中的商品详情orderItem(哦得i等嗯)中getSkuId进行比较,确认列表中是否存在此商品。
如果存在商品数量num值加一,然后对他的一列和数量有关的数据进行修改。(比如价格和重量)
否则不存在直接进行商品的一个添加,这个添加涉及到两个表sku,Category(卡tgurun)
(商品添加中注意一点,注入skuService,利用它得到sku表信息后需要进行一个简单的判断sku是否为空,sku.getStatus(S得ts)状态是否为1,数量是否<=0 这些都是不合法的行为)
还有就是对3层分类的存储,这里拿到的只有skuId没有数据库的其他表,所以需要访问数据库,这样的话又会对数据库造成一定的压力,这里对商品存储进行一个优化,利用redis缓存,将1.2层分类用redis进行一个存储,提高效率。
更新保存勾选状态
实现的就是勾选一个表,你退出页面,下次访问还是会保存这个勾选状态。这个还蛮简单的,就是用户传入一个勾选的状态,利用skuId找到这个商品后,对他的list中的checked的状态进行一个更改,然后保存list就行了。
根据勾选状态批量进行删除列表
这个小模块的业务和代码都不难,基础一点的可以对list进行一个遍历,然后取出勾选状态为true的list,进行覆盖也就完事了。然而,这里利用stream流的技术,stream流直接获取checked属性,提取出来未被选中的商品购物车,然后用这个购物车对原购物车进行一个覆盖,这样也能实现一个删除勾选状态购物车列表的一个功能,这也算是一种反向思维,这样代码简化挺多。
业务流程
商城现阶段使用的是把购物车的商品写入cookie中,这样服务端基本上没什么有存储的压力。但是弊端就是用户更换电脑后购物车不能同步。打算下一步这么实现:当用户没有登录时向购物车添加商品是添加到cookie中,那么用户登录后购物车的信息是存储在redis中的并且是跟用户id向关联的,此时你更换电脑后使用同一账号登录购物车的信息就会展示出来。