一、示意图:
二、实体类:
1、申请模板
/**
* 实体:申请模板
*
* @author chen.lin
*
*/@Entity
@Table(name = "workflow_applicationTemplate")
public class ApplicationTemplate {
private Long id;
private String name;
private String processDefinitionKey;
private String path; // 文件在服务器端存储的路径
private Set<Application> applications = new HashSet<Application>();
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getProcessDefinitionKey() {
return processDefinitionKey;
}
public void setProcessDefinitionKey(String processDefinitionKey) {
this.processDefinitionKey = processDefinitionKey;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
@OneToMany(cascade= {CascadeType.ALL},fetch=FetchType.EAGER ,mappedBy="applicationTemplate")
@OrderBy("id asc")
public Set<Application> getApplications() {
return applications;
}
public void setApplications(Set<Application> applications) {
this.applications = applications;
}
}
2、申请表单
/**
* 表单申请
* @author Administrator
*
*/
@Entity
@Table(name = "workflow_application")
public class Application {
/** 表单状态常量:审批中 */
public static final String STATUS_RUNNING = "审批中";
/** 表单状态常量:已通过 */
public static final String STATUS_APPROVED = "已通过";
/** 表单状态常量:未通过 */
public static final String STATUS_REJECTED = "未通过";
private Long id;
private ApplicationTemplate applicationTemplate;
private Set<ApproveInfo> approveInfos = new HashSet<ApproveInfo>();
private User applicant;// 申请人
private String title;// 标题
private Date applyTime;// 申请时间
private String path;// 文档的存储路径
private String status; // 当前的状态
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne
@JoinColumn(name="applicationTemplateId")
public ApplicationTemplate getApplicationTemplate() {
return applicationTemplate;
}
public void setApplicationTemplate(ApplicationTemplate applicationTemplate) {
this.applicationTemplate = applicationTemplate;
}
@ManyToOne
@JoinColumn(name="applicantId")
public User getApplicant() {
return applicant;
}
public void setApplicant(User applicant) {
this.applicant = applicant;
}
public Date getApplyTime() {
return applyTime;
}
public void setApplyTime(Date applyTime) {
this.applyTime = applyTime;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@OneToMany(cascade= {CascadeType.ALL},fetch=FetchType.EAGER ,mappedBy="application")
@OrderBy("id asc")
public Set<ApproveInfo> getApproveInfos() {
return approveInfos;
}
public void setApproveInfos(Set<ApproveInfo> approveInfos) {
this.approveInfos = approveInfos;
}
}
3、审批信息
@Entity
@Table(name = "workflow_approveInfo")
public class ApproveInfo {
private Long id;
private Application application; //
private User approver;// 审批人
private Date approveTime;// 审批时间
private boolean approval; // 是否通过
private String comment; // 审批意见
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne
@JoinColumn(name="approverId")
public User getApprover() {
return approver;
}
public void setApprover(User approver) {
this.approver = approver;
}
public Date getApproveTime() {
return approveTime;
}
public void setApproveTime(Date approveTime) {
this.approveTime = approveTime;
}
@ManyToOne
@JoinColumn(name="applicationId")
public Application getApplication() {
return application;
}
public void setApplication(Application application) {
this.application = application;
}
public boolean isApproval() {
return approval;
}
public void setApproval(boolean approval) {
this.approval = approval;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
三、【审批流转的约定】:
审批流程:
第一个环节是“提交申请”,以后每个环节基本上都是“审批”环节。
1,第一个活动是“提交申请”,办理人是申请人,也就是提交申请时的当前登录用户。
2,在我们的程序中,使用User对象表示用户,在JBPM中使用字符串表示参与者。
可以使用User中的一个不会重复的属性值作为JBPM的用户标识。
比如可以是id.toString()或是loginName.
3,在第一个“提交申请”的环节中会产生一个“申请信息”,
要求在流程中后面的每个环节中都应能方便的获取这个“申请信息”。
可以在“提交申请”环节设置一下流程变量:setVariable(“application”, application);
4,(对应第一条)“提交申请”环节的办理人应写为:assignee=”#{application.applicant.loginName}”