Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Litemall
Commits
6f3445fa
Commit
6f3445fa
authored
Nov 22, 2018
by
Junling Bu
Browse files
更新文档
parent
5905fdd7
Changes
3
Hide whitespace changes
Inline
Side-by-side
doc/FAQ.md
View file @
6f3445fa
...
...
@@ -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. 项目
...
...
doc/admin.md
View file @
6f3445fa
...
...
@@ -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 开发新组件
...
...
doc/wxmall.md
View file @
6f3445fa
...
...
@@ -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过期返回
4
01
代
码时,则
及时清除过期的登录状态信息
;
而用户登录失败时则app.globalData.
hasLogin
为
未登录状态。
2.
如果后
端
token过期返回
5
01
错误
码时,则
前端清理
`userInfo`
和
`token`
;
3.
用户执行退出操作,则清理
`userInfo`
和
`token`
,同时设置
hasLogin未登录状态。
注意:
> 这里的逻辑可能有点乱。。。,但是目前实际效果看没有问题。
#### 3.2.
2
.2 登录时机
#### 3.2.
3
.2 登录时机
登录请求用户信息的时机存在两种设计:
1.
一种是小程序加载时,即申请用户信息,这种实现较简单;
2.
另外一种是小程序加载时不需要,但是小程序用户需要真正用户信息时才
申请用户信息
,
1.
一种是小程序加载时,即申请用户信息,这种实现较简单
,但是用户体验可能不是很好
;
2.
另外一种是小程序加载时不需要,但是小程序用户需要真正用户信息时才
请求用户登录
,
而这种实现较复杂。
目前采用第二
张实现,可以
分成两种情况:
目前采用第二
种方式实现,这里又可以进一步
分成两种情况:
*
用户主动登录
用户主动登录,指的是
`
我的
`
页面中用户没有登录显示
`点击登录`
的效果。
用户主动登录,指的是
`
个人
`
页面中用户没有登录显示
`点击登录`
的效果。
*
用户被动登录
用户被动登录,指的是用户想购买商品或者需要用户登录才能操作的行为,
此时因为向服务器请求时token没有设置,因此服务器拒绝用户的请求,同时返回
`
4
01`
业务代码。
此时因为向服务器请求时token没有设置,因此服务器拒绝用户的请求,同时返回
`
5
01`
业务代码。
目前需要检测用户登录的页面有:
*
购物车
*
我的主页
讨论:
> 对于第二张情况,原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
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment