辽宁建设工程信息网怎么无法登陆了_个人网站可以放广告吗_网站模板缺少文件怎么办_在线网站制作系统源码 3 诗词打卡微信小程序总体设计

3.1 系统功能模块设计

诗词打卡微信小程序整体的功能模块包括管理员+普通用户两个模块,其总体设计模块图如图3-1所示。

图3-1 诗词打卡微信小程序功能模块图

3.2系统E-R图设计

下面是整个诗词打卡微信小程序中主要的数据库表总E-R实体关系图。

图3-2 诗词打卡微信小程序总E-R关系图

3.3 数据库设计

通过上一节中诗词打卡微信小程序中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。

表activity_ranking (活动排行)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

activity_ranking_id

int

10

0

N

Y

活动排行ID

2

activity_name

varchar

64

0

Y

N

活动名称

3

activity_time

date

10

0

Y

N

活动时间

4

activity_type

varchar

64

0

Y

N

活动类型

5

full_name

varchar

64

0

Y

N

姓名

6

head_portrait

varchar

255

0

Y

N

头像

7

number_of_clocking_in

int

10

0

Y

N

0

打卡次数

8

recommend

int

10

0

N

N

0

智能推荐

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表auth (用户权限管理)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

auth_id

int

10

0

N

Y

授权ID:

2

user_group

varchar

64

0

Y

N

用户组:

3

mod_name

varchar

64

0

Y

N

模块名:

4

table_name

varchar

64

0

Y

N

表名:

5

page_title

varchar

255

0

Y

N

页面标题:

6

path

varchar

255

0

Y

N

路由路径:

7

position

varchar

32

0

Y

N

位置:

8

mode

varchar

32

0

N

N

_blank

跳转方式:

9

add

tinyint

3

0

N

N

1

是否可增加:

10

del

tinyint

3

0

N

N

1

是否可删除:

11

set

tinyint

3

0

N

N

1

是否可修改:

12

get

tinyint

3

0

N

N

1

是否可查看:

13

field_add

text

65535

0

Y

N

添加字段:

14

field_set

text

65535

0

Y

N

修改字段:

15

field_get

text

65535

0

Y

N

查询字段:

16

table_nav_name

varchar

500

0

Y

N

跨表导航名称:

17

table_nav

varchar

500

0

Y

N

跨表导航:

18

option

text

65535

0

Y

N

配置:

19

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

20

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表circle_classification (圈子分类)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

circle_classification_id

int

10

0

N

Y

圈子分类ID

2

circle_type

varchar

64

0

Y

N

圈子类型

3

recommend

int

10

0

N

N

0

智能推荐

4

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

5

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表classification_of_poetry (诗词分类)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

classification_of_poetry_id

int

10

0

N

Y

诗词分类ID

2

types_of_poetry

varchar

64

0

Y

N

诗词类型

3

recommend

int

10

0

N

N

0

智能推荐

4

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

5

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表clock_in_activities (打卡活动)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

clock_in_activities_id

int

10

0

N

Y

打卡活动ID

2

activity_name

varchar

64

0

Y

N

活动名称

3

activity_time

date

10

0

Y

N

活动时间

4

activity_type

varchar

64

0

Y

N

活动类型

5

activity_poster

varchar

255

0

Y

N

活动海报

6

poetry_audio

varchar

255

0

Y

N

诗词音频

7

event_details

text

65535

0

Y

N

活动详情

8

hits

int

10

0

N

N

0

点击数

9

praise_len

int

10

0

N

N

0

点赞数

10

recommend

int

10

0

N

N

0

智能推荐

11

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

12

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表clock_in_record (打卡记录)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

clock_in_record_id

int

10

0

N

Y

打卡记录ID

2

activity_name

varchar

64

0

Y

N

活动名称

3

activity_time

date

10

0

Y

N

活动时间

4

activity_type

varchar

64

0

Y

N

活动类型

5

clocking_user

int

10

0

Y

N

0

打卡用户

6

full_name

varchar

64

0

Y

N

姓名

7

open_date

date

10

0

Y

N

打开日期

8

number_of_clocking_in

varchar

64

0

Y

N

打卡次数

9

recommend

int

10

0

N

N

0

智能推荐

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表collect (收藏)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

collect_id

int

10

0

N

Y

收藏ID:

2

user_id

int

10

0

N

N

0

收藏人ID:

3

source_table

varchar

255

0

Y

N

来源表:

4

source_field

varchar

255

0

Y

N

来源字段:

5

source_id

int

10

0

N

N

0

来源ID:

6

title

varchar

255

0

Y

N

标题:

7

img

varchar

255

0

Y

N

封面:

8

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表comment (评论)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

comment_id

int

10

0

N

Y

评论ID:

2

user_id

int

10

0

N

N

0

评论人ID:

3

reply_to_id

int

10

0

N

N

0

回复评论ID:空为0

4

content

longtext

2147483647

0

Y

N

内容:

5

nickname

varchar

255

0

Y

N

昵称:

6

avatar

varchar

255

0

Y

N

头像地址:[0,255]

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

9

source_table

varchar

255

0

Y

N

来源表:

10

source_field

varchar

255

0

Y

N

来源字段:

11

source_id

int

10

0

N

N

0

来源ID:

表follow_fans (关注粉丝)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

follow_fans_id

int

10

0

N

Y

关注粉丝ID

2

title

varchar

64

0

Y

N

标题

3

circle_type

varchar

64

0

Y

N

圈子类型

4

types_of_poetry

varchar

64

0

Y

N

诗词类型

5

publishing_users

int

10

0

Y

N

0

发布用户

6

followers

int

10

0

Y

N

0

关注人员

7

recommend

int

10

0

N

N

0

智能推荐

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表hits (用户点击)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

hits_id

int

10

0

N

Y

点赞ID:

2

user_id

int

10

0

N

N

0

点赞人:

3

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

表notice (公告)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

notice_id

mediumint

8

0

N

Y

公告id:

2

title

varchar

125

0

N

N

标题:

3

content

longtext

2147483647

0

Y

N

正文:

4

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

5

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表ordinary_users (普通用户)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

ordinary_users_id

int

10

0

N

Y

普通用户ID

2

full_name

varchar

64

0

N

N

姓名

3

gender

varchar

64

0

Y

N

性别

4

examine_state

varchar

16

0

N

N

已通过

审核状态

5

recommend

int

10

0

N

N

0

智能推荐

6

user_id

int

10

0

N

N

0

用户ID

7

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表poetry_circle (诗词圈子)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

poetry_circle_id

int

10

0

N

Y

诗词圈子ID

2

title

varchar

64

0

Y

N

标题

3

circle_type

varchar

64

0

Y

N

圈子类型

4

types_of_poetry

varchar

64

0

Y

N

诗词类型

5

publishing_users

int

10

0

Y

N

0

发布用户

6

cover_photo

varchar

255

0

Y

N

封面图片

7

details

text

65535

0

Y

N

详情内容

8

hits

int

10

0

N

N

0

点击数

9

praise_len

int

10

0

N

N

0

点赞数

10

recommend

int

10

0

N

N

0

智能推荐

11

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

12

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表praise (点赞)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

praise_id

int

10

0

N

Y

点赞ID:

2

user_id

int

10

0

N

N

0

点赞人:

3

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

8

status

bit

1

0

N

N

1

点赞状态:1为点赞,0已取消

表slides (轮播图)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

slides_id

int

10

0

N

Y

轮播图ID:

2

title

varchar

64

0

Y

N

标题:

3

content

varchar

255

0

Y

N

内容:

4

url

varchar

255

0

Y

N

链接:

5

img

varchar

255

0

Y

N

轮播图:

6

hits

int

10

0

N

N

0

点击量:

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表upload (文件上传)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

upload_id

int

10

0

N

Y

上传ID

2

name

varchar

64

0

Y

N

文件名

3

path

varchar

255

0

Y

N

访问路径

4

file

varchar

255

0

Y

N

文件路径

5

display

varchar

255

0

Y

N

显示顺序

6

father_id

int

10

0

Y

N

0

父级ID

7

dir

varchar

255

0

Y

N

文件夹

8

type

varchar

32

0

Y

N

文件类型

表user (用户账户:用于保存用户登录信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

user_id

mediumint

8

0

N

Y

用户ID:[0,8388607]用户获取其他与用户相关的数据

2

state

smallint

5

0

N

N

1

账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

3

user_group

varchar

32

0

Y

N

所在用户组:[0,32767]决定用户身份和权限

4

login_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

上次登录时间:

5

phone

varchar

11

0

Y

N

手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

6

phone_state

smallint

5

0

N

N

0

手机认证:[0,1](0未认证|1审核中|2已认证)

7

username

varchar

16

0

N

N

用户名:[0,16]用户登录时所用的账户名称

8

nickname

varchar

16

0

Y

N

昵称:[0,16]

9

password

varchar

64

0

N

N

密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

10

email

varchar

64

0

Y

N

邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

11

email_state

smallint

5

0

N

N

0

邮箱认证:[0,1](0未认证|1审核中|2已认证)

12

avatar

varchar

255

0

Y

N

头像地址:[0,255]

13

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

表user_group (用户组:用于用户前端身份和鉴权)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

group_id

mediumint

8

0

N

Y

用户组ID:[0,8388607]

2

display

smallint

5

0

N

N

100

显示顺序:[0,1000]

3

name

varchar

16

0

N

N

名称:[0,16]

4

description

varchar

255

0

Y

N

描述:[0,255]描述该用户组的特点或权限范围

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

8

register

smallint

5

0

Y

N

0

注册位置:

9

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

4 诗词打卡微信小程序详细设计与实现

诗词打卡微信小程序的详细设计与实现主要是根据前面的诗词打卡微信小程序的需求分析和诗词打卡微信小程序的总体设计来设计页面并实现业务逻辑,开发工具采用ecplice,数据库在MYSQL中存储,运用了当下比较主流的SSM框架。

4.1系统前台部分功能模块的实现

4.1.1 前台首页界面

当进入诗词打卡微信小程序的时候,系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,下面是轮播图,再往下是公告栏信息,其主界面展示如下图4-1所示。

图4-1 前台首页界面图

4.1.2 登录界面

诗词打卡微信小程序中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当会员输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到诗词打卡微信小程序的首页中;否则将会提示相应错误信息,用户登录界面如下图4-2所示。

图4-2登录界面图

登录关键代码如下所示。

 /**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        QueryWrapper wrapper = new QueryWrapper<User>();

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

}

    public String select(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("select ");

        sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");

        sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));

        if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){

            sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");

        }

        if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){

            sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");

        }

        if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){

            int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;

            int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;

            sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);

        }

        log.info("[{}] - 查询操作,sql: {}",table,sql);

        return sql.toString();

}

    public List selectBaseList(String select) {

        List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);

        List<E> list = new ArrayList<>();

        for (Map<String,Object> map:mapList) {

            list.add(JSON.parseObject(JSON.toJSONString(map),eClass));

        }

        return list;

}

4.1.3注册界面

诗词打卡微信小程序的用户可以进行注册登录,当用户左上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号,选择身份,然后填写身份信息后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可注册成功。其用注册界面展示如下图4-3所示。

图4-3注册界面图

所有的用户都可以通过网页进入到诗词打卡微信小程序中对信息进行查看,但是要实现打卡、收藏、评论的话,就不是所有人都能操作的,必须成为诗词打卡微信小程序的会员,注册登录的流程图如下图4-4所示。

图4-4注册登录流程图

登录关键代码如下所示。

 /**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        QueryWrapper wrapper = new QueryWrapper<User>();

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

}

    public String select(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("select ");

        sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");

        sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));

        if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){

            sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");

        }

        if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){

            sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");

        }

        if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){

            int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;

            int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;

            sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);

        }

        log.info("[{}] - 查询操作,sql: {}",table,sql);

        return sql.toString();

}

    public List selectBaseList(String select) {

        List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);

        List<E> list = new ArrayList<>();

        for (Map<String,Object> map:mapList) {

            list.add(JSON.parseObject(JSON.toJSONString(map),eClass));

        }

        return list;

}

4.1.4诗词圈子详情界面

用户可以查看诗词圈子,在查询到自己想要了解的诗词圈子的时候,可以进入查看详细的介绍,点击“关注”这一按钮以后会跳转到关注信息填写的界面,根据提示填写好关注的信息,在诗词圈子信息详情这个界面,同时支持用户对喜欢的诗词圈子进行收藏、点赞、分享的功能,诗词圈子详情展示页面如图4-5所示。

       

图4-5诗词圈子详情界面图

4.1.5打卡活动详情界面

用户可以查看打卡活动信息,在查询到自己想要了解的打卡活动的时候,可以进入查看详细的介绍,点击“打卡”这一按钮以后会跳转到打卡信息填写的界面,根据提示填写好打卡的信息,在打卡活动信息详情这个界面,同时支持用户对喜欢的打卡活动进行收藏、点赞的功能,打卡活动详情展示页面如图4-6所示。

     

图4-6打卡活动详情界面图

在实现打卡操作的时候,没有登录的用户只能进行查看,如果想要实现打卡这个操作的话,打卡的前提必须是登录后才能进行。详见图4-7所示。

             

图4-7 打卡流程图

4.1.6 打卡记录界面

点击导航栏上的“打卡记录”,可以选择活动名称、活动时间、活动类型、打卡用户、姓名、打开日期、打卡次数,然后点击“提交”按钮进行提交打卡记录,打卡记录界面如下图4-8所示。

图4-8打卡记录界面图

4.2系统后台部分功能模块的实现

4.2.1登录界面

管理员在登录界面输入账号+密码,点击“登录”按钮,系统在用户数据库表中会对管理员,普通管理者的账号进行匹配,账号+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,如果管理人员忘记密码的话,点击“忘记密码”根据提示可以找回密码,然后再进行登录其主界面展示如下图4-9所示。

图4-9登录界面图

4.2.2用户管理界面

诗词打卡微信小程序中的管理员在“用户管理”这一菜单是中可以对注册的用户以及管理员人员进行管控。界面如下图4-10所示。

图4-10用户管理界面图

用户管理关键代码如下所示。

public List selectBaseList(String select) {

        List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);

        List<E> list = new ArrayList<>();

        for (Map<String,Object> map:mapList) {

            list.add(JSON.parseObject(JSON.toJSONString(map),eClass));

        }

        return list;

}

4.2.3公告栏管理界面

公告栏管理模块是对公告栏的设置,只有管理员权限才能进行更新维护。界面如下图4-11所示。

图4-11公告栏管理界面图

4.2.4诗词圈子管理界面

点击“诗词圈子”按钮会显示自己添加的诗词圈子,如果想要添加新的诗词圈子,点击“添加”按钮根据提示输入诗词圈子,点击“提交”后在诗词圈子界面就可以显示了,如果信息有错可以对诗词圈子进行更新维护,也可以直接删除某一诗词圈子,还可以管理评论信息,界面如下图4-12所示。

图4-12诗词圈子管理界面图

4.2.5打卡活动管理界面

点击“打卡活动”按钮会显示自己添加的打卡活动,如果想要添加新的打卡活动,点击“添加”按钮根据提示输入打卡活动,点击“提交”后在打卡活动界面就可以显示了,如果信息有错可以对打卡活动进行更新维护,也可以直接删除某一打卡活动,界面如下图4-13所示。

图4-13打卡活动管理界面图

打卡活动管理关键代码如下所示。

 @RequestMapping("/get_obj")

    public Map<String, Object> obj(HttpServletRequest request) {

        List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));

        if (resultList.size() > 0) {

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("obj",resultList.get(0));

            return success(jsonObject);

        } else {

            return success(null);

        }

}

4.2.6活动排行管理界面

管理员点击“活动排行”会显示出所有的活动排行信息,支持通过活动名称或者活动时间对活动排行信息进行查询,如果想要添加新的活动排行信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条活动排行信息,点击“删除”进行删除,界面如下图4-13所示。

图4-13活动排行管理界面图

5系统测试

5.1测试目的

在系统的前台、后台、数据库设计完成以后,诗词打卡微信小程序才算是完成了一半,系统的最后一个阶段就是对系统的功能、性能进行测试,测试对一个系统来说是非常重要的,有的时候开发完一个系统,如果测试不合格的话,这个系统是没有办法进行投入使用的,所有我们要用测试对系统的功能、性能等方面进行检验,把不完善的功能尽量完善,把出现的bug及时解决掉,然后给用户呈现出一个完美的系统。

5.2 系统测试用例

系统测试包括:用户登录功能测试、活动排行展示功能测试、活动排行添加、活动排行搜索、密码修改功能测试,如表5-1、5-2、5-3、5-4、5-5所示:

用户登录功能测试:

表5-1 用户登录功能测试表

用例名称

用户登录系统

目的

测试用户通过正确的用户名和密码可否登录功能

前提

未登录的情况下

测试流程

1) 进入登录页面

2) 输入正确的用户名和密码

预期结果

用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入

实际结果

实际结果与预期结果一致

活动排行查看功能测试:

表5-2 活动排行查看功能测试表

用例名称

活动排行查看

目的

测试活动排行查看功能

前提

用户登录

测试流程

点击活动排行列表

预期结果

可以查看到所有活动排行

实际结果

实际结果与预期结果一致

管理员添加诗词圈子详情界面测试:

表5-3 管理员添加诗词圈子详情界面测试表

用例名称

活动排行发布测试用例

目的

测试活动排行发布功能

前提

用户正常登录情况下

测试流程

1)用户点击活动排行管理就,然后点击添加后并填写信息。

2)点击进行提交。

预期结果

提交以后,页面首页会显示新的活动排行 

实际结果

实际结果与预期结果一致

活动排行搜索功能测试:

表5-4活动排行搜索功能测试表

用例名称

活动排行搜索测试

目的

测试活动排行搜索功能

前提

测试流程

1)在搜索框填入搜索关键字。

2)点击搜索按钮。

预期结果

页面显示包含有搜索关键字的活动排行

实际结果

实际结果与预期结果一致

密码修改功能测试:

表5-5 密码修改功能测试表

用例名称

密码修改测试用例

目的

测试管理员密码修改功能

前提

管理员用户正常登录情况下

测试流程

1)管理员密码修改并完成填写。

2)点击进行提交。

预期结果

使用新的密码可以登录

实际结果

实际结果与预期结果一致

5.3 系统测试结果

通过编写诗词打卡微信小程序的测试用例,已经检测完毕用户登录模块、活动排行查看模块、活动排行添加模块、活动排行搜索模块、密码修改功能测试,通过这5大模块为诗词打卡微信小程序的后期推广运营提供了强力的技术支撑。

                                                               结论

本文描述了诗词打卡微信小程序设计与实现的原理和开发过程,该系统是通过Spring+SpringMVC+MyBatis框架来搭建后台,中间件使用的是Tomcat服务器,数据库管理平台采用开源的Mysql数据库,前台使用的是JQuery框架,同时使用Validate校验框架,这样就可以减少前端代码的输入量,而且基于JQuery框架的Validat框架使用简单,是流行的前端使用框架,前端使用的主要是Java页面展示技术。

在开发这个诗词打卡微信小程序之前做了许多的准备,比如到学校进行调研,了解现在大学生对诗词打卡微信小程序所要实现的功能,同时在诗词打卡微信小程序的设计和开发过程中去图书馆以及网上查阅和学习了许多相关的文献资料,与此同时从开发这个诗词打卡微信小程序的过程当中我也收获了许许多多宝贵的实践方法以及设计的思路,对系统的开发也起到了很重要的作用,诗词打卡微信小程序的开发技术选用的都是自己比较熟悉的,比如Web、SSM、MYSQL等,这些技术都在平时的课程当中学到,而且平时都能够熟练运用,在开发诗词打卡微信小程序的过程当中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,开发诗词打卡微信小程序对于我来说工作量还是比较大的,毕竟是一个完整的系统,正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。

当然在开发该诗词打卡微信小程序的过程当中也是离不开导师以及同学们的帮助的,在遇到自己搞不定的问题的时候,我首先会和同学们探讨,找出解决方法,实在解决不了的时候,我会请教我的导师,在开发诗词打卡微信小程序的过程中正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时诗词打卡微信小程序还有很多需要改进的地方,但是由于专业知识的浅薄,开发的系统并不是十全十美,希望以后有机会可以对其进行完善,让其真正的投入到使用之中。

                                                    

到此,整个诗词打卡微信小程序就算完成了,虽然过程十分艰难,但是等到都完成的时候,我感觉无比的自豪,虽然设计的系统还存在许多的纰漏,但是我已经拼劲全力,给自己的大学四年画上了一个圆满的句号。

在这里我首先要感谢的就是大学四年来所有教导我的老师,是他们教会了我许多的专业知识以及做人的道理,从一进校门对对开发系统一窍不通到现在能自主开发一个管理系统,里面包含了前台框架、后台框架、业务流程、数据结构、操作系统等各种知识,只有把他们统一运用好,才能够完成整个系统,这都是老师的功劳;其次我要感谢我的指导老师,在开发这个系统的时候,我遇到了无数的问题,经常通过线上、线下的方式去请教导师,每次去请教导师,他从来没有不耐烦,都是细心的引导,告诉我怎么样实现这个功能,怎么样才能使得系统更加完善,然后通过自己查询相关资料解决问题,提高了自己自主解决问题的能力,授人以鱼不如授人以渔,指导老师的这种工作态度受益终生,我也会向老师不断靠拢,向他学习,在此我只想说一句:“老师,谢谢您,您辛苦了”!最后我还要感谢我的室友、同学,在一起学习这四年,他们不但学习上给了我很多建议,在生活上更加给了我帮助,正是有他们的帮助,我的大学生涯才如此完美。

最后,希望自己在未来的道路上能够越走越远,不辜负在大学的学习以及老师们的细致的教导,追风赶月莫停留,平荒尽处是春山。

">

东莞推广就莞用服务平台

一念天堂免费观看、卓越建站快车、永久使用、不限域名、成立公司注册资本什么意思

计算机培训班学什么?

辽宁建设工程信息网怎么无法登陆了_个人网站可以放广告吗_网站模板缺少文件怎么办_在线网站制作系统源码

一.技术社区

h5页面生成工具开发公司英文江门好的建站网站建立网站需要多少钱费用河北互联网公司ui是什么工作移动互联网的终端包括我们大家经常使用的怎么建卡盟网站室内设计网站免费素材濮阳到上海美国社会安全号码大全在上海找工作用哪个招聘网好个人备案的网站能做盈利吗硬件开发工程师简历没有地址可以注册公司吗?济南网络优化公司生鲜电商b2b平台有哪些hk域名哪里注册浙江台州疫情最新情况中建八局第一建设有限公司青岛分公司十堰seo源头厂家陕西建设网查证件查询html期末大作业美国etsy网站web前端开发中的web指的是轻蜂加速器重庆市建设委员会信息网官网企业为什么要上市深圳办公室租金多少钱一平东莞音乐制作公司深圳企业有哪些

猜你喜欢

  • 友情链接:
  • 防封电销系统 御名是什么意思 余姚网站定制 公司装修怎么样 二级黄冈站 北京设计企业网站