package com.malk.delegate;

import org.springframework.scheduling.annotation.Async;

import java.util.Map;

/**
 * 钉钉事件回调 3_2
 * -
 * [主项目若无实现, 项目启动异常; 若子项目有订阅需添加 @Primary 以实现优先注入]
 * -
 * 子项目实现接口 [静态代理], 添加对应 processCode 单据业务逻辑
 * OA审批, 撤销和拒绝流程不继续执行连接器, 通过事件订阅实现实时同步
 */
public interface DDEvent {


    // todo, 回调做try, 失败记录做存储, 提供查询接口

    // todo, 回调参数统一, 宜搭查询接口统一

    // 审批任务回调执行业务逻辑
    @Async
    void executeEvent_Task_Finish(String processInstanceId, String processCode, boolean isAgree, String remark);

    @Async
    void executeEvent_Task_Start(String processInstanceId, String processCode);

    @Async
    void executeEvent_Task_Redirect(String processInstanceId, String processCode);

    // 审批实例回调执行业务逻辑
    @Async
    void executeEvent_Instance_Finish(String processInstanceId, String processCode, boolean isAgree, boolean isTerminate, String staffId);

    @Async
    void executeEvent_Instance_Start(String processInstanceId, String processCode);

    // 考勤打卡事件回调
    @Async
    void executeEvent_attendance_check(Map<String, ?> record);
}
