package com.demo.jd;
public enum ApprovalStatusFlow {
SUBMITTED {
@Override
public ApprovalStatusFlow nextState() {
return APPROVED;
}
@Override
public ApprovalStatusFlow rejectState() {
return null;
}
@Override
public int currentStatus() {
return 0;
}
@Override
public String statusName() {
return "待提交";
}
},
APPROVED {
@Override
public ApprovalStatusFlow nextState() {
return APPROVING;
}
@Override
public ApprovalStatusFlow rejectState() {
return null;
}
@Override
public int currentStatus() {
return 1;
}
@Override
public String statusName() {
return "待审批";
}
},
APPROVING {
@Override
public ApprovalStatusFlow nextState() {
return PASS;
}
@Override
public ApprovalStatusFlow rejectState() {
return REJECTED;
}
@Override
public int currentStatus() {
return 2;
}
@Override
public String statusName() {
return "审批中";
}
},
PASS {
@Override
public ApprovalStatusFlow nextState() {
return null;
}
@Override
public ApprovalStatusFlow rejectState() {
return null;
}
@Override
public int currentStatus() {
return 3;
}
@Override
public String statusName() {
return "审批通过";
}
},
REJECTED {
@Override
public ApprovalStatusFlow nextState() {
return this;
}
@Override
public ApprovalStatusFlow rejectState() {
return this;
}
@Override
public int currentStatus() {
return 4;
}
@Override
public String statusName() {
return "审批不通过";
}
};
public static ApprovalStatusFlow get(int status) throws Exception {
for (ApprovalStatusFlow approvalStatusFlow : ApprovalStatusFlow.values()) {
if (approvalStatusFlow.currentStatus() == status) {
return approvalStatusFlow;
}
}
throw new MyException("无该状态");
}
//下一节点
public abstract ApprovalStatusFlow nextState();
//拒绝节点
public abstract ApprovalStatusFlow rejectState();
//当前状态
public abstract int currentStatus();
//状态名称
public abstract String statusName();
public static void main(String[] args) throws Exception {
ApprovalStatusFlow submitted = ApprovalStatusFlow.SUBMITTED;
System.out.println(ApprovalStatusFlow.SUBMITTED.statusName());
System.out.println(submitted.nextState().statusName());
System.out.println(submitted.nextState().nextState().statusName());
System.out.println(submitted.nextState().nextState().nextState().statusName());
System.out.println(ApprovalStatusFlow.APPROVING.rejectState().statusName());
System.out.println(ApprovalStatusFlow.REJECTED.nextState().statusName());
System.out.println(ApprovalStatusFlow.get(1).statusName());
}
}