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
You need to sign in or sign up before continuing.
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