
前言博主介绍一线全栈工程师毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码帮你把毕设做成作品集。精彩专栏 推荐订阅Java精品项目案例【3000套】Python精品项目案例【800套】uniapp/微信小程序/安卓app精品实战案例【2000套】✅文末获取源码✅感兴趣的可以先收藏起来还有大家在毕设选题项目以及论文编写等相关问题都可以找我咨询希望帮助更多的人❤️系统分析功能需求分析UML用例图是描述系统功能需求的图形化工具用它来表示系统与外部参与者之间的交互关系可以清楚地知道系统的功能。用例图是用用例来表示系统可以执行的具体功能参与者是和系统交互的各种用户或者外部系统。用例图在分析设计阶段使用可以保证系统功能的完整正确也可以帮助开发人员和客户达成一致。用例图是用直观的图形来表示系统功能和角色之间的一一对应关系。本文将对系统按照角色模块进行需求分析。管理员角色管理员在系统中负责平台秩序的管理与维护查看平台任务大厅内全部公开的任务信息可以进行查询、重置或者删除等操作。管理员对订单信息进行监控处理异常的接单行为。订单沟通记录可以被管理员查看保证交流内容符合规范。订单延时申请要经过管理员审核或者备案。送达信息由管理员进行核对和归档。用户提交的反馈投诉由管理员受理审核后作出相应处理。跑腿用户的提现申请需要管理员审核通过之后才能进行打款。管理员角色用例图如图所示。管理员用例图消费者角色消费者角色通过系统发布个人跑腿需求在任务大厅浏览、搜索、查看任务详情对感兴趣的任务可以点赞或者收藏。用户填写任务要求、费用、上传相关图片后提交发布。用户可以查看已经发布的任务的接单状态以及接单者信息。当订单需要更改送达时间的时候用户可以提交延时申请并解释原因。用户在下单时可以和接单的跑腿用户进行在线交流。订单完成后用户查看送达信息并对服务进行反馈或者投诉。用户角色用例图如图所示。消费者用例图骑手角色骑手角色可以在系统中提供跑腿服务可以浏览任务大厅选择合适的任务进行接单。接单之后跑腿用户需要管理自己的接单信息在任务完成后上传物品相片、填写备注来确认送达。在订单执行的过程中跑腿人员要同发布任务的用户进行沟通及时回复用户的问题。跑腿用户可以查看自己对投诉的反馈。对于由于用户原因造成的订单延时跑腿用户可以查看相关记录。跑腿用户账户余额可以提现申请功能中选择提现方式输入卡号金额后提交申请。跑腿用户角色用例图如图所示。跑腿用户用例图可行性分析技术可行性从技术可行性上来说本系统所用的技术栈成熟、生态健全。SpringBoot框架可以简化Java后端服务的配置和部署可以快速创建RESTful API。Vue.js作为渐进式前端框架组件化开发方式利于维护结合uni-app可以实现一套代码多端发布。MySQL是关系型数据库事务支持以及数据一致性保证机制适合于本系统交易场景。这些技术有充足的学习资源和社区支持开发风险小。因此系统从技术上是可行的。操作可行性操作可行性上系统功能设计来源于校园真实的需要。用户和跑腿用户角色明确任务发布、接单、沟通、送达等流程符合线下服务逻辑。前端界面使用微信小程序生态进行开发用户不需要下载额外的应用程序操作门槛低。管理员后台使用常规的Web管理界面数据展示及操作方式符合管理习惯。整体交互设计要直观用户学习成本要低。因此系统在操作上是可行的。经济可行性从经济可行性角度而言系统开发所用到的技术大部分是开源技术免费工具居多软件授权费为零。可以选用性价比高的云服务器或者校内服务器硬件投入少。开发团队是由学生组成的人力成本主要是学习和时间的投入。系统上线之后会产生服务价值潜在的打赏、佣金或者广告收入可以覆盖基本的运维开销。就投入产出比来说项目具备实施的价值。因此系统在经济上是可行的。系统设计系统架构设计系统整体上采用经典的分层架构思想目的是达到高内聚、低耦合的设计目的。用户界面层分为移动端小程序和PC端管理后台两部分都是基于Vue.js生态来构建的小程序端使用uni-app跨端能力进行高效开发。应用服务层以SpringBoot为核心封装所有的核心业务规则用设计良好的RESTful API给前端提供数据和服务[14]。数据持久层采用MySQL数据库存储业务实体数据用MyBatis框架完成对象关系映射简化数据库操作。系统支持层包含项目构建、开发环境、日志记录、测试、文档等基础支撑组件保证开发流程的规范化以及系统运行的可观测性。各层之间依靠明确定义的接口来交流共同支持校园跑腿业务的正常运转。整个系统的架构图如图4-1所示。整个系统架构如图4-1所示。系统架构图系统结构功能设计系统以校园跑腿服务核心业务流程为依托给管理员、消费者、跑腿骑手三种角色提供不同的功能支持。管理员在后台集中管理任务、订单、沟通、投诉、财务申请等保证平台的正常运转。消费者作为需求方主要通过任务大厅发布和管理自己的需求跟踪订单进度、服务反馈。跑腿用户属于服务供给方主要做任务承接、执行沟通、收益提现。各个角色的功能相对独立又通过订单流程紧密耦合在一起形成一个完整的服务闭环。系统功能结构图如图所示。系统功能结构图任务发布流程设计用户进入任务大厅之后点击发布按钮就进入到表单填写页面。用户输入任务标题、费用、取件和送达地址、时间要求等主要信息可以上传物品图片。系统会校验表单内容的完整性不通过会提示用户补充。校验通过之后任务数据上传至服务器成功之后用户界面跳转回任务大厅新发布的任务会显示在列表中。任务发布流程图如图所示。任务发布流程图订单接单流程设计跑腿用户在任务大厅浏览到合适的任务之后可以查看任务详细要求。用户决定接单就点击接单按钮系统后台要验证该跑腿用户账户状态是否正常以及是否已经接单超过限制。验证失败就提示用户原因验证成功就生成一条接单记录任务状态改为“已接单”并向发布该任务的消费用户发送接单通知。订单接单流程图如图所示。订单接单流程图订单沟通流程设计用户或者跑腿用户在订单执行过程中可以在订单详情页中进入专用的沟通界面。在界面下方的输入框内输入消息的内容然后点击发送按钮把消息的内容提交给服务器去储存。服务器会把这条消息实时推送给对话的另一方对方设备上的沟通界面就会自动刷新并显示这条新的消息从而实现双向实时交流。订单沟通流程图如图所示。订单沟通流程图确认送达流程设计跑腿用户完成任务之后在订单详情页上进行确认送达的操作。流程要求跑腿用户上传一张物品已经送达的现场照片例如物品和门牌号的合影。然后填写一段文字备注说明送达的情况。系统检查照片和备注都已经提交之后跑腿用户才可以提交。系统随即生成一条送达信息记录把相应的订单状态更新为“已完成”并通知消费用户订单已经送达。确认送达流程图如图所示。确认送达流程图投诉反馈流程设计消费者对已经完成的订单服务不满意时可以提出投诉。用户进入对应订单页面后选择投诉反馈功能首先要从预设的投诉类型列表里选择一项比如送达超时或者物品损坏。用户上传相关的证明图片或者聊天记录截图。最后填写详细的投诉内容描述。系统对提交的内容进行基本的合规性检查后保存投诉信息将状态设置为“待审核”等待管理员处理。投诉反馈流程图如图所示。投诉反馈流程图数据库设计在数据库设计阶段用ER图将概念模型转化为具体的数据库结构。本阶段任务是对各个数据表的字段类型、约束条件、表与表之间关系进行设计为后面物理设计做好铺垫。在此基础上再对数据存储方案以及查询性能进行优化。实体–联系模型设计ER图是数据库概念设计的主要工具用以表示实体类型、属性特征及实体间的关系[15]。利用图形化的建模方法可以清楚地表示出系统数据的逻辑结构便于了解各个数据实体之间关系为数据库的物理实现提供完整的理论基础。下面分别给出系统全局E-R图结构以及主要实体的详细属性构成。系统全局E-R图如图所示。系统E-R图消费用户实体主要包括消费用户id、用户姓名、用户电话、审核状态等属性。实体属性图如图所示。消费用户实体属性图跑腿用户实体主要包括跑腿用户id、跑腿姓名、跑腿电话、账户余额等属性。实体属性图如图所示。跑腿用户实体属性图任务大厅实体主要包括任务大厅id、跑腿标题、取件地址、送达地址等属性。实体属性图如图所示。任务大厅实体属性图接单信息实体主要包括接单信息id、跑腿标题、跑腿用户、接单日期等属性。实体属性图如图所示。接单信息实体属性图订单沟通实体主要包括订单沟通id、跑腿标题、沟通问题、跑腿回复等属性。实体属性图如图所示。订单沟通实体属性图订单延时实体主要包括订单延时id、跑腿标题、延至时间、延时原因等属性。实体属性图如图所示。订单延时实体属性图送达信息实体主要包括送达信息id、跑腿标题、送达时间、完成时间等属性。实体属性图如图所示。送达信息实体属性图反馈投诉实体主要包括反馈投诉id、跑腿标题、投诉类型、审核状态等属性。实体属性图如图所示。反馈投诉实体属性图提现申请实体主要包括提现申请id、跑腿姓名、提现方式、提现金额等属性。实体属性图如图所示。提现申请实体属性图跑腿类型实体主要包括跑腿类型id、跑腿类型等属性。实体属性图如图所示。跑腿类型实体属性图数据库参考CREATE TABLE mission_hall(mission_hall_id int(11) NOT NULL AUTO_INCREMENT COMMENT 任务大厅ID, runs_title varchar(64) comment 跑腿标题, run_errands_no varchar(64) comment 跑腿编号, consumer_user int(11) DEFAULT 0 comment 消费用户, user_name varchar(64) comment 用户姓名, user_phone varchar(64) comment 用户电话, pour_address varchar(64) comment 取件地址, address_for_service varchar(64) comment 送达地址, delivery_time datetime comment 送达时间, type_of_errands varchar(64) comment 跑腿类型, cost_of_running_errands double(8,2) DEFAULT 0 comment 跑腿费用, order_status varchar(64) comment 订单状态, item_specificss varchar(255) comment 物品详情, order_requirements text comment 订单要求, pay_state varchar(16) DEFAULT 未支付 NOT NULL comment 支付状态, pay_type varchar(16) DEFAULT comment 支付类型: 微信、支付宝、网银, order_receiving_information_limit_times int(8) DEFAULT 1 NOT NULL comment 接单限制次数, cancel_message_limit_times int(8) DEFAULT 1 NOT NULL comment 取消限制次数, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, create_by int(11) DEFAULT 1 NOT NULL comment 创建用户ID, update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, PRIMARY KEY (mission_hall_id))ENGINEInnoDB DEFAULT CHARSETutf8mb4 comment 任务大厅;代码参考RestController RequestMapping(/cancel_message) public class CancelMessageController extends BaseControllerCancelMessage, CancelMessageService { /** * 取消信息对象 */ Autowired public CancelMessageController(CancelMessageService service) { setService(service); Autowired private JavaMailSender mailSender; /** * 发送验证码到邮箱API * * param email * return */ GetMapping(send_email) public MapString, Object sendEmail(String email) { //判断邮箱号是否为空 if (StringUtils.isEmpty(email)) { return error(30000, 参数错误); } try { //随机生成 6位数的验证码 int code (int) (Math.floor(Math.random() * 900000) 100000); // 创建MimeMessage对象 MimeMessage mimeMessage mailSender.createMimeMessage(); // 使用MimeMessageHelper辅助类构建邮件 MimeMessageHelper helper new MimeMessageHelper(mimeMessage, true); // 设置收件人、发件人、主题和内容 helper.setFrom(3216252476qq.com); // 替换为你的QQ邮箱地址 helper.setTo(email); helper.setSubject(找回密码); helper.setText(h1验证码为code/h1, true); // 发送邮件 mailSender.send(mimeMessage); Calendar cal Calendar.getInstance(); cal.add(Calendar.MINUTE,10); String token service.encryption(code _ cal.getTime()); SimpleDateFormat format new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); MapString, Object map new HashMap(); map.put(token,token); map.put(code,code); map.put(expire_time,format.format(cal.getTime())); this.addMap(map); MapString, Object result new HashMap(); result.put(result,1); result.put(token,token); return result; }catch (MessagingException e){ e.printStackTrace(); return error(30000, e.getMessage()); } } GetMapping(verify_email_code) public MapString, Object verifyEmailCode(String token,String code) { if (StringUtils.isEmpty(token) || StringUtils.isEmpty(code)) { return error(30000, 参数错误); }else { MapString,String queryMap new HashMap(); queryMap.put(token,token); MapString,String configMap new HashMap(); configMap.put(like,false); List resultList service.selectBaseList(service.select(queryMap, configMap)); if (resultList.size() 0) { CodeToken obj (CodeToken) resultList.get(0); Date now new Date(); if (obj.getExpire_time().after(now)){ if (code.equals(obj.getCode())){ return success(1); }else { return error(30000, 验证码错误); } }else { return error(30000, 验证码已失效); } }else { return error(30000, token请求错误); PostMapping(/add) Transactional public MapString, Object add(HttpServletRequest request) throws IOException { MapString,Object paramMap service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry - { Object value entry.getValue(); return value instanceof String ((String) value).isEmpty(); }); CustomerChatLog customer_chat_log new CustomerChatLog(); customer_chat_log.setCustomer_chat_id(paramMap.get(customer_chat_id)null?null:String.valueOf(paramMap.get(customer_chat_id))); customer_chat_log.setContent(paramMap.get(content)null?null:String.valueOf(paramMap.get(content))); this.addEntity(customer_chat_log); System.out.println(在线沟通记录新增成功); return success(1); } PostMapping(/set) Transactional public MapString, Object set(HttpServletRequest request) throws IOException { MapString,String queryMap service.readQuery(request); MapString,String configMap service.readConfig(request); MapString,Object paramMap service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry - { Object value entry.getValue(); return value instanceof String ((String) value).isEmpty(); }); CustomerChatLog customer_chat_log new CustomerChatLog(); customer_chat_log.setCustomer_chat_id(paramMap.get(customer_chat_id)null?null:String.valueOf(paramMap.get(customer_chat_id))); customer_chat_log.setContent(paramMap.get(content)null?null:String.valueOf(paramMap.get(content))); this.setEntity(queryMap,configMap,customer_chat_log); System.out.println(在线沟通记录修改成功); return success(1);系统实现管理员功能实现任务大厅管理功能实现管理员用该功能对平台全部任务进行管理并列出所有的用户发布跑腿需求。查询功能可以按关键词、状态等条件筛选任务。重置操作用来清除查询条件恢复默认视图。任务大厅管理界面接单信息管理功能实现该模块用来管理已经产生的接单记录。管理员可以查询各个订单的接单情况列表中显示接单者和对应的任务。重置功能刷新数据列表管理员可以进入详情页查看,接单信息管理界面如图所示。接单信息管理界面订单沟通管理功能实现该功能使管理员可以对用户和跑腿用户之间的交流内容进行监督。系统对所有的订单沟通历史进行记录管理员可以查询。重置操作初始化查询条件管理员可以查看任意对话的详细信息。订单沟通管理界面订单延时管理功能实现该模块用来处理用户发起的订单延时申请。管理员可以查询所有的延时申请记录列表中显示申请的订单和申请的时间。重置功能用来重新加载列表。订单延时管理界面送达信息管理功能实现该功能是对订单完成确认信息进行核对与管理。管理员可以查询所有已经确认送达的记录。重置操作会刷新数据视图管理员可以进入详情页查看送达时间、完成时间、跑腿用户上传的物品照片和送达备注。对于虚假或者信息不全的送达确认管理员可以将其删除保证服务结果的真实性、可追溯性。送达信息管理界面反馈投诉管理功能实现模块集中处理用户提交的各项服务投诉。管理员查询投诉列表了解投诉对象及投诉类型。重置功能对查询状态进行初始化。管理员查看投诉详情审核用户上传的证明图片以及内容描述。审核操作是对投诉的处理管理员可以对投诉进行通过或者不通过的处理对于通过的投诉还可以进行审核回复。无效投诉可以由管理员直接删除记录。反馈投诉管理界面提现申请管理功能实现该功能实现跑腿用户余额提现的请求。管理员可以查询所有的待处理以及历史的提现申请。重置操作清除筛选条件。提现申请管理界面消费者功能实现任务大厅交互功能实现消费用户在平台内浏览和发布需求用户进入大厅之后通过搜索框来查找具体的任务。点击任务卡片可以查看全部要求和发布者信息。用户可以对感兴趣的任务进行点赞或者收藏。发布新任务时用户填写期望费用、上传物品图片最后生成新订单。该功能是用户获取和提供服务的入口。任务大厅交互界面订单延时申请功能实现用户在订单执行中如果需要更改收货时间就使用该功能。首先查询个人名下可以申请延时的订单查看当前订单详情。选择延时操作之后用户在时间选择器中选择新的期望送达时间在文本框中输入具体原因最后保存并提交申请。该流程给用户提供了对临时变动有灵活应对的能力。订单延时申请界面接单信息查看功能实现用户发布任务之后使用此模块来跟踪接单状态。用户可以查看自己所有已发布的任务列表查看是否有跑腿用户接单。用户可以进入详情页查看已接单任务的跑腿用户姓名、电话等基本信息。订单实际送达后用户在该页面执行送达确认操作完成订单闭环。接单信息查看界面送达信息查看功能实现在订单完成之后用户确认服务成果。用户可以查询所有标记为送达的、与自己有关的订单列表。点击进入详情页用户可以查看跑腿用户上传的物品送达相片、送达的具体时间、跑腿用户填写的送达备注作为服务完成的凭证。送达信息查看界面订单沟通功能实现该功能给用户提供了和接单跑腿者直接交流的途径。用户进入个人订单列表查询需要进行沟通的订单。进入详情页之后用户就可以看到已经存在的对话历史。用户在输入框中输入想要发送的内容点击发送按钮消息就会传给对方从而实现服务过程中实时协商、解决问题。订单沟通界面反馈投诉功能实现用户对已经完成的订单服务不满意时可以提出投诉。用户查询可投诉的订单列表选择具体的订单查看详情。进入投诉操作页面后用户从预设的投诉类型中选择一项上传可以证明问题的图片等文件最后填写详细的投诉内容简介并提交。该功能是用户维护自身权益、反映服务质量的重要途径。反馈投诉界面骑手用户功能实现接单与送达确认功能实现跑腿用户处理服务执行的关键环节。用户可以查询自己已经接单的订单列表查看每个订单的详情。任务执行完毕之后用户点击送达按钮就进入确认操作页面。接单与送达确认界面送达信息查询功能实现跑腿用户可以查询自己所有的已完成订单的送达记录。通过查询功能可以查询到用户以往确认送达的订单列表。用户可以点击详情查看自己当时上传的物品照片、填写过的送达备注和系统记录的送达和完成时间方便进行服务复盘或者个人记录核对。送达信息查询界面订单沟通回复功能实现该功能使跑腿用户可以响应用户的沟通请求。跑腿用户查询与自己有关的、需要沟通的订单列表进入详情查看用户发来的消息历史。用户在回复输入框中输入回复的内容点击提交按钮回复信息就发送给消费用户保证服务过程中双向有效沟通。订单沟通回复界面反馈投诉查看功能实现跑腿用户可以查看用户对自己服务的评价和投诉。用户查询与自己有关的反馈投诉列表了解投诉的大致情况。进入详情页之后跑腿用户可以查看投诉的具体类型、用户上传的证明文件、详细的投诉内容描述知晓服务中可能存在的一些问题从而为改进服务提供依据。反馈投诉查看界面订单延时查看功能实现跑腿用户需要知道所接的订单是否会有时间变动。用户查询与自己相关的订单延时申请列表查看有哪些订单被用户申请了延时。用户可以查看用户申请延时的新时间、申请延时的原因等信息从而合理安排自己的服务计划及时响应用户需求的变动。订单延时查看界面提现申请管理功能实现该模块供跑腿用户管理自己的劳动报酬提取。用户可以查询自己曾经提交过的所有提现申请记录了解申请状态。重置操作是对申请列表进行刷新。用户进入添加操作页面选择提现方式、输入对应银行卡号、填写期望提现金额、填写必要的备注后提交申请等待平台审核打款。提现申请管理界面源码获取私信联系我即可~大家点赞、收藏、关注、评论啦精彩专栏推荐订阅在下方专栏精彩专栏 推荐订阅Java精品项目案例【3000套】Python精品项目案例【800套】uniapp/微信小程序/安卓app精品实战案例【2000套】✅文末获取源码✅感兴趣的可以先收藏起来还有大家在毕设选题项目以及论文编写等相关问题都可以找我咨询希望帮助更多的人❤️