ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于微信的防返贫监测小程序毕业设计全解析

基于微信的防返贫监测小程序毕业设计全解析 如果你正在为计算机毕业设计选题发愁看到“基于微信的防返贫监测小程序”这个标题我先给你一个结论这是一个业务逻辑完整、工作量适中、演示效果又很直观的选题。表面看它只是“表单采集列表展示”但真正把需求理清楚之后你会发现里面涉及权限分层、数据建模、走访流程、预警规则、微信生态适配等一系列问题随便挑一个点都能写进论文里当创新点而且还能把系统真正做成一个乡镇能用起来的小工具。防返贫监测本质上解决的是“怎么及时发现一个家庭是否重新陷入困难”的问题。过去靠纸质台账和Excel汇总信息滞后严重现在把采集端放到微信小程序里村干部入户时手机点几下就完成了。不过很多同学拿到这个题目第一反应是“赶紧写登录、写农户列表”结果做到一半才发现走访记录和预警台账的关系没想清楚字段建得过于随意后面越改越乱。这篇文章我就按自己做毕设项目的思路把这个题目的需求、数据库、核心功能到论文答辩完整拆一遍给你一份能直接照着落地的实施方案。1. 需求理解防返贫监测要解决的三个本质问题1.1 项目背景走访记录怎么变成监测数据防返贫监测小程序的服务对象很明确基层帮扶干部、村级管理员、乡镇审核人员。真正的工作场景是村干部或帮扶责任人需要定期入户确认某户家庭的收入是否稳定、有没有大额医疗支出、住房和饮水是否安全、家中劳动力是否发生变故。这些信息如果靠纸质表格记录再回办公室录入电脑通常要延迟好几天如果某户已经出现风险但没有及时上报后续帮扶就错过了最佳窗口。所以这个小程序的核心不是“做个表单”而是要建一条数据链路现场采集 - 后台汇总 - 规则预警 - 帮扶台账 - 措施反馈。换句话说走访记录只是源头监测预警才是灵魂。你在论文里如果能把这个“发现—核实—帮扶—销号”的闭环讲清楚老师一眼就能看出你真正理解了业务而不是为了凑一个管理系统。从用户角色来看这个项目涉及多个层级。县级管理员看全县数据乡镇审核员看本镇数据村级管理员只看本村数据。这就引出第一个技术难点数据权限。毕设里很多同学做成所有账号都能看到全部农户这在答辩时是硬伤后面我会给出一个很简单的解决方案。1.2 为什么是微信小程序而不是App或网页先做一个选择题这套系统为什么非要小程序不可答案不是“因为题目叫小程序”而是由使用场景决定的。使用这套系统的人主要是村干部和帮扶责任人他们的手机配置普遍一般不可能为了一两个系统单独安装App。网页版虽然免安装但手机浏览器输入地址、保存书签、接收消息提醒都很别扭。微信小程序恰好卡在中间扫码即用、用完即走、不需要安装还能借助微信的登录能力和订阅消息触达用户。我把三个方案的差异排了一下对比维度微信小程序独立App移动端网页安装成本免安装扫码进入需要下载安装包免安装但入口不固定开发成本中等生态组件完善高双端适配低但功能受限消息触达订阅消息需用户授权推送能力强基本没有推送能力账号体系微信openid体验顺畅需要自建账号体系需要自己注册登录审核要求需要走小程序审核应用商店审核无审核从项目实现角度看微信小程序还有一个隐藏优势它天然把前端和后端边界划清了。小程序端负责数据采集和展示后端提供接口管理端做审核和统计整个项目层次分明放在毕业设计里非常加分。缺点是微信生态有些限制比如代码包体积、合法域名校验、订阅消息次数这些坑我会在第四章专门讲。1.3 毕设定位这套系统能作为什么级别的毕业设计明确了业务场景之后你要清楚这项目该往哪个方向做。它本质上是典型的管理信息系统MIS只是多了一个微信小程序展示层。针对计算机专业毕业设计来说完整的系统应该包含三个部分小程序端采集和通知、后台管理端审核和统计、后端接口服务端。如果只做小程序不做管理端系统在功能闭环上是残缺的老师很容易挑出“只有录入没有管理”的问题。我建议把项目定位成“小程序端Web管理后台后端服务”的完整系统。小程序端给一线走访人员用Web管理端给县级和乡镇审核人员用后端统一提供接口。这样工作量看起来确实增加了但每一项都有明确的考核价值需求分析画用例图、数据库设计做ER图、后端写接口文档、前端做页面交互最后论文里每个章节都有内容可写。就我看到的毕设情况这类题目拿良以上的比例很高因为它的业务复杂度适中不像电商那种满屏功能要堆也不像图书管理系统那样毫无新意。你只要在预警规则、数据权限、消息推送这几个方向稍微做深一点论文创新点就出来了。2. 功能规划角色、场景与核心模块2.1 角色权限体系县级、乡镇、村级、走访员先别急着建表把角色和权限想清楚后面能省掉一半返工。我建议设计四级角色外加一个系统管理员系统管理员负责账号维护、字典管理、全局参数配置一般不参与业务。县级管理员查看全县数据审核重大预警分配跨乡镇的帮扶任务。乡镇审核员查看本镇数据审核村级上报的走访记录和预警信息。村级管理员维护本村农户档案安排走访任务跟踪本村预警处理进度。走访员/帮扶责任人接收走访任务现场填写走访记录并提交查看自己负责农户的预警提醒。这里最关键的一点是数据范围控制。县级账号看全县乡镇账号只能看本乡镇村级账号只能看本村。实现方式有两种一种是接口里逐个判断角色然后拼SQL另一种是给每张业务表加一个区域编码字段查询时统一按区域编码过滤。我强烈推荐第二种代码写起来干净权限模型在论文里也容易画清楚。角色之间的操作关系也要提前定义。比如村级管理员提交的预警需要乡镇审核员确认后才进入“已派发”状态走访员只能看到分配给他的农户不能越权查看其他人。这些规则写进需求文档就是论文里最好的功能说明素材。2.2 核心功能地图走访上报、预警提醒、帮扶台账、数据统计把需求拆成功能模块整个系统的边界就清楚了。小程序端我建议只做四件事登录与绑定、农户档案、走访上报、提醒中心。不要让村干部在小程序里做复杂的数据审核那是管理端该干的事手机屏幕上做表格审核体验极差。Web管理端则承担重活农户档案管理、走访记录管理、预警审核、帮扶措施台账、统计报表、系统管理。统计报表不用做太炫酷按乡镇/村分组统计“走访完成率”“预警数量”“处置率”这三个指标就很有说服力也能配合图表库做出漂亮的界面。模块之间的数据流大概是这样的走访员提交走访记录后触发预警规则引擎符合条件的生成预警记录乡镇审核员在管理端处理预警把状态改为“已派发”同时填写帮扶措施帮扶责任人处理完措施后在系统内反馈结果预警状态变为“已办结”。这个流程逻辑弱一点没问题但业务上必须讲得通。2.3 预警规则怎么设计才实用很多毕设把“智能预警”写得神乎其神最后实现却是几个if。我的建议是反过来直接做成可配置的规则反而更实用。预警规则表里保存规则名称、指标类型、比较符、阈值、风险等级管理员在后台可以动态修改。这样论文里能写“系统支持规则的灵活配置”答辩时也经得起追问。举几个典型规则例子家庭人均年收入低于监测线时触发“蓝色预警”。近30天内新增医疗自付费用超过设定金额触发“黄色预警”。家庭主要劳动力出现重病或去世直接触发“橙色预警”。住房被鉴定为C级或D级危房触发“红色预警”。同一农户连续两次走访中被标记为“情况异常”且未解除自动升级预警等级。规则要基于采集字段来计算。意思是你的走访表单里必须包含收入、支出、异常标识这些结构化字段不能只在备注里写一段文字让人肉眼判断。这个问题我在带毕设时经常看到同学们把困难描述全塞进“问题说明”文本框里结果后面的统计和预警全部没法做。记住一句话表单字段结构化程度决定了系统的数据分析上限。3. 数据库设计一张表一张表地讲清楚3.1 核心表与字段清单数据库是这个项目的地基我建议先花半天时间把表设计出来再写代码。核心表一共六张区域表、用户表、农户表、走访记录表、预警表、帮扶措施表外加一张字典表做数据字典。农户信息表建议把“人”和“户”分开思考。防返贫监测以家庭户为基本单元但家庭里的成员信息、劳动力情况、患病情况又需要单独记录。毕设阶段如果全压在一张表里会非常臃肿我建议简化成“农户主表”加“家庭成员子表”主表存户主姓名、证件号、家庭人口数、所在区域编码、家庭主要收入来源、人均收入、住房情况等子表存家庭成员姓名、与户主关系、健康状况、劳动能力、是否在校生等。走访记录表是整张数据库里数据量增长最快的表字段包括所属农户、走访人、走访时间、收入变化情况、支出类型医疗/教育/灾害等、支出金额、是否存在突发困难、现场图片、走访备注。我特别提醒一个细节支出类型要设计成多选或字典不要用“困难情况描述”这种长文本替代。预警表和帮扶措施表是闭环的两端。预警表记录触发哪条规则、触发值是多少、当前状态帮扶措施表记录针对这个预警做了什么、责任人是谁、完成时限和处置结果。两张表通过农户ID关联再各自冗余一份区域编码和预警等级方便统计查询。3.2 区域编码怎么做数据权限区域表的传统做法是id加parent_id的无限级结构但做数据权限时要用递归逐层下钻比较麻烦。更省心的方案是利用行政区划编码本身的规律用一串字符表示层级比如一个9位编码的前6位代表乡镇后3位代表村。实际查询时县级账号存的是6位编码村级账号存的是9位编码统一的过滤逻辑就是“区域编码以当前用户编码开头”。对应SQL写在下面SELECT * FROM farmer_info WHERE region_code LIKE CONCAT(#{regionCode}, %) ORDER BY create_time DESC;这个方案有两个好处。一是性能好只要在region_code字段上建了索引前缀匹配查询很快二是代码统一不管哪个角色进来后端拦截器把当前用户的regionCode放到查询条件里就行不需要在业务代码里到处写if判断。说句实在话就这一个设计点很多毕业论文里根本没有但你写上去就是加分项。当然要注意防御SQL注入。上面的例子用了预编译参数底层处理掉了很多安全风险你自己手写SQL的时候也别把用户传的参数直接拼进SQL字符串这是底线。3.3 实体关系与状态流转六张核心表的关系并不复杂农户表一对多走访记录表农户表一对多预警表预警表一对多帮扶措施表。但“一对多”在代码实现时要特别注意分页和统计的粒度比如某农户一个月被走访了三次统计走访覆盖率的时候到底是按农户去重还是按记录次数计算前期如果定义不清后期看到报表数据会觉得哪里不对。预警状态建议设计成四个待处理、处理中、已办结、已撤销。当走访记录提交后触发规则生成一条“待处理”预警乡镇审核员确认后改为“处理中”并派发帮扶措施帮扶责任人反馈处置结果后变为“已办结”如果审核后发现是误报就标记“已撤销”。状态字段在数据库里用int或varchar都行但建议加一个状态变更时间方便写“平均办结天数”这种统计指标。这里还要提一个容易被忽略的点数据字典。人口属性、收入类型、住房等级、预警级别这些字段如果全部写死在代码里后面的维护会非常痛苦。建一张sys_dict表和dict_item表把“字典类型-字典项-数值-排序”管理起来前端下拉框直接走字典接口加载后台管理员也能自己维护。这个设计本身很简单但能让你的系统专业感上一个档次。4. 核心功能实现登录、走访、列表、订阅4.1 微信登录与手机号绑定登录模块是整个小程序的门面很多同学一上来就踩坑。微信小程序的登录并不是拿用户名密码而是走微信的code2Session接口。前端先通过wx.login()获取一个临时code后端用这个code去微信接口换用户的openid拿到openid之后再去自己的用户表里查询。如果用户没绑定过手机号就要引导他走手机号授权。这个环节的关键在于手机上用的button必须设置open-typegetPhoneNumber用户点击后拿到一个code后端再调用微信接口解密手机号。不能只靠用户自己输入手机号那样又回到传统登录了体验很差。后端返回给前端的不应该是openid而应该是你自己生成的token。我用JWT比较多它会把用户ID、角色、区域编码放进token里小程序端每次请求都在header里带上这个token后端过滤器统一校验。这样做的意义是管理Web端也能复用同一套登录体系不用单独再写一套认证逻辑。PostMapping(/login) public RString login(RequestBody LoginDTO dto) { String openid wxService.code2Session(dto.getCode()); SysUser user userService.findByOpenid(openid); if (user null) { return R.fail(该微信号未绑定账号请先绑定手机号, 1001); } String token jwtUtil.createToken(user.getId(), user.getRegionCode()); return R.success(token); }代码本身不复杂难点在理解整个调用链。建议你在论文里把登录时序图画出来再把token无状态认证的原理写一段这个章节基本就稳了。4.2 走访上报模块拍照、定位、防重走访上报是小程序端使用频率最高的功能也是现场体验最容易翻车的地方。页面流程建议这样设计选择农户支持扫码或搜索- 展示农户当前档案摘要 - 填写走访表单 - 上传现场照片 - 提交。照片上传用wx.chooseMedia选择再用wx.uploadFile传给后端。拍照之前强烈建议做压缩处理村干部的手机上传一张原图可能要四五秒网络差的时候更是转圈转半天。压缩方法不复杂调用wx.compressImage把quality设为80左右即可。定位功能也值得做。走访工作的真实性很大程度靠“现场位置时间”来佐证我们可以调用wx.getLocation拿到经纬度跟着走访记录一起提交。但真机调试时经常会遇到定位授权失败所以页面里必须允许手动选择村组作为兜底方案否则一到开会演示就尴尬。防重复提交这件事我只说一个有效的做法前端提交按钮加loading态只能防止手抖真正可靠的是后端幂等控制。给每次走访生成一个前端传上来的请求编号recordNo数据库里给这个字段建唯一索引重复请求来了直接报“重复提交”。这个思路同样适用于后续所有的表单提交场景。4.3 列表加载更多与搜索筛选农户列表和走访记录列表都涉及大量数据绝对不能一次性返回全量数据再在小程序前端做分页。正确做法是后端分页小程序端配合onReachBottom触底加载下一页。后端分页接口的入参一般是pageNum、pageSize、keyword、regionCode、riskLevel、startTime、endTime。返回结构固定为total和records两个字段。NO: MyBatis-Plus的分页插件和PageHelper都能实现选哪个看你项目原有的依赖别两种混用就行。function request(url, data {}, method GET) { return new Promise((resolve, reject) { wx.request({ url: getApp().globalData.baseUrl url, data, method, header: { Authorization: wx.getStorageSync(token) }, success: (res) { if (res.statusCode 200 res.data.code 0) { resolve(res.data.data); } else if (res.statusCode 401) { wx.navigateTo({ url: /pages/login/login }); } else { reject(res.data); } }, fail: reject }); }); }分页过程中还有一个细节搜索筛选条件变化后必须重置pageNum为1把所有旧数据清掉再加载新数据。很多同学一开始没做重置结果切换村组之后列表里混着上一个村的数据这种问题在演示现场非常显眼。4.4 订阅消息推送预警预警触发之后怎么通知走访员和村级管理员小程序的通知能力和App不同它依赖订阅消息而且订阅消息不是无限发的。用户必须通过button点击或某些特定交互触发出wx.requestSubscribeMessage授权一次授权只能推送一条消息。实操方案是这样的走访员提交走访记录成功后弹出一个引导按钮“开启该农户预警提醒”用户点一下授权订阅后端把订阅次数和农户ID关联保存下来。后面该农户一旦触发预警后端就调用订阅消息接口把“农户姓名预警等级触发原因”推给之前授权的用户。订阅次数用完提醒就发不出去所以系统里还要有一个“提醒记录”页面让用户能随时查看历史预警不能完全依赖推送。后端发送订阅消息需要拿到小程序的access_token这个token每天有获取次数限制所以你必须在服务端缓存起来过期再重新获取不能每次发消息都去调微信接口。小程序后台也要提前申请好消息模板模板关键词必须和发送内容一一对应否则接口会报47003这类错误。这些在论文的“系统测试”里都可以写成实际的报错和解决过程反而显得你真正做过。5. 毕设交付源码、论文、答辩与部署避坑5.1 源码目录结构和LW文档写法说到“源码LW文档”很多同学第一反应是LW文档不就是把代码截图贴一贴吗真不是。LW文档是你的毕业设计说明书重点在于把“为什么这么做”解释清楚。我建议论文按这个目录骨架写摘要、绪论、需求分析、系统设计、数据库设计、系统实现、系统测试、总结与展望。需求分析部分一定要画用例图把角色和功能的关系画清楚。系统设计部分画架构图分清楚小程序端、管理端、服务端之间的通信方式。数据库部分把ER图画出来再附上每张表的字段说明。系统实现部分每个核心功能配1张截图、1段关键代码、3-5行文字说明不要贴大段源码。测试部分用表格写测试用例不要把“我跑了一下没报错”当成测试结果。源码的组织建议按照后端、小程序、管理端分目录backend/ src/main/java/com/xxx/fjp/ controller/ service/ mapper/ entity/ config/ common/ src/main/resources/ application.yml mapper/ miniprogram/ pages/ index/ login/ farmer/ visit/ warning/ mine/ utils/request.js app.js app.json manage-web/ src/ 页面和路由目录清爽的好处是老师看着省心你写论文的时候也能直接看出整个系统的模块边界。5.2 开发环境配置与真机调试避坑这个项目开发调试阶段有几个高频坑十个人里八个人会踩提前说清楚能帮你省一整天时间。第一AppID问题。新建小程序项目时一定要用自己的小程序账号AppID不要用测试号。测试号不支持大部分微信开放能力后面手机号绑定、订阅消息全都调不通。第二本地调试域名问题。微信开发者工具里默认要求接口地址是HTTPS的合法域名。本地开发时可以在“详情-本地设置”里勾选“不校验合法域名”否则连本地回环地址都请求不通。真机预览时这个勾选不生效所以要准备一台后端部署到云服务器上或者使用局域网IP加开发者工具的“真机调试”通道。第三发布准备。项目上线前要在小程序后台配置request合法域名、uploadFile合法域名和downloadFile合法域名三个域名分开配置漏一个就等着看报错吧。报错通常长这样url not in domain list。另外新版本微信对地理位置接口有额外要求需要在app.json里显式声明requiredPrivateInfos字段否则getLocation直接不干活。第四代码包体积。小程序主包超过2M就会编译失败解决办法是建议把后台管理页面拆到Web端小程序只保留现场使用的高频页面再开启分包加载。不要为了省空间把图片资源放本地全部走线上地址。5.3 答辩高频问题和标准回答答辩时老师最爱问的问题其实就这么几个提前准备一下现场就不会冷场。“你的数据权限是怎么控制的”回答思路用户表存区域编码业务表统一带区域编码所有查询都拼接区域前缀过滤条件既简单又高效。“预警规则和普通的if判断有什么区别”回答思路规则不是写死在代码里而是配置在数据库里管理员可以动态修改阈值和启用状态系统具备可持续扩展能力。“为什么用JWT而不是Session”回答思路小程序端和管理端是多个客户端接口需要无状态认证JWT可以跨端复用也方便做接口鉴权拦截器。“农户信息如果泄露了怎么办”回答思路身份证号加密存储前端列表不展示完整证件号涉及敏感数据的接口做后台日志审计。“这个系统真的能上线用吗”回答思路作为一个毕业设计核心流程已经跑通但正式投入使用还需要对接更多权威数据源完善离线场景并把预警规则放到实际业务中反复验证。这样回答既诚实又不夸大。答辩时还有一个隐形加分技巧翻车的时候不要硬撑。如果说错了一个点就直接说“这块我当时采用的是另一种方案”然后从代码逻辑角度补充说明。老师在乎的是你有没有独立解决问题的能力而不是每一句话都完美。最后说点实际的。做这个选题最容易翻车的不是代码是需求想当然。很多同学把农户表建好就开写走到走访记录才发现不知道一个家庭里面怎么关联多个成员也不知道预警记录和帮扶台账怎么串联。我个人带项目比较多给你一个建议先手动画一遍从“入户采集”到“预警派发”到“措施反馈”的全流程把每一步涉及的角色、表格、状态变化列在一张纸上再开始建库写代码。这个过程花不了半天但能帮你把整个系统都串起来后面的开发速度和论文质量都会明显不一样。
返回列表