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 steps; public ApproveTemplate() { steps = new MapList(); } 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 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(); } }