Ego(电商项目)复盘

2022-06-28 20:47:57 浏览数 (1)

本文最后更新于 824 天前,其中的信息可能已经有所发展或是发生改变。

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 中新建拦截器
代码语言:javascript复制
                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

Post Views: 475

0 人点赞