Commit 6f3445fa authored by Junling Bu's avatar Junling Bu
Browse files

更新文档

parent 5905fdd7
......@@ -6,11 +6,15 @@
### 1.1 小程序微信登录失败
现象:
小程序微信登录失败
原因:
目前账号的appid是本人申请,同时小程序未上线,因此开发者如果微信登录肯定会失败。
解决方案
解决:
1. 如果只是体验商品购买流程,开发者可以采用账号注册登录方式。
2. 开发者在litemall-wx和litemall-wx-api模块的appid等信息设置成自己申请的信息。
......@@ -25,7 +29,7 @@
这里可能是缓存问题,虽然修改了appid,但是微信开发者工具未及时跟新。
解决方案
解决:
微信开发者工具中修改appid以后,请关闭litemall-wx项目或者微信开发者工具,重新启动导入litemall-wx。
......@@ -39,7 +43,7 @@
数据或者图片不可访问。
解决方案
解决:
1. 确保小商场后端服务可以访问,可以通过手机浏览器访问后端服务地址测试
* 小商场的后端服务地址是localhost,则手机不可访问;
......@@ -53,7 +57,7 @@
本人手机测试正常,而第三者手机测试不正常。
解决方案
解决:
1. 确保小商场后端服务可以访问,可以通过第三者手机浏览器访问后端服务地址测试
2. 第三者手机小商场的**调试功能**开启
......@@ -76,7 +80,7 @@ litemall.wx.mch-key=
litemall.wx.notify-url=
```
解决方案
解决:
参考`3.0 小商场环境`,设置相应支付配置信息
......@@ -92,7 +96,7 @@ litemall.wx.notify-url=
因此,开发者必须确定`wx.notify-url`所指向的访问链接是可以成功访问,同时
能够返回正常的响应结果。
解决方案
解决:
1. 如果开发者是在微信开发者工具中测试支付,那么需要采用一些内网穿透工具,
`WxOrderController.payNotify`所代表的本地地址,例如`http://localhots/wx/order/pay-notify`,
......@@ -105,7 +109,36 @@ litemall.wx.notify-url=
这里主要是指litemall-admin-api和litemall-admin两个模块的相关问题。
### 2.1 Invalid bound statement
### 2.1 登录连接超时,联系管理员
现象:
管理后台登录时,出现报错信息:登录连接超时
原因:
1. 首先,需要明白这是前后端分离项目,前端会向后端发送请求;
2. 其次,需要明白报错的地方,是litemall-admin/src/utils/request.js文件中;
3. 最后,连接超时是说发送给后端的请求长时间未反应。这里存在两个可能性:
* 真连接超时,目前request.js文件中设置请求超时时间是5s,因此真的可能5s后端
未及时返回数据;
* 假连接超时,例如向一个不存在的地址请求数据,那自然是返回连接失败。
解决:
通常是开发者设置不正确引起的假连接超时。
1. 首先,用chrome的开发者工具查看登录页面向后端请求的具体地址;
2. 然后,测试后端的服务是否已启动,请求地址是否可以访问。
3. 最后,如果设置正确,用chrome的开发者工具查看登录页面向后端请求返回数据信息;
如果设置不正确,请启动相应的后端服务。
## 3. 基础系统
这里主要是指litemall-db、litemall-core和litemall-all模块三个模块的相关问题。
### 3.1 Invalid bound statement
现象:
......@@ -119,7 +152,7 @@ org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
应该是自动生成的新的XML文件没有及时跟新到编译文件夹target中,造成了target中mybatis的Java代码和XML文件不对应。
解决方案
解决:
采用maven命令或者插件先清理项目再重新编译打包,例如
```bash
......@@ -127,33 +160,27 @@ mvn clean
mvn package
```
### 2.2 登录连接超时,联系管理员
### 3.2 Unknown Column
现象:
管理后台登录时,出现报错信息:登录连接超时
原因:
1. 首先,需要明白这是前后端分离项目,前端会向后端发送请求;
2. 其次,需要明白报错的地方,是litemall-admin/src/utils/request.js文件中;
3. 最后,连接超时是说发送给后端的请求长时间未反应。这里存在两个可能性:
* 真连接超时,目前request.js文件中设置请求超时时间是5s,因此真的可能5s后端
未及时返回数据;
* 假连接超时,例如向一个不存在的地址请求数据,那自然是返回连接失败。
解决方案:
```
Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'add_time' in 'field list'
The error may exist in org/linlinjava/litemall/db/dao/LitemallSystemMapper.xml
The error may involve org.linlinjava.litemall.db.dao.LitemallSystemMapper.selectByExample-Inline
The error occurred while setting parameters
SQL: select id, key_name, key_value, add_time, update_time, deleted from litemall_system
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'add_time' in 'field list'
```
通常是开发者设置不正确引起的假连接超时。
原因是:
1. 首先,用chrome的开发者工具查看登录页面向后端请求的具体地址;
2. 然后,测试后端的服务是否已启动,请求地址是否可以访问。
3. 最后,如果设置正确,用chrome的开发者工具查看登录页面向后端请求返回数据信息;
如果设置不正确,请启动相应的后端服务。
系统处在开发中,所以数据库表根据业务会不断调整,因此如果开发者更新代码以后直接运行,有可能导致当前代码
操作数据库失败,因为开发者当前的数据库表已经过时。
## 3. 基础系统
解决:
这里主要是指litemall-d、litemall-core和litemall-all模块三个模块的相关问题
如果出现数据库方面的报错,建议开发者重新导入数据库
## 4. 项目
......
......@@ -8,7 +8,7 @@
* vue-router
* axios
* element
* vue-element-admin
* vue-element-admin 3.9.3
* 其他,见package.json
* 后台管理后端, 即litemall-admin-api模块
* Spring Boot 2.x
......@@ -16,9 +16,7 @@
目前存在的问题:
* `缺失`支持微信登录
* `缺失`首页中实现一些小组件,同时点击能够跳转相应页面
* `缺失`商品评价中管理员回复功能
* `缺失`支持导出表所有数据
* `改善`管理员登录页面打开慢,优化速度
* `改善`地址优化,目前每一次点击都会请求后台,应该缓存已有的数据
......@@ -27,7 +25,6 @@
* `功能`系统日志功能
* `功能`系统数据字典功能
* `功能`系统栏目管理功能
* `功能`支持国际化
* `功能`支持数据库备份
## 4.1 litemall-admin-api
......@@ -36,89 +33,96 @@
### 4.1.1 授权服务
见AdminAuthController类
### 4.1.2 用户管理服务
用户管理服务进一步分成:
* 会员管理服务,见AdminUserController类
* 收货地址服务,见AdminAddressController类
* 会员收藏服务,见AdminCollectController类
* 会员足迹服务,见AdminFootprintController类
* 搜索历史服务,见AdminHistoryController类
* 意见反馈服务,见AdminFeedbackController类
### 4.1.16 安全
### 4.1.3 商场管理服务
#### 4.1.16.1 Token
商城管理服务进一步分成:
* 行政区域服务,见AdminRegionController类
* 品牌制造商服务,见AdminBrandController类
* 商品类目服务,见AdminCategoryController类
* 订单管理服务,见AdminOrderController类
* 通用问题服务,见AdminIssueController类
* 关键词服务,见AdminKeywordController类
用户登录成功以后,后端会返回`token`,之后用户的请求都会携带token。
目前token的失效和跟新机制没有涉及。
#### 4.1.16.2 CROS
### 4.1.4 商品管理服务
如果litemall-admin-api不配置CROS,则Spring Boot会失败。
#### 4.1.16.3 账号密码加盐
如果是微信登录,那么无需账号和密码。
而如果用户采用了账号和密码的形式登录,那么后端需要把用户密码加盐。
#### 4.1.16.4 限制登录
如果采用账号密码登录,那么登录失败一定次数,应该限制登录。
进一步地,如果项目启用了短信功能,应该短信提醒用户,防止他人登录。
商品服务,见AdminAdminController类
目前这里没有实现,仅列出。
### 4.1.5 推广管理服务
### 4.1.17 定时任务
推广管理服务进一步分成:
### 4.1.18 并发控制
* 广告服务,见AdminAdController类
* 专题服务,见AdminTopicController类
* 团购服务,见AdminGrouponController类
参考`2.2.8 乐观锁`
### 4.1.6 系统管理服务
当乐观锁更新失败时采用多次尝试方案。
系统管理服务进一步分成:
* 管理员服务,见AdminAdminController类
* 对象存储服务,见见AdminStorageController类
### 4.1.19 事务管理
### 4.1.7 其他服务
### 4.1.20 开发技巧
* 统计服务,见AdminStatController类
* 个人服务,见AdminProfileController类
当小商城后台服务开发中因为测试或者debug可能需要经常性重启应用,此时
一旦重启,将导致小商场的小程序段的token失效,因此要求用户再次登录。
这里,介绍一个小技巧:
开发时,
### 4.1.8 安全
#### 4.1.8.1 Token
## 4.2 litemall-admin
用户登录成功以后,后端会返回`token`,之后用户的请求都会携带token。
本节介绍管理后台的前端模块
目前token的失效和跟新机制没有涉及
litemall-admin模块的代码基于[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
#### 4.1.8.2 CROS
### 4.2.1
如果litemall-admin-api不配置CROS,则Spring Boot会失败。
### 4.2.2
#### 4.1.8.3 账号密码加盐
### 4.2.3
如果是微信登录,那么无需账号和密码。
### 4.2.4
而如果用户采用了账号和密码的形式登录,那么后端需要把用户密码加盐。
### 4.2.5
#### 4.1.8.4 限制登录
### 4.2.6
如果采用账号密码登录,那么登录失败一定次数,应该限制登录。
### 4.2.7
进一步地,如果项目启用了短信功能,应该短信提醒用户,防止他人登录。
### 4.2.8
目前这里没有实现,仅列出。
### 4.2.9
### 4.1.9 定时任务
### 4.2.10 系统基础功能
AdminOrderController类存在以下三个方法,其实是三个定时任务:
* checkOrderUnpaid
* checkOrderUnconfirm
* checkOrderComment
#### 4.2.10.1 数据字典
注意:
> 虽然定时任务放在AdminOrderController类中,但是可能这里不是很合适,
> 以后需要调整或者完善。
#### 4.2.10.2 角色权限
### 4.1.10 事务管理
#### 4.2.10.3 国际化
#### 4.2.10.4 菜单
## 4.2 litemall-admin
#### 4.2.10.5 日志
本节介绍管理后台的前端模块。
litemall-admin模块的代码基于[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
## 4.3 开发新组件
......
......@@ -2,7 +2,7 @@
技术:
* 小商城前端,即litemall-wx模块
* 小商城前端,即litemall-wx模块和renard-wx模块
* 微信小程序
* 小商城后端,即litemall-wx-api模块
* Spring Boot 2.x
......@@ -176,7 +176,8 @@ litemall
具体变化可以采用工具进行对比。
注意
> 目前litemall-wx项目代码基于nideshop-mini-program的commit版本[acbf6276eb27abc6a48887cddd223d7261f0088e](https://github.com/tumobi/nideshop-mini-program/commit/acbf6276eb27abc6a48887cddd223d7261f0088e)。由于改动变化较大,因此之后litemall-wx将独立开发,nideshop-mini-program的跟新不一定会合并到litemall-wx中。
> litemall-wx模块代码基于nideshop-mini-program的commit版本[acbf6276eb27abc6a48887cddd223d7261f0088e](https://github.com/tumobi/nideshop-mini-program/commit/acbf6276eb27abc6a48887cddd223d7261f0088e)。
> 由于改动变化较大,因此之后litemall-wx将独立开发,不会合并nideshop-mini-program的更新。
### 3.2.1 业务API设置
......@@ -245,7 +246,7 @@ var WxApiRoot = 'http://localhost:8082/wx/';
因此本模块中,用户的登录状态也是由`wx.login``wx.getUserInfo`组成。
#### 3.2.2.1 登录检测
#### 3.2.3.1 登录检测
开发者可以采用`user.checkLogin`来检查是否`已登录`,而其检测逻辑是:
......@@ -253,48 +254,42 @@ var WxApiRoot = 'http://localhost:8082/wx/';
2. 同时`wx.checkSession`也成功。
但是如果每次都使用`checkLogin`可能也不太好,因此目前机制是:
1. 应用启动时就检测一次,如果登录则设置app.globalData.hasLogin为已登录状态;
1. 应用启动时检测一次,如果登录则设置app.globalData.hasLogin为已登录状态;
之后,其他页面只要查看这个状态即可知道目前是否已登录;
2. 此外,如果后token过期返回401码时,则及时清除过期的登录状态信息
而用户登录失败时则app.globalData.hasLogin未登录状态。
2. 如果后token过期返回501错误码时,则前端清理`userInfo``token`
3. 用户执行退出操作,则清理`userInfo``token`,同时设置hasLogin未登录状态。
注意:
> 这里的逻辑可能有点乱。。。,但是目前实际效果看没有问题。
#### 3.2.2.2 登录时机
#### 3.2.3.2 登录时机
登录请求用户信息的时机存在两种设计:
1. 一种是小程序加载时,即申请用户信息,这种实现较简单;
2. 另外一种是小程序加载时不需要,但是小程序用户需要真正用户信息时才申请用户信息
1. 一种是小程序加载时,即申请用户信息,这种实现较简单,但是用户体验可能不是很好
2. 另外一种是小程序加载时不需要,但是小程序用户需要真正用户信息时才请求用户登录
而这种实现较复杂。
目前采用第二张实现,可以分成两种情况:
目前采用第二种方式实现,这里又可以进一步分成两种情况:
* 用户主动登录
用户主动登录,指的是`我的`页面中用户没有登录显示`点击登录`的效果。
用户主动登录,指的是`个人`页面中用户没有登录显示`点击登录`的效果。
* 用户被动登录
用户被动登录,指的是用户想购买商品或者需要用户登录才能操作的行为,
此时因为向服务器请求时token没有设置,因此服务器拒绝用户的请求,同时返回`401`业务代码。
此时因为向服务器请求时token没有设置,因此服务器拒绝用户的请求,同时返回`501`业务代码。
目前需要检测用户登录的页面有:
* 购物车
* 我的主页
讨论:
> 对于第二张情况,原nideshop-mini-program项目是采取一种自动登录的方式。
> 这里则采用跳转登录页面的方式。
#### 3.2.2.3 登录操作
以上无论哪种情况,都会导致用户被重定向到`登录`页面来进行登录操作。
#### 3.2.3.3 登录操作
如前面讨论,这里的登录操作实际包含两个操作`wx.login``wx.getUserInfo`
开发者可以采用`user.loginByWeixin`来进行登录操作。
按照官网文档,用户登录前应该检测以下,来避免频繁无意义的登录操作,
按照小程序官网文档,用户登录前应该检测以下,来避免频繁无意义的登录操作,
因此较合适的做法如下所示:
```
......@@ -311,26 +306,51 @@ var WxApiRoot = 'http://localhost:8082/wx/';
});
```
### 3.2.4 立即购买和放入购物车
#### 3.2.3.4 登出操作
`个人`页面,如果用户已经登录,则会出现`退出登录`按钮,支持用户退出当前登录状态。
退出逻辑如下所示:
```
util.request(api.AuthLogout, {}, 'POST');
app.globalData.hasLogin = false;
wx.removeStorageSync('token');
wx.removeStorageSync('userInfo');
wx.reLaunch({
url: '/pages/index/index'
});
```
### 3.2.4 storage使用
litemall-wx模块采用storage来存储一些数据,以及支持组件间数据通信。
#### 3.2.4.1 userInfo和token
#### 3.2.4.2 cartId
#### 3.2.4.3 addressId
### 3.2.5 storage使用
### 3.2.5 加入购物车和立即购买
本模块中采用storage来存储一些数据,以及组件间进行通信。
### 3.2.6 团购
#### 3.2.5.1 userInfo和token
## 3.3 renard-wx
#### 3.2.5.2 cartId
renard-wx是另外一个小程序前端,其后端API也是litemall-wx-api。
#### 3.2.5.3 addressId
和litemall-wx的区别是:
1. 界面样式有所调整;
2. 功能进一步简化。
## 3.3 开发新功能
## 3.4 开发新功能
本章节介绍如何开发新的微信小程序功能。
### 3.3.1 小商场页面开发
### 3.4.1 小商场页面开发
### 3.3.2 交互服务API设计
### 3.4.2 交互服务API设计
### 3.3.3 后台服务开发
### 3.4.3 后台服务开发
### 3.3.4 数据库
\ No newline at end of file
### 3.4.4 数据库
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment