模板模式实现工作流样例

1、基础接口

package com.example.demo.designpattern.template;

/**
 * @Author: pandafox
 * @Desctription: TODO
 * @Date: Created in 2021/1/1 22:25
 * @Version: 1.0
 */
public interface WorkflowBase {

    /**
     * 查询审批信息
     */
    String queryInfo(String code);

    /**
     * 状态检验
     */
    void checkStatus(String code, String status);

    /**
     * 更新审批信息
     */
    void updateInfo(String code, String status, String userId, String remark);

    /**
     * 保存操作日志信息
     */
    void saveOperateLog(String code, String userId);

    /**
     * 消息推送
     */
    void sendMsg(String code);

}

2、模板抽象类

在模板抽象类中,实现基础功能,动作类可以继承或修改对应实现

package com.example.demo.designpattern.template;

import lombok.extern.slf4j.Slf4j;

/**
 * @Author: pandafox
 * @Desctription: TODO
 * @Date: Created in 2021/1/1 22:32
 * @Version: 1.0
 */
@Slf4j
public abstract class WorkflowTemplate implements WorkflowBase {

    @Override
    public String queryInfo(String code) {
        //TODO 从DB中查询审批信息
        log.info("查询审批信息成功");
        return "success";
    }

    @Override
    public void checkStatus(String code, String status) {
        //TODO 校验流程状态是否正确
        log.info("状态校验成功");
    }

    @Override
    public void updateInfo(String code, String status, String userId, String remark) {
        //TODO 更新审批信息
        log.info("更新审批信息成功");
    }

    @Override
    public void saveOperateLog(String code, String userId) {
        //TODO 保存操作日志
        log.info("保存操作日志成功");
    }

    @Override
    public void sendMsg(String codez) {
        //TODO 推送短信、邮件等信息
        log.info("推送消息成功");
    }

}

3、动作类(举例)

3.1、初审
package com.example.demo.designpattern.template;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @Author: pandafox
 * @Desctription: 初审
 * @Date: Created in 2021/1/1 22:41
 * @Version: 1.0
 */
@Slf4j
@Service
public class FirstTrialAccepter extends WorkflowTemplate {

    @Override
    public String queryInfo(String code) {
        return super.queryInfo(code);
    }

    @Override
    public void checkStatus(String code, String status) {
        //TODO 校验是个性化的,根据实际业务场景覆盖父类中的实现即可
        log.info("自定义个性校验逻辑");
    }

    @Override
    public void updateInfo(String code, String status, String userId, String remark) {
        super.updateInfo(code, status, userId, remark);
    }

    @Override
    public void saveOperateLog(String code, String userId) {
        super.saveOperateLog(code, userId);
    }

    @Override
    public void sendMsg(String code) {
        super.sendMsg(code);
    }

}
3.2、复审
package com.example.demo.designpattern.template;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @Author: pandafox
 * @Desctription: 复审
 * @Date: Created in 2021/1/1 22:42
 * @Version: 1.0
 */
@Slf4j
@Service
public class ReTrialAccepter extends WorkflowTemplate {

    @Override
    public String queryInfo(String code) {
        return super.queryInfo(code);
    }

    @Override
    public void checkStatus(String code, String status) {
        //TODO 校验是个性化的,根据实际业务场景覆盖父类中的实现即可
        log.info("自定义个性校验逻辑");
    }

    @Override
    public void updateInfo(String code, String status, String userId, String remark) {
        super.updateInfo(code, status, userId, remark);
    }

    @Override
    public void saveOperateLog(String code, String userId) {
        super.saveOperateLog(code, userId);
    }

    @Override
    public void sendMsg(String code) {
        super.sendMsg(code);
    }

}
3.3、转发
package com.example.demo.designpattern.template;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @Author: pandafox
 * @Desctription: 转发
 * @Date: Created in 2021/1/1 22:42
 * @Version: 1.0
 */
@Slf4j
@Service
public class TransferAccepter extends WorkflowTemplate {
    @Override
    public String queryInfo(String code) {
        return super.queryInfo(code);
    }

    @Override
    public void checkStatus(String code, String status) {
        super.checkStatus(code, status);
    }

    @Override
    public void updateInfo(String code, String status, String userId, String remark) {
        super.updateInfo(code, status, userId, remark);
    }

    @Override
    public void saveOperateLog(String code, String userId) {
        super.saveOperateLog(code, userId);
    }

    @Override
    public void sendMsg(String code) {
        super.sendMsg(code);
    }

}

4、业务接口和类

4.1、接口
package com.example.demo.designpattern.template;

/**
 * @Author: pandafox
 * @Desctription: TODO
 * @Date: Created in 2021/1/1 22:52
 * @Version: 1.0
 */
public interface VacationService {

    /**
     * 休假初审
     */
    void vacationFirstTrial(String code, String status, String userId, String remark);

    /**
     * 休假复审
     */
    void vacationReTrial(String code, String status, String userId, String remark);
}

4.2、实现类

在实现类中,可以根据业务场景,灵活调用需要的方法

package com.example.demo.designpattern.template;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Author: pandafox
 * @Desctription: 休假模块
 * @Date: Created in 2021/1/1 22:49
 * @Version: 1.0
 */
@Slf4j
@Service
public class VacationServiceImpl implements VacationService {

    @Autowired
    private FirstTrialAccepter firstTrialAccepter;
    @Autowired
    private ReTrialAccepter reTrialAccepter;

    @Override
    public void vacationFirstTrial(String code, String status, String userId, String remark) {
        //根据业务场景需要,取对应方法即可
        firstTrialAccepter.queryInfo(code);
        firstTrialAccepter.checkStatus(code, status);
        firstTrialAccepter.updateInfo(code, status, userId, remark);
        firstTrialAccepter.saveOperateLog(code, userId);

    }

    @Override
    public void vacationReTrial(String code, String status, String userId, String remark) {
        reTrialAccepter.queryInfo(code);
        reTrialAccepter.checkStatus(code, status);
        reTrialAccepter.updateInfo(code, status, userId, remark);
        reTrialAccepter.saveOperateLog(code, userId);
        reTrialAccepter.sendMsg(code);
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值