Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

web 开发笔记 #55

Open
GH1995 opened this issue Mar 10, 2020 · 23 comments
Open

web 开发笔记 #55

GH1995 opened this issue Mar 10, 2020 · 23 comments
Labels

Comments

@GH1995
Copy link
Owner

GH1995 commented Mar 10, 2020

  • Web框架三大核心知识(路由、控制器与模型)
  • 验证器、读取器、缓存与全局异常处理
  • ORM:模型与关联模型
@GH1995 GH1995 added the web label Mar 10, 2020
@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

微信知识点

  • 微信小程序
  • 微信登录
  • 微信支付(预订单、支付与回调通知处理)
  • 微信模板消息

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

MySQL

  • 数据库表设计
  • 数据冗余的合理利用
  • 事务与锁在订单(库存量)检测中的应用

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

产品功能

首页

  • 轮播图

    • 点击跳转到商品详情
    • 数据库在设计时需支持跳转到其他类型页面
  • 专题

    • 专题是一组商品的集合
    • 点击后跳转到商品专题页面
      • 一张头图
      • 商品列表
    • 下拉刷新整个页面数据

分类

  • 左侧显示一级分类
    • 一级分类点击显示该类目下所有商品
      • 点击商品进入商品详情页面
    • 分类切换加入贝塞尔曲线动画
    • 分类切换务必不要每次加载服务器数据,提供下拉刷新功能刷新数据

商品详情

  • 商品头图1张
  • 选择数量
  • 加入到购物车
    • 加入到购物车添加一个动画效果
  • 显示商品概要
  • 显示商品详情
  • 显示产品参数
  • 显示售后保障

购物车

  • 核心功能,业务逻辑复杂
  • 购物车信息全部存储在小程序缓存中,不和服务器通信
  • 商品数量
    • 按照惯例数量不可以减到0
    • 动态计算价格
  • 全选
  • 删除商品
  • 支付后自动删除购物车商品

我的

  • 获取用户微信信息
    • 注意处理用户拒绝的情景
  • 地址管理
    • 进入修改页面
    • 省市县三级列表联动
  • 我的订单(全部订单)
    • 点击订单后进入到订单详情页面
  • 订单分类
    • 待付款
    • 已付款
    • 已发货
  • 商品详情
    • 商品展示图
    • 商品详情图
    • 商品基本信息
    • 商品附加属性

下单页面

  • 展示购买商品金额
  • 可修改收货地址
  • 点击支付拉起微信支付

支付结果页

  • 成功
  • 失败

用户登陆与令牌

  • 应用程序启动时检测令牌
  • 调用服务器接口返回401时重新获取令牌并访问

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

数据库表设计

  1. 不必有外键约束
  2. 假删除
  3. 边写边改

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

banner

-- ----------------------------
-- Table structure for banner
-- ----------------------------
DROP TABLE IF EXISTS `banner`;
CREATE TABLE `banner` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL COMMENT 'Banner名称,通常作为标识',
  `description` varchar(255) DEFAULT NULL COMMENT 'Banner描述',
  `delete_time` int(11) DEFAULT NULL,
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='banner管理表';
-- ----------------------------
-- Records of banner
-- ----------------------------
INSERT INTO `banner` VALUES ('1', '首页置顶', '首页轮播图', null, null);

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `banner_item` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `img_id` int(11) NOT NULL COMMENT '外键,关联image表',
  `key_word` varchar(100) NOT NULL COMMENT '执行关键字,根据不同的type含义不同',
  `type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '跳转类型,可能导向商品,可能导向专题,可能导向其他。0,无导向;1:导向商品;2:导向专题',
  `delete_time` int(11) DEFAULT NULL,
  `banner_id` int(11) NOT NULL COMMENT '外键,关联banner表',
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='banner子项表';
``

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL COMMENT '分类名称',
  `topic_img_id` int(11) DEFAULT NULL COMMENT '外键,关联image表',
  `delete_time` int(11) DEFAULT NULL,
  `description` varchar(100) DEFAULT NULL COMMENT '描述',
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COMMENT='商品类目'

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `image` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` varchar(255) NOT NULL COMMENT '图片路径',
  `from` tinyint(4) NOT NULL DEFAULT '1' COMMENT '1 来自本地,2 来自公网',
  `delete_time` int(11) DEFAULT NULL,
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8mb4 COMMENT='图片总表';

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_no` varchar(20) NOT NULL COMMENT '订单号',
  `user_id` int(11) NOT NULL COMMENT '外键,用户id,注意并不是openid',
  `delete_time` int(11) DEFAULT NULL,
  `create_time` int(11) DEFAULT NULL,
  `total_price` decimal(6,2) NOT NULL,
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '1:未支付, 2:已支付,3:已发货 , 4: 已支付,但库存不足',
  `snap_img` varchar(255) DEFAULT NULL COMMENT '订单快照图片',
  `snap_name` varchar(80) DEFAULT NULL COMMENT '订单快照名称',
  `total_count` int(11) NOT NULL DEFAULT '0',
  `update_time` int(11) DEFAULT NULL,
  `snap_items` text COMMENT '订单其他信息快照(json)',
  `snap_address` varchar(500) DEFAULT NULL COMMENT '地址快照',
  `prepay_id` varchar(100) DEFAULT NULL COMMENT '订单微信支付的预订单id(用于发送模板消息)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `order_no` (`order_no`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=539 DEFAULT CHARSET=utf8mb4;

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `order_product` (
  `order_id` int(11) NOT NULL COMMENT '联合主键,订单id',
  `product_id` int(11) NOT NULL COMMENT '联合主键,商品id',
  `count` int(11) NOT NULL COMMENT '商品数量',
  `delete_time` int(11) DEFAULT NULL,
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`product_id`,`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `product` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(80) NOT NULL COMMENT '商品名称',
  `price` decimal(6,2) NOT NULL COMMENT '价格,单位:分',
  `stock` int(11) NOT NULL DEFAULT '0' COMMENT '库存量',
  `delete_time` int(11) DEFAULT NULL,
  `category_id` int(11) DEFAULT NULL,
  `main_img_url` varchar(255) DEFAULT NULL COMMENT '主图ID号,这是一个反范式设计,有一定的冗余',
  `from` tinyint(4) NOT NULL DEFAULT '1' COMMENT '图片来自 1 本地 ,2公网',
  `create_time` int(11) DEFAULT NULL COMMENT '创建时间',
  `update_time` int(11) DEFAULT NULL,
  `summary` varchar(50) DEFAULT NULL COMMENT '摘要',
  `img_id` int(11) DEFAULT NULL COMMENT '图片外键',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8mb4;

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `product_image` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `img_id` int(11) NOT NULL COMMENT '外键,关联图片表',
  `delete_time` int(11) DEFAULT NULL COMMENT '状态,主要表示是否删除,也可以扩展其他状态',
  `order` int(11) NOT NULL DEFAULT '0' COMMENT '图片排序序号',
  `product_id` int(11) NOT NULL COMMENT '商品id,外键',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4;

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `product_property` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT '' COMMENT '详情属性名称',
  `detail` varchar(255) NOT NULL COMMENT '详情属性',
  `product_id` int(11) NOT NULL COMMENT '商品id,外键',
  `delete_time` int(11) DEFAULT NULL,
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `theme` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL COMMENT '专题名称',
  `description` varchar(255) DEFAULT NULL COMMENT '专题描述',
  `topic_img_id` int(11) NOT NULL COMMENT '主题图,外键',
  `delete_time` int(11) DEFAULT NULL,
  `head_img_id` int(11) NOT NULL COMMENT '专题列表页,头图',
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='主题信息表';

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `theme_product` (
  `theme_id` int(11) NOT NULL COMMENT '主题外键',
  `product_id` int(11) NOT NULL COMMENT '商品外键',
  PRIMARY KEY (`theme_id`,`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='主题所包含的商品';

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `third_app` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `app_id` varchar(64) NOT NULL COMMENT '应用app_id',
  `app_secret` varchar(64) NOT NULL COMMENT '应用secret',
  `app_description` varchar(100) DEFAULT NULL COMMENT '应用程序描述',
  `scope` varchar(20) NOT NULL COMMENT '应用权限',
  `scope_description` varchar(100) DEFAULT NULL COMMENT '权限描述',
  `delete_time` int(11) DEFAULT NULL,
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='访问API的各应用账号密码表';

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `openid` varchar(50) NOT NULL,
  `nickname` varchar(50) DEFAULT NULL,
  `extend` varchar(255) DEFAULT NULL,
  `delete_time` int(11) DEFAULT NULL,
  `create_time` int(11) DEFAULT NULL COMMENT '注册时间',
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `openid` (`openid`)
) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8mb4;

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

CREATE TABLE `user_address` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL COMMENT '收获人姓名',
  `mobile` varchar(20) NOT NULL COMMENT '手机号',
  `province` varchar(20) DEFAULT NULL COMMENT '',
  `city` varchar(20) DEFAULT NULL COMMENT '',
  `country` varchar(20) DEFAULT NULL COMMENT '',
  `detail` varchar(100) DEFAULT NULL COMMENT '详细地址',
  `delete_time` int(11) DEFAULT NULL,
  `user_id` int(11) NOT NULL COMMENT '外键',
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4;

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

~

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

image

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

  • 状态码:404、400、200、201、202、401、403、500
  • 错误码:自定义的错误ID号
  • 统一描述错误:错误码、错误信息、当前URL

  • 404:不存在
  • 400:参数错误
  • 200GET
  • 201POST 成功
  • 202PUT 成功
  • 401:未授权
  • 403:资源被禁止/A用户访问B的资源
  • 500:未知错误/服务器错误

  • 使用 Token令牌来授权和验证身份
  • 版本控制
  • 测试与生产环境分开:
    • api.xxx.com
    • dev api. xxx.com

模仿豆瓣

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

异常分类

  • 由于用户行为导的异常(没有通过验证器,没查询到结果),通常不需要记录日志,需要向用户返回具体信息
  • 服务自身异常(代码调用外部接口错溪),通常记录日志,不向客户端返回具体原因

  • code 状态码
  • msg 错误具体信息
  • errorCode 自定义错误码

@GH1995
Copy link
Owner Author

GH1995 commented Mar 10, 2020

errorCode自定义错误码

1 开头为通用错误
2 商品类错误
3 主题类错误
4 Banner类错误
5 类目类错误
6 用户类错误
8 订单类错误


10000 通用参数错误
10001 资源未找到
10002 未授权(令牌不合法)
10003 尝试非法操作(自己的令牌操作其他人数据)
10004 授权失败(第三方应用账号登陆失败)
10005 授权失败(服务器缓存异常)

20000 请求商品不存在

30000 请求主题不存在

40000 Banner不存在

50000 类目不存在

60000 用户不存在
60001 用户地址不存在

80000 订单不存在
80001 订单中的商品不存在,可能已被删除
80002 订单还未支付,却尝试发货
80003 订单已支付过

999 未知错误

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant