Ego(电商项目)复盘
本文最后更新于 980 天前,其中的信息可能已经有所发展或是发生改变。

1.分析sql文件

  • 1.1 tb_content 内容(门户广告)
    id bigint(20)
    category_id bigint(20) '内容类目ID',
    title '内容标题',
    sub_title '子标题',
    title_desc '标题描述',
    url '链接',
    pic '图片绝对路径',
    pic2 '图片2',
    content '内容',
    created ,
    updated ,
  • 1.2 tb_content_category内容分类;
    id '类目ID',
    parent_id'父类目ID=0时,代表的是一级的类目',
    name '分类名称',
    status '状态。可选值:1(正常),2(删除)',
    sort_order'排列序号,表示同级类目的展现次序,如数值相等则按名称次序排列。取值范围:大于零的整数',
    is_parent'该类目是否为父类目,1为true,0为false',
    created '创建时间',
    updated '创建时间',
  • 1.3tb_item '商品表'
    id '商品id,同时也是商品编号',
    title '商品标题',
    sell_point'商品卖点',
    price'商品价格,单位为:分',
    num '库存数量',
    barcode '商品条形码',
    image'商品图片',
    cid '所属类目,叶子类目',
    status '商品状态,1-正常,2-下架,3-删除',
    created '创建时间',
    updated '更新时间',
  • 1.4 tb_item_cat '商品类目'
    id '类目ID',
    parent_id '父类目ID=0时,代表的是一级的类目',
    name '类目名称',
    status '状态。可选值:1(正常),2(删除)',
    sort_order '排列序号,表示同级类目的展现次序,如数值相等则按名称次序排列。取值范围:大于零的整数',
    is_parent '该类目是否为父类目,1为true,0为false',
    created '创建时间',
    updated '创建时间',
  • 1.5tb_item_desc'商品描述表'
    item_id '商品ID',
    item_desc'商品描述',
    created '创建时间',
    updated '更新时间',
  • 1.6 tb_item_param '商品规则参数'
    id
    item_cat_id '商品类目ID',
    param_data '参数数据,格式为json格式',
    created
    updated
  • 1.7 tb_item_param_item '商品规格和商品的关系表'
    id
    item_id '商品ID',
    param_data '参数数据,格式为json格式',
    created
    updated
  • 1.8 tb_order
    order_id '订单id',
    payment '实付金额。精确到2位小数;单位:元。如:200.07,表示:200元7分',
    payment_type '支付类型,1、在线支付,2、货到付款',
    post_fee '邮费。精确到2位小数;单位:元。如:200.07,表示:200元7分',
    status'状态:1、未付款,2、已付款,3、未发货,4、已发货,5、交易成功,6、交易关闭
    create_time '订单创建时间',
    update_time'订单更新时间',
    payment_time '付款时间',
    consign_time '发货时间',
    end_time '交易完成时间',
    close_time '交易关闭时间',
    shipping_name '物流名称',
    shipping_code '物流单号',
    user_id '用户id',
    buyer_message '买家留言',
    buyer_nick '买家昵称',
    buyer_rate '买家是否已经评价',
  • 1.9 tb_order_item (
    id ,
    item_id '商品id',
    order_id '订单id',
    num '商品购买数量',
    title '商品标题',
    price '商品单价',
    total_fee '商品总金额',
    pic_path'商品图片地址',
  • 1.10 tb_order_shipping (
    order_id '订单ID',
    receiver_name '收货人全名',
    receiver_phone '固定电话',
    receiver_mobile '移动电话',
    receiver_state '省份',
    receiver_city '城市',
    receiver_district '区/县',
    receiver_address '收货地址,如:xx路xx号',
    receiver_zip '邮政编码,如:310001',
    created
    updated
  • 1.11 tb_user '用户表'
    id
    username '用户名',
    password '密码,加密存储',
    phone '注册手机号',
    email '注册邮箱',
    created
    updated

2.系统架构

  • 2.1 门户
  • 2.2 商品搜索
  • 2.3 商品展示
  • 2.4 购物车
  • 2.5 登录
  • 2.6 订单
  • 2.7 后台

3.总体项目结构

  • 3.1 cart 购物车
  • 3.2 commons 通用
  • 3.3 item 商品
  • 3.4 manage 后台管理
  • 3.5 order 订单
  • 3.6 paeent 父容器
  • 3.7 passport 单点登录
  • 3.8 pojo 实体
  • 3.9 portal 门户
  • 3.10 redis 缓存
  • 3.11 search 搜索 solr
  • 3.12 service dubbo服务接口
  • 3.13 service-impl dubbo的provider 数据访问层

4.实施步骤

  • 4.1. 电商Ego-基于SOA架构,使用Dubbo,逆向工程,分页插件完成商品查询
    • 搭建环境
    • 逆向工程
    • 基于SOA架构:面向服务架构
    • mybatis插件
    • 后台商品分页
    • 后台商品上架,下架,删除
  • 4.2. 电商Ego-使用VSFTPD和Nginx完成商品新增
    • 后台商品新增
    • 在在ego-service-impl的applicationContext-dubbo.xml注册发布服务接口
    • 实现商品新增以及图片上传
    • 在 linux 中安装 vsftpd,安装后实现使用 ftpclient 完成图片上传功能.
    • 在 vsftpd 所在服务器安装 nginx,实现图片回显
    • 因为vsftp使用ftp协议,前端就无法使用http协议访问静态资源的方式去访问上传的图片资源,最终使用nginx解决
    • 使用属性文件来实现软编码
    • jsp中使用kindeditor 的多文件上传插件
  • 4.3. 电商Ego-基于json格式完成商品规格参数管理
  • 优化规格参数数据库设计
  • 这个字段设计起来有点麻烦,不同的商品类型对应不同的商品规格,比如手机,它的商品规格包括摄像头信息,网络规格等。电脑的就没有网络规格,然后网络规格又有很多子项,比如网络频段,支持的sim卡数量,如果全部建成表的话就有,一个商品,对应一个商品分类(手机or电脑),对应多个规格(网络频段,基本参数),对应多个规格子项。这样带来的直接影响就是数据访问效率下降,所以改成了使用json格式来存储规格参数,商品表对应规格参数表(id,商品id,规格参数,创建时间,更新时间),而且在mysql5.7过后支持json数据格式了,但是我好像用的5.5,所以就要text来存储的。
  • 实现规格参数查询
  • 4.4. 电商Ego-使用jsonp完成前台首页导航菜单
    • 在 ego-portal 中显示 tb_item_cat 商品类目的数据,让 ego-portal 调用 ego-item 中的数据,由 ego-item 调用 dubbo
    • 产生跨域
      • 一个 Servlet 容器(tomcat)中项目调用另一个 servlet 容器 (tomcat)中项目,称为跨域
      • ajax 在研发时处于安全性考虑不允许跨域请求的.
      • 解决办法:使用 jsonp
        如果 ajax 请求的控制器返回的就是字符串六或 json 数据,不能访问,可以在一个项目直接访问另一个项目的 js 文件,控制器返回的结果伪装成 js 文件,前端js ajax dataType: 一定要设置 jsonp,jsonp: 传递给服务器的参数名.省略的默认 callback,使用 spring 对 jackson 封装类 MappingJacksonValue,返回的是一个方法名和方法,我就将需要返回的数据放在方法里面
      • 解决办法:由 ego-portal访问自己的控制器,自己的控制器访问自己的 service,在自己的 service 中使用 httpclient,调用ego-item 的控制器方法.
  • 4.5. 电商Ego-完成CMS系统
    • 内容分类查询
    • 内容分类新增
    • 内容分类重命名
    • 内容分类删除
    • 内容查询
    • 内容新增
    • 内容删除
    • 内容修改
  • 4.6. 电商Ego-添加前台大广告位数据缓存
    • Redis 集群安装
    • 完成门户大广告显示
    • 完成后台大广告缓存数据同步
  • 4.7. 电商Ego-SolrJ操作SolrCloud
    • Solr是什么?
    • 就是一个 war 项目
    • Solr基于apache lucene
    • 自己的项目如何和 Solr 进行交互?
    • 特定的 API 叫做 SolrJ
    • Solr具备数据持久化功能.
    • Solr 中会存储需要进行搜索的数据
    • 把所有数据都初始化到 Solr 中.
    • Solr作用(什么时候使用 Solr)
    • 大量数据检索时使用 Solr,能提升检索效率.
    • Solr是基于索引进行查询的.
    • 顺序查询:从内容的最开始找到内容为止
    • 反向键索引:把内容中进行拆分
    • Solr默认对中文拆词功能支持不好
    • IK Analyzer 中文拆词器
  • 4.8. 电商Ego-完成商品搜索功能
    • Solr 数据初始化编写
    • Ego-Search 项目
    • HttpClient
  • 4.9. 电商Ego-显示商品详细详情
    • 显示商品详细信息
    • 显示商品的规格参数
    • 显示商品描述功能
    • 延迟加载
    • 使用 js 的 setTimeout 延迟 1 秒加载,提升用户体验
    • 项目中如果页面数据过大,可以考虑一些不是立即看见的内容选择延迟加载.
  • 4.10. 电商Ego-完成SSO单点登录系统
    • SSO 简介
      • 英文名称(Single Sign On)
      • 中文名称:单点登录
      • 解释: 一次登录,让其他项目共享登录状态.本质:使用特定技术在分布式项目中模拟 HttpSession 功能.
      • 技术选型:Redis+Cookie 模拟 HttpSession 功能
    • HttpSession 和 Cookie
    • 搭建 ego-passport 并编写代码
  • 4.11. 电商Ego-购物车
    • 新建 ego-cart 并完成拦截器功能
      • 在 ego-cart 中新建拦截器
                public class LoginInterceptor implements HandlerInterceptor {
                    @Override
                    public boolean preHandle(HttpServletRequest request,
                        HttpServletResponse response, Object handler)
                    throws Exception {
                        使用HttpClient发送请求到到单点登录项目
                    }

                在 ego-cart 的 springmvc.xml 中配置拦截器拦截全部

                <!-- 拦截器 -->
                <mvc:interceptors>
                    <bean class="com.ego.cart.interceptor.LoginInterceptor"></bean>
                </mvc:interceptors>
  • 4.12. 电商Ego-订单系统实现
    • 在订单确认页面中从 redis 中把数据查询出来并显示
    • 确认商品数量
    • 提交订单时复杂数据类型传递.
    • 向 mysql 中 3 个表新增.
    • 使用事务回滚时
      1. 在spring中配置声明式事务,(aop)
      2. 该执行回滚时抛出异常,一直往上抛,不处理
      3. 抛出异常时spring就会进行回滚了
      4. 在controller中处理,因为要获取异常信息。
    • 添加拦截器,实现登录拦截
  • 4.13. 电商Ego-MySql读写分离+MyCat分库分表
    • MySQL 主从备份
      1. MySQL 默认支持主(master)从(slave)功能.
      2. 配置完主从备份后效果:在主数据库中操作时,从同步进行变化.
      3. 主从本质:主数据的操作写入到日志中,从数据库从日志中读取,进行操作.
    • MyCat 简介
      • 数据库中间件软件.
      • 利用 mySQL 主从备份功能实现读写分离.
        • 增加,删除,修改,都操作主数据库
        • 查询到从数据库中查询.
        • 优点:提升程序执行效率.
      • 具备分库/分表功能
        • 默认 MyCat 分库(建议使用)
        • 可以配置让MyCat进行分表,业务比较复杂,配置起来也比较复杂.
      • 要求至少 3 个 database
        • 逻辑库: 一个包含了所有数据库的逻辑上的数据库
        • 逻辑表: 一个包含了所有表的逻辑上的表
        • 数据主机:数据库软件安装到哪个服务器上
        • 数据节点:数据库软件中的 database
        • 分片规则: 默认每个表中数据都一样的
        • 读主机:哪个数据库做为读操作
        • 写主机.:哪个数据做为写操作

4.14. 电商Ego-项目部署

  • 部署 Dubbo
  • 部署 ego-portal
  • 部署 ego-item 设置虚拟域名
  • 配置 Nginx 负载均衡
  • 使用多个 tomcat, 每个 tomcat 中都部署相同的项目
  • 使用 nginx 反向代理多个 tomcat
作者:Yuyy
博客:https://yuyy.info
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇