package com.fjhx.utils;

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;

public abstract class ExampleAbstract {

    /**
     * 流程缓存值
     */
    protected String cacheData;

    /**
     * 获取缓存值
     */
    public <T> T getCacheData(Class<T> cls) {
        if (ObjectUtil.isEmpty(cacheData)) {
            return null;
        }
        return JSONObject.parseObject(cacheData, cls);
    }

    protected void setCacheData(String cacheData) {
        this.cacheData = cacheData;
    }

    /**
     * 设置流程编码
     */
    public abstract String getCode();

    /**
     * 实例结束方法
     */
    public abstract void end();

    /**
     * 审批驳回方法(直接结束流程)
     * 需要时重写即可
     */
    public void reject() {

    }

    /**
     * 审批不通过方法(返回上一节点)
     * 需要时重写即可
     */
    public void fail() {

    }

    /**
     * 审批通过方法(跳转下一节点)
     * 需要时重写即可
     */
    public void adopt() {

    }

    /**
     * 控制流程流转
     * 存在分支时需要重写此方法，流转向指定分支
     *
     * @return 指定流转分支编码
     */
    public String circulation() {
        return null;
    }

    /**
     * 删除流程
     *
     * @return
     */
    public boolean deleteLogic() {
        return true;
    }
}
