Index: forgon-core/src/main/java/com/forgon/workflow/dwr/table/WorkFlowTableManager.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/workflow/dwr/table/WorkFlowTableManager.java (revision 0) +++ forgon-core/src/main/java/com/forgon/workflow/dwr/table/WorkFlowTableManager.java (revision 21790) @@ -0,0 +1,39 @@ +package com.forgon.workflow.dwr.table; + +import java.util.List; +import java.util.Map; + +import com.forgon.component.grid.GridManager; +import com.forgon.workflow.model.WorkFlow; +import com.forgon.workflow.service.WorkFlowManager; + +/** + * + * @author ZhuangQinLiu + * + */ +public class WorkFlowTableManager { + private GridManager gridManager; + + private WorkFlowManager workFlowManager; + + public void setGridManager(GridManager gridManager) { + this.gridManager = gridManager; + } + + public void setWorkFlowManager(WorkFlowManager workFlowManager) { + this.workFlowManager = workFlowManager; + } + + public String findWorkFlowTableList( + Map> parameterMap) { + return gridManager.renderGrid(parameterMap, WorkFlow.class + .getSimpleName(), "", new String[] {}); + } + + public String getWorkFlowById(String id){ + WorkFlow workFlow = (WorkFlow) workFlowManager.getWorkFlow(id); + return workFlow==null?"":workFlow.getId()+";"+workFlow.getInvoicePlanType()+";" + +workFlow.getStatus()+";"+workFlow.getCreateTime()+";"+workFlow.getCreaterName(); + } +} Index: forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowApprovalTaskAction.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowApprovalTaskAction.java (revision 0) +++ forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowApprovalTaskAction.java (revision 21790) @@ -0,0 +1,322 @@ +package com.forgon.workflow.action; + +import java.util.Date; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.lang.StringUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.vo.LoginUserData; +import com.forgon.entity.ExtJsEntity; +import com.forgon.security.service.UserManager; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.util.ExtJsUtil; +import com.forgon.util.ExtGridUtils; +import com.forgon.workflow.model.NodeDefinition; +import com.forgon.workflow.model.WorkFlowApprovalTask; +import com.forgon.workflow.service.WorkFlowApprovalTaskManager; +import com.forgon.workflow.service.WorkFlowManager; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +/** + * + * @author ZhuangQinLiu + * + */ +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem") +@Action(value = "workFlowApprovalTaskAction") +public class WorkFlowApprovalTaskAction implements ModelDriven, Preparable{ + private ExtGridUtils extGridUtils; + + private WorkFlowManager workFlowManager; + + private WorkFlowApprovalTask workFlowApprovalTask; + + private WorkFlowApprovalTaskManager workFlowApprovalTaskManager; + + private UserManager userManager; + + public void rollbackWorkFlowApprovalTask(){ + LoginUserData userData= AcegiHelper.getLoginUser(); + if(workFlowApprovalTask!=null){ + int approvalResult=Integer.parseInt(StrutsParamUtils.getPraramValue("approvalResult", "")); + workFlowApprovalTask.setHandlerId(userData.getUserId()); + workFlowApprovalTask.setHandler(userData.getUserName()); + workFlowApprovalTask.setHandleTime(new Date()); + workFlowApprovalTask.setStatus(0); + workFlowApprovalTask.setApprovalResult(approvalResult); + workFlowApprovalTaskManager.saveOrUpdateWorkFlowApprovalTask(workFlowApprovalTask); + + String nodeDefinition_id=StrutsParamUtils.getPraramValue("nodeDefinition_id", ""); + //获取下一个节点 + NodeDefinition nodeDefinition1=workFlowManager.getLastNodeDefinitionById(nodeDefinition_id); + + WorkFlowApprovalTask workFlowApprovalTask1=new WorkFlowApprovalTask(); + + if(nodeDefinition1!=null){ //有下一个节点 + //获取上一个节点的待审批任务 + WorkFlowApprovalTask workFlowApprovalTask2 = workFlowApprovalTaskManager.getWorkFlowApprovalTaskByRollBack(nodeDefinition_id,workFlowApprovalTask.getFormId()); + + workFlowApprovalTask1.setTaskName(nodeDefinition1.getName()); + workFlowApprovalTask1.setNodeDefinition(nodeDefinition1); + workFlowApprovalTask1.setFormId(workFlowApprovalTask2.getFormId()); + workFlowApprovalTask1.setFormType(workFlowApprovalTask2.getFormType()); + workFlowApprovalTask1.setTitle(workFlowApprovalTask2.getFormId()+workFlowApprovalTask2.getFormType()); + workFlowApprovalTask1.setCreateTaskTime(new Date()); + workFlowApprovalTask1.setUserId(workFlowApprovalTask2.getUserId()); + workFlowApprovalTask1.setApprovalResult(-1); + workFlowApprovalTask1.setStatus(1); + workFlowApprovalTaskManager.saveOrUpdateWorkFlowApprovalTask(workFlowApprovalTask1); + } + + + StrutsResponseUtils.output(true, "保存成功"); + } + } + + /** + * 根据登录用户,获取待办任务 + */ + public void loadWorkFlowApprovalTaskList(){ + //1、获取当前登陆用户的id和名字 + LoginUserData userData= AcegiHelper.getLoginUser(); + Long userId= userData.getUserId(); + + //2、获取当前用户对应的待办任务 + StringBuilder select=new StringBuilder(); + select.append("select w.id,w.formId,w.formType,w.title,w.createTaskTime,w.taskName,w.handlerId,w.handler,w.handleTime,w.nodeDefinition_id,w.status,w.handleOpinion,w.roleId,w.userId,u.fullName userName,r.descn roleName"); + select.append(" from WorkFlowApprovalTask w left join SS_USERS u on w.userId=u.id left join SS_ROLES r on r.id=w.roleId"); + //2.1状态为未处理 2.2当前用户存在于userid 或者 记录存储的角色id存在于当前用户对应角色列表 + String where = " where 1=1 and w.status =1 and ( w.userId = "+userId+" or w.roleId in ( select s.ROLE_ID from SS_USER_ROLE s where s.USER_ID="+userId+" ))"; + ExtJsEntity entity = ExtJsUtil.buildSQLEntity(select.toString(), where, ""); + JSONObject result = extGridUtils.getPagedResult(entity); + StrutsResponseUtils.output(result); + } + + /** + * 根据id获取待办任务信息 + */ + public void getWorkFlowApprovalTask(){ + String id = StrutsParamUtils.getPraramValue("id", "");//获取单号id + + String select = " select id, taskName,handlerId,status,approvalResult,handleOpinion from WorkFlowApprovalTask "; + String where = " where 1=1 and id="+id; + ExtJsEntity entity = ExtJsUtil.buildSQLEntity(select, where, ""); + JSONObject result = extGridUtils.getPagedResult(entity); + StrutsResponseUtils.output(result); + } + + /** + * 根据id + * 1、判断userid是否为空 + * 1.1空的话,获取节点审批表的roleid和userid,进而获取所指定的userid + * 1.2不为空的话,获取userid + */ + public void getAllUserByWorkFlowApprovalTaskId(){ + /*String select = " select descn name,id value from SS_ROLES "; + String where = " where 1=1 "; + ExtJsEntity entity = ExtJsUtil.buildSQLEntity(select, where, ""); + JSONObject result = extGridUtils.getPagedResult(entity); + StrutsResponseUtils.output(result);*/ + + + String id = StrutsParamUtils.getPraramValue("id", "");//获取单号id + JSONArray jSONArray = workFlowApprovalTaskManager.getAllUserByWorkFlowApprovalTaskId(id); + StrutsResponseUtils.output(jSONArray); + + + //select w.userId from WorkFlowApprovalTask w where w.id=1 + //空的话,则执行以下查询 + /*select ur.USER_ID roleUserId,u.fullName from SS_USER_ROLE ur ,SS_USERS u where ur.ROLE_ID in (select w.roleId from WorkFlowApprovalTask w where w.id=1) and ur.USER_ID=u.id + select w.userId roleUserId,u.fullName from WorkFlowApprovalTask w ,SS_USERS u where w.id=1 and w.userId=u.id*/ + + /*String select=" select w.userId from WorkFlowApprovalTask w "; + String where =" where w.id="+id; + ExtJsEntity entity = ExtJsUtil.buildSQLEntity(select, where, ""); + JSONObject result = extGridUtils.getPagedResult(entity); + JSONObject result1 ; + JSONObject result2 ; + if(result.isEmpty()){ + String select1=" select ur.USER_ID roleUserId,u.fullName from SS_USER_ROLE ur ,SS_USERS u "; + String where1 =" where ur.ROLE_ID in (select w.roleId from WorkFlowApprovalTask w where w.id="+id+") and ur.USER_ID=u.id "; + ExtJsEntity entity1 = ExtJsUtil.buildSQLEntity(select1, where1, ""); + result1= extGridUtils.getPagedResult(entity1); + + String select2=" select ur.USER_ID roleUserId,u.fullName from SS_USER_ROLE ur ,SS_USERS u "; + String where2 =" where ur.ROLE_ID in (select w.roleId from WorkFlowApprovalTask w where w.id="+id+") and ur.USER_ID=u.id "; + ExtJsEntity entity2 = ExtJsUtil.buildSQLEntity(select2, where2, ""); + result2= extGridUtils.getPagedResult(entity2); + + for(int i=0;i searchWorkFlowApprovalTask() { + // TODO Auto-generated method stub + return null; + } + + + + +} Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManagerImpl.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManagerImpl.java (revision 0) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManagerImpl.java (revision 21790) @@ -0,0 +1,218 @@ +package com.forgon.workflow.service; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.collections4.CollectionUtils; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.security.model.User; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.SqlUtils; +import com.forgon.workflow.model.NodeApproval; +import com.forgon.workflow.model.NodeDefinition; +import com.forgon.workflow.model.WorkFlow; + +/** + * + * @author ZhuangQinLiu + * + */ +public class WorkFlowManagerImpl implements WorkFlowManager{ + + private ObjectDao objectDao; + + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + + public NodeDefinition getLastNodeDefinitionById(String nodeDefinition_id){ + String sql= " where po.sequenceNumber in ( select o.sequenceNumber-1 from NodeDefinition o where o.id="+nodeDefinition_id+")"; + NodeDefinition nodeDefinition=(NodeDefinition) objectDao.getBySql(NodeDefinition.class.getSimpleName(), sql); + return nodeDefinition; + } + + public NodeDefinition getNextNodeDefinitionById(String nodeDefinition_id){ + String sql= " where po.sequenceNumber in ( select o.sequenceNumber+1 from NodeDefinition o where o.id="+nodeDefinition_id+")"; + NodeDefinition nodeDefinition=(NodeDefinition) objectDao.getBySql(NodeDefinition.class.getSimpleName(), sql); + return nodeDefinition; + } + + @Override + public List searchUserBySpellOrId(String spell) { + String spe = spell.toUpperCase(); + String hql = " where 1=1 "; + Pattern pat = Pattern.compile("[\\u4E00-\\u9FA5]+"); // 匹配中文字符的正则表达式 + Matcher m = pat.matcher(spe); + String searchMode = AcegiHelper.getLoginUser().getSearchMode(); + if (spe.trim().length() > 0) { + hql += m.find() ? " and po.fullName like '%" + spell + "%'" : SqlUtils.getSearchSQL(searchMode, spe); + } + return objectDao.findBySql(User.class.getSimpleName(), hql); + } + + + @Override + public void save(WorkFlow workFlow, JSONArray itemInfo) { + saveOrUpdateWorkFlow(workFlow); + if(CollectionUtils.isNotEmpty(itemInfo)){ + for(int i = 0;i < itemInfo.size();++i){ + JSONObject item = itemInfo.getJSONObject(i); + saveNodeDefinition(workFlow, item); + } + } + } + + private void saveNodeDefinition(WorkFlow workFlow, JSONObject item) { + NodeDefinition nodeDefinition=new NodeDefinition(); + String NodeDefinitionId=String.valueOf(item.opt("nodeDefinitionId")); + long nodeDefinitionId=0; + if(!"".equals(NodeDefinitionId)) + nodeDefinitionId=Integer.parseInt(NodeDefinitionId); + if(DatabaseUtil.isPoIdValid(nodeDefinitionId)){ + nodeDefinition.setId(nodeDefinitionId); + } //For input string: "" + nodeDefinition.setSequenceNumber((int) item.opt("sequenceNumber")); + nodeDefinition.setName(String.valueOf(item.opt("name"))); + if((int)item.opt("allowDisagree")==1){ + nodeDefinition.setAllowDisagree(true); + }else{ + nodeDefinition.setAllowDisagree(false); + } + if((int)item.opt("allowRollback")==1){ + nodeDefinition.setAllowRollback(true); + }else{ + nodeDefinition.setAllowRollback(false); + } + nodeDefinition.setWorkFlow(workFlow); + + saveOrUpdateNodeDefinition(nodeDefinition); + + /*对应前台一条节点审批 + * 1、如果节点存在,对应的节点审批表一定有对应的数据 + * + * */ + NodeApproval nodeApproval=new NodeApproval(); + String NodeApprovalId=String.valueOf(item.opt("nodeApprovalId")); + long nodeApprovalId=0; + if(!"".equals(NodeApprovalId)) + nodeApprovalId=Integer.parseInt(NodeApprovalId); + if(DatabaseUtil.isPoIdValid(nodeApprovalId)){ + nodeApproval.setId(nodeApprovalId); + } + nodeApproval.setNodeDefinition(nodeDefinition); + + String roleId=String.valueOf(item.opt("roleId")); + long RoleId=0; + if(!"".equals(roleId)) + RoleId=Integer.parseInt(roleId); + nodeApproval.setRoleId(RoleId); + + String userId=String.valueOf(item.opt("userId")); + long UserId=0; + if(!"".equals(userId)) + UserId=Integer.parseInt(userId); + nodeApproval.setUserId(UserId); + saveOrUpdateNodeApproval(nodeApproval); + + } + + private boolean canParseInt(String str){ + if(str == null){ + return false;//验证是否为空 + } + return str.matches("\\d+"); + //使用正则表达式判断该字符串是否为数字,第一个\是转义符,\d+表示匹配1个或 //多个连续数字,"+"和"*"类似,"*"表示0个或多个 + } + + @Override + public void saveOrUpdateWorkFlow(WorkFlow workFlow) { + objectDao.saveOrUpdate(workFlow); + } + + + @SuppressWarnings("unchecked") + @Override + public void deleteNodeDefinition(Object[] idArray) { + for (Object object : idArray) { + List nodeApprovals= (List) objectDao.findByProperty(NodeApproval.class.getSimpleName(),"nodeDefinition.id",""+object); + for(NodeApproval nodeApproval:nodeApprovals){ + deleteNodeApproval(nodeApproval);//删除所属的节点审批 + } + NodeDefinition nodeDefinition=(NodeDefinition) objectDao.getByID_ForUpdate(NodeDefinition.class.getSimpleName(), object.toString()); + objectDao.delete(nodeDefinition); + } + } + + @SuppressWarnings("unchecked") + @Override + public void deleteWorkFlow(Object[] idArray) { + for (Object object : idArray) { + List nodeDefinitions= objectDao.findByProperty(NodeDefinition.class.getSimpleName(), "workFlow.id",""+object); + for(NodeDefinition nodeDefinition:nodeDefinitions){ + List nodeApprovals= (List) objectDao.findByProperty(NodeApproval.class.getSimpleName(),"nodeDefinition.id",""+nodeDefinition.getId()); + for(NodeApproval nodeApproval:nodeApprovals){ + deleteNodeApproval(nodeApproval);//删除所属的节点审批 + } + deleteNodeDefinition(nodeDefinition);//删除所属的节点 + } + WorkFlow workFlow=(WorkFlow) objectDao.getByID_ForUpdate(WorkFlow.class.getSimpleName(), object.toString()); + objectDao.delete(workFlow); + } + } + + @Override + public WorkFlow getWorkFlow(String id) { + return (WorkFlow) objectDao.getByID_ForUpdate(WorkFlow.class.getSimpleName(),id); + } + + @SuppressWarnings("unchecked") + @Override + public List getWorkFlows() { + return (List) objectDao.findAllObjects(WorkFlow.class.getSimpleName()); + } + + @Override + public List getNodeDefinitions(String WorkFlowId) { + List list=objectDao.findByProperty(NodeDefinition.class.getSimpleName(), "workFlow_ID", WorkFlowId); + return list; + } + + @Override + public void saveOrUpdateNodeDefinition(NodeDefinition nodeDefinition) { + objectDao.saveOrUpdate(nodeDefinition); + } + + @Override + public void deleteNodeDefinition(NodeDefinition nodeDefinition) { + objectDao.delete(nodeDefinition); + } + + @Override + public NodeDefinition getNodeDefinition(String NodeDefinitionId) { + return (NodeDefinition) objectDao.getByID_ForUpdate(NodeDefinition.class.getSimpleName(),NodeDefinitionId); + } + + @Override + public NodeApproval getNodeApproval(String NodeDefinitionId) { + return (NodeApproval) objectDao.getByID_ForUpdate(NodeApproval.class.getSimpleName(),NodeDefinitionId); + } + + @Override + public void saveOrUpdateNodeApproval(NodeApproval nodeApproval) { + objectDao.saveOrUpdate(nodeApproval); + } + + @Override + public void deleteNodeApproval(NodeApproval nodeApproval) { + objectDao.delete(nodeApproval); + } + + + +} Index: forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java (revision 0) +++ forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java (revision 21790) @@ -0,0 +1,289 @@ +package com.forgon.workflow.action; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.lang.StringUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.entity.ExtJsEntity; +import com.forgon.entity.PageEntity; +import com.forgon.security.model.User; +import com.forgon.security.service.UserManager; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.util.ExtJsUtil; +import com.forgon.tools.util.PageUtil; +import com.forgon.util.ExtGridUtils; +import com.forgon.workflow.model.NodeDefinition; +import com.forgon.workflow.model.WorkFlow; +import com.forgon.workflow.service.WorkFlowManager; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +/** + * + * @author ZhuangQinLiu + * + */ +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem") +@Action(value = "workFlowAction") +public class WorkFlowAction implements ModelDriven, Preparable { + private ExtGridUtils extGridUtils; + + private WorkFlow workFlow; + + private WorkFlowManager workFlowManager; + + private UserManager userManager; + + + /** + * 根据id,获取对应的用户 + * */ + public String getUser(){ + try { + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + String id = StrutsParamUtils.getPraramValue("id", ""); + org.json.JSONObject jsonObject = new org.json.JSONObject(); + User user=userManager.get(id); + jsonObject.put("success", true); + jsonObject.put("data", user.getFullName()); + + String jsonString = jsonObject.toString(); + StrutsParamUtils.getResponse().getWriter().println(jsonString); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + /** + * 获取spell所对应的用户 + * */ + public void getUserJson() { + String spell = StrutsParamUtils.getPraramValue("spell", ""); + List> list = new LinkedList<>(); + List userList = workFlowManager.searchUserBySpellOrId(spell); + Map reMap; + Long id; + String name; + for (int j = 0, size = userList.size(); j < size; j++) { + reMap = new HashMap<>(); + id = userList.get(j).getId(); + name = userList.get(j).getFullName(); + reMap.put("id", id); + reMap.put("name", name); + list.add(reMap); + } + PageEntity pageEntity = PageUtil.getPagePara(); + pageEntity.setNeedToEscape(true); + PageUtil.outPutResult(pageEntity, list); + } + /** + * 大保存 流程 节点 节点审批 + * */ + public void save() { + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + String items = StrutsParamUtils.getPraramValue("items", ""); + try { + if (workFlow != null) { + if (workFlow.getId() == null) { + workFlow.setCreaterName(AcegiHelper.getLoginUser() + .getUserFullName()); + workFlow.setCreateTime(new Date()); + } else { + workFlow.setLastUpdaterName(AcegiHelper.getLoginUser() + .getUserFullName()); + workFlow.setLastUpdateTime(new Date()); + } + JSONArray nodeJson = JSONArray.fromObject(items); + workFlowManager.save(workFlow, nodeJson); + StrutsResponseUtils.output(true, "保存成功"); + } + } catch (Exception e) { + StrutsResponseUtils.output(true, e.getMessage()); + } + } + /** + * 加载所有的roles + * */ + public void loadAllRoles() { + String select = " select descn name,id value from SS_ROLES "; + String where = " where 1=1 "; + ExtJsEntity entity = ExtJsUtil.buildSQLEntity(select, where, ""); + JSONObject result = extGridUtils.getPagedResult(entity); + StrutsResponseUtils.output(result); + } + /** + * 加载流程列表 + */ + public void loadWorkFlowList() { + String select = "select id,workFlowName,invoicePlanType,status,createTime,createrName "; + String where = " from WorkFlow where 1=1 "; + + ExtJsEntity entity = ExtJsUtil.buildSQLEntity(select, where, ""); + JSONObject result = extGridUtils.getPagedResult(entity); + StrutsResponseUtils.output(result); + } + /** + * 根据流程id获取,所对应的节点 + */ + public void loadNodeDefinitionList() { + + if (DatabaseUtil.isPoIdValid(workFlow.getId())) { + StringBuffer select = new StringBuffer(); + select.append("select w.id nodeDefinitionId,w.name,w.allowRollback,w.allowDisagree,w.sequenceNumber,n.id nodeApprovalId,n.roleId,n.userId,r.descn roleName,u.name userName from NodeDefinition w,NodeApproval n "); + select.append(" left join SS_ROLES r on r.id=n.roleId left join SS_USERS u on u.id=n.userId "); + StringBuffer where = new StringBuffer(); + where.append(" where 1=1 and w.id=n.nodeDefinition_ID and "); + where.append(" w.workFlow_id=" + workFlow.getId()); + String order=" order by w.sequenceNumber "; + ExtJsEntity entity = ExtJsUtil.buildSQLEntity(select.toString(), + where.toString(), order); + JSONObject result = extGridUtils.getPagedResult(entity); + StrutsResponseUtils.output(result); + } else { + StrutsResponseUtils.output(""); + } + } + /** + * 删除流程 + * @return + */ + public String deleteWorkFlow() { + String ids = StrutsParamUtils.getPraramValue("ids", ""); + String message = ""; + try { + String[] idArray = ids.split(";"); + workFlowManager.deleteWorkFlow(idArray); + message = "{\"success\":true}"; + } catch (Exception e) { + message = "{\"success\":false}"; + e.printStackTrace(); + } + + try { + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + StrutsParamUtils.getResponse().getWriter().print(message); + } catch (Exception e) { + + } + return null; + } + + /** + * 删除节点 + * */ + public String deleteNodeDefinition() { + String ids = StrutsParamUtils.getPraramValue("ids", ""); + String message = ""; + try { + String[] idArray = ids.split(";"); + workFlowManager.deleteNodeDefinition(idArray); + message = "{\"success\":true}"; + } catch (Exception e) { + message = "{\"success\":false}"; + e.printStackTrace(); + } + + try { + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + StrutsParamUtils.getResponse().getWriter().print(message); + } catch (Exception e) { + + } + return null; + } + /** + * 根据id获取流程实例 + * @return + */ + public String getWorkFlow() { + try { + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + + org.json.JSONObject jsonObject = new org.json.JSONObject(); + jsonObject.put("success", true); + jsonObject.put("data", new org.json.JSONObject(workFlow)); + + String jsonString = jsonObject.toString(); + StrutsParamUtils.getResponse().getWriter().println(jsonString); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + /** + * 获取当前流程下的节点数 + **/ + public void getNodeDefinitionsTotalPage(String WorkFlowId) { + int count = workFlowManager.getNodeDefinitions(WorkFlowId).size(); + HttpServletResponse httpServletResponse = StrutsParamUtils + .getResponse(); + httpServletResponse.setCharacterEncoding("UTF-8"); + try { + httpServletResponse.getWriter().print(count); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + public List getWorkFlows() { + return workFlowManager.getWorkFlows(); + } + + public List getNodeDefinitions(String WorkFlowId) { + return workFlowManager.getNodeDefinitions(WorkFlowId); + } + + + public void setWorkFlowManager(WorkFlowManager workFlowManager) { + this.workFlowManager = workFlowManager; + } + + public void setUserManager(UserManager userManager) { + this.userManager = userManager; + } + + public void setExtGridUtils(ExtGridUtils extGridUtils) { + this.extGridUtils = extGridUtils; + } + + @Override + public void prepare() throws Exception { + try { + String id = StrutsParamUtils.getPraramValue("id", ""); + if (StringUtils.isNotBlank(id)) { + workFlow = workFlowManager.getWorkFlow(id); + } else { + workFlow = new WorkFlow(); + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + @Override + public WorkFlow getModel() { + return workFlow; + } +} Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManager.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManager.java (revision 0) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManager.java (revision 21790) @@ -0,0 +1,56 @@ +package com.forgon.workflow.service; + +import java.util.List; + +import net.sf.json.JSONArray; + +import com.forgon.directory.model.OrgUnit; +import com.forgon.security.model.Role; +import com.forgon.security.model.User; +import com.forgon.workflow.model.NodeApproval; +import com.forgon.workflow.model.NodeDefinition; +import com.forgon.workflow.model.WorkFlow; + + +/** + * + * @author ZhuangQinLiu + * + */ +public interface WorkFlowManager { + public List searchUserBySpellOrId(String spell); + + public NodeDefinition getLastNodeDefinitionById(String nodeDefinition_id); + + public NodeDefinition getNextNodeDefinitionById(String nodeDefinition_id); + + public void save(WorkFlow workFlow,JSONArray itemInfo); + + public void saveOrUpdateWorkFlow(WorkFlow workFlow); + + public void deleteWorkFlow(Object[] idArray); + + public WorkFlow getWorkFlow(String WorkFlowId); + + public List getWorkFlows(); + + //根据流程id获取子节点 + public List getNodeDefinitions(String WorkFlowId); + + //保存或修改节点定义 + public void saveOrUpdateNodeDefinition(NodeDefinition nodeDefinition); + + public void deleteNodeDefinition(NodeDefinition nodeDefinition); + + public NodeDefinition getNodeDefinition(String NodeDefinitionId); + + //根据节点id获取节点审批列表:【暂时只能选择一个用户和一个角色】 + public NodeApproval getNodeApproval(String NodeDefinitionId); + + //保存或修改节点审批 + public void saveOrUpdateNodeApproval(NodeApproval nodeApproval); + + public void deleteNodeApproval(NodeApproval nodeApproval); + + public void deleteNodeDefinition(Object[] idArray); +} Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java (revision 0) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java (revision 21790) @@ -0,0 +1,22 @@ +package com.forgon.workflow.service; + +import java.util.List; + +import net.sf.json.JSONArray; + +import com.forgon.workflow.model.WorkFlowApprovalTask; + +public interface WorkFlowApprovalTaskManager { + + public WorkFlowApprovalTask getWorkFlowApprovalTaskByRollBack(String nodeDefinitionId,Long formId); + + public void saveOrUpdateWorkFlowApprovalTask(WorkFlowApprovalTask workFlowApprovalTask); + + public void deleteWorkFlowApprovalTask(Object[] idArray); + + public List searchWorkFlowApprovalTask(); + + public WorkFlowApprovalTask getWorkFlowApprovalTask(String id); + + public JSONArray getAllUserByWorkFlowApprovalTaskId(String id); +}