基于springboot的智慧社区微信小程序

文未可获取一份本项目的java源码和数据库参考。

本课题研究目标

本文主要对小区生活服务平台的功能和非功能需求进行了分析,系统除了提供物业保修、小区资讯、投诉留言、常用电话等基础功能外,为了满足用户的多样化需求,还提供邻里圈子和有偿求助,通过邻里圈子用户可以和社区内其他人交流,交流本身就能解决很多问题,通过邻里圈子,用户可以发布二手交易消息等。有偿求助模块对接服务提供者和小区居民,对于物业无法满足的用户需求,比如代驾、家教等,住户发布需求订单,由专业的服务人员提供有偿帮助。根据服务划分规则将系统分成若干微服务并进行技术选型,设计出项目的微服务风格的架构。

微服务架构的最重要的特点是将一个系统分成多个容器化微服务,而每个微服务都需要进行认证鉴权,本文设计并实现了统一的认证鉴权模块。因为微服务独立部署导致日志分散,本文设计并实现了统一的日志收集分析模块。各个微服务协作完成系统功能,通过远程调用相互通信,而为了高可靠性,每个微服务采用多实例部署,系统调用需要高效的负载均衡,本文设计并实现了基于服务器负载情况的动态权重负载均衡模块。为了提高系统性能,项目使用Redis缓存技术,Redis缓存和MySQL数据库会产生数据库一致性问题,本文设计并实现了具有重试机制的失效缓存删除策略。对系统的功能点进行设计和实现,最终实现了高可靠、高性能、易扩展的小区生活服务平台,包括前台微信小程序和Web管理后台。

最后对小区生活服务平台进行了功能和非功能测试,测试结果表明,小区生活服务平台的实现效果符合预期。

  • 关键技术和难点

对于Java开发领域,Spring框架[18]可以说是最重要使用最广泛的框架,它提供了一系列组件模块,比如依赖注入、安全框架等,开发人员以前编写大量代码才能是实现的功能,通过Spring提供的组件,几十行甚至几行代码就能实现,例如,通过使用Spring JDBC模块的JDBCtemplate,几行代码就能实现数据存取功能。

虽然Spring框架通过整合一系列组件大大简化了Java开发人员的工作,但是也带来了不容忽视的问题,Spring项目需要大量的xml配置,复杂的配置和依赖管理成了开发和部署维护的新难题。Spring Boot基于Spring框架开发,使用Spring Boot可以快速的进行程序开发。Spring Boot实现了自动配置,还提供了大量开箱即用的启动器,使开发者从Spring的配置地狱中解脱出来,在Spring Boot的应用中开发者只需要很少的配置甚至零配置就能使用第三方库,节省开发者大量的时间和精力,开发者可以更专注于业务逻辑的代码编写,简化Spring应用的开发是Spring Boot的重要目的。Spring Boot可以创建独立运行的Spring应用,它内嵌了Tomcat服务器,而微服务的核心思想就是分散解耦,将一个应用解耦合为多个可以独立运行部署的小型应用,利用Spirng Boot可以便捷的开发出能够独立运行独立部署的微服务。

三、现有的研究基础

要完成本课题的设计和实现,需要具备需求分析、程序设计、界面和代码实现的能力。

在参加毕业设计之前,本人已熟练掌握了Java开发语言和数据库等基础编程语言,熟悉开发环境和机制,因此能实现成本课题要求所需功能的编写和调试。同时,也参加过小项目的实践,另外也经常浏览多个技术论坛以学习他人经验,加强自己的积累。因此本人已具备了研发本课题的基础能力,有信心完成本课题的研究任务。

四、实施方案

系统功能需求:

小区生活服务平台需要多个角色协同工作,不同的角色有不同的功能和权限,本平台的用户角色有:

(1)普通用户:平台的使用主体,为小区居民,自动分配账号。

(2)服务提供者:具有专业技能并且有意愿帮助他人的用户可以申请认证,认证通过后可以查看普通用户发出的订单并接单,为普通用户提供有偿帮助。

(3)物业管理人员:负责平台的日常管理。

(4)系统管理员:主要对物业管理人员进行管理。

系统有四类角色:普通用户、物业管理人员、服务提供者、系统管理员。需要有三个不同的应用,构成完整的平台以供全部用户使用:

(1)开发一个微信小程序供普通用户使用,用户可以在微信小程序里查看小区动态资讯,和其它小区居民交流,发布有偿求助订单等。

(2)开发一个微信小程序供通过审核的服务提供者使用。服务提供者查看并接受用户订单提供有偿服务,也可以发布专业资讯。

(3)开发一个后台管理系统,供系统管理员和物业管理人员使用。系统管理员可以对物业管理人员进行人员管理和授权管理,物业管理人员可以根据自己的权限开展工作。

以下对小区生活服务平台根据用户角色进行详细的需求分析。

(1)普通用户

普通用户用例图如图3-1所示。

图1 普通用户用例图

详细功能需求如下:

1)普通用户通过微信小程序端,输入账号密码或通过手机验证码登录进入系统,使用其他功能。

2)普通用户可以管理个人信息,包括头像,电话号码,昵称,地址等信息。

3)普通用户可以根据自己的需求,发布需求订单寻求专业人士帮助,比如家政需求,代驾需求等。根据有意接单的技能人士,普通用户可以查看技能人士的个人信息以及报价选择技能人士。

4)人们对自己所处环境的动态有着刚性需求,普通用户可以通过小程序查看动态资讯并留言,动态资讯的发布者包括后勤物业以及认证的服务人员。

5)普通用户有日常交流的需求。社区圈子类似于百度贴吧,用户可以发布主题帖,可以对主题帖做出评论,点赞别人的评论,以及对自己的发言进行管理。

6)普通用户可以通过每日登录,每日首次浏览动态资讯,对完成的需求订单进行评价获得奖励积分,通过积分兑换商品消耗积分,还可以查看自己的积分明细。

7)普通用户可以通过微信小程序给物业留言,在线报修、查询常用电话等

2.服务提供者

审核通过的服务提供者用例图如图2所示。

图2 服务人员用例图

服务提供者所具有的功能需求详细介绍如下:

1)有意愿提供服务的人或公司通过微信小程序端注册,需要提供证明自己专业技能的资料,比如专业证书等,审核通过后才可以正常使用小程序提供的功能。

2)物业人员将审核通过的用户需求订单推送给具有服务提供者,服务提供者可以查看需求订单详情,并参与竞标或抢单,竞标需要给出价格区间和竞标宣言。

3)订单完成后,可以评价雇主。

4)可以查看自己参与完成的订单列表和详情。

5)服务人员可以发表动态资讯,未审核状态,物业管理人员审核通过后才可以正式发布

(3)物业管理人员

物业管理员的管理权限是系统管理员授予的,不同的物业管理人员具有不同的权限负责不同的管理工作。这里以物业管理人员的全集说明这个用户群体的功能需求。

物业管理人员功能用例如图3所示。

图3 物业管理人员用例图

物业管理人员所具有的功能需求详细介绍如下:

1)物业管理人员通过Web端登录系统,进入对应权限的页面,处理工作。

2)物业管理人员可以修改自己的个人信息,比如电话号码。

3)被授权的物业管理人员可以管理小区动态资讯模块,可以发布动态资讯,删除动态资讯,审核经过认证的服务人员提交的动态资讯发布申请,以及查看、删除用户留言

4)被授权的物业管理人员可以对积分模块进行管理,包括设置积分规则,管理积分兑换商品,以及查看兑换历史记录。

5)被授权的物业管理人员能够对社区圈子进行管理,包括删除用户的不良发言、对违规用户进行一段时间的禁言、发布公告以及置顶等。

6)被授权的物业管理人员可以对有偿求助模块进行管理,包括审核服务人员的资质,增加或删除服务人员,审核用户提交的求助订单,管理求助类型和查看历史订单记录等。

系统架构分析:

使用Keepalived实现Nginx集群的高可用[361370,Keepalived是一款实现服务器高可用的服务软件,它可以防止单点故障导致系统不可用情况的发生,当集群中某台服务器发生故障,Keepalived检测到并将其移除,当服务恢复时,将其自动加入到集群里,Keepalived实现高可用的关键是VRRP协议,也就是虚拟路由冗余协议。通过Nginx和Keepalived组合,实现Nginx集群的高可用,当主Nginx服务器出故障,备Nginx服务器会接管主Nginx服务器的工作,当服务器从故障中恢复,备Nginx将工作交给主Nginx。MysQL具有体积小、内存占用率低,速度快、能够较好的运用低成本的硬件资源提供横向扩展能力,本系统选择使用MySQL关系型数据库。为了加快系统响应速度,减轻数据库压力,使用Redis缓存数据库。

综上所述,系统整体架构如图3-5所示。

图4 系统架构图

1.用户登录的总体流程如下:

1)用户进入登录界面,输入账号密码并提交。

2)客户端对密码进行MDS加密后,使用https传输到服务器。

3)服务器根据用户名查询用户密码密文和盐值。

4)用户密码与盐值拼接,再次进行MD5加密,和数据库中密码比较。

5)如果相等,则用户信息正确登录成功,否则,登录失败并提示"信息错误"。

登录流程如图5所示。

图5 用户登陆流程

2、浏览资讯

用户浏览资讯需要四个步骤:登录系统、进入动态资讯首页、浏览资讯列表、点击资讯标题浏览资讯详情。

对于列表中的资讯,用户真正会浏览的仅仅是一小部分,资讯列表界面仅仅需要资讯标题、时间等,而不需要获取资讯详情。为了减少不必要的网络,提高系统性能,将新闻标题,作者等信息与资讯详情分开保存,详情单独保存在一张表中,资讯的其它属性在另一张表里,最新发布的动态资讯保存到Redis中。

3、发贴

发贴是邻里圈子模块内容的来源,是该模块其它功能的基础,用户可以发表主题帖,但是为了维护良好的邻里圈子模块环境,管理人员可以对发表不当言论的用户进行禁言,并设置禁言时间。所以用户在请求发帖时,首先判断是否有发帖权限,也就是是否正处于禁言状态,若没有被禁言,进入发帖页面并在编辑完主题帖内容后,包括主题帖名称、主题帖类型和具体信息,点击确认发布,即可发布主题帖。

图6 用户发帖流程

4、有偿求助

有偿求助模块的目的是满足居民的多样化需求,居民发布需求订单,为了防止用户发布不规范甚至违法的需求订单,管理人员要对用户发布的订单进行审查,不合理的需求会被驳回,审核通过的订单会被发布到需求市场供服务提供者查看。服务提供者从需求市场查看订单,接受订单并提供有偿服务。核心业务就是普通用户发布订单和服务提供者接单。以接单类型来分,需求订单有两种:抢单和竞标。抢单为先到先得,竞标类型需要服务提供者参与竞标由用户决定中标者。

普通用户发布的竞标订单,服务提供者需要通过竞标方式接单,服务提供者查看需求市场的订单列表,点击感兴趣的订单查看详情,若有意接单,填写竞标宣言后参与竞标,竞标的参与者最多为三人,订单发布者从竞标者中选择,决定订单最终交给谁。

服务提供者参与竞标的流程如图所示。

5、积分兑换

对于用户来说,积分的唯一用途就是兑换商品。而对于积分兑换商品,需要着重考虑并发量,因为可能存在某一热门商品开启兑换,大量用户短时间内对该商品进行争抢的情况。为了提高兑换操作的并发量,将商品的信息存入Redis,并对兑换操作进行数据库事务降级,使用Redis事务完成兑换商品库存的减少,考虑到有些商品限制一个用户只能兑换一次,将兑换记录也存入Redis。设置定时执行的库存同步线程,将商品的库存信息和兑换记录更新到数据库中,具体的Redis缓存设计如下:

(1)参与积分兑换的商品列表。主键为EXC GOODS LIST商品ID,存储至多30条兑换商品的ID信息

(2)商品的基本信息。主键为EXC GOODS INFO商品ID,存储的信息主要包括商品名、兑换所需积分、详情等。

(3)商品的库存信息。主键为EXC GOODS-LEFT-商品ID,存储商品剩余数量。对于积分兑换,商品的剩余数量是最重要的信息。

(4)用户兑换商品信息。主键为EXC USER ORDER用户ID商品1D,记录单个用户兑换单个商品的数量积分兑换商品流程如图8。

图8 用户兑换积分流程

用户点击兑换,发送请求到后端。服务端收到用户兑换请求,查询该用户是否已达到兑换上限,若没有,查询数据库得到用户当前积分数,如果不足以兑换商品,提示"积分不足",兑换失败。如果用户积分足够,根据商品id查询商品库存,如果商品不足,提示"库存不足",兑换失败。积分足够,库存足够,减少积分,减少库存,增加一条兑换记录,兑换成功。

  • 可行性分析
  1. 技术可行性

本平台采用Springboot架构的形式,尽量减少数据与代码之间、代码与代码之间的耦合度,提高彼此间的内聚度,尽力保证各个子程序之间能够独立运行互补的干扰。同时,MySQL建立数据库的方式相比SQL Server简单很多,MySQL不仅可以用SQL语句操作数据库,而且还可以直接对表进行操作,而SQL Server只能用SQL语句对数据库进行操作。因此,在技术选择上是可行的。

2.经济可行性

开发本平台所需要的开发工具均是开源免费软件,即开发即可展示效果,不需要大型复杂的服务器支持开发和运行,这些有利条件使得开发成本几乎为零。该平台的制作只需我一人即可,开发过程中设备也只需我的个人电脑。这样大大降低了开发难度及节省开发时间。因此,该系统在经济上是完全可行的。

3.实施可行性

本系统采用JAVA语言开发,利用现有的微信小程序开发工具等完全能够实现,因此本系统在实施时完全可行。

相关推荐
hai4117419625 分钟前
mysql 与postgresql 的区别(gpt4)
数据库·mysql·postgresql
Freak嵌入式9 分钟前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
java·开发语言·数据结构·python·接口·抽象基类
知识分享小能手15 分钟前
mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)
大数据·开发语言·数据库·sql·学习·mysql·数据开发
前端小马19 分钟前
解决IDEA出现:java: 程序包javax.servlet不存在的问题
java·servlet·intellij-idea
白总Server30 分钟前
MongoDB解说
开发语言·数据库·后端·mongodb·golang·rust·php
冰镇毛衣36 分钟前
2.4 数据库表字段约束
数据库·sql·mysql
计算机学姐42 分钟前
基于python+django+vue的家居全屋定制系统
开发语言·vue.js·后端·python·django·numpy·web3.py
&木头人&42 分钟前
oracle select字段有子查询会每次执行子查询吗
数据库·oracle
冰镇毛衣42 分钟前
数据库简介
开发语言·数据库·sql·oracle
(⊙o⊙)~哦43 分钟前
oracle查询历史操作记录
数据库·oracle