Junling Bu 7 年 前
コミット
6f3445fa04
3 ファイル変更166 行追加115 行削除
  1. 55 28
      doc/FAQ.md
  2. 57 53
      doc/admin.md
  3. 54 34
      doc/wxmall.md

+ 55 - 28
doc/FAQ.md

@@ -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. 项目
 

+ 57 - 53
doc/admin.md

@@ -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 开发新组件
 

+ 54 - 34
doc/wxmall.md

@@ -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 数据库
+### 3.4.4 数据库