# shop
>前言:基于ssm分布式开发实现的电商项目(聚合工程)
注:本项目为开源项目,不能用于商业应用,仅供学习。
### 使用工具:
maven(构建项目),svn(版本控制工具),myeclipse(集成开发环境),nginx(反向代理),
FastDFS (图片服务器),tomcat(web服务器),zookeeper(集群管理),mysql(数据库)
Junit(测试)
### 技术栈:
spring,springmvc,mybatis(框架)
solr(搜索服务),redis(缓存),easyUI(后台系统页面)
### 数据库设计
tb_user用户表(id,username,password,phone,email,created,updated)
tb_item商品表(id,title,sell_point,price,num,barcode,image,cid,status,created,updated)
tb_cat商品分类表(id,parent_id,name,status,sort_order,is_parent,created,updated)
tb_item_desc商品描述表(item_id,item_desc,created,updated)
tb_item_param商品规格参数表(id,item_cat_id,param_data,created,updated)
tb_item_param商品规格参数模板表(id,item_id,param_data,created,updated)
tb_order订单表(payment,payment_type,post_fee,status,create_time,update_time,payment_time,consign_time,end_time,close_time,shipping_name,shipping_code,user_id,buyer_message,buyer_nick,buyer_rate)
tb_order订单商品表(id,item_id,order_id,num,title,price,total_fee,pic_path)
tb_order_shipping订单物流表(order_id,receiver_name,receiver_phone,receiver_mobile,receiver_state,receiver_city,receiver_district,receiver_address,receiver_zip,created,updated)
tb_content_category商品目录分类表(id,parent_id,name,status,sort_order,is_parent,created,updated)
tb_content商品目录表(id,category_id,title,sub_title,title_desc,url,pic,pic2,content,created,updated)
## 分布式系统
### 商品后台管理系统
### shop-manager(管理后台)
商品的添加功能:
1.商品类目选择-easyui异步tree控件的使用
2.图片上传(fastdfs+nginx)
3.富文本编辑器使用KindEditor
4.分页使用PageHelper插件,插件是基于mybatis的拦截器接口实现的
商品的展示功能:
1.分页插件的使用PageHelper。
2.easyUIDataGrid的使用
### 前台系统
### shop-rest(发布服务)
### shop-search(搜索服务)
* 使用solr实现搜索,内容列表使用redis缓存,使用zookeeper管理集群
### shop-sso (单点登录系统)
SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,
用户只需要登录一次就可以访问所有相互信任的应用系统。它包括
可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。
它是目前比较流行的企业业务整合的解决方案之一。
用户登录:
1、接收用户名和密码
2、校验用户名密码
3、生成token,可以使用UUID
4、把用户信息写入redis,key就是token
5、把token写入cookie。
6、返回登录成功需要把token返回给客户端。
Session共享的问题:
1、tomcat做集群配置session复制。如果集群中节点很多,会形成网络风暴。推荐节点数量不要超过5个。
2、分布式架构。拆分成多个子系统。(本项目使用)
### shop-order(订单系统)
* 当用户提交订单时此时必须要求用户登录,可以使用拦截器来实现。
拦截器的处理流程:
1. 拦截请求url
2. 从cookie中取token
3. 如果没有toke跳转到登录页面。
4. 取到token,需要调用sso系统的服务查询用户信息。
5. 如果用户session已经过期,跳转到登录页面
6. 如果没有过期,放行。
### 代码:
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// 在Handler执行之前处理
// 判断用户是否登录
// 从cookie中取token
String token = CookieUtils.getCookieValue(request, "TT_TOKEN");
// 根据token换取用户信息,调用sso系统的接口。
TbUser user = userService.getUserByToken(token);
// 取不到用户信息
if (null == user) {
// 跳转到登录页面,把用户请求的url作为参数传递给登录页面。
response.sendRedirect(userService.SSO_DOMAIN_BASE_USRL
+ userService.SSO_PAGE_LOGIN + "?redirect="
+ request.getRequestURL());
// 返回false
return false;
}
// 取到用户信息,放行
// 把用户信息放入Request
request.setAttribute("user", user);
// 返回值决定handler是否执行。true:执行,false:不执行。
return true;
}
### shop-portal (门户系统)
购物车:
1、添加购物车不需要用户登录。购物车的数据应该放到cookie中。
2、当向购物车添加同一款商品时,购物车中商品的数量增加。
3、购物车中可以删除商品
4、购物车中可以修改商品数量。商品的总价需要重新计算。
5、点击“结算”按钮要求用户登录。
购物车问题:
1、未登录的情况下,可以把购物车写入cookie。
2、已经登录的情况下,需要把购物车写入redis
3、登录时判断cookie中有购物车商品,应该吧cookie中的购物车商品列表转移到redis中。
Key:用户id
Value:购物车商品列表
4、如果想redis中转移商品时,redis的购物车中已经有商品,此时,需要把商品合并。如果是同一款商品数量叠加,如果新商品就合并商品。
跨域问题:
使用jsonp返回商品目录(ajax方式动态加载)
### 代码:
/**
* 购物车Service
*/
@Service
public class CartServiceImpl implements CartService {
@Value("${REST_BASE_URL}")
private String REST_BASE_URL;
@Value("${ITME_INFO_URL}")
private String ITME_INFO_URL;
@Value("${REDIS_CART_SESSION_KEY}")
private String REDIS_CART_SESSION_KEY;
@Autowired
private JedisClient jedisClient;
@Autowired
private UserServiceImpl userService;
/**
* 添加购物车商品
*/
@Override
public TaotaoResult addCartItem(long itemId, int num,
HttpServletRequest request, HttpServletResponse response) {
// 取商品信息
CartItem cartItem = null;
// 取购物车商品列表
List<CartItem> itemList = getCartItemList(request, response);
// 判断购物车商品列表中是否存在此商品
for (CartItem cItem : itemList) {
// 如果存在此商品longValue()
if (cItem.getId() == itemId) {
// 增加商品数量
cItem.setNum(cItem.getNum() + num);
cartItem = cItem;
break;
}
}
if (cartItem == null) {
cartItem = new CartItem();
// 根据商品id查询商品基本信息。
String json = HttpClientUtil.doGet(REST_BASE_URL + ITME_INFO_URL
+ itemId);
// 把json转换成java对象
TaotaoResult taotaoResult = TaotaoResult.formatToPojo(json,
TbItem.class);
if (taotaoResult.getStatus() == 200) {
TbItem item = (TbItem) taotaoResult.getData();
cartItem.setId(item.getId());
cartItem.setTitle(item.getTitle());
cartItem.setImage(item.getImage() == null ? "" : item
.getImage().split(",")[0]);
cartItem.setNum(num);
cartItem.setPrice(item.getPrice());
}
// 添加到购物车列表
itemList.add(cartItem);
}
if (login(request)) {// 登录了
// 将修改写入redis
String tokenJson = CookieUtils.getCookieValue(request, "TT_TOKEN",
true);
TbUser tbUser = userService.getUserByToken(tokenJson);
jedisClient.set(tbUser.getId().toString(),
JsonUtils.objectToJson(itemList));
} else {// 未登录
// 把购物车列表写入cookie
CookieUtils.setCookie(request, response, "TT_CART",
JsonUtils.objectToJson(itemList), true);
}
return TaotaoResult.ok();
}
/**
* 删除购物车商品
*/
@Override
public TaotaoResult deleteCartItem(long itemId, HttpServletRequest request,
HttpServletResponse response) {
// 从cookie中取购物车商品列表
List<CartItem> itemList = getCartItemList(request, response);
// 从列表中找到此商品
for (CartItem cartItem : itemList) {
if (cartItem.getId(
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也可作为大作业、课程设计、毕设项目、初期项目立项演示等,欢迎下载,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于ssm+mysql的分布式电商系统(前后台+订单管理+门户)完整源码+说明.zip (1826个子文件)
access_log.2017-04-23 26KB
access_log.2017-04-23 11KB
access_log.2017-04-23 9KB
access_log.2017-04-23 4KB
access_log.2017-04-23 3KB
access_log.2017-04-23 107B
index_jsp.class 100KB
TbOrderExample$GeneratedCriteria.class 32KB
item_jsp.class 31KB
order_002dcart_jsp.class 28KB
TbOrderExample$Criteria.class 24KB
TbOrderShippingExample$GeneratedCriteria.class 24KB
TbItemExample$GeneratedCriteria.class 21KB
TbContentExample$GeneratedCriteria.class 20KB
cart_jsp.class 19KB
TbOrderShippingExample$Criteria.class 17KB
TbContentCategoryExample$GeneratedCriteria.class 17KB
TbOrderItemExample$GeneratedCriteria.class 17KB
TbItemCatExample$GeneratedCriteria.class 16KB
TbItemExample$Criteria.class 16KB
TbUserExample$GeneratedCriteria.class 15KB
TbContentExample$Criteria.class 15KB
TbOrderItemExample$Criteria.class 12KB
search_jsp.class 12KB
TbContentCategoryExample$Criteria.class 12KB
TbItemCatExample$Criteria.class 12KB
footer_jsp.class 11KB
TbUserExample$Criteria.class 11KB
header_jsp.class 11KB
login_jsp.class 9KB
TbItemParamExample$GeneratedCriteria.class 9KB
TbItemParamItemExample$GeneratedCriteria.class 9KB
shortcut_jsp.class 8KB
CartServiceImpl.class 8KB
TbItemDescExample$GeneratedCriteria.class 8KB
index_jsp.class 7KB
cartSuccess_jsp.class 7KB
ItemServiceImpl.class 6KB
UserServiceImpl.class 6KB
TbItemParamItemExample$Criteria.class 6KB
TbItemParamExample$Criteria.class 6KB
CookieUtils.class 6KB
HttpClientUtil.class 5KB
ItemServiceImpl.class 5KB
TbItemDescExample$Criteria.class 5KB
ContentCategoryServiceImpl.class 5KB
footer_002dlinks_jsp.class 5KB
UserController.class 4KB
ItemCatServiceImpl.class 4KB
TaotaoResult.class 4KB
ItemServiceImpl.class 4KB
TbOrder.class 4KB
OrderServiceImpl.class 4KB
ContentServiceImpl.class 4KB
ItemParamServiceImpl.class 4KB
ItemParamItemServiceImpl.class 4KB
SearchDaoImpl.class 3KB
CartController.class 3KB
ItemServiceImpl.class 3KB
TbOrderShipping.class 3KB
OrderController.class 3KB
ContentServiceImpl.class 3KB
TbContent.class 3KB
TbItem.class 3KB
ContentServiceImpl.class 3KB
ItemCatServiceImpl.class 3KB
StaticPageServiceImpl.class 3KB
ItemParamController.class 3KB
ItemController.class 3KB
FastDFSClient.class 3KB
LoginInterceptor.class 3KB
JedisClientSingle.class 3KB
JedisClientSingle.class 3KB
JedisClientSingle.class 3KB
JedisClientSingle.class 3KB
ContentCategoryController.class 2KB
SearchController.class 2KB
JsonUtils.class 2KB
TbContentCategoryExample.class 2KB
TbOrderShippingExample.class 2KB
TbItemParamItemExample.class 2KB
TbContentCategoryExample$Criterion.class 2KB
TbItemParamItemExample$Criterion.class 2KB
TbOrderShippingExample$Criterion.class 2KB
TbOrderItemExample$Criterion.class 2KB
TbItemParamExample$Criterion.class 2KB
TbItemDescExample$Criterion.class 2KB
TbContentExample$Criterion.class 2KB
TbItemCatExample$Criterion.class 2KB
TbOrderItemExample.class 2KB
TbItemParamExample.class 2KB
TbOrderExample$Criterion.class 2KB
TbContentCategory.class 2KB
TbItemExample$Criterion.class 2KB
TbUserExample$Criterion.class 2KB
SearchServiceImpl.class 2KB
TbOrderItem.class 2KB
TbItemDescExample.class 2KB
TbContentExample.class 2KB
TbItemCatExample.class 2KB
共 1826 条
- 1
- 2
- 3
- 4
- 5
- 6
- 19
资源评论
龙年行大运
- 粉丝: 1264
- 资源: 3865
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- RHCE linux下的火墙管理 及下载
- ESP32-C3FH4 : UltraLowPower SoC with RISCV SingleCore CPU Supporting 2.4 GHz WiFi and Bluetooth LE
- 用于解包和反编译由 Python 代码编译的 EXE 的辅助脚本 .zip
- 用于自动执行任务的精选 Python 脚本列表.zip
- 全国IT学科竞赛蓝桥杯的比赛特点及参赛心得
- 用于编码面试审查的算法和数据结构 .zip
- 用于操作 ESC,POS 打印机的 Python 库.zip
- 用于控制“Universal Robots”机器人的 Python 库.zip
- 用于控制 Broadlink RM2,3 (Pro) 遥控器、A1 传感器平台和 SP2,3 智能插头的 Python 模块.zip
- 用于接收和交互来自 Slack 的 RTM API 的事件的框架.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功