package foundation.state.approve;
|
|
import foundation.data.entity.Entity;
|
import foundation.data.object.DataObject;
|
import foundation.data.object.EntitySaver;
|
import foundation.json.IJSONProvider;
|
import foundation.json.IJSONWriter;
|
import foundation.json.JArrayReader;
|
import foundation.json.JObjectReader;
|
import foundation.json.JSONReader;
|
import foundation.json.JType;
|
import foundation.util.ID;
|
import foundation.util.MapList;
|
import foundation.util.Util;
|
|
public class ApproveTemplate implements IJSONProvider {
|
|
private String id;
|
private String name;
|
private MapList<String, StepTemplate> steps;
|
|
public ApproveTemplate() {
|
steps = new MapList<String, StepTemplate>();
|
}
|
|
public static ApproveTemplate getInstance(String templateId) throws Exception {
|
ApproveTemplateBucket templateBucket = ApproveTemplateBucket.getInstance();
|
ApproveTemplate result = templateBucket.getOrLoad(templateId);
|
return result;
|
}
|
|
public void load(Entity entity) {
|
id = entity.getString("id");
|
name = entity.getString("name");
|
}
|
|
public void load(JObjectReader reader) throws Exception {
|
//1. 审批流主记录
|
id = reader.getString("id");
|
if (Util.isEmpty(id)) {
|
id = ID.newValue();
|
}
|
|
name = reader.getString("name");
|
|
//2. 审批步骤
|
JArrayReader stepsReader = reader.getReader("steps", JType.Array);
|
|
for (JSONReader stepReader: stepsReader) {
|
StepTemplate step = new StepTemplate();
|
step.load(stepReader);
|
|
if (Util.isEmpty(step.getId())) {
|
step.setId(ID.newValue());
|
}
|
|
if (Util.isEmpty(step.getParentId())) {
|
step.setParentId(id);
|
}
|
|
loadOneStep(step.getId(), step);
|
}
|
}
|
|
public void loadOneStep(String id, StepTemplate step) {
|
steps.add(id, step);
|
}
|
|
public void active() {
|
|
}
|
|
public synchronized void insertToDB() throws Exception {
|
DataObject approveObject = DataObject.getInstance("sys_state_approve");
|
DataObject stepObject = DataObject.getInstance("sys_state_approve_step");
|
|
//1. 插入审批流主记录
|
EntitySaver saver = approveObject.createEntitySaver();
|
|
saver.set("id", id);
|
saver.set("name", name);
|
saver.insert();
|
|
//2. 插入审批流步骤明细
|
for (StepTemplate step: steps) {
|
insertOneStepToDB(stepObject, step);
|
}
|
}
|
|
public synchronized void updateToDB(ApproveTemplate another) throws Exception {
|
DataObject approveObject = DataObject.getInstance("sys_state_approve");
|
DataObject stepObject = DataObject.getInstance("sys_state_approve_step");
|
|
//1. 保存审批流主记录
|
EntitySaver saver = approveObject.createEntitySaver(id);
|
saver.set("name", another.name);
|
saver.update();
|
|
//2. 保存审批流步骤明细
|
MapList<String, StepTemplate> anotherSteps = another.steps;
|
|
for (StepTemplate anotherStep: anotherSteps) {
|
String stepId = anotherStep.getId();
|
StepTemplate originalStep = steps.get(stepId);
|
|
//2.1 新增加的执行添加操作
|
if (originalStep == null) {
|
insertOneStepToDB(stepObject, anotherStep);
|
steps.add(stepId, anotherStep);
|
}
|
//2.2 存在的执行修改操作
|
else {
|
updateOneStepToDB(stepObject, originalStep, anotherStep);
|
steps.set(stepId, anotherStep);
|
}
|
}
|
|
//2.3 删除的执行删除操作
|
for (StepTemplate step: steps) {
|
String stepId = step.getId();
|
|
if (!anotherSteps.contains(stepId)) {
|
stepObject.deleteEntity(stepId);
|
steps.remove(stepId);
|
}
|
}
|
}
|
|
private void insertOneStepToDB(DataObject stepObject, StepTemplate step) throws Exception {
|
EntitySaver saver = stepObject.createEntitySaver();
|
saver.set(step.getEntity());
|
saver.insert();
|
}
|
|
private void updateOneStepToDB(DataObject dataObject, StepTemplate original, StepTemplate another) throws Exception {
|
EntitySaver saver = dataObject.createEntitySaver(original.getEntity());
|
saver.setNotEquals(another.getEntity());
|
saver.update();
|
}
|
|
public String getId() {
|
return id;
|
}
|
|
public String getName() {
|
return name;
|
}
|
|
@Override
|
public void writeJSON(IJSONWriter writer) {
|
writer.beginObject();
|
|
writer.write("id", id);
|
writer.write("name", name);
|
|
writer.beginArray("steps");
|
for (StepTemplate step: steps) {
|
step.writeJSON(writer);
|
}
|
writer.endArray();
|
|
writer.endObject();
|
}
|
}
|