基于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语言开发,利用现有的微信小程序开发工具等完全能够实现,因此本系统在实施时完全可行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

238 除自身以外数组的乘积

解题思路: \qquad 这道题要求在 O ( n ) O(n) O(n) 时间内解决,但是不能使用除法。仅使用乘法的话,看上去很难在一次遍历中得出想要的结果,但是没关系,一次遍历不行的话那就试试两次、三次,重要的是分析在…

Python--TCP/UDP通信

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.客户端与服务端通信原理 1. 服务器端 服务器端的主要任务是监听来自客户端的连接请求,并与之建立连接,然后接收和发送数据。 创建套接字:首先&#xff0…

【数据库】常用数据库简介

目录 🍔 常用的关系型数据库 🍔 Mysql简介 🍔 SQL 简介 SQL语句的分类 SQL 写法 SQL 常用的数据类型 🍔 DDL语句 对数据库的操作 对数据表的操作 🍔 DML语句 插入数据 insert into 修改数据 update 删除数…

css基础知识笔记

一言: “放任误解就是撒谎。” 文章目录 前言文章有误敬请斧正 不胜感恩!CSS基础教程0.文本样式基础1. CSS选择器2. CSS布局技巧3. 响应式设计4. Emmet语法 总结 前言 写在开始: 今天来看一眼CSS基础知识。 好几天没更新了 先更一篇 文章有…

DataGrip在Windows和MacOS平台上的快捷键

0. 背景信息 No.说明1测试DataGrip版本号 : 2024.2.2 1. Windows下快捷键 2. MacOS下快捷键

Java流程控制语句——跳转语句详解:break 与 continue 有什么区别?

🌐在Java编程中,break和continue是两个重要的控制流语句,它们允许开发者根据特定条件改变程序的执行流程。虽然两者都用于中断当前的行为,但它们的作用方式不同。本文将通过生动的例子来详细解释这两个语句,并使用流程…

C++/Qt 集成 AutoHotkey

C/Qt 集成 AutoHotkey 前言AutoHotkey 介绍 方案一:子进程启动编写AutoHotkey脚本准备 AutoHotkey 运行环境编写 C/Qt 代码 方案二:显式动态链接方案探索编译动态链接库集成到C工程关于AutoHotkeyDll.dll中的函数原型 总结 前言 上一篇介绍了AutoHotkey…

系统架构设计师 需求分析篇一

📘 结构化分析SA 思想 自顶向下:像剥洋葱一样,层层深入,大问题拆成小问题,再拆成更小的问题。 核心模型 数据字典 📔:记录数据元素的点点滴滴,从属性到使用方式,无所…

Spring自定义参数解析器

在这篇文章中,我们认识了参数解析器和消息转换器,今天我们来自定义一个参数解析器。 自定义参数解析器 实现HandlerMethodArgumentResolver的类,并注册到Spring容器。 Component//注册到Spring public class UserAr…

C#解决方案的各种操作

C#开发编程软件下载安装 C#开发编程软件下载安装_c#下载安装-CSDN博客文章浏览阅读208次。。。。_c#下载安装https://rxxw-control.blog.csdn.net/article/details/140879228 C#和S7-1200PLC S7.NET通信 C#和S7-1200PLC S7.NET通信_c# s1200 s7协议设置-CSDN博客文章浏览阅读…

【Python】探索 TensorFlow:构建强大的机器学习模型

TensorFlow 是一个开源的深度学习框架,由 Google 开发,广泛应用于机器学习和人工智能领域。自从 2015 年推出以来,它已成为研究人员、开发者和数据科学家们不可或缺的工具。TensorFlow 提供了灵活、高效的工具集,可以帮助我们构建…

消息中间件---Kafka

一、什么是Kafka? Kafka是一个分布式流处理平台,类似于消息队列或企业消息传递系统; 流处理事什么呢? 流处理就是数据处理工作流,本质上是一种计算机编程范例。流处理是对接收到的新数据事件的连续处理。‌它涉及对从生产者到消…

【C++】—— string模拟实现

前言&#xff1a; 学习了string的使用&#xff0c;总感觉了解不是很深厚&#xff1b;自己模拟实现string类来帮助自己理解。 这里只是实现了一部分内容&#xff08;并没有实现完整的string类&#xff09;。 先来实现string类里面的成员变量&#xff1a; #include<iostream…

PyCharm的使用

PyCharm的入门使用教程 下载和安装PyCharm&#xff1a; 首先&#xff0c;访问JetBrains官方网站&#xff08;https://www.jetbrains.com/pycharm/&#xff09;下载PyCharm的最新版本。根据您的操作系统选择合适的版本进行下载。 安装完成后&#xff0c;打开PyCharm。 创建新…

记录一次显卡驱动安装

1. 驱动安装 1.1. 查看适合的版本 apt-get update ubuntu-drivers devices输出结果&#xff1a; 1.2. 安装合适的驱动版本 根据上面输出的内容 apt-get install nvidia-driver-545完成后重启 reboot查看新的驱动 nvidia-smi2. 安装/升级cuda 在nvidia-smi中显示的CUDA…

hive分区详细教程

为什么要分区&#xff1f; 为了提高sql的查询效率 比如&#xff1a; select * from orders where create_date20230826; 假如数据量比较大&#xff0c;这个sql就是全表扫描&#xff0c;速度肯定慢。 可以将数据按照天进行分区&#xff0c;一个分区就是一个文件夹&#xff0c;当…

中序遍历二叉树全过程图解

文章目录 中序遍历图解总结 中序遍历图解 首先看下中序遍历的代码&#xff0c;其接受一个根结点root作为参数&#xff0c;判断根节点是否为nil&#xff0c;不为nil则先递归遍历左子树。 func traversal(root *TreeNode,res *[]int) {if root nil {return}traversal(root.Lef…

华为HarmonyOS地图服务 5 - 利用UI控件和手势进行地图交互

场景介绍 本章节将向您介绍如何使用地图的手势。 Map Kit提供了多种手势供用户与地图之间进行交互,如缩放、滚动、旋转和倾斜。这些手势默认开启,如果想要关闭某些手势,可以通过MapComponentController类提供的接口来控制手势的开关。 接口说明 以下是地图的控件和手势相…

【LLM多模态】文生视频评测基准VBench

note VBench的16个维度自动化评估指标代码实践&#xff08;待完成&#xff09;16个维度的prompt举例人类偏好标注&#xff1a;计算VBench评估结果与人类偏好之间的相关性、用于DPO微调 文章目录 note一、相关背景二、VBench评测基准概述&#xff1a;论文如何解决这个问题&…

Java免税购物商城:Spring Boot技术实现

第二章 系统开发关键技术 2.1 JAVA技术 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterrise JavaBeans&#xff09;的全面支持&#xff0c;java servlet AI&#xff0c;JS&#xff08;java server ages&#xff09…