简单流程审批需求:项目流程化有开始于结束、有若干个办理节点、每个节点可以有待办和已办。
审批实体设计
主要:流程状态、启动状态、审核状态、
有这三要素可以轻松查询审核人、待办、已办、流程当前节点、办理人等信息。
实体:
public class PerformanceTargetsAudit {
/**
* 未审核
*/
public static final int AUDIT_STATUS_0 = 0;
/**
* 审核通过
*/
public static final int AUDIT_STATUS_1 = 1;
/**
* 审核不通过
*/
public static final int AUDIT_STATUS_2 = 2;
/**
* 退回企业修改
*/
public static final int AUDIT_STATUS_3 = 3;
public static final Map<Integer, String> AUDIT_STATUS_MAP = new LinkedHashMap<Integer, String>(){
{
put( AUDIT_STATUS_0, "未审核");
put( AUDIT_STATUS_1, "通过");
put( AUDIT_STATUS_2, "不通过");
put( AUDIT_STATUS_3, "退回企业修改");
}
};
/**
* 0未提交
*/
public static final int STATUS_0 = 0;
/**
* 1节点一
*/
public static final int STATUS_1 = 1;
/**
* 2节点二
*/
public static final int STATUS_2 = 2;
/**
* 3节点三
*/
public static final int STATUS_3 = 3;
/**
* 4节点四
*/
public static final int STATUS_4 = 4;
public static final Map<Integer, String> STATUS_MAP = new LinkedHashMap<Integer, String>(){
{
put(STATUS_0, "未提交");
put(STATUS_1, "节点一");
put(STATUS_2, "节点二");
put(STATUS_3, "节点三");
put(STATUS_4, "节点四");
}
};
/**
* 未启动
*/
public static final int RUN_STATUS_0 = 0;
/**
* 启动中
*/
public static final int RUN_STATUS_1 = 1;
/**
* 已结束
*/
public static final int RUN_STATUS_2 = 2;
public static final Map<Integer, String> RUN_STATUS_MAP = new LinkedHashMap<Integer, String>(){
{
put( RUN_STATUS_0, "未启动");
put( RUN_STATUS_1, "启动中");
put( RUN_STATUS_2, "已结束");
}
};
private String id;
/**
* 项目id
*/
private String projectId;
/**
* 部门id
*/
private String departmentId;
/**
* 创建人id
*/
private String createUserId;
/**
* 创建时间
*/
private Date createTime;
/**
* 待办人id
*/
private String handleId;
/**
* 状态 (0未审核,1节点一。。。。)
*/
private int status;
/**
* 启动状态(0未启动,1启动中,2结束)
*/
private int runStatus;
/**
* 审核状态(0未审核,1通过,2不通过,3退回)
*/
private int auditStatus;
功能编码:
生成流程
加入审批表(用户id或者部门id)
//节点一
List<User> userList = iUserService.findUsersByDepartment(firstAuditDeptId);
List<PerformanceTargetsAudit> proformanceTargetsAudits = new ArrayList<>();
//加入审核表
for(User user: userList) {
PerformanceTargetsAudit proformanceTargetsAudit = new PerformanceTargetsAudit();
proformanceTargetsAudit.setId(UuidUtil.uuidStr());
proformanceTargetsAudit.setCreateTime(new Date());
proformanceTargetsAudit.setProjectId(projectId);
proformanceTargetsAudit.setHandleId(user.getId());
proformanceTargetsAudit.setDepartmentId(firstAuditDeptId);
proformanceTargetsAudit.setCreateUserId(mainReport.getFillOrgId());
proformanceTargetsAudit.setRunStatus(PerformanceTargetsAudit.RUN_STATUS_1);
proformanceTargetsAudit.setStatus(PerformanceTargetsAudit.STATUS_1);
proformanceTargetsAudit.setTemp1(PerformanceTargetsAudit.AUDIT_STATUS_0);
proformanceTargetsAudits.add(proformanceTargetsAudit);
}
iPerformanceTargetsAuditService.save(proformanceTargetsAudits);
审批
public ResultJson saveReport(String id,Integer auditStatus,Integer status, HttpServletRequest request, HttpServletResponse response) throws IOException {
ResultJson resultJson = new ResultJson();
try {
User currentUser = (User) this.getCurrentUser(request, response);
if(CollectionUtil.isNotEmpty(currentUser)) {
PerformanceTargetsMainReport mainReport = iPerformanceTargetsMainReportService.findPerformanceTargetsMainReport(id);
if(auditStatus != mainReport.getAuditStatus()) {//当前审核结点和页面数据中审核节点是否一致
resultJson.setSuccess(false);
resultJson.setMsg("已经被审核,请刷新页面!");
return resultJson;
}
switch (status) {
case 1://通过
//int auditStatus = mainReport.getAuditStatus();
//保存审核结果
List<PerformanceTargetsAudit> performanceTargetsAudits = iPerformanceTargetsAuditService.findPerformanceTargetsAuditsByHandle(id, currentUser.getId());
if(performanceTargetsAudits.size() > 0) {
PerformanceTargetsAudit performanceTargetsAudit = performanceTargetsAudits.get(0);
performanceTargetsAudit.setTemp1(status);
performanceTargetsAudit.setCreateTime(new Date());
iPerformanceTargetsAuditService.update(performanceTargetsAudits);
}else {
resultJson.setSuccess(false);
resultJson.setMsg("你没有对这条数据审核的权限!");
return resultJson;
}
//当前办理节点结束
List<PerformanceTargetsAudit> performanceTargetsAudits2 = iPerformanceTargetsAuditService.findPerformanceTargetsAuditsByPerformanceAndRunStatus(id);
List<PerformanceTargetsAudit> performanceTargetsAudits3 = new ArrayList<>();
for(PerformanceTargetsAudit performanceTargetsAudit: performanceTargetsAudits2) {
performanceTargetsAudit.setRunStatus(PerformanceTargetsAudit.RUN_STATUS_2);//结束
performanceTargetsAudits3.add(performanceTargetsAudit);
}
iPerformanceTargetsAuditService.update(performanceTargetsAudits3);
//修改成下一个办理节点
if(auditStatus != PerformanceTargetsAudit.STATUS_4) {//结束
List<PerformanceTargetsAudit> performanceTargetsAudits4 = iPerformanceTargetsAuditService.findPerformanceTargetsAuditsByStatus(id, auditStatus+1);
List<PerformanceTargetsAudit> performanceTargetsAudits5 = new ArrayList<>();
for(PerformanceTargetsAudit performanceTargetsAudit: performanceTargetsAudits4) {
performanceTargetsAudit.setRunStatus(PerformanceTargetsAudit.RUN_STATUS_1);//启动
performanceTargetsAudits5.add(performanceTargetsAudit);
}
iPerformanceTargetsAuditService.update(performanceTargetsAudits5);
}
mainReport.setAuditStatus(auditStatus+1);
break;
case 2://退回
//保存审核结果
List<PerformanceTargetsAudit> performanceTargetsAudits6 = iPerformanceTargetsAuditService.findPerformanceTargetsAuditsByHandle(id, currentUser.getId());
if(performanceTargetsAudits6.size() > 0) {
PerformanceTargetsAudit performanceTargetsAudit = performanceTargetsAudits6.get(0);
performanceTargetsAudit.setTemp1(status);
performanceTargetsAudit.setCreateTime(new Date());
iPerformanceTargetsAuditService.update(performanceTargetsAudits6);
}
//更改为重新填报
mainReport.setAuditStatus(PerformanceTargetsMainReport.STATUS_6);
mainReport.setReportStatus("0");
//所以审核节点结束
List<PerformanceTargetsAudit> performanceTargetsAudits7 = iPerformanceTargetsAuditService.findPerformanceTargetsAuditsByPerformance(id);
List<PerformanceTargetsAudit> performanceTargetsAudits8 = new ArrayList<>();
for(PerformanceTargetsAudit performanceTargetsAudit: performanceTargetsAudits7) {
performanceTargetsAudit.setRunStatus(PerformanceTargetsAudit.RUN_STATUS_2);//结束
performanceTargetsAudits8.add(performanceTargetsAudit);
}
iPerformanceTargetsAuditService.update(performanceTargetsAudits8);
break;
default:
break;
}
iPerformanceTargetsMainReportService.update(mainReport);
}
} catch (Exception e) {
resultJson.setSuccess(false);
resultJson.setMsg("提交失败,请联系管理员!");
e.printStackTrace();
}
resultJson.setMsg("提交成功!");
return resultJson;
}