Commit c4b2023a authored by HuangBingGui's avatar HuangBingGui
Browse files

no commit message

parent 03caebe8
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.jeespring.common.persistence.Page;
import com.jeespring.common.web.AbstractBaseController;
import com.jeespring.modules.act.service.ActModelService;
/**
* 流程模型相关Controller
* @author JeeSpring
* @version 2013-11-03
*/
@Controller
@RequestMapping(value = "${adminPath}/act/model")
public class ActModelController extends AbstractBaseController {
@Autowired
private ActModelService actModelService;
/**
* 流程模型列表
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = { "list", "" })
public String modelList(String category, HttpServletRequest request, HttpServletResponse response, Model model) {
Page<org.activiti.engine.repository.Model> page = actModelService.modelList(
new Page<org.activiti.engine.repository.Model>(request, response), category);
model.addAttribute("page", page);
model.addAttribute("category", category);
return "modules/act/actModelList";
}
/**
* 创建模型
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "create", method = RequestMethod.GET)
public String create(Model model) {
return "modules/act/actModelCreate";
}
/**
* 创建模型
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "create", method = RequestMethod.POST)
public void create(String name, String key, String description, String category,
HttpServletRequest request, HttpServletResponse response) {
try {
org.activiti.engine.repository.Model modelData = actModelService.create(name, key, description, category);
response.sendRedirect(request.getContextPath() + "/act/process-editor/modeler.jsp?modelId=" + modelData.getId());
} catch (Exception e) {
e.printStackTrace();
logger.error("创建模型失败:", e);
}
}
/**
* 根据Model部署流程
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "deploy")
public String deploy(String id, RedirectAttributes redirectAttributes) {
String message = actModelService.deploy(id);
redirectAttributes.addFlashAttribute("message", message);
return "redirect:" + adminPath + "/act/process";
}
/**
* 导出model的xml文件
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "export")
public void export(String id, HttpServletResponse response) {
actModelService.export(id, response);
}
/**
* 更新Model分类
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "updateCategory")
public String updateCategory(String id, String category, RedirectAttributes redirectAttributes) {
actModelService.updateCategory(id, category);
redirectAttributes.addFlashAttribute("message", "设置成功,模块ID=" + id);
return "redirect:" + adminPath + "/act/model";
}
/**
* 删除Model
* @param id
* @param redirectAttributes
* @return
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "delete")
public String delete(String id, RedirectAttributes redirectAttributes) {
actModelService.delete(id);
redirectAttributes.addFlashAttribute("message", "删除成功,模型ID=" + id);
return "redirect:" + adminPath + "/act/model";
}
}
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.web;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.stream.XMLStreamException;
import org.activiti.engine.runtime.ProcessInstance;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.jeespring.common.persistence.Page;
import com.jeespring.common.utils.StringUtils;
import com.jeespring.common.web.AbstractBaseController;
import com.jeespring.modules.act.service.ActProcessService;
/**
* 流程定义相关Controller
* @author JeeSpring
* @version 2013-11-03
*/
@Controller
@RequestMapping(value = "${adminPath}/act/process")
public class ActProcessController extends AbstractBaseController {
@Autowired
private ActProcessService actProcessService;
/**
* 流程定义列表
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = {"list", ""})
public String processList(String category, HttpServletRequest request, HttpServletResponse response, Model model) {
/*
* 保存两个对象,一个是ProcessDefinition(流程定义),一个是Deployment(流程部署)
*/
Page<Object[]> page = actProcessService.processList(new Page<Object[]>(request, response), category);
model.addAttribute("page", page);
model.addAttribute("category", category);
return "modules/act/actProcessList";
}
/**
* 运行中的实例列表
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "running")
public String runningList(String procInsId, String procDefKey, HttpServletRequest request, HttpServletResponse response, Model model) {
Page<ProcessInstance> page = actProcessService.runningList(new Page<ProcessInstance>(request, response), procInsId, procDefKey);
model.addAttribute("page", page);
model.addAttribute("procInsId", procInsId);
model.addAttribute("procDefKey", procDefKey);
return "modules/act/actProcessRunningList";
}
/**
* 读取资源,通过部署ID
* @param processDefinitionId 流程定义ID
* @param processInstanceId 流程实例ID
* @param resourceType 资源类型(xml|image)
* @param response
* @throws Exception
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "resource/read")
public void resourceRead(String procDefId, String proInsId, String resType, HttpServletResponse response) throws Exception {
InputStream resourceAsStream = actProcessService.resourceRead(procDefId, proInsId, resType);
byte[] b = new byte[1024];
int len = -1;
while ((len = resourceAsStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
}
/**
* 部署流程
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "/deploy", method=RequestMethod.GET)
public String deploy(Model model) {
return "modules/act/actProcessDeploy";
}
/**
* 部署流程 - 保存
* @param file
* @return
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "/deploy", method=RequestMethod.POST)
public String deploy(@Value("#{APP_PROP['activiti.export.diagram.path']}") String exportDir,
String category, MultipartFile file, RedirectAttributes redirectAttributes) {
String fileName = file.getOriginalFilename();
if (StringUtils.isBlank(fileName)){
redirectAttributes.addFlashAttribute("message", "请选择要部署的流程文件");
}else{
String message = actProcessService.deploy(exportDir, category, file);
redirectAttributes.addFlashAttribute("message", message);
}
return "redirect:" + adminPath + "/act/process";
}
/**
* 设置流程分类
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "updateCategory")
public String updateCategory(String procDefId, String category, RedirectAttributes redirectAttributes) {
actProcessService.updateCategory(procDefId, category);
return "redirect:" + adminPath + "/act/process";
}
/**
* 挂起、激活流程实例
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "update/{state}")
public String updateState(@PathVariable("state") String state, String procDefId, RedirectAttributes redirectAttributes) {
String message = actProcessService.updateState(state, procDefId);
redirectAttributes.addFlashAttribute("message", message);
return "redirect:" + adminPath + "/act/process";
}
/**
* 将部署的流程转换为模型
* @param procDefId
* @param redirectAttributes
* @return
* @throws UnsupportedEncodingException
* @throws XMLStreamException
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "convert/toModel")
public String convertToModel(String procDefId, RedirectAttributes redirectAttributes) throws UnsupportedEncodingException, XMLStreamException {
org.activiti.engine.repository.Model modelData = actProcessService.convertToModel(procDefId);
redirectAttributes.addFlashAttribute("message", "转换模型成功,模型ID="+modelData.getId());
return "redirect:" + adminPath + "/act/model";
}
/**
* 导出图片文件到硬盘
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "export/diagrams")
@ResponseBody
public List<String> exportDiagrams(@Value("#{APP_PROP['activiti.export.diagram.path']}") String exportDir) throws IOException {
List<String> files = actProcessService.exportDiagrams(exportDir);;
return files;
}
/**
* 删除部署的流程,级联删除流程实例
* @param deploymentId 流程部署ID
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "delete")
public String delete(String deploymentId) {
actProcessService.deleteDeployment(deploymentId);
return "redirect:" + adminPath + "/act/process";
}
/**
* 删除流程实例
* @param procInsId 流程实例ID
* @param reason 删除原因
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "deleteProcIns")
public String deleteProcIns(String procInsId, String reason, RedirectAttributes redirectAttributes) {
if (StringUtils.isBlank(reason)){
addMessage(redirectAttributes, "请填写删除原因");
}else{
actProcessService.deleteProcIns(procInsId, reason);
addMessage(redirectAttributes, "删除流程实例成功,实例ID=" + procInsId);
}
return "redirect:" + adminPath + "/act/process/running/";
}
}
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.web;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.jeespring.common.persistence.Page;
import com.jeespring.common.web.AbstractBaseController;
import com.jeespring.modules.act.entity.Act;
import com.jeespring.modules.act.service.ActTaskService;
import com.jeespring.modules.act.utils.ActUtils;
import com.jeespring.modules.sys.utils.UserUtils;
/**
* 流程个人任务相关Controller
* @author JeeSpring
* @version 2013-11-03
*/
@Controller
@RequestMapping(value = "${adminPath}/act/task")
public class ActTaskController extends AbstractBaseController {
@Autowired
private ActTaskService actTaskService;
/**
* 获取待办列表
* @param act procDefKey 流程定义标识
* @return
*/
@RequestMapping(value = {"todo", ""})
public String todoList(Act act, HttpServletResponse response, Model model) throws Exception {
List<Act> list = actTaskService.todoList(act);
model.addAttribute("list", list);
if (UserUtils.getPrincipal().isMobileLogin()){
return renderString(response, list);
}
return "modules/act/actTaskTodoList";
}
/**
* 获取已办任务
* @param act page
* @param act procDefKey 流程定义标识
* @return
*/
@RequestMapping(value = "historic")
public String historicList(Act act, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
Page<Act> page = new Page<Act>(request, response);
page = actTaskService.historicList(page, act);
model.addAttribute("page", page);
if (UserUtils.getPrincipal().isMobileLogin()){
return renderString(response, page);
}
return "modules/act/actTaskHistoricList";
}
/**
* 获取流转历史列表
* @param act procInsId 流程实例
* @param startAct 开始活动节点名称
* @param endAct 结束活动节点名称
*/
@RequestMapping(value = "histoicFlow")
public String histoicFlow(Act act, String startAct, String endAct, Model model){
if (StringUtils.isNotBlank(act.getProcInsId())){
List<Act> histoicFlowList = actTaskService.histoicFlowList(act.getProcInsId(), startAct, endAct);
model.addAttribute("histoicFlowList", histoicFlowList);
}
return "modules/act/actTaskHistoricFlow";
}
/**
* 获取流程列表
* @param category 流程分类
*/
@RequestMapping(value = "process")
public String processList(String category, HttpServletRequest request, HttpServletResponse response, Model model) {
Page<Object[]> page = new Page<Object[]>(request, response);
page = actTaskService.processList(page, category);
model.addAttribute("page", page);
model.addAttribute("category", category);
return "modules/act/actTaskProcessList";
}
/**
* 获取流程表单
* @param act taskId 任务ID
* @param act taskName 任务名称
* @param act taskDefKey 任务环节标识
* @param act procInsId 流程实例ID
* @param act procDefId 流程定义ID
*/
@RequestMapping(value = "form")
public String form(Act act, HttpServletRequest request, Model model){
// 获取流程XML上的表单KEY
String formKey = actTaskService.getFormKey(act.getProcDefId(), act.getTaskDefKey());
// 获取流程实例对象
if (act.getProcInsId() != null){
act.setProcIns(actTaskService.getProcIns(act.getProcInsId()));
}
return "redirect:" + ActUtils.getFormUrl(formKey, act);
// // 传递参数到视图
// model.addAttribute("act", act);
// model.addAttribute("formUrl", formUrl);
// return "modules/act/actTaskForm";
}
/**
* 启动流程
* @param act procDefKey 流程定义KEY
* @param act businessTable 业务表表名
* @param act businessId 业务表编号
*/
@RequestMapping(value = "start")
@ResponseBody
public String start(Act act, String table, String id, Model model) throws Exception {
actTaskService.startProcess(act.getProcDefKey(), act.getBusinessId(), act.getBusinessTable(), act.getTitle());
return "true";//adminPath + "/act/task";
}
/**
* 签收任务
* @param act taskId 任务ID
*/
@RequestMapping(value = "claim")
@ResponseBody
public String claim(Act act) {
String userId = UserUtils.getUser().getLoginName();//ObjectUtils.toString(UserUtils.getUser().getId());
actTaskService.claim(act.getTaskId(), userId);
return "true";//adminPath + "/act/task";
}
/**
* 完成任务
* @param act taskId 任务ID
* @param act procInsId 流程实例ID,如果为空,则不保存任务提交意见
* @param act comment 任务提交意见的内容
* @param act vars 任务流程变量,如下
* vars.keys=flag,pass
* vars.values=1,true
* vars.types=S,B @see com.thinkgem.jeesite.modules.act.utils.PropertyType
*/
@RequestMapping(value = "complete")
@ResponseBody
public String complete(Act act) {
actTaskService.complete(act.getTaskId(), act.getProcInsId(), act.getComment(), act.getVars().getVariableMap());
return "true";//adminPath + "/act/task";
}
/**
* 读取带跟踪的图片
*/
@RequestMapping(value = "trace/photo/{procDefId}/{execId}")
public void tracePhoto(@PathVariable("procDefId") String procDefId, @PathVariable("execId") String execId, HttpServletResponse response) throws Exception {
InputStream imageStream = actTaskService.tracePhoto(procDefId, execId);
// 输出资源内容到相应对象
byte[] b = new byte[1024];
int len;
while ((len = imageStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
}
/**
* 输出跟踪流程信息
*
* @param proInsId
* @return
* @throws Exception
*/
@ResponseBody
@RequestMapping(value = "trace/info/{proInsId}")
public List<Map<String, Object>> traceInfo(@PathVariable("proInsId") String proInsId) throws Exception {
List<Map<String, Object>> activityInfos = actTaskService.traceProcess(proInsId);
return activityInfos;
}
/**
* 显示流程图
@RequestMapping(value = "processPic")
public void processPic(String procDefId, HttpServletResponse response) throws Exception {
ProcessDefinition procDef = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId).singleResult();
String diagramResourceName = procDef.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(procDef.getDeploymentId(), diagramResourceName);
byte[] b = new byte[1024];
int len = -1;
while ((len = imageStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
}*/
/**
* 获取跟踪信息
@RequestMapping(value = "processMap")
public String processMap(String procDefId, String proInstId, Model model)
throws Exception {
List<ActivityImpl> actImpls = new ArrayList<ActivityImpl>();
ProcessDefinition processDefinition = repositoryService
.createProcessDefinitionQuery().processDefinitionId(procDefId)
.singleResult();
ProcessDefinitionImpl pdImpl = (ProcessDefinitionImpl) processDefinition;
String processDefinitionId = pdImpl.getId();// 流程标识
ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
.getDeployedProcessDefinition(processDefinitionId);
List<ActivityImpl> activitiList = def.getActivities();// 获得当前任务的所有节点
List<String> activeActivityIds = runtimeService.getActiveActivityIds(proInstId);
for (String activeId : activeActivityIds) {
for (ActivityImpl activityImpl : activitiList) {
String id = activityImpl.getId();
if (activityImpl.isScope()) {
if (activityImpl.getActivities().size() > 1) {
List<ActivityImpl> subAcList = activityImpl
.getActivities();
for (ActivityImpl subActImpl : subAcList) {
String subid = subActImpl.getId();
System.out.println("subImpl:" + subid);
if (activeId.equals(subid)) {// 获得执行到那个节点
actImpls.add(subActImpl);
break;
}
}
}
}
if (activeId.equals(id)) {// 获得执行到那个节点
actImpls.add(activityImpl);
System.out.println(id);
}
}
}
model.addAttribute("procDefId", procDefId);
model.addAttribute("proInstId", proInstId);
model.addAttribute("actImpls", actImpls);
return "modules/act/actTaskMap";
}*/
/**
* 删除任务
* @param taskId 流程实例ID
* @param reason 删除原因
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "deleteTask")
public String deleteTask(String taskId, String reason, RedirectAttributes redirectAttributes) {
if (StringUtils.isBlank(reason)){
addMessage(redirectAttributes, "请填写删除原因");
}else{
actTaskService.deleteTask(taskId, reason);
addMessage(redirectAttributes, "删除任务成功,任务ID=" + taskId);
}
return "redirect:" + adminPath + "/act/task";
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jeespring.modules.act.dao.ActDao">
<update id="updateProcInsIdByBusinessId">
UPDATE ${businessTable} SET
proc_ins_id = #{procInsId}
WHERE id = #{businessId}
</update>
</mapper>
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment