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);
}
}
929

被折叠的 条评论
为什么被折叠?



