ARTICLE · 1351456
JAVA社区疗养社区康养系统源码支持小程序
社区康养 · 健康管理 · 邻里互助 JAVA社区疗养社区康养系统源码支持小程序10 个功能模块,把康养服务、活动、预约、报修与志愿串成社区一份台账。 SpringBoot · MyBatis-Plus · MySQL · uni-app · Vue + ElementUI |
产品拆解 / 技术实现 / 合规边界 · 建议阅读时间 12 分钟
如果你正在寻找一套覆盖社区康养、便捷服务、热门活动、社区管理、商城管理、健康趋势、活动管理、志愿管理、预约管理、报修管理的 JAVA社区疗养社区康养系统源码,这篇文章会把产品逻辑、技术架构、数据库设计和核心代码一次讲清。
这套系统支持小程序:用户端用 uni-app(Vue 语法)编译到微信小程序,管理后台用 Vue + ElementUI,服务端用 SpringBoot + MyBatis-Plus + MySQL。它适合街道与社区养老服务站、康养机构、物业与社区运营方搭建本地化康养平台,也适合软件团队做适老化产品的二次开发。
先给结论:社区康养不是把健康知识堆在首页。它要回答的是谁住在这里、谁需要帮助、谁来提供服务、服务有没有做到。所以这套系统把居民档案、服务预约、活动报名、志愿记录与报修处理放进同一套社区台账里。
合规提示:社区康养涉及居民身份、健康状况、住址与紧急联系人等敏感个人信息,应最小化收集、加密存储、按角色授权可见;健康趋势与建议内容不能替代医生诊断,页面需明确提示;商城、预约与志愿服务涉及资金和服务承诺时,应明码标价、公示规则,不得使用「包治」「保证康复」等表述。
10 功能模块 | 3 端协同 | 小程序 用户入口 | 1 套源码 |
01 社区康养,先解决「服务找人」而不是「人找服务」
社区里的服务和需求天然分散:助餐、上门理发、健康检测、代买代办,往往靠网格员一张表格和一个微信群在跑。需求多了记不住,服务做了没留痕,年底想报数据又凑不出来。真正的社区康养系统,要把这些零散动作沉淀成台账。
这套 JAVA社区疗养社区康养系统源码按三条线组织:服务线(便捷服务—预约管理—报修管理)、内容线(健康趋势—热门活动—活动管理)、治理线(社区管理—志愿管理—商城管理)。前端负责居民操作,服务端负责档案、状态、名额与权限。
02 十大功能模块:从需求发现到服务闭环
原始功能清单里的三处连写已拆分:「热门活动社区管理」「健康趋势活动管理」「预约管理报修管理」。十个模块围绕「发现需求—预约服务—现场履约—活动带动—志愿补位」组织,对一套 支持小程序的社区康养系统来说,入口可以轻,名额、档案与状态必须由服务端统一管理。
01 社区康养 康养服务目录与居民健康档案入口。 | 02 便捷服务 助餐、助洁、代办等生活服务一键申请。 |
03 热门活动 社区热门活动展示与报名入口。 | 04 社区管理 小区、楼栋、居民档案与网格归属。 |
05 商城管理 康养商品与服务包下单、核销。 | 06 健康趋势 血压血糖等指标打卡与趋势展示。 |
07 活动管理 活动发布、名额、签到与结案。 | 08 志愿管理 志愿者注册、服务时长与积分记录。 |
09 预约管理 按时段预约服务,到点核销。 | 10 报修管理 家庭报修提交、派单、维修与回访。 |
02.1 社区康养:把服务目录和居民档案对上
社区康养是整套系统的入口:康养服务目录(助浴、助医、康复训练、心理慰藉)与居民健康档案在这里相遇。居民完善年龄、身体状况、紧急联系人后,系统才能推荐匹配的服务。输入是服务目录与居民档案,状态在「档案待完善—已建档—服务中」之间流转,输出是可申请的服务清单。健康档案只在授权范围内可见,不进入公开展示。
02.2 便捷服务:让老人少跑一趟
便捷服务把高频生活服务做成申请单:助餐配送、上门保洁、代买代办、陪同就医。居民选择服务、填写上门时间与地址,社区端接到申请后派给服务人员。输入是服务申请,状态在「待受理—已派单—服务中—已完成—已取消」之间流转,输出是服务记录与满意度评价。这类服务多为公益或低偿,价格和补贴规则要写清楚。
02.3 热门活动:用活动把人聚起来
热门活动是居民端的活动入口,按社区、时间、类型展示当前可报名的活动,支持按热度与推荐排序。输入是活动列表与报名状态,状态在「报名中—已满员—进行中—已结束」之间流转,输出是活动卡片与报名按钮。热门排序不能只看点击,要结合报名率与完成率,避免「看起来很热、实际没人来」。

JAVA社区康养系统实拍 02|活动列表、预约管理与报修提交。截图数据为演示数据。
02.4 社区管理:小区、楼栋与网格的底座
社区管理维护社区、小区、楼栋与网格归属,居民注册时绑定社区,后续服务、活动、报修都按社区分派。输入是社区与楼栋配置,状态在「启用—停用」之间流转,输出是居民归属与服务覆盖范围。社区数据是所有统计报表的分组维度,前期结构没建好,后期补数据成本极高。
02.5 商城管理:康养商品与服务包
商城管理承载康养商品(辅具、营养品)与服务包(康复套餐、上门护理次数卡)。商品上架、库存、价格与核销由服务端管理;下单后用券、支付、核销与退款完整留痕。输入是商品与服务包配置,状态在「上架—售罄—下架」之间流转,输出是订单与核销记录。涉及健康类商品时,标题与详情不得使用疗效性表述。
02.6 健康趋势:打卡容易,解读要谨慎
健康趋势支持血压、血糖、体重、步数等指标打卡,按周/月展示曲线与异常提示。输入是居民录入的指标值,状态是「已记录—已同步—异常提醒」,输出是趋势图与提醒记录。系统只做数据记录与提示,不做诊断结论;异常值要提示「请咨询医生」,而不是给用药建议。

JAVA社区康养系统实拍 01|康养首页、健康趋势与便捷服务入口。截图数据为演示数据。
02.7 活动管理:名额、签到、结案一条线
活动管理是后台的主战场:新建活动、设置时间地点与名额、发布报名、现场签到、活动结束后统计参与人数与满意度。输入是活动配置与报名数据,状态在「草稿—报名中—进行中—已结束」之间流转,输出是活动台账。名额必须用原子扣减,避免超额报名;签到支持扫码与手工补签。
02.8 志愿管理:把邻里互助记下来
志愿管理维护志愿者注册、服务技能(陪诊、理发、维修)、可服务时间与服务时长。活动与服务单可以指派志愿者,完成后记录时长,按规则折算积分。输入是志愿者档案与服务记录,状态在「待审核—可服务—服务中—已记录」之间流转,输出是服务时长台账。志愿者积分只能兑换社区内权益,不承诺提现。
02.9 预约管理:按时段分配,不让老人干等
预约管理把服务拆成可预约的时段:健康检测、康复训练、助浴服务按「日期 + 时段 + 服务点」维护可预约数量。居民选时段提交,服务点确认后生成预约单,到点核销。输入是时段与服务点配置,状态在「待确认—已预约—已到店—已完成—已取消」之间流转,输出是预约单与核销记录。
02.10 报修管理:拍照上报,派单到家
报修管理面向水、电、门窗、适老化设施等家庭报修:居民拍照描述问题、选择紧急程度与上门时间,社区接单派给维修人员,完成后由居民确认并评价。输入是报修单,状态在「待受理—已派单—维修中—待确认—已完成」之间流转,输出是报修台账与维修记录。紧急类报修(漏水、断电)要优先提醒,并给出应急电话。

JAVA社区康养系统实拍 03|社区商城、健康商品与个人中心。截图数据为演示数据。
03 技术架构:三端分工与边界
这套 JAVA社区疗养社区康养系统源码采用经典分层:小程序负责居民端浏览、预约、报修与打卡;管理后台负责社区档案、活动、服务派单与商城;SpringBoot 服务端负责名额、时段库存、档案权限与状态流转。
必须放在服务端的:活动名额、预约时段库存、居民档案可见范围、报修派单归属、商城价格与核销。可以放前端的:活动展示、健康数据录入、表单校验提示、图片压缩。前端可以「算得好看」,但名额有没有、档案能不能看,必须由服务端判定。
04 数据库设计:六张核心表
社区康养的数据关系可以归纳成四组:社区与居民、活动、预约时段、报修。下面保留居民、活动、活动报名、预约时段、预约单、报修单六张核心表,省略了服务目录、健康记录、商城、志愿等扩展表。以下为示例实现,生产环境需补充参数校验、权限、日志、监控、限流、支付验签等。
MYSQL · 居民、活动、报名、时段、预约、报修
-- 1. 居民:社区归属、楼栋、健康档案摘要CREATE TABLE `resident` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` BIGINT UNSIGNED NOT NULL, `community_id` BIGINT UNSIGNED NOT NULL, `building_no` VARCHAR(32) DEFAULT NULL, `real_name` VARCHAR(32) DEFAULT NULL COMMENT '加密存储', `age` TINYINT DEFAULT NULL, `health_note` VARCHAR(255) DEFAULT NULL COMMENT '健康状况摘要(加密)', `emergency_phone` VARCHAR(20) DEFAULT NULL COMMENT '紧急联系人(加密)', `status` TINYINT NOT NULL DEFAULT 0 COMMENT '0待完善 1已建档 2停用', `create_time` DATETIME NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_user` (`user_id`), KEY `idx_community` (`community_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='社区居民';-- 2. 活动:名额、时间、地点与状态CREATE TABLE `activity` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `community_id` BIGINT UNSIGNED NOT NULL, `title` VARCHAR(128) NOT NULL, `start_time` DATETIME NOT NULL, `end_time` DATETIME NOT NULL, `location` VARCHAR(255) NOT NULL, `quota` INT NOT NULL COMMENT '总名额', `joined` INT NOT NULL DEFAULT 0 COMMENT '已报名', `status` TINYINT NOT NULL DEFAULT 0 COMMENT '0草稿 1报名中 2进行中 3已结束', `version` INT NOT NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `idx_community` (`community_id`), KEY `idx_status` (`status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='社区活动';-- 3. 活动报名:uk_activity_user 防重复报名CREATE TABLE `activity_signup` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `activity_id` BIGINT UNSIGNED NOT NULL, `user_id` BIGINT UNSIGNED NOT NULL, `status` TINYINT NOT NULL DEFAULT 1 COMMENT '1已报名 2已签到 3已取消', `sign_time` DATETIME DEFAULT NULL COMMENT '签到时间', `create_time` DATETIME NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_activity_user` (`activity_id`, `user_id`), KEY `idx_user` (`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动报名';-- 4. 预约时段:服务点 × 日期 × 时段的可预约数量CREATE TABLE `slot_calendar` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `site_id` BIGINT UNSIGNED NOT NULL COMMENT '服务点', `slot_date` DATE NOT NULL, `slot_start` VARCHAR(8) NOT NULL COMMENT '如 09:00', `capacity` INT NOT NULL, `booked` INT NOT NULL DEFAULT 0, `version` INT NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uk_site_slot` (`site_id`, `slot_date`, `slot_start`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预约时段库存';-- 5. 预约单:时段快照、核销码与状态CREATE TABLE `appointment` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `appointment_no` VARCHAR(32) NOT NULL, `user_id` BIGINT UNSIGNED NOT NULL, `slot_id` BIGINT UNSIGNED NOT NULL, `service_id` BIGINT UNSIGNED NOT NULL, `slot_snapshot` VARCHAR(255) NOT NULL COMMENT '时段快照', `status` TINYINT NOT NULL DEFAULT 0 COMMENT '0待确认 1已预约 2已到店 3已完成 4已取消', `idempotent_key` VARCHAR(64) NOT NULL, `create_time` DATETIME NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_appointment_no` (`appointment_no`), UNIQUE KEY `uk_idem` (`idempotent_key`), KEY `idx_user` (`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务预约';-- 6. 报修单:问题描述、紧急程度、派单与回访CREATE TABLE `repair_order` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `order_no` VARCHAR(32) NOT NULL, `user_id` BIGINT UNSIGNED NOT NULL, `community_id` BIGINT UNSIGNED NOT NULL, `category` VARCHAR(32) NOT NULL COMMENT '水电/门窗/设施', `description` VARCHAR(500) NOT NULL, `images` VARCHAR(1000) DEFAULT NULL, `urgent` TINYINT NOT NULL DEFAULT 0, `assignee_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '维修人员', `status` TINYINT NOT NULL DEFAULT 0 COMMENT '0待受理 1已派单 2维修中 3待确认 4已完成 5已取消', `create_time` DATETIME NOT NULL, `update_time` DATETIME NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_order_no` (`order_no`), KEY `idx_community` (`community_id`), KEY `idx_status` (`status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报修单';05 核心业务代码:事务、并发、幂等
社区康养里最容易出问题的三类操作:活动报名(名额)、服务预约(时段)、报修(派单状态)。下面三段代码分别处理。
先看核心事务:活动报名要同时占名额、写报名记录,两步必须一致;名额不足就整体失败,不能出现「记录写了但名额没扣」。
JAVA · 活动报名(事务 + 名额)
/** * 活动报名:原子占名额 + 写报名记录,同一事务。 * 示例实现,生产环境需补充参数校验、权限、日志、监控、限流、支付验签等。 */@Servicepublic class ActivitySignupService { @Resource private ActivityMapper activityMapper; @Resource private ActivitySignupMapper signupMapper; @Transactional(rollbackFor = Exception.class) public void signup(Long activityId, Long userId) { Activity activity = activityMapper.selectById(activityId); if (activity == null || activity.getStatus() != ActivityStatus.SIGNUP) { throw new BizException("活动未开放报名"); } int rows = activityMapper.takeSeat( activityId, activity.getVersion()); if (rows != 1) { throw new BizException("名额已满,请选择其他活动"); } ActivitySignup signup = new ActivitySignup(); signup.setActivityId(activityId); signup.setUserId(userId); signup.setStatus(SignupStatus.SIGNED.getCode()); signup.setCreateTime(new Date()); signupMapper.insert(signup); // uk_activity_user 防重复 }}名额扣减是并发扣减:热门活动可能几十人同时点报名。用「已报名 < 总名额」作 WHERE 条件做原子更新,并带版本号,避免读到旧值后重复占位。
JAVA · 活动名额原子扣减
/** * 占名额:joined < quota 才允许 +1,version 防并发覆盖。 * 示例实现,生产环境需补充参数校验、权限、日志、监控、限流、支付验签等。 */@Mapperpublic interface ActivityMapper extends BaseMapper<Activity> { @Update("UPDATE activity SET joined = joined + 1, version = version + 1 " + "WHERE id = #{id} AND version = #{version} " + "AND joined < quota AND status = 1") int takeSeat(@Param("id") Long id, @Param("version") Integer version);}预约要做幂等:老人网络慢、连点提交很常见。用客户端幂等键建唯一索引,重复请求返回同一张预约单,不重复占时段。
JAVA · 预约提交幂等
/** * 预约幂等:uk_idem 唯一索引兜底,重复提交返回原预约单。 * 示例实现,生产环境需补充参数校验、权限、日志、监控、限流、支付验签等。 */@Servicepublic class AppointmentService { @Resource private AppointmentMapper appointmentMapper; @Resource private SlotCalendarMapper slotMapper; @Transactional(rollbackFor = Exception.class) public Appointment create(CreateAppointmentDTO dto) { Appointment existed = appointmentMapper.selectByIdemKey(dto.getIdempotentKey()); if (existed != null) { return existed; // 重复提交,返回原单 } int rows = slotMapper.book(dto.getSlotId()); if (rows != 1) { throw new BizException("该时段已约满"); } try { Appointment ap = buildAppointment(dto); appointmentMapper.insert(ap); return ap; } catch (DuplicateKeyException e) { return appointmentMapper.selectByIdemKey(dto.getIdempotentKey()); } }}06 权限与多端请求:居民档案按角色开放
居民档案包含健康信息与紧急联系人,不能谁都能查。每次查看都要在服务端确认:本人、本人所属社区的网格员、或管理员;其他社区的工作人员看不到。下面用服务层校验实现。
JAVA · 居民档案查看权限
/** * 居民档案权限:本人、同社区网格员、管理员可见。 * 示例实现,生产环境需补充参数校验、权限、日志、监控、限流、支付验签等。 */@Servicepublic class ResidentPermissionService { @Resource private ResidentMapper residentMapper; public Resident assertCanView(Long residentId, LoginUser current) { Resident resident = residentMapper.selectById(residentId); if (resident == null) { throw new BizException(404, "居民档案不存在"); } if (current.isAdmin()) return resident; if (resident.getUserId().equals(current.getUserId())) return resident; if (current.isGridWorker() && current.getCommunityId() != null && current.getCommunityId().equals(resident.getCommunityId())) { return resident; } throw new BizException(403, "无权查看该居民档案"); }}用户端是 uni-app(Vue 语法),统一请求封装把 token、401 跳登录和错误提示收口。名额是否已满、档案是否可看,一律以服务端返回为准。以下为示例实现,生产环境需补充参数校验、权限、日志、监控、限流、支付验签等。
JAVASCRIPT · uni-app 统一请求封装
// utils/request.js —— 用户端 uni-app(Vue 语法)统一请求封装// 小程序通过 uni.request 访问 SpringBoot 接口,自动携带 tokenconst BASE_URL = 'https://api.example.com'; // 生产替换为 HTTPS 正式域名export function request(options) { return new Promise((resolve, reject) => { uni.request({ url: BASE_URL + options.url, method: options.method || 'GET', data: options.data || {}, header: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + uni.getStorageSync('token'), }, success: (res) => { if (res.statusCode === 200 && res.data.code === 0) { resolve(res.data.data); } else if (res.statusCode === 401) { uni.navigateTo({ url: '/pages/login/login' }); reject(new Error('登录已过期')); } else { uni.showToast({ title: res.data.msg || '请求失败', icon: 'none' }); reject(new Error(res.data.msg)); } }, fail: reject, }); });}07 管理后台:报修派单表格
管理后台用 Vue + ElementUI 构建,报修派单是社区服务的日常高频操作。列表展示报修类型、紧急程度、所属社区与状态,工作人员直接指派维修人员或结案;分页、状态标签、操作按钮都放在表格里。以下为示例实现,生产环境需补充参数校验、权限、日志、监控、限流、支付验签等。
VUE · ElementUI 报修派单表格
<template> <div class="repair-list"> <el-table :data="list" v-loading="loading" border stripe> <el-table-column prop="orderNo" label="报修单号" width="150" /> <el-table-column prop="category" label="类型" width="100" /> <el-table-column prop="communityName" label="社区" width="120" /> <el-table-column label="紧急" width="90"> <template #default="{ row }"> <el-tag :type="row.urgent ? 'danger' : 'info'" size="small"> {{ row.urgent ? '紧急' : '普通' }} </el-tag> </template> </el-table-column> <el-table-column label="状态" width="100"> <template #default="{ row }"> <el-tag :type="statusType(row.status)" size="small">{{ statusText(row.status) }}</el-tag> </template> </el-table-column> <el-table-column label="操作" width="180" fixed="right"> <template #default="{ row }"> <el-button size="mini" type="primary" @click="assign(row)">派单</el-button> <el-button size="mini" type="success" @click="finish(row)">结案</el-button> </template> </el-table-column> </el-table> <el-pagination style="margin-top:16px;text-align:right;" :current-page="page" :page-size="size" :total="total" layout="total, prev, pager, next" @current-change="load" /> </div></template><script>export default { data() { return { list: [], page: 1, size: 10, total: 0, loading: false }; }, methods: { async load() { this.loading = true; try { const { data } = await this.$http.get('/api/admin/repair/page', { params: { page: this.page, size: this.size }, }); this.list = data.records; this.total = data.total; } finally { this.loading = false; } }, statusText(s) { return ['待受理', '已派单', '维修中', '待确认', '已完成', '已取消'][s] || '未知'; }, statusType(s) { return ['warning', 'primary', 'info', 'warning', 'success', 'danger'][s] || 'info'; }, assign(row) { this.$prompt('请输入维修人员ID', '派单').then(({ value }) => { this.$http.post('/api/admin/repair/assign', { id: row.id, assigneeId: value }) .then(() => { this.$message.success('已派单'); this.load(); }); }); }, finish(row) { this.$http.post('/api/admin/repair/finish', { id: row.id }) .then(() => { this.$message.success('已结案'); this.load(); }); }, }, mounted() { this.load(); },};</script>08 合规与上线检查:康养平台的红线
社区康养同时涉及居民个人信息、健康内容与服务交易,上线前建议逐项核对:
另外,康养商城容易踩「保健食品宣称疗效」的坑。商品标题、详情与推荐文案要建立审核清单,禁止「治疗」「根治」「替代药物」等表述;直播、短视频带货如果接入,同样要走商品资质审核。
09 这套源码适合谁
街道 / 社区养老服务站 居民档案、服务预约、活动与报修一本台账。 | 康养机构 / 护理团队 服务包、预约时段与上门记录一体化。 |
物业 / 社区运营方 报修、便民服务与邻里活动统一管理。 | Java / Vue 学习者 学习名额并发、时段库存、权限隔离与多端联调。 |
10 常见问题
Q1:这套系统支持小程序吗?
支持。用户端用 uni-app(Vue 语法)开发,可编译到微信小程序;管理后台独立用 Vue + ElementUI,服务端用 SpringBoot + MyBatis-Plus + MySQL。
Q2:活动报名会不会超额?
不会。占名额用「已报名小于总名额」的条件更新加版本号,重复报名由活动与用户的唯一索引拦截。
Q3:健康数据会不会被其他居民看到?
不会。档案只对本人、同社区网格员和管理员开放,跨社区不可见;接口只返回必要字段,敏感项加密存储。
Q4:能直接上线商用吗?
作为项目起点可以,但上线前需补充参数校验、权限、日志、监控、限流、支付验签,以及服务资质审核、健康内容审核、隐私授权与应急流程。
结语:把社区服务做成一份可查的台账
这套 JAVA社区疗养社区康养系统源码用社区康养、便捷服务、热门活动、社区管理、商城管理、健康趋势、活动管理、志愿管理、预约管理、报修管理十条线,把「居民需求—社区派单—服务履约—活动带动—志愿补位」串成闭环。它 支持小程序,适合街道、社区养老服务站与康养机构快速搭建本地化平台。
如果你正在做社区养老、康养服务或物业社区运营,或想基于 SpringBoot + uni-app + Vue 技术栈做一套可二开的社区康养系统,欢迎找我领取演示资料和部署说明。















































































