审核状态流转:
注意事项点:
1:依赖第三方审批的话,审批通过拒绝是,回调需要一定的时间,可能页面状态数据不同步,比如说提审后进入待审核状态,回调已经修改了数据,但是用户还在原界面还是待审核状态,点击相关比如说撤销操作按钮之后,前端多等个1-2秒的时间再去调用查询的接口,及时的同步好对应的状态or返回指定的异常码,收到指定异常码之后再刷新。
2:撤销审核的数据回源处理
数据回源设计:
如果是单表设计,比如说data表,数据修改后,新增快照字段,记录编辑前的源数据,进行数据回源
如果需要隔离审核通过的数据以及草稿数据的话,
data表分为对应的data_local和data_pass表,回源则将原先已通过的数据回源到local表之中。
3:数据提审,在撤审,在提审,如果数据没有变化的话,是否限制对应的提审操作。
飞书审批流程相关的配置:
1:飞书管理员创建审批,获取相关的审批Code
2:创建飞书应用:
3:相关权限申请:
- approval:approval 查看、创建、更新、删除审批应用相关信息
- contact:user.employee_id:readonly 获取用户 user ID
- contact:user.id:readonly 通过手机号或邮箱获取用户 ID
4:针对上述新创建的应用需要订阅对应approvalCode审批流字段
5:请求一下,获取审批定义:open.feishu.cn/api-explore…
6:刚创建的的应用没有ecccrypy key ,可以重置,配配置到后台,用于处理接受事件回调:
7:定义相关的回调路由:
8:飞书应用事件回调中,配置事件到回调路由,以及添加审批实例状态变更的事件
多次点击审核撤销时,相关审批信息状态限制
相关的回调路由测试代码:
/**
* 飞书事件配置
*/
@AllArgsConstructor
@Configuration
public class ServletAdapterConfiguration {
@Bean
public ServletAdapter getServletAdapter() {
return new ServletAdapter();
}
}
/**
* 飞书事件回调路由配置
*/
@RequestMapping("/test")
@RestController
@Slf4j
public class Test {
@Resource
private LarkApprovalProperties larkApprovalProperties;
@Resource
private ServletAdapter servletAdapter;
private EventDispatcher eventDispatcher;
@PostConstruct
public void init() {
eventDispatcher = EventDispatcher.newBuilder(larkApprovalProperties.getVerificationToken(), larkApprovalProperties.getEncryptKey())
.onCustomizedEvent("approval_instance", new CustomEventHandler() {
@Override
public void handle(EventReq event) {
String json = event.getPlain();
log.info("接收到审批实例变更事件, plain:{}", json);
Map<String, Object> resultMap = JsonUtil.toMap(json);
Map<String, Object> eventMap = (Map<String, Object>) resultMap.get("event");
String approvalCode = (String) eventMap.get("approval_code");
String instanceCode = (String) eventMap.get("instance_code");
String status = (String) eventMap.get("status");
}
})
.build();
}
@PostMapping("/webhook/event")
public void event(HttpServletRequest request, HttpServletResponse response)
throws Throwable {
log.info("飞书回调事件开始");
servletAdapter.handleEvent(request, response, eventDispatcher);
log.info("飞书回调事件结束");
}
}
ps: 相关坑点: 比如说提示飞书表单格式不正确 飞书表单的话,有些特殊字符是不支持的,还有如果传入换行符/n 也会提示飞书表单格式不正确,需要再增加一个斜杠号才可以/,即//n