ARTICLE DETAIL

资讯详情

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

一个基于SpringBoot3+Vue3的工单管理系统:审批进池、处理组分派与 SLA 双计时

一个基于SpringBoot3+Vue3的工单管理系统:审批进池、处理组分派与 SLA 双计时 一个基于SpringBoot3Vue3的工单管理系统审批进池、处理组分派与 SLA 双计时文档地址https://ruoyioffice.com源码1·GitHubhttps://github.com/yuqing2026/ruoyi-office源码2·GitCodehttps://gitcode.com/zhouzhongyan/ruoyi-office源码3·Giteehttps://gitee.com/yqzy1688/ruoyi-office微信17156169080备注「RuoYi Office」一句话工单要验收的是审批过了有人接、超时能看见、回复留在同一张单上。RuoYi Office 用oa_ticket_bill走 Flowable审批通过再进工单池SLA 写两个 deadline。▲ 四步都发生在同一张工单上审批看不见办理、办理不改审批结果SLA 从提交时刻起算引言报障单卡在「谁来接」打印机卡纸、VPN 登不上、官网 502——这些不是请假那种「审完就结束」的单据。审批只回答「该不该办」真正难的是现场原话工单要给出的能力「过了审批没人理」进工单池组员认领或自动派「紧急单和咨询单一个时限」优先级分类匹配 SLA「两个人同时点接单」状态门禁待分配才能抢「超时了群里才知道」定时任务打标 站内信本文只写已经跑通的 PC 工单列表在/ticket/ticket-pool办理在工单池详情申请单在/ticket/ticket-bill-info。一、业务设计两套状态一张表1.1 流程状态 ≠ 工单状态processStatus跟 Flowable 走运行中、通过、驳回。ticketStatus跟服务台走ticketStatus含义谁能动手0 未启动还没提交申请人1 待分配审批通过在池里处理组成员认领 / 管理员派2 待处理已指定处理人未接单被派的人3 处理中已接单当前处理人回复/转派/完成4 已完成处理人结案可关闭或重新打开5 已关闭终态可激活回处理中审批回调只改办理侧不会把「已通过」写成「处理中」。列表上能同时看到流程标签和工单标签。1.2 四张表表作用oa_ticket_bill主单分类、优先级、处理组、两个 deadline、超时标志处理组成员组名、成员 ID 串、分配策略、轮询游标SLA 规则优先级 可选分类 → 响应小时 / 解决小时回复流水人工回复 系统事件接单、转派、SLA 超时工单池不是另建一张「池表」。待分配且当前用户在处理组里SQL 就能筛出来。1.3 三种分派处理组assignStrategy值策略适用0手动投诉专班组长点名1轮询IT 值班按lastAssignIndex往下转2负载最少客服组数待处理处理中最少的人策略为 0 或组里没人审批通过后停在待分配进工单池。二、PC 端申请单和工单池分开申请入口是工单列表/发起页。详情里能填标题、分类、优先级、处理组提交后走oa_ticket_bill。▲/ticket/ticket-bill-info审批前是业务表单通过后办理改走工单池避免申请人页面上堆接单按钮工单池是办理工作台。编号链到详情列表能看到 SLA 剩余小时或「已超时」。▲/ticket/ticket-pool全文只这一张列表。待分配橙色、处理中蓝色超时标红点进详情能接单、回复、转派、完成、关闭。时间线混排系统记录和人工回复。▲ 工单池详情优先级、截止时间、处理组、回复框在同一页这才是办理效果SLA 规则是配置页名称、匹配优先级、可选分类、响应/解决小时。▲ SLA 规则投诉类 1 小时响应 / 8 小时解决咨询类可以放到 24 / 120 小时三、后端审批通过才开始服务台时钟3.1 onProcessApproved匹配 SLA再尝试自动派publicvoidonProcessApproved(StringbusinessKey){LongidLong.parseLong(businessKey);TicketBillDObillticketBillMapper.selectById(id);TicketBillDOupdateObjnewTicketBillDO();updateObj.setId(id);updateObj.setTicketStatus(TicketStatusEnum.PENDING_ASSIGN.getStatus());TicketSlaRuleDOslaRuleticketSlaRuleService.matchSlaRule(bill.getPriority(),bill.getCategory());if(slaRule!null){LocalDateTimebasebill.getSubmittedTime()!null?bill.getSubmittedTime():LocalDateTime.now();if(slaRule.getResponseHours()!nullslaRule.getResponseHours()0){updateObj.setResponseDeadline(base.plusHours(slaRule.getResponseHours()));}if(slaRule.getResolveHours()!nullslaRule.getResolveHours()0){updateObj.setResolveDeadline(base.plusHours(slaRule.getResolveHours()));}}// 有处理组则 tryAutoAssign成功则改为待处理并通知ticketBillMapper.updateById(updateObj);}要点deadline 从提交时间起算不是从接单时间起算。紧急单不会因为在池里躺了两小时而「重新给 8 小时」。规则匹配按启用规则排序优先级必须相等分类为空表示通配。3.2 自动分派轮询游标 / 数活跃单publicLongtryAutoAssign(TicketBillDOticket,TicketHandlerGroupDOgroup){if(group.getAssignStrategy()null||group.getAssignStrategy()0){returnnull;}ListLongmemberIdsArrays.stream(group.getMemberUserIds().split(,)).map(String::trim).filter(StringUtils::isNotBlank).map(Long::parseLong).toList();returnswitch(group.getAssignStrategy()){case1-assignByRoundRobin(group,memberIds);case2-assignByLeastLoad(memberIds);default-null;};}轮询把lastAssignIndex写成下一个下标。负载最少只统计「待处理 处理中」不管已完成历史避免老人永远被派、新人永远空闲。3.3 SLA 扫描两个时钟标志位去重XxlJob(ticketSlaCheckJob)publicvoidexecute(){ListTicketBillDOticketsticketBillMapper.selectListForSlaCheck(CHECK_STATUSES);LocalDateTimenowLocalDateTime.now();for(TicketBillDOticket:tickets){if(ticket.getResponseDeadline()!null!Boolean.TRUE.equals(ticket.getResponseTimeout())ticket.getAcceptedTime()null){if(now.isAfter(ticket.getResponseDeadline())){markResponseTimeout(ticket);}elseif(now.plusMinutes(30).isAfter(ticket.getResponseDeadline())){sendSlaWarning(ticket,响应);}}// 解决时钟同理过点打 resolveTimeout前 30 分钟预警}}只扫待分配 / 待处理 / 处理中。响应超时以「还没接单」为准已经接了就不再刷响应超时。打标后写系统回复「【SLA超时】」并通知处理人和组长。responseTimeout为真后不再重复通知。接单会校验在池里必须是组员待处理必须是被派的那个人。否则两个人同时点接单后点的会失败。四、几个值得留下的取舍审批和办理拆开。敏感投诉可以先走主管处理组在通过之前根本进不了这张单。SLA 配在规则表不写死在代码。紧急和咨询共用一套扫描 Job差别只在小时数。池是查询条件不是新实体。少一张同步表成员变更立刻反映到「我能看见的待接单」。超时用标志位不用「每次扫描都发信」。Job 允许空跑通知必须幂等。五、快速体验在线演示https://ruoyioffice.com/web/账号 admin / admin123源码仓库GitHubhttps://github.com/yuqing2026/ruoyi-office GitCodehttps://gitcode.com/zhouzhongyan/ruoyi-office Giteehttps://gitee.com/yqzy1688/ruoyi-office建议路径打开工单列表新建一张带处理组的单并提交审批通过后看工单状态是待分配还是待处理打开工单池点编号进详情接单一句回复打开SLA 规则对照该单的优先级看响应/解决小时可选把解决时限改短等 Job 跑完看是否出现超时标签。本地PC5800/ticket/API48080。没有处理组成员时通过后会一直停在待分配——这是设计不是丢单。常见问题FAQ工单审批通过为什么还要工单池审批只证明「可以办」。池解决「谁办、何时办完」。没有池通过后只能靠群里人。单聊式 IM 能替代工单吗聊天没有 SLA、没有接单门禁、没有分类统计。催办可以跳 IM报障闭环还是要工单。轮询会不会并发派给同一个人游标写在处理组行上。极端并发仍可能撞车生产量大时应对更新游标加条件或锁。负载最少同样是读完再派适合中小并发。响应超时和解决超时有什么差别响应看有没有接单解决看有没有在 deadline 前完成。接了单只停响应时钟解决时钟继续走。手机能不能办工单UniApp 审批详情可以嵌工单业务页。日常认领、回复仍以 PC 工单池为准。结语OA 工单的完成态是审批通过有人接、超时能看见、回复留在同一张单。RuoYi Office 用两套状态把「该不该办」和「办得及时不及时」分开用处理组三种策略决定谁来接用两个 deadline 标志位让超时可追。先把「过审进池、超时打标」跑通工单才配写进 OA 菜单。大而全的客服坐席等这条主路径稳定后再谈。你们现在 IT 报障是微信群人还是已经能在工单池里看 SLA评论区说说卡在分派还是超时。想要体验 RuoYi Office 的强大功能在线演示https://ruoyioffice.com/web/账号 admin / admin123源码仓库GitHubhttps://github.com/yuqing2026/ruoyi-office GitCodehttps://gitcode.com/zhouzhongyan/ruoyi-office Giteehttps://gitee.com/yqzy1688/ruoyi-office技术咨询添加微信17156169080备注「RuoYi Office」⭐如果觉得不错请给个 Star 支持一下
返回列表