|
package foundation.state.approve;
|
|
import java.util.List;
|
|
import foundation.action.ActionContext;
|
import foundation.action.SingletonActionProvider;
|
import foundation.dao.DataPackage;
|
import foundation.dao.DataReader;
|
import foundation.dao.DataSource;
|
import foundation.dao.DataWriter;
|
import foundation.dao.Domain;
|
import foundation.dao.Filter;
|
import foundation.dao.OrderBy;
|
import foundation.dao.Page;
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.entity.EntityTree;
|
import foundation.data.object.DataObject;
|
import foundation.json.JObjectReader;
|
import foundation.json.JType;
|
import foundation.persist.NamedSQL;
|
import foundation.persist.SQLRunner;
|
import foundation.state.MachineBucket;
|
import foundation.state.StateMachine;
|
import foundation.state.StateMachineLoader;
|
import foundation.token.IOnlineUser;
|
import foundation.util.ContentBuilder;
|
import foundation.util.Util;
|
|
|
|
public class ApproveCenter extends SingletonActionProvider {
|
|
public static String Remark_Approve = "同意";
|
public static String Remark_Deny = "不同意";
|
|
private static ApproveCenter instance;
|
|
|
private ApproveCenter() {
|
|
}
|
|
public static synchronized ApproveCenter getInstance() {
|
if (instance == null) {
|
instance = new ApproveCenter();
|
}
|
|
return instance;
|
}
|
|
@Override
|
protected void publishMethod() {
|
//1.1 获取审批流图数据
|
addMethod("getOneApprove");
|
|
//1.2 保存审批流图数据
|
addMethod("saveOneApprove");
|
|
//1.3 保存审批组
|
addMethod("saveBoard");
|
|
//1.4 删除审批组
|
addMethod("deleteOneboard");
|
|
//1.5 修改审批组人员
|
addMethod("saveOneBoardUser");
|
|
//1.6 修改审批组人员
|
addMethod("deleteOneBoardUser");
|
|
//2.1 审批中心--树
|
addMethod("getOutline");
|
|
//2.2 审批中心—待审列表
|
addMethod("getDocumentList");
|
|
//2.3 审批中心—已审列表
|
addMethod("getDocumentHistory");
|
|
//2.4 审批中心——某个单据的当前申请流
|
addMethod("getAliveWorkflow");
|
|
//2.5 审批中心——某个单据的已审列表
|
addMethod("getWorkHistory");
|
|
//2.6 审批中心—当前步骤
|
addMethod("getWorkSetps");
|
|
//2.7 审批中心—审批历史
|
addMethod("getWorkHistory");
|
|
//2.9 审批中心—单据审批人转移
|
addMethod("transferWorkStepApprover");
|
}
|
|
public void getOneApprove(ActionContext context) throws Exception {
|
DataReader dataReader = context.getDataReader();
|
DataWriter dataWriter = context.getDataWriter();
|
|
String approveId = dataReader.getString("id");
|
ApproveTemplate approveTemplate = ApproveTemplate.getInstance(approveId);
|
|
if (approveTemplate == null) {
|
return;
|
}
|
|
dataWriter.addValue(approveTemplate);
|
}
|
|
public void saveOneApprove(ActionContext context) throws Exception {
|
DataReader dataReader = context.getDataReader();
|
DataWriter dataWriter = context.getDataWriter();
|
|
ApproveTemplate newTemplate = new ApproveTemplate();
|
JObjectReader reader = dataReader.getReader("data", JType.Object);
|
newTemplate.load(reader);
|
|
ApproveTemplate original = ApproveTemplate.getInstance(newTemplate.getId());
|
|
//1. 如果是第一次保存,直接插入到数据库
|
if (original == null) {
|
newTemplate.insertToDB();
|
dataWriter.addValue(newTemplate);
|
}
|
//2. 如果存在原始模版,合并后保存
|
else {
|
original.updateToDB(newTemplate);
|
dataWriter.addValue(original);
|
}
|
}
|
|
public void saveBoard(ActionContext context) throws Exception {
|
DataPackage dataPackage = context.getDataPackage();
|
dataPackage.saveOneDataToDB(DataSource.Request);
|
|
String boardId = dataPackage.getMasterId();
|
StateMachineLoader.reloadStepBoard(boardId);
|
}
|
|
public void deleteOneBoard(ActionContext context) throws Exception {
|
DataWriter dataWriter = context.getDataWriter();
|
DataPackage dataPackage = context.getDataPackage();
|
String boardId = dataPackage.getMasterId();
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getApproverStepInUsing");
|
namedSQL.setParam("boardId", boardId);
|
EntitySet entitySet = SQLRunner.getEntitySet(namedSQL);
|
|
if (entitySet.isEmpty()) {
|
dataPackage.deleteOneDataFromDB();
|
StateMachineLoader.reloadStepBoard(boardId);
|
return;
|
}
|
ContentBuilder approveStep = new ContentBuilder(",");
|
|
for (Entity entity: entitySet) {
|
approveStep.append(entity.getString("name"));
|
}
|
|
dataWriter.reportOneError("checkBoardUsed", "当前审批组正在审批流:【" + approveStep.toString() + "】中使用,不允许删除。");
|
}
|
|
public void saveOneBoardUser(ActionContext context) throws Exception {
|
DataPackage dataPackage = context.getDataPackage();
|
dataPackage.saveOneDataToDB(DataSource.Request);
|
|
dataPackage.loadOneDataFromDB();
|
Entity entity = dataPackage.getMasterEntity();
|
StepUser stepUser = new StepUser();
|
stepUser.load(entity);
|
|
String boardId = entity.getString("board_id");
|
StepBoardBucket boardBucket = StepBoardBucket.getInstance();
|
StepBoard board = boardBucket.get(boardId);
|
board.loadOneUser(stepUser.getId(), stepUser);
|
board.reWriterNames();
|
}
|
|
public void deleteOneBoardUser(ActionContext context) throws Exception {
|
DataPackage dataPackage = context.getDataPackage();
|
Entity entity = dataPackage.getMasterEntity();
|
String boardId = entity.getString("board_id");
|
StepBoardBucket boardBucket = StepBoardBucket.getInstance();
|
StepBoard board = boardBucket.get(boardId);
|
|
dataPackage.deleteOneDataFromDB();
|
|
board.removeOneUser(entity.getId());
|
board.reWriterNames();
|
|
}
|
|
public void getOutline(ActionContext context) throws Exception {
|
DataWriter dataWriter = context.getDataWriter();
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getOutline");
|
IOnlineUser user = IOnlineUser.getInstance();
|
|
if (user.isAdmin()) {
|
namedSQL.setParam("user_limit", "1=1");
|
}
|
else {
|
namedSQL.setParam("user_limit", "sys_state_working_user.user_id = " + Util.quotedStr(user.getId()));
|
}
|
|
namedSQL.setOrderBy(new OrderBy("parent_id"));
|
EntityTree entityTree = SQLRunner.getEntityTree(namedSQL);
|
dataWriter.addValue("data", entityTree);
|
}
|
|
public void getDocumentList(ActionContext context) throws Exception {
|
DataReader dataReader = context.getDataReader();
|
DataWriter dataWriter = context.getDataWriter();
|
|
Domain domain = dataReader.getDomain();
|
String dataName = domain.getDataName();
|
|
StateMachine machine = MachineBucket.getMachineByDataName(dataName);
|
if (machine == null) {
|
return;
|
}
|
|
DataObject dataObject = DataObject.getInstance(dataName);
|
|
//1. 从请求中获取Page和OrderBy
|
Page page = new Page();
|
OrderBy orderBy = new OrderBy();
|
dataReader.loadPageOrderByFromJSON(dataObject, page, orderBy);
|
|
if (orderBy.isEmpty()) {
|
orderBy.add("update_time desc");
|
}
|
|
//2. 生成过滤条件
|
String machineId = machine.getId();
|
|
Filter filter = new Filter();
|
dataReader.loadFilterFromJSON(dataObject, filter);
|
dataObject.addDefaultFilter(filter);
|
|
IOnlineUser user = IOnlineUser.getInstance();
|
String userLimit = " 1 = 1 ";
|
|
if (!user.isAdmin()) {
|
userLimit = "sys_state_working_user.user_id = " + Util.quotedStr(user.getId());
|
}
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getDocumentListFilter");
|
namedSQL.setParam("tableName", dataObject.getTableOrViewName());
|
namedSQL.setParam("machine_id", machineId);
|
namedSQL.setParam("user_limit", userLimit);
|
|
filter.add(namedSQL.toString());
|
|
//3. 计算分页
|
int batchCount = dataObject.getCount(filter);
|
page.setRecordCount(batchCount);
|
dataWriter.addValue("page", page);
|
|
//4. 加载数据
|
EntitySet entitySet = dataObject.getBrowseEntitySet(filter, orderBy, page);
|
dataWriter.addValue("data", entitySet);
|
}
|
|
public void getDocumentHistory(ActionContext context) throws Exception {
|
DataReader dataReader = context.getDataReader();
|
DataWriter dataWriter = context.getDataWriter();
|
|
Domain domain = dataReader.getDomain();
|
String dataName = domain.getDataName();
|
|
StateMachine machine = MachineBucket.getMachineByDataName(dataName);
|
if (machine == null) {
|
return;
|
}
|
|
DataObject dataObject = DataObject.getInstance(dataName);
|
|
//1. 从请求中获取Page和OrderBy
|
Page page = new Page();
|
OrderBy orderBy = new OrderBy();
|
dataReader.loadPageOrderByFromJSON(dataObject, page, orderBy);
|
|
if (orderBy.isEmpty()) {
|
orderBy.add("update_time desc");
|
}
|
|
//2. 生成过滤条件
|
String machineId = machine.getId();
|
|
Filter filter = new Filter();
|
dataReader.loadFilterFromJSON(dataObject, filter);
|
dataObject.addDefaultFilter(filter);
|
|
IOnlineUser user = IOnlineUser.getInstance();
|
String userLimit = " 1 = 1 ";
|
|
if (!user.isAdmin()) {
|
userLimit = "sys_state_working_user.user_id = " + Util.quotedStr(user.getId());
|
}
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getDocumentHistoryFilter");
|
namedSQL.setParam("tableName", dataObject.getTableOrViewName());
|
namedSQL.setParam("machine_id", machineId);
|
namedSQL.setParam("user_limit", userLimit);
|
|
filter.add(namedSQL.toString());
|
|
//3. 计算分页
|
int batchCount = dataObject.getCount(filter);
|
page.setRecordCount(batchCount);
|
dataWriter.addValue("page", page);
|
|
//4. 加载数据
|
EntitySet entitySet = dataObject.getBrowseEntitySet(filter, orderBy, page);
|
dataWriter.addValue("data", entitySet);
|
}
|
|
public void getAliveWorkflow(ActionContext context) throws Exception {
|
DataReader dataReader = context.getDataReader();
|
DataWriter dataWriter = context.getDataWriter();
|
|
Domain domain = dataReader.getDomain();
|
String documnetId = domain.getId();
|
|
WorkingInstance flowInstance = new WorkingInstance(documnetId);
|
flowInstance.loadActive(false, false);
|
|
if (flowInstance.isEmpty()) {
|
dataWriter.reportOneError("审批流查询", "没有查询到相关流程");
|
return;
|
}
|
|
dataWriter.addValue("data", flowInstance);
|
}
|
|
public void getWorkSetps(ActionContext context) throws Exception {
|
DataReader dataReader = context.getDataReader();
|
DataWriter dataWriter = context.getDataWriter();
|
|
Domain domain = dataReader.getDomain();
|
String documnetId = domain.getId();
|
|
WorkingInstance workingInstance = new WorkingInstance(documnetId);
|
workingInstance.loadActive(true, false);
|
|
if (workingInstance.isEmpty()) {
|
dataWriter.reportOneError("审批流查询", "没有查询到相关流程");
|
return;
|
}
|
|
List<WorkingStep> steps = workingInstance.getWorkingSteps();
|
dataWriter.addValue("data", steps);
|
}
|
|
public void getWorkHistory(ActionContext context) throws Exception {
|
DataReader dataReader = context.getDataReader();
|
DataWriter dataWriter = context.getDataWriter();
|
|
Domain domain = dataReader.getDomain();
|
String documnetId = domain.getId();
|
|
WorkingInstance flowInstance = new WorkingInstance(documnetId);
|
flowInstance.loadActive(false, true);
|
|
if (flowInstance.isEmpty()) {
|
dataWriter.reportOneError("审批流查询", "没有查询到相关流程");
|
return;
|
}
|
|
EntitySet histories = flowInstance.getHistories();
|
dataWriter.addValue("data", histories);
|
}
|
|
public void transferWorkStepApprover(ActionContext context) throws Exception {
|
// 1. 更新审批人
|
String dataName = context.getDataName();
|
DataPackage dataPackage = context.getDataPackage();
|
dataPackage.loadDataFromRequest();
|
dataPackage.loadFilterPageOrderByFromJSON();
|
|
try {
|
SQLRunner.beginTrans();
|
|
Entity entity = dataPackage.getItemEntity(dataName, DataSource.Request);
|
Filter filter = dataPackage.getFilter();
|
DataObject dataObject = dataPackage.getDataObject(dataName);
|
|
dataObject.updateByEntity(entity, filter);
|
|
//2. 更新步骤
|
NamedSQL namedSQL = NamedSQL.getInstance("getWorkStep");
|
namedSQL.setFilter(filter);
|
|
EntitySet entitySet = SQLRunner.getEntitySet(namedSQL);
|
String workingStepId, documnetId;
|
|
for (Entity step : entitySet) {
|
documnetId = step.getString("doc_id");
|
workingStepId = step.getId();
|
|
WorkingInstance workingInstance = new WorkingInstance(documnetId);
|
workingInstance.resetWorkingStep(workingStepId);
|
workingInstance.loadActive(true, false);
|
}
|
|
}catch (Exception e) {
|
SQLRunner.rollback();
|
e.printStackTrace();
|
}
|
|
SQLRunner.commit();
|
|
|
|
}
|
}
|