如何设计一个简易的工单系统

本文介绍了如何设计一个简易的工单系统,特别是针对保险业务中承保失败的情况。系统采用状态管理模式,包括PENDING、PROCESSING和FINISH三个状态。工单任务涉及事件记录、类型定义、人工介入通知、任务分配和定时任务检查。通过模版方法设计模式,实现了任务类型和处理方式的灵活扩展,对外提供统一接口。
摘要由CSDN通过智能技术生成

需求背景

先来看看业务整体结构图

由于当前所在公司是做保险相关业务的,需要对接很多公司,下单的过程中,必须将数据成功传输到保险公司并得到返回才算成功,在这个交互的过程中,很容易因为保险公司系统处于升级,或者过于繁忙状态,或者其他原因,导致我们下单失败,所以我们需要一个系统来对这些承包失败的订单继续处理,重新承保或者退款。另外还有一些其他需要人工介入的操作,我们也需要将其视为一个工单来处理。

以单个工单任务为例

以承保失败为例

流程与状态确定

从业务流程可以看出,等待人工介入,是一个持续的过程,因此我们需要一个状态PENDING来将这个任务标记为待处理,后续处理完成之后,需要一个状态FINISH来标记这个任务已经完成。按照目前的情况来说,状态已经可以解决目前的问题了,但考虑到未来有些任务的处理过程可能也是一个持续的状态,习惯性地加了一个PROCESSING处理中状态。
所以对于一个工单任务来说,目前状态有3个 PENDING,PROCESSING,FINISH

单个环节解析

确定了流程之后,我们进一步分析每一个关节

这个环节是流程的开端,我们需要记录状态和失败订单的关键信息(包含时间类型,失败的原因,事件具体信息,相关人员,时间等),所以,我们需要一张t_task表来记录一个任务的元信息。

除了承保失败,我们可能还有其他的任务事件,因此,我们需要定义一个事件类型TYPE。

这个环节需要人工介入,所以我们就需要通知到相关的人员,可能需要对这个任务进行分配,这个可以根据具体需求来考虑。

由于我们公司有一些订单失败的修复,有些特殊情况开发人员自己提脚本修改了,所以我们引入了一个定时任务,检查相关的业务状态,来判定这个工单是否完成并结束。

这个环节涉及到处理,处理的方式非常多,针对每个事件,都有好几种处理方法,所以我们可以抽象出以下模型。

在这里插入图片描述

接口设计

从上面业务模型分析上看,可变的东西有时间的不同,处理方式的不同。其它流程大体一致,所以我们对这两个不同点进行抽象,抽象成两个模版方法。

模版方法定义

public interface TaskService {
   
    // 提交任务
    void submitTask(TaskSubmitReq taskSubmitReq);
    // 处理任务
    void operate(TaskOperateReq taskOperateReq
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值