# WeChatApp
**Repository Path**: sai_team/WeChatApp
## Basic Information
- **Project Name**: WeChatApp
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2021-06-01
- **Last Updated**: 2021-12-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
**京西商城 小程序+SB开发手册**
**小组成员: 陈耀伟405 甘建文410 李丁成415**
**腾讯文档地址:https://docs.qq.com/doc/DUFBSQmlKQktQS1Rl**
## 一、项目分工
1. 小程序:陈耀炜
2. 后端:陈耀炜
3. 前端:陈耀炜
4. 数据库设计:陈耀炜
5. 数据爬取/表格导出/docker配置:甘建文
6. 其他:李丁成
## 二、小程序端
### 核心业务功能
首页,我的,购物车,下单,订单,搜索,商品详情,广告
### 首页:商品列表和广告推送,index文件
#### 首页样式


#### 获取商品列表api


方法:post
参数:pageNum 商品页数
返回:json字符串;goodList:包含商品列表;totalPages,商品总页数
#### c)获取广告api


方法:post
返回:json字符串,包含推送的广告信息
#### d)获取首页分类api


方法:post
参数:无
返回:json字串,包含分类数组

#### e)下拉刷新api:基本应用于所有列表,其余不在赘述


判断页数pageNum是否大于totalPages,若小于则调用获取商品列表api,并合并两个商品列表,pageNum+1。
### 商品搜索:动态展示搜索目录,search文件
#### 动态获取搜索目录api

方法:post
返回:json字符串,包含符合搜索关键字的商品列表search_list

#### b)获取搜索商品api

方法:post
参数:pageNum,当前商品页数;keyword:查询关键词
返回:json字符串,包含
totalPages,符合查询条件商品总页数;pageNum,当前商品页数;
good_list,商品列表:
同样包含下拉刷新功能
### 商品详情:显示商品具体信息,goods文件
#### 获取商品详细信息(图片,价格,参数,介绍等)api

方法:post
参数:id,商品的id
返回:json字符串,包含
good,商品价格,封面,介绍;goodslide,商品展示图;goodintro,商品介绍图;goodversion,商品版本


### 购物车与下单
#### 添加购物车api,selectgood文件

> 从缓存中取得商品属性,并合并成一个购物车商品列表:attr_item放进缓存

#### 显示购物车api,cart文件

> 从缓存中获取购物车商品列表
#### 下单api,pay文件

> 方法:post
> 参数:payList,付款的商品列表;receiverName,收货人姓名;mobile,收货人电话;
> city,province,addressDetail,分别为收货人城市,省份和详细地址
> 返回:lockedMessage,判断用户时候支付成功,若用户账号被锁定,则禁止交易
### 我的:订单,地址信息和注销,mine文件

#### 地址修改
> 修改地址api

> 检测输入是否为空且数据格式是否正确

#### 订单信息

> 订单信息获取api

> 方法:post
> 参数:无
> 返回值:json字符串,包含 orderList,订单列表
### 分类:显示所有商品分类,categories文件

#### 获取所有分类的api


> 方法:post
> 参数:无
> 返回值:json字符串,包含 indexNav,商品分类列表
#### 按分类获取商品的api

> 方法:post
> 参数:keyword,所选的分类;pageNum,商品当前页数
> 返回:json字符串,包含 goods_list ,商品列表;totalPages,商品总页数
> 包含下拉刷新,参考首页,不再赘述
## 三、工程目录
### 1.git仓库
> 仓库地址:
### 2.工程目录
因为前端,后端,数据库和微信小程序都是一人完成,所以没有构建多模块项目

静态资源(css,js,img等)放在resources目录下的static中
mybaitis的xml文件放在resources目录下的mybatis中
属性配置在resources目录下的.yml文件中
excepiton:自定义异常
pojo:实体类
security:springsecurity的相关过滤器和manager
config:相关配置类
utils:相关工具类
controller文件中:
WeChat\*\*的类是关于微信小程序的controller
Admin\*\*是关于后台管理程序的controller
## 四、后台管理
### 核心功能
> 商品管理:包括商品的详细信息,价格,版本等相关信息,可对商品重要字段进行排序,导出商品信息到Excel中
> 比较各商品的销售总量和销售额:用amcharts渲染柱状图和折线图
> 分类管理:添加和删除分类
> 广告管理:定制首页和其他页面的广告推送,热门分类等
> 用户管理:查看用户基本信息和相关的订单信息,对用户进行锁定和冻结等
> 订单管理:查看订单,可根据多个字段进行排序,导出订单信息到excel中
> 后台账号管理:修改密码,增加或删除子账号等
### 项目框架
> 后端:springboot整合mybatis,springsecurity。
> 前端:thymeleaf模板
## 五、微信授权登录
### 1.流程图

### 具体实现
#### a)springsecurity配置


在UsernamePasswordAuthenticationFilter前添加jwt认证过滤器
#### b)小程序向后台发送请求
> 调用wx.login方法

#### c)后台处理登录请求
JwtAuthenticationTokenFilter检测请求没有携带token且url为/wechat/\*\*,则由WxAppletAuthenticationFilter向腾讯服务器请求sessionkey和openid,代码如下

通过openid查询数据库,若不存在该用户则由WxAppletAuthenticationManager添加用户,代码如下

然后验证用户身份,由JwtTokenUtils根据用户信息生成jwt令牌返回给微信小程序,登录成功


返回结果:

## 六、后台功能
### 管理员登录+腾讯防水墙


#### springsecurity配置

#### 防水墙javascript

#### c)后台ticket检验


#### 数据库获取用户名密码

### 商品管理
#### 商品列表


> 前端使用amcharts渲染柱状图和折线图,展示了每个商品总销售量和总销售额


> 有基本的修改删除和导出列表的功能,点击箭头可以实现字段升序/降序排列,列表使用mybatis的pagehelper插件实现了分页功能,通过左侧导航栏的分类可以实现按分类检索商品。搜索栏可以根据关键词查找商品。


> 向上的箭头表示升序排列,向下的箭头表示降序排列,双向箭头表示字段还未排序

> 上图的controller可以根据字段升降序状态,关键词,页数等参数查找不同的商品列表

> 利用mybatis的动态sql语句可以满足不同情况的查询要求
#### 修改商品基本属性和广告推送
> 点击修改按钮即可进入商品的修改界面


> 上半部分是基本的商品信息,下面的三个广告选择栏则可以选择商品广告的推送方向。默认全为false,表示不推送商品广告。


> 同样使用mybatis的动态sql,一条sql语句即可满足绝大多数的需求
#### c)修改商品的版本

> 点击版本按钮可以进入商品版本修改页面,显示了当前商品版本的销售总价和销售数量,库存价格等


> 点击修改按钮,可以实现即时修改,不用跳转。

> 点击新增可以对商品版本进行添加


> 同样是动态sql
### 3.分类管理
#### 展示分类

#### 添加分类

> 当首页展示为true时,分类会在微信小程序首页出现,否则只能在微信小程序的分类里查看

> 分类的改变会实时在侧栏更新

### 用户管理
#### a)用户信息展示


#### b)用户信息修改
对用户进行锁定(禁止登陆)或冻结(禁止交易)
当登陆为false时用户不能登陆微信小程序,当交易为false时用户不能购买商品

依然是动态修改。点击订单可以查看该用户的订单
### 订单管理
#### 订单展示

通过搜索栏可以根据关键词搜索订单,点击箭头可以按字段升序/降序排列
#### 订单查询


利用动态sql根据不同条件来检索订单信息
### 管理员信息管理
#### 管理员列表

显示所有的管理员账号,权限为ROLE_ADMIN为超级管理员,可以创建,修改,删除其他管理员账号。权限为ROLE_ROOT为普通管理员账号,不能对其他管理员账号进行修改
。id为1的超级管理员不能被删除或者修改权限,只能更改账号或密码。
#### 修改管理员信息


#### 新增管理员账号

> 新添加管理员账号权限默认为ROLE_ROOT

#### 密码找回
> 通过管理员注册邮箱可以找回密码


> 用户名和邮箱填写正确密码会发送至邮箱中
### 表格导出
#### a)商品列表导出Excel
> 点击商品列表右上方导出按钮即可导出商品



> Excel工具类
> controller

#### b)订单导出Excel


## 七.数据库
sql文件在根目录下
### 重要实体类

#### 管理员实体类


#### 用户实体类

#### 商品基本信息实体类


#### 商品版本实体类


#### 订单实体类


### 相关配置,持久层采用mybatist框架


## 八.docker
### dockerfile

### docker-compose


### 相关命令
docker build -t spring.
mvn install dockerfile:build
docker -compose up -d
### pom配置
\happy\
\
\com.spotify\
\dockerfile-maven-plugin\
\1.3.6\
\
\\${docker.image.prefix}/\${project.artifactId}\
\
\target/\${project.build.finalName}.jar\
\
\
\
\test\
### 运行效果

直接用docker运行项目

- -